`, and ``.
+@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base: @font-family-sans-serif;
+
+@font-size-base: 14px;
+@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
+@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
+
+@font-size-h1: floor((@font-size-base * 2.6)); // ~36px
+@font-size-h2: floor((@font-size-base * 2.15)); // ~30px
+@font-size-h3: ceil((@font-size-base * 1.7)); // ~24px
+@font-size-h4: ceil((@font-size-base * 1.25)); // ~18px
+@font-size-h5: @font-size-base;
+@font-size-h6: ceil((@font-size-base * 0.85)); // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+@line-height-base: 1.428571429; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
+
+//** By default, this inherits from the ``.
+@headings-font-family: inherit;
+@headings-font-weight: 500;
+@headings-line-height: 1.1;
+@headings-color: inherit;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+@icon-font-path: "../../fonts/";
+//** File name for all font files.
+@icon-font-name: "glyphicons-halflings-regular";
+//** Element ID within SVG icon file.
+@icon-font-svg-id: "glyphicons_halflingsregular";
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+@padding-base-vertical: 6px;
+@padding-base-horizontal: 12px;
+
+@padding-large-vertical: 10px;
+@padding-large-horizontal: 16px;
+
+@padding-small-vertical: 5px;
+@padding-small-horizontal: 10px;
+
+@padding-xs-vertical: 1px;
+@padding-xs-horizontal: 5px;
+
+@line-height-large: 1.33;
+@line-height-small: 1.5;
+
+@border-radius-base: 4px;
+@border-radius-large: 6px;
+@border-radius-small: 3px;
+
+//** Global color for active items (e.g., navs or dropdowns).
+@component-active-color: #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+@component-active-bg: @brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+@caret-width-base: 4px;
+//** Carets increase slightly in size for larger components.
+@caret-width-large: 5px;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for ``s and ` `s.
+@table-cell-padding: 8px;
+//** Padding for cells in `.table-condensed`.
+@table-condensed-cell-padding: 5px;
+
+//** Default background color used for all tables.
+@table-bg: transparent;
+//** Background color used for `.table-striped`.
+@table-bg-accent: #f9f9f9;
+//** Background color used for `.table-hover`.
+@table-bg-hover: #f5f5f5;
+@table-bg-active: @table-bg-hover;
+
+//** Border color for table and cell borders.
+@table-border-color: #ddd;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+@btn-font-weight: normal;
+
+@btn-default-color: #333;
+@btn-default-bg: #fff;
+@btn-default-border: #ccc;
+
+@btn-primary-color: #fff;
+@btn-primary-bg: @brand-primary;
+@btn-primary-border: darken(@btn-primary-bg, 5%);
+
+@btn-success-color: #fff;
+@btn-success-bg: @brand-success;
+@btn-success-border: darken(@btn-success-bg, 5%);
+
+@btn-info-color: #fff;
+@btn-info-bg: @brand-info;
+@btn-info-border: darken(@btn-info-bg, 5%);
+
+@btn-warning-color: #fff;
+@btn-warning-bg: @brand-warning;
+@btn-warning-border: darken(@btn-warning-bg, 5%);
+
+@btn-danger-color: #fff;
+@btn-danger-bg: @brand-danger;
+@btn-danger-border: darken(@btn-danger-bg, 5%);
+
+@btn-link-disabled-color: @gray-light;
+
+
+//== Forms
+//
+//##
+
+//** ` ` background color
+@input-bg: #fff;
+//** ` ` background color
+@input-bg-disabled: @gray-lighter;
+
+//** Text color for ` `s
+@input-color: @gray;
+//** ` ` border color
+@input-border: #ccc;
+//** ` ` border radius
+@input-border-radius: @border-radius-base;
+//** Border color for inputs on focus
+@input-border-focus: #66afe9;
+
+//** Placeholder text color
+@input-color-placeholder: @gray-light;
+
+//** Default `.form-control` height
+@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
+//** Large `.form-control` height
+@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+//** Small `.form-control` height
+@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+@legend-color: @gray-dark;
+@legend-border-color: #e5e5e5;
+
+//** Background color for textual input addons
+@input-group-addon-bg: @gray-lighter;
+//** Border color for textual input addons
+@input-group-addon-border-color: @input-border;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+@dropdown-bg: #fff;
+//** Dropdown menu `border-color`.
+@dropdown-border: rgba(0,0,0,.15);
+//** Dropdown menu `border-color` **for IE8**.
+@dropdown-fallback-border: #ccc;
+//** Divider color for between dropdown items.
+@dropdown-divider-bg: #e5e5e5;
+
+//** Dropdown link text color.
+@dropdown-link-color: @gray-dark;
+//** Hover color for dropdown links.
+@dropdown-link-hover-color: darken(@gray-dark, 5%);
+//** Hover background for dropdown links.
+@dropdown-link-hover-bg: #f5f5f5;
+
+//** Active dropdown menu item text color.
+@dropdown-link-active-color: @component-active-color;
+//** Active dropdown menu item background color.
+@dropdown-link-active-bg: @component-active-bg;
+
+//** Disabled dropdown menu item background color.
+@dropdown-link-disabled-color: @gray-light;
+
+//** Text color for headers within dropdown menus.
+@dropdown-header-color: @gray-light;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+@dropdown-caret-color: #000;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+@zindex-navbar: 1000;
+@zindex-dropdown: 1000;
+@zindex-popover: 1060;
+@zindex-tooltip: 1070;
+@zindex-navbar-fixed: 1030;
+@zindex-modal-background: 1040;
+@zindex-modal: 1050;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `@screen-xs` as of v3.0.1
+@screen-xs: 480px;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+@screen-xs-min: @screen-xs;
+//** Deprecated `@screen-phone` as of v3.0.1
+@screen-phone: @screen-xs-min;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+@screen-sm: 768px;
+@screen-sm-min: @screen-sm;
+//** Deprecated `@screen-tablet` as of v3.0.1
+@screen-tablet: @screen-sm-min;
+
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+@screen-md: 992px;
+@screen-md-min: @screen-md;
+//** Deprecated `@screen-desktop` as of v3.0.1
+@screen-desktop: @screen-md-min;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+@screen-lg: 1200px;
+@screen-lg-min: @screen-lg;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+@screen-lg-desktop: @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max: (@screen-sm-min - 1);
+@screen-sm-max: (@screen-md-min - 1);
+@screen-md-max: (@screen-lg-min - 1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+@grid-columns: 12;
+//** Padding between columns. Gets divided in half for the left and right.
+@grid-gutter-width: 30px;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+@grid-float-breakpoint: @screen-sm-min;
+//** Point at which the navbar begins collapsing.
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+@container-tablet: ((720px + @grid-gutter-width));
+//** For `@screen-sm-min` and up.
+@container-sm: @container-tablet;
+
+// Medium screen / desktop
+@container-desktop: ((940px + @grid-gutter-width));
+//** For `@screen-md-min` and up.
+@container-md: @container-desktop;
+
+// Large screen / wide desktop
+@container-large-desktop: ((1140px + @grid-gutter-width));
+//** For `@screen-lg-min` and up.
+@container-lg: @container-large-desktop;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+@navbar-height: 50px;
+@navbar-margin-bottom: @line-height-computed;
+@navbar-border-radius: @border-radius-base;
+@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
+@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height: 340px;
+
+@navbar-default-color: #777;
+@navbar-default-bg: #f8f8f8;
+@navbar-default-border: darken(@navbar-default-bg, 6.5%);
+
+// Navbar links
+@navbar-default-link-color: #777;
+@navbar-default-link-hover-color: #333;
+@navbar-default-link-hover-bg: transparent;
+@navbar-default-link-active-color: #555;
+@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);
+@navbar-default-link-disabled-color: #ccc;
+@navbar-default-link-disabled-bg: transparent;
+
+// Navbar brand label
+@navbar-default-brand-color: @navbar-default-link-color;
+@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%);
+@navbar-default-brand-hover-bg: transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg: #ddd;
+@navbar-default-toggle-icon-bar-bg: #888;
+@navbar-default-toggle-border-color: #ddd;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+@navbar-inverse-color: @gray-light;
+@navbar-inverse-bg: #222;
+@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+@navbar-inverse-link-color: @gray-light;
+@navbar-inverse-link-hover-color: #fff;
+@navbar-inverse-link-hover-bg: transparent;
+@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
+@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-link-disabled-color: #444;
+@navbar-inverse-link-disabled-bg: transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color: @navbar-inverse-link-color;
+@navbar-inverse-brand-hover-color: #fff;
+@navbar-inverse-brand-hover-bg: transparent;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg: #333;
+@navbar-inverse-toggle-icon-bar-bg: #fff;
+@navbar-inverse-toggle-border-color: #333;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+@nav-link-padding: 10px 15px;
+@nav-link-hover-bg: @gray-lighter;
+
+@nav-disabled-link-color: @gray-light;
+@nav-disabled-link-hover-color: @gray-light;
+
+@nav-open-link-hover-color: #fff;
+
+//== Tabs
+@nav-tabs-border-color: #ddd;
+
+@nav-tabs-link-hover-border-color: @gray-lighter;
+
+@nav-tabs-active-link-hover-bg: @body-bg;
+@nav-tabs-active-link-hover-color: @gray;
+@nav-tabs-active-link-hover-border-color: #ddd;
+
+@nav-tabs-justified-link-border-color: #ddd;
+@nav-tabs-justified-active-link-border-color: @body-bg;
+
+//== Pills
+@nav-pills-border-radius: @border-radius-base;
+@nav-pills-active-link-hover-bg: @component-active-bg;
+@nav-pills-active-link-hover-color: @component-active-color;
+
+
+//== Pagination
+//
+//##
+
+@pagination-color: @link-color;
+@pagination-bg: #fff;
+@pagination-border: #ddd;
+
+@pagination-hover-color: @link-hover-color;
+@pagination-hover-bg: @gray-lighter;
+@pagination-hover-border: #ddd;
+
+@pagination-active-color: #fff;
+@pagination-active-bg: @brand-primary;
+@pagination-active-border: @brand-primary;
+
+@pagination-disabled-color: @gray-light;
+@pagination-disabled-bg: #fff;
+@pagination-disabled-border: #ddd;
+
+
+//== Pager
+//
+//##
+
+@pager-bg: @pagination-bg;
+@pager-border: @pagination-border;
+@pager-border-radius: 15px;
+
+@pager-hover-bg: @pagination-hover-bg;
+
+@pager-active-bg: @pagination-active-bg;
+@pager-active-color: @pagination-active-color;
+
+@pager-disabled-color: @pagination-disabled-color;
+
+
+//== Jumbotron
+//
+//##
+
+@jumbotron-padding: 30px;
+@jumbotron-color: inherit;
+@jumbotron-bg: @gray-lighter;
+@jumbotron-heading-color: inherit;
+@jumbotron-font-size: ceil((@font-size-base * 1.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+@state-success-text: #3c763d;
+@state-success-bg: #dff0d8;
+@state-success-border: darken(spin(@state-success-bg, -10), 5%);
+
+@state-info-text: #31708f;
+@state-info-bg: #d9edf7;
+@state-info-border: darken(spin(@state-info-bg, -10), 7%);
+
+@state-warning-text: #8a6d3b;
+@state-warning-bg: #fcf8e3;
+@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);
+
+@state-danger-text: #a94442;
+@state-danger-bg: #f2dede;
+@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+@tooltip-max-width: 200px;
+//** Tooltip text color
+@tooltip-color: #fff;
+//** Tooltip background color
+@tooltip-bg: #000;
+@tooltip-opacity: .9;
+
+//** Tooltip arrow width
+@tooltip-arrow-width: 5px;
+//** Tooltip arrow color
+@tooltip-arrow-color: @tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+@popover-bg: #fff;
+//** Popover maximum width
+@popover-max-width: 276px;
+//** Popover border color
+@popover-border-color: rgba(0,0,0,.2);
+//** Popover fallback border color
+@popover-fallback-border-color: #ccc;
+
+//** Popover title background color
+@popover-title-bg: darken(@popover-bg, 3%);
+
+//** Popover arrow width
+@popover-arrow-width: 10px;
+//** Popover arrow color
+@popover-arrow-color: #fff;
+
+//** Popover outer arrow width
+@popover-arrow-outer-width: (@popover-arrow-width + 1);
+//** Popover outer arrow color
+@popover-arrow-outer-color: fadein(@popover-border-color, 5%);
+//** Popover outer arrow fallback color
+@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+@label-default-bg: @gray-light;
+//** Primary label background color
+@label-primary-bg: @brand-primary;
+//** Success label background color
+@label-success-bg: @brand-success;
+//** Info label background color
+@label-info-bg: @brand-info;
+//** Warning label background color
+@label-warning-bg: @brand-warning;
+//** Danger label background color
+@label-danger-bg: @brand-danger;
+
+//** Default label text color
+@label-color: #fff;
+//** Default text color of a linked label
+@label-link-hover-color: #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+@modal-inner-padding: 15px;
+
+//** Padding applied to the modal title
+@modal-title-padding: 15px;
+//** Modal title line-height
+@modal-title-line-height: @line-height-base;
+
+//** Background color of modal content area
+@modal-content-bg: #fff;
+//** Modal content border color
+@modal-content-border-color: rgba(0,0,0,.2);
+//** Modal content border color **for IE8**
+@modal-content-fallback-border-color: #999;
+
+//** Modal backdrop background color
+@modal-backdrop-bg: #000;
+//** Modal backdrop opacity
+@modal-backdrop-opacity: .5;
+//** Modal header border color
+@modal-header-border-color: #e5e5e5;
+//** Modal footer border color
+@modal-footer-border-color: @modal-header-border-color;
+
+@modal-lg: 900px;
+@modal-md: 600px;
+@modal-sm: 300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+@alert-padding: 15px;
+@alert-border-radius: @border-radius-base;
+@alert-link-font-weight: bold;
+
+@alert-success-bg: @state-success-bg;
+@alert-success-text: @state-success-text;
+@alert-success-border: @state-success-border;
+
+@alert-info-bg: @state-info-bg;
+@alert-info-text: @state-info-text;
+@alert-info-border: @state-info-border;
+
+@alert-warning-bg: @state-warning-bg;
+@alert-warning-text: @state-warning-text;
+@alert-warning-border: @state-warning-border;
+
+@alert-danger-bg: @state-danger-bg;
+@alert-danger-text: @state-danger-text;
+@alert-danger-border: @state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+@progress-bg: #f5f5f5;
+//** Progress bar text color
+@progress-bar-color: #fff;
+
+//** Default progress bar color
+@progress-bar-bg: @brand-primary;
+//** Success progress bar color
+@progress-bar-success-bg: @brand-success;
+//** Warning progress bar color
+@progress-bar-warning-bg: @brand-warning;
+//** Danger progress bar color
+@progress-bar-danger-bg: @brand-danger;
+//** Info progress bar color
+@progress-bar-info-bg: @brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+@list-group-bg: #fff;
+//** `.list-group-item` border color
+@list-group-border: #ddd;
+//** List group border radius
+@list-group-border-radius: @border-radius-base;
+
+//** Background color of single list items on hover
+@list-group-hover-bg: #f5f5f5;
+//** Text color of active list items
+@list-group-active-color: @component-active-color;
+//** Background color of active list items
+@list-group-active-bg: @component-active-bg;
+//** Border color of active list elements
+@list-group-active-border: @list-group-active-bg;
+//** Text color for content within active list items
+@list-group-active-text-color: lighten(@list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+@list-group-disabled-color: @gray-light;
+//** Background color of disabled list items
+@list-group-disabled-bg: @gray-lighter;
+//** Text color for content within disabled list items
+@list-group-disabled-text-color: @list-group-disabled-color;
+
+@list-group-link-color: #555;
+@list-group-link-hover-color: @list-group-link-color;
+@list-group-link-heading-color: #333;
+
+
+//== Panels
+//
+//##
+
+@panel-bg: #fff;
+@panel-body-padding: 15px;
+@panel-heading-padding: 10px 15px;
+@panel-footer-padding: @panel-heading-padding;
+@panel-border-radius: @border-radius-base;
+
+//** Border color for elements within panels
+@panel-inner-border: #ddd;
+@panel-footer-bg: #f5f5f5;
+
+@panel-default-text: @gray-dark;
+@panel-default-border: #ddd;
+@panel-default-heading-bg: #f5f5f5;
+
+@panel-primary-text: #fff;
+@panel-primary-border: @brand-primary;
+@panel-primary-heading-bg: @brand-primary;
+
+@panel-success-text: @state-success-text;
+@panel-success-border: @state-success-border;
+@panel-success-heading-bg: @state-success-bg;
+
+@panel-info-text: @state-info-text;
+@panel-info-border: @state-info-border;
+@panel-info-heading-bg: @state-info-bg;
+
+@panel-warning-text: @state-warning-text;
+@panel-warning-border: @state-warning-border;
+@panel-warning-heading-bg: @state-warning-bg;
+
+@panel-danger-text: @state-danger-text;
+@panel-danger-border: @state-danger-border;
+@panel-danger-heading-bg: @state-danger-bg;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+@thumbnail-padding: 4px;
+//** Thumbnail background color
+@thumbnail-bg: @body-bg;
+//** Thumbnail border color
+@thumbnail-border: #ddd;
+//** Thumbnail border radius
+@thumbnail-border-radius: @border-radius-base;
+
+//** Custom text color for thumbnail captions
+@thumbnail-caption-color: @text-color;
+//** Padding around the thumbnail caption
+@thumbnail-caption-padding: 9px;
+
+
+//== Wells
+//
+//##
+
+@well-bg: #f5f5f5;
+@well-border: darken(@well-bg, 7%);
+
+
+//== Badges
+//
+//##
+
+@badge-color: #fff;
+//** Linked badge text color on hover
+@badge-link-hover-color: #fff;
+@badge-bg: @gray-light;
+
+//** Badge text color in active nav link
+@badge-active-color: @link-color;
+//** Badge background color in active nav link
+@badge-active-bg: #fff;
+
+@badge-font-weight: bold;
+@badge-line-height: 1;
+@badge-border-radius: 10px;
+
+
+//== Breadcrumbs
+//
+//##
+
+@breadcrumb-padding-vertical: 8px;
+@breadcrumb-padding-horizontal: 15px;
+//** Breadcrumb background color
+@breadcrumb-bg: #f5f5f5;
+//** Breadcrumb text color
+@breadcrumb-color: #ccc;
+//** Text color of current page in the breadcrumb
+@breadcrumb-active-color: @gray-light;
+//** Textual separator for between breadcrumb elements
+@breadcrumb-separator: "/";
+
+
+//== Carousel
+//
+//##
+
+@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
+
+@carousel-control-color: #fff;
+@carousel-control-width: 15%;
+@carousel-control-opacity: .5;
+@carousel-control-font-size: 20px;
+
+@carousel-indicator-active-bg: #fff;
+@carousel-indicator-border-color: #fff;
+
+@carousel-caption-color: #fff;
+
+
+//== Close
+//
+//##
+
+@close-font-weight: bold;
+@close-color: #000;
+@close-text-shadow: 0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+@code-color: #c7254e;
+@code-bg: #f9f2f4;
+
+@kbd-color: #fff;
+@kbd-bg: #333;
+
+@pre-bg: #f5f5f5;
+@pre-color: @gray-dark;
+@pre-border-color: #ccc;
+@pre-scrollable-max-height: 340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+@component-offset-horizontal: 180px;
+//** Text muted color
+@text-muted: @gray-light;
+//** Abbreviations and acronyms border color
+@abbr-border-color: @gray-light;
+//** Headings small color
+@headings-small-color: @gray-light;
+//** Blockquote small color
+@blockquote-small-color: @gray-light;
+//** Blockquote font size
+@blockquote-font-size: (@font-size-base * 1.25);
+//** Blockquote border color
+@blockquote-border-color: @gray-lighter;
+//** Page header border color
+@page-header-border-color: @gray-lighter;
+//** Width of horizontal description list titles
+@dl-horizontal-offset: @component-offset-horizontal;
+//** Horizontal line color.
+@hr-border: @gray-lighter;
+
+
diff --git a/MVC/Content/css/themes/bootstrap-custom/variables.min.css b/MVC/Content/css/themes/bootstrap-custom/variables.min.css
new file mode 100644
index 0000000..e69de29
diff --git a/MVC/Content/css/themes/bootstrap-less/alerts.less b/MVC/Content/css/themes/bootstrap-less/alerts.less
new file mode 100644
index 0000000..df070b8
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/alerts.less
@@ -0,0 +1,68 @@
+//
+// Alerts
+// --------------------------------------------------
+
+
+// Base styles
+// -------------------------
+
+.alert {
+ padding: @alert-padding;
+ margin-bottom: @line-height-computed;
+ border: 1px solid transparent;
+ border-radius: @alert-border-radius;
+
+ // Headings for larger alerts
+ h4 {
+ margin-top: 0;
+ // Specified for the h4 to prevent conflicts of changing @headings-color
+ color: inherit;
+ }
+ // Provide class for links that match alerts
+ .alert-link {
+ font-weight: @alert-link-font-weight;
+ }
+
+ // Improve alignment and spacing of inner content
+ > p,
+ > ul {
+ margin-bottom: 0;
+ }
+ > p + p {
+ margin-top: 5px;
+ }
+}
+
+// Dismissible alerts
+//
+// Expand the right padding and account for the close button's positioning.
+
+.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
+.alert-dismissible {
+ padding-right: (@alert-padding + 20);
+
+ // Adjust close link position
+ .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+ }
+}
+
+// Alternate styles
+//
+// Generate contextual modifier classes for colorizing the alert.
+
+.alert-success {
+ .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
+}
+.alert-info {
+ .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
+}
+.alert-warning {
+ .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
+}
+.alert-danger {
+ .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/badges.less b/MVC/Content/css/themes/bootstrap-less/badges.less
new file mode 100644
index 0000000..20624f3
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/badges.less
@@ -0,0 +1,55 @@
+//
+// Badges
+// --------------------------------------------------
+
+
+// Base class
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: @font-size-small;
+ font-weight: @badge-font-weight;
+ color: @badge-color;
+ line-height: @badge-line-height;
+ vertical-align: baseline;
+ white-space: nowrap;
+ text-align: center;
+ background-color: @badge-bg;
+ border-radius: @badge-border-radius;
+
+ // Empty badges collapse automatically (not available in IE8)
+ &:empty {
+ display: none;
+ }
+
+ // Quick fix for badges in buttons
+ .btn & {
+ position: relative;
+ top: -1px;
+ }
+ .btn-xs & {
+ top: 0;
+ padding: 1px 5px;
+ }
+
+ // Hover state, but only for links
+ a& {
+ &:hover,
+ &:focus {
+ color: @badge-link-hover-color;
+ text-decoration: none;
+ cursor: pointer;
+ }
+ }
+
+ // Account for badges in navs
+ a.list-group-item.active > &,
+ .nav-pills > .active > a > & {
+ color: @badge-active-color;
+ background-color: @badge-active-bg;
+ }
+ .nav-pills > li > a > & {
+ margin-left: 3px;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/bootstrap.less b/MVC/Content/css/themes/bootstrap-less/bootstrap.less
new file mode 100644
index 0000000..61b7747
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/bootstrap.less
@@ -0,0 +1,50 @@
+// Core variables and mixins
+@import "variables.less";
+@import "mixins.less";
+
+// Reset and dependencies
+@import "normalize.less";
+@import "print.less";
+@import "glyphicons.less";
+
+// Core CSS
+@import "scaffolding.less";
+@import "type.less";
+@import "code.less";
+@import "grid.less";
+@import "tables.less";
+@import "forms.less";
+@import "buttons.less";
+
+// Components
+@import "component-animations.less";
+@import "dropdowns.less";
+@import "button-groups.less";
+@import "input-groups.less";
+@import "navs.less";
+@import "navbar.less";
+@import "breadcrumbs.less";
+@import "pagination.less";
+@import "pager.less";
+@import "labels.less";
+@import "badges.less";
+@import "jumbotron.less";
+@import "thumbnails.less";
+@import "alerts.less";
+@import "progress-bars.less";
+@import "media.less";
+@import "list-group.less";
+@import "panels.less";
+@import "responsive-embed.less";
+@import "wells.less";
+@import "close.less";
+
+// Components w/ JavaScript
+@import "modals.less";
+@import "tooltip.less";
+@import "popovers.less";
+@import "carousel.less";
+
+// Utility classes
+@import "utilities.less";
+@import "responsive-utilities.less";
diff --git a/MVC/Content/css/themes/bootstrap-less/breadcrumbs.less b/MVC/Content/css/themes/bootstrap-less/breadcrumbs.less
new file mode 100644
index 0000000..cb01d50
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/breadcrumbs.less
@@ -0,0 +1,26 @@
+//
+// Breadcrumbs
+// --------------------------------------------------
+
+
+.breadcrumb {
+ padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
+ margin-bottom: @line-height-computed;
+ list-style: none;
+ background-color: @breadcrumb-bg;
+ border-radius: @border-radius-base;
+
+ > li {
+ display: inline-block;
+
+ + li:before {
+ content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
+ padding: 0 5px;
+ color: @breadcrumb-color;
+ }
+ }
+
+ > .active {
+ color: @breadcrumb-active-color;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/button-groups.less b/MVC/Content/css/themes/bootstrap-less/button-groups.less
new file mode 100644
index 0000000..7021ecd
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/button-groups.less
@@ -0,0 +1,240 @@
+//
+// Button groups
+// --------------------------------------------------
+
+// Make the div behave like a button
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle; // match .btn alignment given font-size hack above
+ > .btn {
+ position: relative;
+ float: left;
+ // Bring the "active" button to the front
+ &:hover,
+ &:focus,
+ &:active,
+ &.active {
+ z-index: 2;
+ }
+ &:focus {
+ // Remove focus outline when dropdown JS adds it after closing the menu
+ outline: 0;
+ }
+ }
+}
+
+// Prevent double borders when buttons are next to each other
+.btn-group {
+ .btn + .btn,
+ .btn + .btn-group,
+ .btn-group + .btn,
+ .btn-group + .btn-group {
+ margin-left: -1px;
+ }
+}
+
+// Optional: Group multiple button groups together for a toolbar
+.btn-toolbar {
+ margin-left: -5px; // Offset the first child's margin
+ &:extend(.clearfix all);
+
+ .btn-group,
+ .input-group {
+ float: left;
+ }
+ > .btn,
+ > .btn-group,
+ > .input-group {
+ margin-left: 5px;
+ }
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+
+// 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
+.btn-group > .btn:first-child {
+ margin-left: 0;
+ &:not(:last-child):not(.dropdown-toggle) {
+ .border-right-radius(0);
+ }
+}
+// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ .border-left-radius(0);
+}
+
+// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
+.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 {
+ > .btn:last-child,
+ > .dropdown-toggle {
+ .border-right-radius(0);
+ }
+}
+.btn-group > .btn-group:last-child > .btn:first-child {
+ .border-left-radius(0);
+}
+
+// On active and open, don't show outline
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+
+// Sizing
+//
+// Remix the default button sizing classes into new ones for easier manipulation.
+
+.btn-group-xs > .btn { &:extend(.btn-xs); }
+.btn-group-sm > .btn { &:extend(.btn-sm); }
+.btn-group-lg > .btn { &:extend(.btn-lg); }
+
+
+// Split button dropdowns
+// ----------------------
+
+// Give the line between buttons some depth
+.btn-group > .btn + .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-left: 12px;
+ padding-right: 12px;
+}
+
+// The clickable button for toggling the menu
+// Remove the gradient and set the same inset shadow as the :active state
+.btn-group.open .dropdown-toggle {
+ .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+
+ // Show no shadow for `.btn-link` since it has no other button styles.
+ &.btn-link {
+ .box-shadow(none);
+ }
+}
+
+
+// Reposition the caret
+.btn .caret {
+ margin-left: 0;
+}
+// Carets in other button sizes
+.btn-lg .caret {
+ border-width: @caret-width-large @caret-width-large 0;
+ border-bottom-width: 0;
+}
+// Upside down carets for .dropup
+.dropup .btn-lg .caret {
+ border-width: 0 @caret-width-large @caret-width-large;
+}
+
+
+// Vertical button groups
+// ----------------------
+
+.btn-group-vertical {
+ > .btn,
+ > .btn-group,
+ > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+ }
+
+ // Clear floats so dropdown menus can be properly placed
+ > .btn-group {
+ &:extend(.clearfix all);
+ > .btn {
+ float: none;
+ }
+ }
+
+ > .btn + .btn,
+ > .btn + .btn-group,
+ > .btn-group + .btn,
+ > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+ }
+}
+
+.btn-group-vertical > .btn {
+ &:not(:first-child):not(:last-child) {
+ border-radius: 0;
+ }
+ &:first-child:not(:last-child) {
+ border-top-right-radius: @border-radius-base;
+ .border-bottom-radius(0);
+ }
+ &:last-child:not(:first-child) {
+ border-bottom-left-radius: @border-radius-base;
+ .border-top-radius(0);
+ }
+}
+.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,
+ > .dropdown-toggle {
+ .border-bottom-radius(0);
+ }
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ .border-top-radius(0);
+}
+
+
+
+// Justified button groups
+// ----------------------
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+ > .btn,
+ > .btn-group {
+ float: none;
+ display: table-cell;
+ width: 1%;
+ }
+ > .btn-group .btn {
+ width: 100%;
+ }
+
+ > .btn-group .dropdown-menu {
+ left: auto;
+ }
+}
+
+
+// Checkbox and radio options
+//
+// In order to support the browser's form validation feedback, powered by the
+// `required` attribute, we have to "hide" the inputs via `opacity`. We cannot
+// use `display: none;` or `visibility: hidden;` as that also hides the popover.
+// This way, we ensure a DOM element is visible to position the popover from.
+//
+// See https://github.com/twbs/bootstrap/pull/12794 for more.
+
+[data-toggle="buttons"] > .btn > input[type="radio"],
+[data-toggle="buttons"] > .btn > input[type="checkbox"] {
+ position: absolute;
+ z-index: -1;
+ .opacity(0);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/buttons.less b/MVC/Content/css/themes/bootstrap-less/buttons.less
new file mode 100644
index 0000000..492bdc6
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/buttons.less
@@ -0,0 +1,157 @@
+//
+// Buttons
+// --------------------------------------------------
+
+
+// Base styles
+// --------------------------------------------------
+
+.btn {
+ display: inline-block;
+ margin-bottom: 0; // For input.btn
+ font-weight: @btn-font-weight;
+ text-align: center;
+ vertical-align: middle;
+ cursor: pointer;
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
+ border: 1px solid transparent;
+ white-space: nowrap;
+ .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);
+ .user-select(none);
+
+ &,
+ &:active,
+ &.active {
+ &:focus {
+ .tab-focus();
+ }
+ }
+
+ &:hover,
+ &:focus {
+ color: @btn-default-color;
+ text-decoration: none;
+ }
+
+ &:active,
+ &.active {
+ outline: 0;
+ background-image: none;
+ .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+ }
+
+ &.disabled,
+ &[disabled],
+ fieldset[disabled] & {
+ cursor: not-allowed;
+ pointer-events: none; // Future-proof disabling of clicks
+ .opacity(.65);
+ .box-shadow(none);
+ }
+}
+
+
+// Alternate buttons
+// --------------------------------------------------
+
+.btn-default {
+ .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
+}
+.btn-primary {
+ .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
+}
+// Success appears as green
+.btn-success {
+ .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);
+}
+// Info appears as blue-green
+.btn-info {
+ .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);
+}
+// Warning appears as orange
+.btn-warning {
+ .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);
+}
+// Danger and error appear as red
+.btn-danger {
+ .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
+}
+
+
+// Link buttons
+// -------------------------
+
+// Make a button look and behave like a link
+.btn-link {
+ color: @link-color;
+ font-weight: normal;
+ cursor: pointer;
+ border-radius: 0;
+
+ &,
+ &:active,
+ &[disabled],
+ fieldset[disabled] & {
+ background-color: transparent;
+ .box-shadow(none);
+ }
+ &,
+ &:hover,
+ &:focus,
+ &:active {
+ border-color: transparent;
+ }
+ &:hover,
+ &:focus {
+ color: @link-hover-color;
+ text-decoration: underline;
+ background-color: transparent;
+ }
+ &[disabled],
+ fieldset[disabled] & {
+ &:hover,
+ &:focus {
+ color: @btn-link-disabled-color;
+ text-decoration: none;
+ }
+ }
+}
+
+
+// Button Sizes
+// --------------------------------------------------
+
+.btn-lg {
+ // line-height: ensure even-numbered height of button next to large input
+ .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
+}
+.btn-sm {
+ // line-height: ensure proper height of button next to small input
+ .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
+}
+.btn-xs {
+ .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);
+}
+
+
+// Block button
+// --------------------------------------------------
+
+.btn-block {
+ display: block;
+ width: 100%;
+}
+
+// Vertically space out multiple block buttons
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+
+// Specificity overrides
+input[type="submit"],
+input[type="reset"],
+input[type="button"] {
+ &.btn-block {
+ width: 100%;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/carousel.less b/MVC/Content/css/themes/bootstrap-less/carousel.less
new file mode 100644
index 0000000..1644ddf
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/carousel.less
@@ -0,0 +1,243 @@
+//
+// Carousel
+// --------------------------------------------------
+
+
+// Wrapper for the slide container and indicators
+.carousel {
+ position: relative;
+}
+
+.carousel-inner {
+ position: relative;
+ overflow: hidden;
+ width: 100%;
+
+ > .item {
+ display: none;
+ position: relative;
+ .transition(.6s ease-in-out left);
+
+ // Account for jankitude on images
+ > img,
+ > a > img {
+ &:extend(.img-responsive);
+ line-height: 1;
+ }
+ }
+
+ > .active,
+ > .next,
+ > .prev {
+ display: block;
+ }
+
+ > .active {
+ left: 0;
+ }
+
+ > .next,
+ > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+
+ > .next {
+ left: 100%;
+ }
+ > .prev {
+ left: -100%;
+ }
+ > .next.left,
+ > .prev.right {
+ left: 0;
+ }
+
+ > .active.left {
+ left: -100%;
+ }
+ > .active.right {
+ left: 100%;
+ }
+
+}
+
+// Left/right controls for nav
+// ---------------------------
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: @carousel-control-width;
+ .opacity(@carousel-control-opacity);
+ font-size: @carousel-control-font-size;
+ color: @carousel-control-color;
+ text-align: center;
+ text-shadow: @carousel-text-shadow;
+ // We can't have this transition here because WebKit cancels the carousel
+ // animation if you trip this while in the middle of another animation.
+
+ // Set gradients for backgrounds
+ &.left {
+ #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
+ }
+ &.right {
+ left: auto;
+ right: 0;
+ #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
+ }
+
+ // Hover/focus state
+ &:hover,
+ &:focus {
+ outline: 0;
+ color: @carousel-control-color;
+ text-decoration: none;
+ .opacity(.9);
+ }
+
+ // Toggles
+ .icon-prev,
+ .icon-next,
+ .glyphicon-chevron-left,
+ .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+ }
+ .icon-prev,
+ .glyphicon-chevron-left {
+ left: 50%;
+ margin-left: -10px;
+ }
+ .icon-next,
+ .glyphicon-chevron-right {
+ right: 50%;
+ margin-right: -10px;
+ }
+ .icon-prev,
+ .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ font-family: serif;
+ }
+
+
+ .icon-prev {
+ &:before {
+ content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
+ }
+ }
+ .icon-next {
+ &:before {
+ content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
+ }
+ }
+}
+
+// Optional indicator pips
+//
+// Add an unordered list with the following class and add a list item for each
+// slide your carousel holds.
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ margin-left: -30%;
+ padding-left: 0;
+ list-style: none;
+ text-align: center;
+
+ li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ border: 1px solid @carousel-indicator-border-color;
+ border-radius: 10px;
+ cursor: pointer;
+
+ // IE8-9 hack for event handling
+ //
+ // Internet Explorer 8-9 does not support clicks on elements without a set
+ // `background-color`. We cannot use `filter` since that's not viewed as a
+ // background color by the browser. Thus, a hack is needed.
+ //
+ // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
+ // set alpha transparency for the best results possible.
+ background-color: #000 \9; // IE8
+ background-color: rgba(0,0,0,0); // IE9
+ }
+ .active {
+ margin: 0;
+ width: 12px;
+ height: 12px;
+ background-color: @carousel-indicator-active-bg;
+ }
+}
+
+// Optional captions
+// -----------------------------
+// Hidden by default for smaller viewports
+.carousel-caption {
+ position: absolute;
+ left: 15%;
+ right: 15%;
+ bottom: 20px;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: @carousel-caption-color;
+ text-align: center;
+ text-shadow: @carousel-text-shadow;
+ & .btn {
+ text-shadow: none; // No shadow for button elements in carousel-caption
+ }
+}
+
+
+// Scale up controls for tablets and up
+@media screen and (min-width: @screen-sm-min) {
+
+ // Scale up the controls a smidge
+ .carousel-control {
+ .glyphicon-chevron-left,
+ .glyphicon-chevron-right,
+ .icon-prev,
+ .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ font-size: 30px;
+ }
+ .glyphicon-chevron-left,
+ .icon-prev {
+ margin-left: -15px;
+ }
+ .glyphicon-chevron-right,
+ .icon-next {
+ margin-right: -15px;
+ }
+ }
+
+ // Show and left align the captions
+ .carousel-caption {
+ left: 20%;
+ right: 20%;
+ padding-bottom: 30px;
+ }
+
+ // Move up the indicators
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/close.less b/MVC/Content/css/themes/bootstrap-less/close.less
new file mode 100644
index 0000000..9b4e74f
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/close.less
@@ -0,0 +1,33 @@
+//
+// Close icons
+// --------------------------------------------------
+
+
+.close {
+ float: right;
+ font-size: (@font-size-base * 1.5);
+ font-weight: @close-font-weight;
+ line-height: 1;
+ color: @close-color;
+ text-shadow: @close-text-shadow;
+ .opacity(.2);
+
+ &:hover,
+ &:focus {
+ color: @close-color;
+ text-decoration: none;
+ cursor: pointer;
+ .opacity(.5);
+ }
+
+ // Additional properties for button version
+ // iOS requires the button element instead of an anchor tag.
+ // If you want the anchor version, it requires `href="#"`.
+ button& {
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/code.less b/MVC/Content/css/themes/bootstrap-less/code.less
new file mode 100644
index 0000000..baa13df
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/code.less
@@ -0,0 +1,68 @@
+//
+// Code (inline and block)
+// --------------------------------------------------
+
+
+// Inline and block code styles
+code,
+kbd,
+pre,
+samp {
+ font-family: @font-family-monospace;
+}
+
+// Inline code
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: @code-color;
+ background-color: @code-bg;
+ border-radius: @border-radius-base;
+}
+
+// User input typically entered via keyboard
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: @kbd-color;
+ background-color: @kbd-bg;
+ border-radius: @border-radius-small;
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
+
+ kbd {
+ padding: 0;
+ font-size: 100%;
+ box-shadow: none;
+ }
+}
+
+// Blocks of code
+pre {
+ display: block;
+ padding: ((@line-height-computed - 1) / 2);
+ margin: 0 0 (@line-height-computed / 2);
+ font-size: (@font-size-base - 1); // 14px to 13px
+ line-height: @line-height-base;
+ word-break: break-all;
+ word-wrap: break-word;
+ color: @pre-color;
+ background-color: @pre-bg;
+ border: 1px solid @pre-border-color;
+ border-radius: @border-radius-base;
+
+ // Account for some code outputs that place code tags in pre tags
+ code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+ }
+}
+
+// Enable scrollable blocks of code
+.pre-scrollable {
+ max-height: @pre-scrollable-max-height;
+ overflow-y: scroll;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/component-animations.less b/MVC/Content/css/themes/bootstrap-less/component-animations.less
new file mode 100644
index 0000000..9400a0d
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/component-animations.less
@@ -0,0 +1,31 @@
+//
+// Component animations
+// --------------------------------------------------
+
+// Heads up!
+//
+// We don't use the `.opacity()` mixin here since it causes a bug with text
+// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
+
+.fade {
+ opacity: 0;
+ .transition(opacity .15s linear);
+ &.in {
+ opacity: 1;
+ }
+}
+
+.collapse {
+ display: none;
+
+ &.in { display: block; }
+ tr&.in { display: table-row; }
+ tbody&.in { display: table-row-group; }
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ .transition(height .35s ease);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/dropdowns.less b/MVC/Content/css/themes/bootstrap-less/dropdowns.less
new file mode 100644
index 0000000..3eb7fc0
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/dropdowns.less
@@ -0,0 +1,215 @@
+//
+// Dropdown menus
+// --------------------------------------------------
+
+
+// Dropdown arrow/caret
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: @caret-width-base solid;
+ border-right: @caret-width-base solid transparent;
+ border-left: @caret-width-base solid transparent;
+}
+
+// The dropdown wrapper (div)
+.dropdown {
+ position: relative;
+}
+
+// Prevent the focus on the dropdown toggle when closing dropdowns
+.dropdown-toggle:focus {
+ outline: 0;
+}
+
+// The dropdown menu (ul)
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: @zindex-dropdown;
+ display: none; // none by default, but block on "open" of the menu
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0; // override default ul
+ list-style: none;
+ font-size: @font-size-base;
+ text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
+ background-color: @dropdown-bg;
+ border: 1px solid @dropdown-fallback-border; // IE8 fallback
+ border: 1px solid @dropdown-border;
+ border-radius: @border-radius-base;
+ .box-shadow(0 6px 12px rgba(0,0,0,.175));
+ background-clip: padding-box;
+
+ // Aligns the dropdown menu to right
+ //
+ // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
+ &.pull-right {
+ right: 0;
+ left: auto;
+ }
+
+ // Dividers (basically an hr) within the dropdown
+ .divider {
+ .nav-divider(@dropdown-divider-bg);
+ }
+
+ // Links within the dropdown menu
+ > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: @line-height-base;
+ color: @dropdown-link-color;
+ white-space: nowrap; // prevent links from randomly breaking onto new lines
+ }
+}
+
+// Hover/Focus state
+.dropdown-menu > li > a {
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ color: @dropdown-link-hover-color;
+ background-color: @dropdown-link-hover-bg;
+ }
+}
+
+// Active state
+.dropdown-menu > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @dropdown-link-active-color;
+ text-decoration: none;
+ outline: 0;
+ background-color: @dropdown-link-active-bg;
+ }
+}
+
+// Disabled state
+//
+// Gray out text and ensure the hover/focus state remains gray
+
+.dropdown-menu > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @dropdown-link-disabled-color;
+ }
+}
+// Nuke hover/focus effects
+.dropdown-menu > .disabled > a {
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ background-color: transparent;
+ background-image: none; // Remove CSS gradient
+ .reset-filter();
+ cursor: not-allowed;
+ }
+}
+
+// Open state for the dropdown
+.open {
+ // Show the menu
+ > .dropdown-menu {
+ display: block;
+ }
+
+ // Remove the outline when :focus is triggered
+ > a {
+ outline: 0;
+ }
+}
+
+// Menu positioning
+//
+// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
+// menu with the parent.
+.dropdown-menu-right {
+ left: auto; // Reset the default from `.dropdown-menu`
+ right: 0;
+}
+// With v3, we enabled auto-flipping if you have a dropdown within a right
+// aligned nav component. To enable the undoing of that, we provide an override
+// to restore the default dropdown menu alignment.
+//
+// This is only for left-aligning a dropdown menu within a `.navbar-right` or
+// `.pull-right` nav component.
+.dropdown-menu-left {
+ left: 0;
+ right: auto;
+}
+
+// Dropdown section headers
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: @font-size-small;
+ line-height: @line-height-base;
+ color: @dropdown-header-color;
+ white-space: nowrap; // as with > li > a
+}
+
+// Backdrop to catch body clicks on mobile, etc.
+.dropdown-backdrop {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ z-index: (@zindex-dropdown - 10);
+}
+
+// Right aligned dropdowns
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+// Allow for dropdowns to go bottom up (aka, dropup-menu)
+//
+// Just add .dropup after the standard .dropdown class and you're set, bro.
+// TODO: abstract this so that the navbar fixed styles are not placed here?
+
+.dropup,
+.navbar-fixed-bottom .dropdown {
+ // Reverse the caret
+ .caret {
+ border-top: 0;
+ border-bottom: @caret-width-base solid;
+ content: "";
+ }
+ // Different positioning for bottom up menu
+ .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+ }
+}
+
+
+// Component alignment
+//
+// Reiterate per navbar.less and the modified component alignment there.
+
+@media (min-width: @grid-float-breakpoint) {
+ .navbar-right {
+ .dropdown-menu {
+ .dropdown-menu-right();
+ }
+ // Necessary for overrides of the default right aligned menu.
+ // Will remove come v4 in all likelihood.
+ .dropdown-menu-left {
+ .dropdown-menu-left();
+ }
+ }
+}
+
diff --git a/MVC/Content/css/themes/bootstrap-less/forms.less b/MVC/Content/css/themes/bootstrap-less/forms.less
new file mode 100644
index 0000000..2c5e9bf
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/forms.less
@@ -0,0 +1,540 @@
+//
+// Forms
+// --------------------------------------------------
+
+
+// Normalize non-controls
+//
+// Restyle and baseline non-control form elements.
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+ // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
+ // so we reset that to ensure it behaves more like a standard block element.
+ // See https://github.com/twbs/bootstrap/issues/12359.
+ min-width: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: @line-height-computed;
+ font-size: (@font-size-base * 1.5);
+ line-height: inherit;
+ color: @legend-color;
+ border: 0;
+ border-bottom: 1px solid @legend-border-color;
+}
+
+label {
+ display: inline-block;
+ max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+
+
+// Normalize form controls
+//
+// While most of our form styles require extra classes, some basic normalization
+// is required to ensure optimum display with or without those classes to better
+// address browser inconsistencies.
+
+// Override content-box in Normalize (* isn't specific enough)
+input[type="search"] {
+ .box-sizing(border-box);
+}
+
+// Position radios and checkboxes better
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9; // IE8-9
+ line-height: normal;
+}
+
+// Set the height of file controls to match text inputs
+input[type="file"] {
+ display: block;
+}
+
+// Make range inputs behave like textual form controls
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+
+// Make multiple select elements height not fixed
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+// Focus for file, radio, and checkbox
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ .tab-focus();
+}
+
+// Adjust output element
+output {
+ display: block;
+ padding-top: (@padding-base-vertical + 1);
+ font-size: @font-size-base;
+ line-height: @line-height-base;
+ color: @input-color;
+}
+
+
+// Common form controls
+//
+// Shared size and type resets for form controls. Apply `.form-control` to any
+// of the following form controls:
+//
+// select
+// textarea
+// input[type="text"]
+// input[type="password"]
+// input[type="datetime"]
+// input[type="datetime-local"]
+// input[type="date"]
+// input[type="month"]
+// input[type="time"]
+// input[type="week"]
+// input[type="number"]
+// input[type="email"]
+// input[type="url"]
+// input[type="search"]
+// input[type="tel"]
+// input[type="color"]
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
+ padding: @padding-base-vertical @padding-base-horizontal;
+ font-size: @font-size-base;
+ line-height: @line-height-base;
+ color: @input-color;
+ background-color: @input-bg;
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
+ border: 1px solid @input-border;
+ border-radius: @input-border-radius;
+ .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
+ .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
+
+ // Customize the `:focus` state to imitate native WebKit styles.
+ .form-control-focus();
+
+ // Placeholder
+ .placeholder();
+
+ // Disabled and read-only inputs
+ //
+ // HTML5 says that controls under a fieldset > legend:first-child won't be
+ // disabled if the fieldset is disabled. Due to implementation difficulty, we
+ // don't honor that edge case; we style them as disabled anyway.
+ &[disabled],
+ &[readonly],
+ fieldset[disabled] & {
+ cursor: not-allowed;
+ background-color: @input-bg-disabled;
+ opacity: 1; // iOS fix for unreadable disabled content
+ }
+
+ // Reset height for `textarea`s
+ textarea& {
+ height: auto;
+ }
+}
+
+
+// Search inputs in iOS
+//
+// This overrides the extra rounded corners on search inputs in iOS so that our
+// `.form-control` class can properly style them. Note that this cannot simply
+// be added to `.form-control` as it's not specific enough. For details, see
+// https://github.com/twbs/bootstrap/issues/11586.
+
+input[type="search"] {
+ -webkit-appearance: none;
+}
+
+
+// Special styles for iOS temporal inputs
+//
+// In Mobile Safari, setting `display: block` on temporal inputs causes the
+// text within the input to become vertically misaligned.
+// As a workaround, we set a pixel line-height that matches the
+// given height of the input. Since this fucks up everything else, we have to
+// appropriately reset it for Internet Explorer and the size variations.
+
+input[type="date"],
+input[type="time"],
+input[type="datetime-local"],
+input[type="month"] {
+ line-height: @input-height-base;
+ // IE8+ misaligns the text within date inputs, so we reset
+ line-height: @line-height-base ~"\0";
+
+ &.input-sm {
+ line-height: @input-height-small;
+ }
+ &.input-lg {
+ line-height: @input-height-large;
+ }
+}
+
+
+// Form groups
+//
+// Designed to help with the organization and spacing of vertical forms. For
+// horizontal forms, use the predefined grid classes.
+
+.form-group {
+ margin-bottom: 15px;
+}
+
+
+// Checkboxes and radios
+//
+// Indent the labels to position radios/checkboxes as hanging controls.
+
+.radio,
+.checkbox {
+ position: relative;
+ display: block;
+ min-height: @line-height-computed; // clear the floating input if there is no label text
+ margin-top: 10px;
+ margin-bottom: 10px;
+
+ label {
+ 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-left: -20px;
+ margin-top: 4px \9;
+}
+
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
+}
+
+// Radios and checkboxes on same line
+.radio-inline,
+.checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ vertical-align: middle;
+ font-weight: normal;
+ cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px; // space out consecutive inline controls
+}
+
+// Apply same disabled cursor tweak as for inputs
+// Some special care is needed because s don't inherit their parent's `cursor`.
+//
+// Note: Neither radios nor checkboxes can be readonly.
+input[type="radio"],
+input[type="checkbox"] {
+ &[disabled],
+ &.disabled,
+ fieldset[disabled] & {
+ cursor: not-allowed;
+ }
+}
+// These classes are used directly on s
+.radio-inline,
+.checkbox-inline {
+ &.disabled,
+ fieldset[disabled] & {
+ cursor: not-allowed;
+ }
+}
+// These classes are used on elements with descendants
+.radio,
+.checkbox {
+ &.disabled,
+ fieldset[disabled] & {
+ label {
+ cursor: not-allowed;
+ }
+ }
+}
+
+
+// Static form control text
+//
+// Apply class to a `p` element to make any string of text align with labels in
+// a horizontal form layout.
+
+.form-control-static {
+ // Size it appropriately next to real form controls
+ padding-top: (@padding-base-vertical + 1);
+ padding-bottom: (@padding-base-vertical + 1);
+ // Remove default margin from `p`
+ margin-bottom: 0;
+
+ &.input-lg,
+ &.input-sm {
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
+
+
+// Form control sizing
+//
+// Build on `.form-control` with modifier classes to decrease or increase the
+// height and font-size of form controls.
+
+.input-sm {
+ .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
+}
+
+.input-lg {
+ .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
+}
+
+
+// Form control feedback states
+//
+// Apply contextual and semantic states to individual form controls.
+
+.has-feedback {
+ // Enable absolute positioning
+ position: relative;
+
+ // Ensure icons don't overlap text
+ .form-control {
+ padding-right: (@input-height-base * 1.25);
+ }
+}
+// Feedback icon (requires .glyphicon classes)
+.form-control-feedback {
+ position: absolute;
+ top: (@line-height-computed + 5); // Height of the `label` and its margin
+ right: 0;
+ z-index: 2; // Ensure icon is above input groups
+ display: block;
+ width: @input-height-base;
+ height: @input-height-base;
+ line-height: @input-height-base;
+ text-align: center;
+}
+.input-lg + .form-control-feedback {
+ width: @input-height-large;
+ height: @input-height-large;
+ line-height: @input-height-large;
+}
+.input-sm + .form-control-feedback {
+ width: @input-height-small;
+ height: @input-height-small;
+ line-height: @input-height-small;
+}
+
+// Feedback states
+.has-success {
+ .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);
+}
+.has-warning {
+ .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);
+}
+.has-error {
+ .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
+}
+
+
+// Reposition feedback icon if label is hidden with "screenreader only" state
+.has-feedback label.sr-only ~ .form-control-feedback {
+ top: 0;
+}
+
+
+// Help text
+//
+// Apply to any element you wish to create light text for placement immediately
+// below a form control. Use for general help, formatting, or instructional text.
+
+.help-block {
+ display: block; // account for any element using help-block
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: lighten(@text-color, 25%); // lighten the text some for contrast
+}
+
+
+
+// Inline forms
+//
+// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
+// forms begin stacked on extra small (mobile) devices and then go inline when
+// viewports reach <768px.
+//
+// Requires wrapping inputs and labels with `.form-group` for proper display of
+// default HTML form controls and our custom form controls (e.g., input groups).
+//
+// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
+
+.form-inline {
+
+ // Kick in the inline
+ @media (min-width: @screen-sm-min) {
+ // Inline-block all the things for "inline"
+ .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ // In navbar-form, allow folks to *not* use `.form-group`
+ .form-control {
+ display: inline-block;
+ width: auto; // Prevent labels from stacking above inputs in `.form-group`
+ vertical-align: middle;
+ }
+
+ .input-group {
+ display: inline-table;
+ vertical-align: middle;
+
+ .input-group-addon,
+ .input-group-btn,
+ .form-control {
+ width: auto;
+ }
+ }
+
+ // Input groups need that 100% width though
+ .input-group > .form-control {
+ width: 100%;
+ }
+
+ .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ // Remove default margin on radios/checkboxes that were used for stacking, and
+ // then undo the floating of radios and checkboxes to match (which also avoids
+ // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).
+ .radio,
+ .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+
+ label {
+ padding-left: 0;
+ }
+ }
+ .radio input[type="radio"],
+ .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+
+ // Validation states
+ //
+ // Reposition the icon because it's now within a grid column and columns have
+ // `position: relative;` on them. Also accounts for the grid gutter padding.
+ .has-feedback .form-control-feedback {
+ top: 0;
+ }
+ }
+}
+
+
+// Horizontal forms
+//
+// Horizontal forms are built on grid classes and allow you to create forms with
+// labels on the left and inputs on the right.
+
+.form-horizontal {
+
+ // Consistent vertical alignment of radios and checkboxes
+ //
+ // Labels also get some reset styles, but that is scoped to a media query below.
+ .radio,
+ .checkbox,
+ .radio-inline,
+ .checkbox-inline {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-top: (@padding-base-vertical + 1); // Default padding plus a border
+ }
+ // Account for padding we're adding to ensure the alignment and of help text
+ // and other content below items
+ .radio,
+ .checkbox {
+ min-height: (@line-height-computed + (@padding-base-vertical + 1));
+ }
+
+ // Make form groups behave like rows
+ .form-group {
+ .make-row();
+ }
+
+ // Reset spacing and right align labels, but scope to media queries so that
+ // labels on narrow viewports stack the same as a default form example.
+ @media (min-width: @screen-sm-min) {
+ .control-label {
+ text-align: right;
+ margin-bottom: 0;
+ padding-top: (@padding-base-vertical + 1); // Default padding plus a border
+ }
+ }
+
+ // Validation states
+ //
+ // Reposition the icon because it's now within a grid column and columns have
+ // `position: relative;` on them. Also accounts for the grid gutter padding.
+ .has-feedback .form-control-feedback {
+ top: 0;
+ right: (@grid-gutter-width / 2);
+ }
+
+ // Form group sizes
+ //
+ // Quick utility class for applying `.input-lg` and `.input-sm` styles to the
+ // inputs and labels within a `.form-group`.
+ .form-group-lg {
+ @media (min-width: @screen-sm-min) {
+ .control-label {
+ padding-top: ((@padding-large-vertical * @line-height-large) + 1);
+ }
+ }
+ .form-control {
+ &:extend(.input-lg);
+ }
+ }
+ .form-group-sm {
+ @media (min-width: @screen-sm-min) {
+ .control-label {
+ padding-top: (@padding-small-vertical + 1);
+ }
+ }
+ .form-control {
+ &:extend(.input-sm);
+ }
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/glyphicons.less b/MVC/Content/css/themes/bootstrap-less/glyphicons.less
new file mode 100644
index 0000000..d3485dc
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/glyphicons.less
@@ -0,0 +1,233 @@
+//
+// Glyphicons for Bootstrap
+//
+// Since icons are fonts, they can be placed anywhere text is placed and are
+// thus automatically sized to match the surrounding child. To use, create an
+// inline element with the appropriate classes, like so:
+//
+// Star
+
+// Import the fonts
+@font-face {
+ font-family: 'Glyphicons Halflings';
+ src: url('@{icon-font-path}@{icon-font-name}.eot');
+ src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),
+ url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),
+ url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),
+ url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');
+}
+
+// Catchall baseclass
+.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;
+}
+
+// Individual icons
+.glyphicon-asterisk { &:before { content: "\2a"; } }
+.glyphicon-plus { &:before { content: "\2b"; } }
+.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"; } }
diff --git a/MVC/Content/css/themes/bootstrap-less/grid.less b/MVC/Content/css/themes/bootstrap-less/grid.less
new file mode 100644
index 0000000..e100655
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/grid.less
@@ -0,0 +1,84 @@
+//
+// Grid system
+// --------------------------------------------------
+
+
+// Container widths
+//
+// Set the container width, and override it for fixed navbars in media queries.
+
+.container {
+ .container-fixed();
+
+ @media (min-width: @screen-sm-min) {
+ width: @container-sm;
+ }
+ @media (min-width: @screen-md-min) {
+ width: @container-md;
+ }
+ @media (min-width: @screen-lg-min) {
+ width: @container-lg;
+ }
+}
+
+
+// Fluid container
+//
+// Utilizes the mixin meant for fixed width containers, but without any defined
+// width for fluid, full width layouts.
+
+.container-fluid {
+ .container-fixed();
+}
+
+
+// Row
+//
+// Rows contain and clear the floats of your columns.
+
+.row {
+ .make-row();
+}
+
+
+// Columns
+//
+// Common styles for small and large grid columns
+
+.make-grid-columns();
+
+
+// Extra small grid
+//
+// Columns, offsets, pushes, and pulls for extra small devices like
+// smartphones.
+
+.make-grid(xs);
+
+
+// Small grid
+//
+// Columns, offsets, pushes, and pulls for the small device range, from phones
+// to tablets.
+
+@media (min-width: @screen-sm-min) {
+ .make-grid(sm);
+}
+
+
+// Medium grid
+//
+// Columns, offsets, pushes, and pulls for the desktop device range.
+
+@media (min-width: @screen-md-min) {
+ .make-grid(md);
+}
+
+
+// Large grid
+//
+// Columns, offsets, pushes, and pulls for the large desktop device range.
+
+@media (min-width: @screen-lg-min) {
+ .make-grid(lg);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/input-groups.less b/MVC/Content/css/themes/bootstrap-less/input-groups.less
new file mode 100644
index 0000000..a8712f2
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/input-groups.less
@@ -0,0 +1,166 @@
+//
+// Input groups
+// --------------------------------------------------
+
+// Base styles
+// -------------------------
+.input-group {
+ position: relative; // For dropdowns
+ display: table;
+ border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
+
+ // Undo padding and float of grid classes
+ &[class*="col-"] {
+ float: none;
+ padding-left: 0;
+ padding-right: 0;
+ }
+
+ .form-control {
+ // Ensure that the input is always above the *appended* addon button for
+ // proper border colors.
+ position: relative;
+ z-index: 2;
+
+ // IE9 fubars the placeholder attribute in text inputs and the arrows on
+ // select elements in input groups. To fix it, we float the input. Details:
+ // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855
+ float: left;
+
+ width: 100%;
+ margin-bottom: 0;
+ }
+}
+
+// Sizing options
+//
+// Remix the default form control sizing classes into new ones for easier
+// manipulation.
+
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ .input-lg();
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ .input-sm();
+}
+
+
+// Display as table-cell
+// -------------------------
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+
+ &:not(:first-child):not(:last-child) {
+ border-radius: 0;
+ }
+}
+// Addon and addon wrapper for buttons
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle; // Match the inputs
+}
+
+// Text input groups
+// -------------------------
+.input-group-addon {
+ padding: @padding-base-vertical @padding-base-horizontal;
+ font-size: @font-size-base;
+ font-weight: normal;
+ line-height: 1;
+ color: @input-color;
+ text-align: center;
+ background-color: @input-group-addon-bg;
+ border: 1px solid @input-group-addon-border-color;
+ border-radius: @border-radius-base;
+
+ // Sizing
+ &.input-sm {
+ padding: @padding-small-vertical @padding-small-horizontal;
+ font-size: @font-size-small;
+ border-radius: @border-radius-small;
+ }
+ &.input-lg {
+ padding: @padding-large-vertical @padding-large-horizontal;
+ font-size: @font-size-large;
+ border-radius: @border-radius-large;
+ }
+
+ // Nuke default margins from checkboxes and radios to vertically center within.
+ input[type="radio"],
+ input[type="checkbox"] {
+ margin-top: 0;
+ }
+}
+
+// Reset rounded corners
+.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-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-left-radius(0);
+}
+.input-group-addon:last-child {
+ border-left: 0;
+}
+
+// Button input groups
+// -------------------------
+.input-group-btn {
+ position: relative;
+ // Jankily prevent input button groups from wrapping with `white-space` and
+ // `font-size` in combination with `inline-block` on buttons.
+ font-size: 0;
+ white-space: nowrap;
+
+ // Negative margin for spacing, position for bringing hovered/focused/actived
+ // element above the siblings.
+ > .btn {
+ position: relative;
+ + .btn {
+ margin-left: -1px;
+ }
+ // Bring the "active" button to the front
+ &:hover,
+ &:focus,
+ &:active {
+ z-index: 2;
+ }
+ }
+
+ // Negative margin to only have a 1px border between the two
+ &:first-child {
+ > .btn,
+ > .btn-group {
+ margin-right: -1px;
+ }
+ }
+ &:last-child {
+ > .btn,
+ > .btn-group {
+ margin-left: -1px;
+ }
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/jumbotron.less b/MVC/Content/css/themes/bootstrap-less/jumbotron.less
new file mode 100644
index 0000000..27cd8b8
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/jumbotron.less
@@ -0,0 +1,48 @@
+//
+// Jumbotron
+// --------------------------------------------------
+
+
+.jumbotron {
+ padding: @jumbotron-padding;
+ margin-bottom: @jumbotron-padding;
+ color: @jumbotron-color;
+ background-color: @jumbotron-bg;
+
+ h1,
+ .h1 {
+ color: @jumbotron-heading-color;
+ }
+ p {
+ margin-bottom: (@jumbotron-padding / 2);
+ font-size: @jumbotron-font-size;
+ font-weight: 200;
+ }
+
+ > hr {
+ border-top-color: darken(@jumbotron-bg, 10%);
+ }
+
+ .container & {
+ border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
+ }
+
+ .container {
+ max-width: 100%;
+ }
+
+ @media screen and (min-width: @screen-sm-min) {
+ padding-top: (@jumbotron-padding * 1.6);
+ padding-bottom: (@jumbotron-padding * 1.6);
+
+ .container & {
+ padding-left: (@jumbotron-padding * 2);
+ padding-right: (@jumbotron-padding * 2);
+ }
+
+ h1,
+ .h1 {
+ font-size: (@font-size-base * 4.5);
+ }
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/labels.less b/MVC/Content/css/themes/bootstrap-less/labels.less
new file mode 100644
index 0000000..9a5a270
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/labels.less
@@ -0,0 +1,64 @@
+//
+// Labels
+// --------------------------------------------------
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: @label-color;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+
+ // Add hover effects, but only for links
+ a& {
+ &:hover,
+ &:focus {
+ color: @label-link-hover-color;
+ text-decoration: none;
+ cursor: pointer;
+ }
+ }
+
+ // Empty labels collapse automatically (not available in IE8)
+ &:empty {
+ display: none;
+ }
+
+ // Quick fix for labels in buttons
+ .btn & {
+ position: relative;
+ top: -1px;
+ }
+}
+
+// Colors
+// Contextual variations (linked labels get darker on :hover)
+
+.label-default {
+ .label-variant(@label-default-bg);
+}
+
+.label-primary {
+ .label-variant(@label-primary-bg);
+}
+
+.label-success {
+ .label-variant(@label-success-bg);
+}
+
+.label-info {
+ .label-variant(@label-info-bg);
+}
+
+.label-warning {
+ .label-variant(@label-warning-bg);
+}
+
+.label-danger {
+ .label-variant(@label-danger-bg);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/list-group.less b/MVC/Content/css/themes/bootstrap-less/list-group.less
new file mode 100644
index 0000000..1946bf5
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/list-group.less
@@ -0,0 +1,131 @@
+//
+// List groups
+// --------------------------------------------------
+
+
+// Base class
+//
+// Easily usable on , , or .
+
+.list-group {
+ // No need to set list-style: none; since .list-group-item is block level
+ margin-bottom: 20px;
+ padding-left: 0; // reset padding because ul and ol
+}
+
+
+// Individual list items
+//
+// Use on `li`s or `div`s within the `.list-group` parent.
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ // Place the border on the list items and negative margin up for better styling
+ margin-bottom: -1px;
+ background-color: @list-group-bg;
+ border: 1px solid @list-group-border;
+
+ // Round the first and last items
+ &:first-child {
+ .border-top-radius(@list-group-border-radius);
+ }
+ &:last-child {
+ margin-bottom: 0;
+ .border-bottom-radius(@list-group-border-radius);
+ }
+
+ // Align badges within list items
+ > .badge {
+ float: right;
+ }
+ > .badge + .badge {
+ margin-right: 5px;
+ }
+}
+
+
+// Linked list items
+//
+// Use anchor elements instead of `li`s or `div`s to create linked list items.
+// Includes an extra `.active` modifier class for showing selected items.
+
+a.list-group-item {
+ color: @list-group-link-color;
+
+ .list-group-item-heading {
+ color: @list-group-link-heading-color;
+ }
+
+ // Hover state
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ color: @list-group-link-hover-color;
+ background-color: @list-group-hover-bg;
+ }
+}
+
+.list-group-item {
+ // Disabled state
+ &.disabled,
+ &.disabled:hover,
+ &.disabled:focus {
+ background-color: @list-group-disabled-bg;
+ color: @list-group-disabled-color;
+
+ // Force color to inherit for custom content
+ .list-group-item-heading {
+ color: inherit;
+ }
+ .list-group-item-text {
+ color: @list-group-disabled-text-color;
+ }
+ }
+
+ // Active class on item itself, not parent
+ &.active,
+ &.active:hover,
+ &.active:focus {
+ z-index: 2; // Place active items above their siblings for proper border styling
+ color: @list-group-active-color;
+ background-color: @list-group-active-bg;
+ border-color: @list-group-active-border;
+
+ // Force color to inherit for custom content
+ .list-group-item-heading,
+ .list-group-item-heading > small,
+ .list-group-item-heading > .small {
+ color: inherit;
+ }
+ .list-group-item-text {
+ color: @list-group-active-text-color;
+ }
+ }
+}
+
+
+// Contextual variants
+//
+// Add modifier classes to change text and background color on individual items.
+// Organizationally, this must come after the `:hover` states.
+
+.list-group-item-variant(success; @state-success-bg; @state-success-text);
+.list-group-item-variant(info; @state-info-bg; @state-info-text);
+.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);
+.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);
+
+
+// Custom content options
+//
+// Extra classes for creating well-formatted content within `.list-group-item`s.
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/media.less b/MVC/Content/css/themes/bootstrap-less/media.less
new file mode 100644
index 0000000..5ad22cd
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/media.less
@@ -0,0 +1,56 @@
+// Media objects
+// Source: http://stubbornella.org/content/?p=497
+// --------------------------------------------------
+
+
+// Common styles
+// -------------------------
+
+// Clear the floats
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+
+// Proper spacing between instances of .media
+.media,
+.media .media {
+ margin-top: 15px;
+}
+.media:first-child {
+ margin-top: 0;
+}
+
+// For images and videos, set to block
+.media-object {
+ display: block;
+}
+
+// Reset margins on headings for tighter default spacing
+.media-heading {
+ margin: 0 0 5px;
+}
+
+
+// Media image alignment
+// -------------------------
+
+.media {
+ > .pull-left {
+ margin-right: 10px;
+ }
+ > .pull-right {
+ margin-left: 10px;
+ }
+}
+
+
+// Media list variation
+// -------------------------
+
+// Undo default ul/ol styles
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins.less b/MVC/Content/css/themes/bootstrap-less/mixins.less
new file mode 100644
index 0000000..af4408f
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins.less
@@ -0,0 +1,39 @@
+// Mixins
+// --------------------------------------------------
+
+// Utilities
+@import "mixins/hide-text.less";
+@import "mixins/opacity.less";
+@import "mixins/image.less";
+@import "mixins/labels.less";
+@import "mixins/reset-filter.less";
+@import "mixins/resize.less";
+@import "mixins/responsive-visibility.less";
+@import "mixins/size.less";
+@import "mixins/tab-focus.less";
+@import "mixins/text-emphasis.less";
+@import "mixins/text-overflow.less";
+@import "mixins/vendor-prefixes.less";
+
+// Components
+@import "mixins/alerts.less";
+@import "mixins/buttons.less";
+@import "mixins/panels.less";
+@import "mixins/pagination.less";
+@import "mixins/list-group.less";
+@import "mixins/nav-divider.less";
+@import "mixins/forms.less";
+@import "mixins/progress-bar.less";
+@import "mixins/table-row.less";
+
+// Skins
+@import "mixins/background-variant.less";
+@import "mixins/border-radius.less";
+@import "mixins/gradients.less";
+
+// Layout
+@import "mixins/clearfix.less";
+@import "mixins/center-block.less";
+@import "mixins/nav-vertical-align.less";
+@import "mixins/grid-framework.less";
+@import "mixins/grid.less";
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/alerts.less b/MVC/Content/css/themes/bootstrap-less/mixins/alerts.less
new file mode 100644
index 0000000..396196f
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/alerts.less
@@ -0,0 +1,14 @@
+// Alerts
+
+.alert-variant(@background; @border; @text-color) {
+ background-color: @background;
+ border-color: @border;
+ color: @text-color;
+
+ hr {
+ border-top-color: darken(@border, 5%);
+ }
+ .alert-link {
+ color: darken(@text-color, 10%);
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/background-variant.less b/MVC/Content/css/themes/bootstrap-less/mixins/background-variant.less
new file mode 100644
index 0000000..556e490
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/background-variant.less
@@ -0,0 +1,8 @@
+// Contextual backgrounds
+
+.bg-variant(@color) {
+ background-color: @color;
+ a&:hover {
+ background-color: darken(@color, 10%);
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/border-radius.less b/MVC/Content/css/themes/bootstrap-less/mixins/border-radius.less
new file mode 100644
index 0000000..ca05dbf
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/border-radius.less
@@ -0,0 +1,18 @@
+// Single side border-radius
+
+.border-top-radius(@radius) {
+ border-top-right-radius: @radius;
+ border-top-left-radius: @radius;
+}
+.border-right-radius(@radius) {
+ border-bottom-right-radius: @radius;
+ border-top-right-radius: @radius;
+}
+.border-bottom-radius(@radius) {
+ border-bottom-right-radius: @radius;
+ border-bottom-left-radius: @radius;
+}
+.border-left-radius(@radius) {
+ border-bottom-left-radius: @radius;
+ border-top-left-radius: @radius;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/buttons.less b/MVC/Content/css/themes/bootstrap-less/mixins/buttons.less
new file mode 100644
index 0000000..409f8f2
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/buttons.less
@@ -0,0 +1,50 @@
+// Button variants
+//
+// Easily pump out default styles, as well as :hover, :focus, :active,
+// and disabled options for all buttons
+
+.button-variant(@color; @background; @border) {
+ color: @color;
+ background-color: @background;
+ border-color: @border;
+
+ &:hover,
+ &:focus,
+ &:active,
+ &.active,
+ .open > .dropdown-toggle& {
+ color: @color;
+ background-color: darken(@background, 10%);
+ border-color: darken(@border, 12%);
+ }
+ &:active,
+ &.active,
+ .open > .dropdown-toggle& {
+ background-image: none;
+ }
+ &.disabled,
+ &[disabled],
+ fieldset[disabled] & {
+ &,
+ &:hover,
+ &:focus,
+ &:active,
+ &.active {
+ background-color: @background;
+ border-color: @border;
+ }
+ }
+
+ .badge {
+ color: @background;
+ background-color: @color;
+ }
+}
+
+// Button sizes
+.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
+ padding: @padding-vertical @padding-horizontal;
+ font-size: @font-size;
+ line-height: @line-height;
+ border-radius: @border-radius;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/center-block.less b/MVC/Content/css/themes/bootstrap-less/mixins/center-block.less
new file mode 100644
index 0000000..d18d6de
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/center-block.less
@@ -0,0 +1,7 @@
+// Center-align a block level element
+
+.center-block() {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/clearfix.less b/MVC/Content/css/themes/bootstrap-less/mixins/clearfix.less
new file mode 100644
index 0000000..3f7a382
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/clearfix.less
@@ -0,0 +1,22 @@
+// Clearfix
+//
+// For modern browsers
+// 1. The space content is one way to avoid an Opera bug when the
+// contenteditable attribute is included anywhere else in the document.
+// Otherwise it causes space to appear at the top and bottom of elements
+// that are clearfixed.
+// 2. The use of `table` rather than `block` is only necessary if using
+// `:before` to contain the top-margins of child elements.
+//
+// Source: http://nicolasgallagher.com/micro-clearfix-hack/
+
+.clearfix() {
+ &:before,
+ &:after {
+ content: " "; // 1
+ display: table; // 2
+ }
+ &:after {
+ clear: both;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/forms.less b/MVC/Content/css/themes/bootstrap-less/mixins/forms.less
new file mode 100644
index 0000000..e36c4a8
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/forms.less
@@ -0,0 +1,81 @@
+// Form validation states
+//
+// Used in forms.less to generate the form validation CSS for warnings, errors,
+// and successes.
+
+.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {
+ // Color the label and help text
+ .help-block,
+ .control-label,
+ .radio,
+ .checkbox,
+ .radio-inline,
+ .checkbox-inline {
+ color: @text-color;
+ }
+ // Set the border and box shadow on specific inputs to match
+ .form-control {
+ border-color: @border-color;
+ .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
+ &:focus {
+ border-color: darken(@border-color, 10%);
+ @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);
+ .box-shadow(@shadow);
+ }
+ }
+ // Set validation states also for addons
+ .input-group-addon {
+ color: @text-color;
+ border-color: @border-color;
+ background-color: @background-color;
+ }
+ // Optional feedback icon
+ .form-control-feedback {
+ color: @text-color;
+ }
+}
+
+
+// Form control focus state
+//
+// Generate a customized focus state and for any input with the specified color,
+// which defaults to the `@input-border-focus` variable.
+//
+// We highly encourage you to not customize the default value, but instead use
+// this to tweak colors on an as-needed basis. This aesthetic change is based on
+// WebKit's default styles, but applicable to a wider range of browsers. Its
+// usability and accessibility should be taken into account with any change.
+//
+// Example usage: change the default blue border and shadow to white for better
+// contrast against a dark gray background.
+.form-control-focus(@color: @input-border-focus) {
+ @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
+ &:focus {
+ border-color: @color;
+ outline: 0;
+ .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
+ }
+}
+
+// Form control sizing
+//
+// Relative text size, padding, and border-radii changes for form controls. For
+// horizontal sizing, wrap controls in the predefined grid classes. `
`
+// element gets special love because it's special, and that's a fact!
+.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
+ height: @input-height;
+ padding: @padding-vertical @padding-horizontal;
+ font-size: @font-size;
+ line-height: @line-height;
+ border-radius: @border-radius;
+
+ select& {
+ height: @input-height;
+ line-height: @input-height;
+ }
+
+ textarea&,
+ select[multiple]& {
+ height: auto;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/gradients.less b/MVC/Content/css/themes/bootstrap-less/mixins/gradients.less
new file mode 100644
index 0000000..0b88a89
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/gradients.less
@@ -0,0 +1,59 @@
+// Gradients
+
+#gradient {
+
+ // Horizontal gradient, from left to right
+ //
+ // Creates two color stops, start and end, by specifying a color and position for each color stop.
+ // Color stops are not available in IE9 and below.
+ .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
+ background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+
+ background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12
+ 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+
+ background-repeat: repeat-x;
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down
+ }
+
+ // Vertical gradient, from top to bottom
+ //
+ // Creates two color stops, start and end, by specifying a color and position for each color stop.
+ // Color stops are not available in IE9 and below.
+ .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
+ background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+
+ background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12
+ 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+
+ background-repeat: repeat-x;
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down
+ }
+
+ .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {
+ background-repeat: repeat-x;
+ background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+
+ background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12
+ background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
+ }
+ .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
+ background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
+ background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
+ background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);
+ background-repeat: no-repeat;
+ 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
+ }
+ .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
+ background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
+ background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
+ background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);
+ background-repeat: no-repeat;
+ 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
+ }
+ .radial(@inner-color: #555; @outer-color: #333) {
+ background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);
+ background-image: radial-gradient(circle, @inner-color, @outer-color);
+ background-repeat: no-repeat;
+ }
+ .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {
+ background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
+ background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/grid-framework.less b/MVC/Content/css/themes/bootstrap-less/mixins/grid-framework.less
new file mode 100644
index 0000000..6317854
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/grid-framework.less
@@ -0,0 +1,91 @@
+// Framework grid generation
+//
+// Used only by Bootstrap to generate the correct number of grid classes given
+// any value of `@grid-columns`.
+
+.make-grid-columns() {
+ // Common styles for all sizes of grid columns, widths 1-12
+ .col(@index) when (@index = 1) { // initial
+ @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
+ .col((@index + 1), @item);
+ }
+ .col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo
+ @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
+ .col((@index + 1), ~"@{list}, @{item}");
+ }
+ .col(@index, @list) when (@index > @grid-columns) { // terminal
+ @{list} {
+ position: relative;
+ // Prevent columns from collapsing when empty
+ min-height: 1px;
+ // Inner gutter via padding
+ padding-left: (@grid-gutter-width / 2);
+ padding-right: (@grid-gutter-width / 2);
+ }
+ }
+ .col(1); // kickstart it
+}
+
+.float-grid-columns(@class) {
+ .col(@index) when (@index = 1) { // initial
+ @item: ~".col-@{class}-@{index}";
+ .col((@index + 1), @item);
+ }
+ .col(@index, @list) when (@index =< @grid-columns) { // general
+ @item: ~".col-@{class}-@{index}";
+ .col((@index + 1), ~"@{list}, @{item}");
+ }
+ .col(@index, @list) when (@index > @grid-columns) { // terminal
+ @{list} {
+ float: left;
+ }
+ }
+ .col(1); // kickstart it
+}
+
+.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {
+ .col-@{class}-@{index} {
+ width: percentage((@index / @grid-columns));
+ }
+}
+.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {
+ .col-@{class}-push-@{index} {
+ left: percentage((@index / @grid-columns));
+ }
+}
+.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {
+ .col-@{class}-push-0 {
+ left: auto;
+ }
+}
+.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {
+ .col-@{class}-pull-@{index} {
+ right: percentage((@index / @grid-columns));
+ }
+}
+.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {
+ .col-@{class}-pull-0 {
+ right: auto;
+ }
+}
+.calc-grid-column(@index, @class, @type) when (@type = offset) {
+ .col-@{class}-offset-@{index} {
+ margin-left: percentage((@index / @grid-columns));
+ }
+}
+
+// Basic looping in LESS
+.loop-grid-columns(@index, @class, @type) when (@index >= 0) {
+ .calc-grid-column(@index, @class, @type);
+ // next iteration
+ .loop-grid-columns((@index - 1), @class, @type);
+}
+
+// Create grid for specific class
+.make-grid(@class) {
+ .float-grid-columns(@class);
+ .loop-grid-columns(@grid-columns, @class, width);
+ .loop-grid-columns(@grid-columns, @class, pull);
+ .loop-grid-columns(@grid-columns, @class, push);
+ .loop-grid-columns(@grid-columns, @class, offset);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/grid.less b/MVC/Content/css/themes/bootstrap-less/mixins/grid.less
new file mode 100644
index 0000000..cae5eaf
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/grid.less
@@ -0,0 +1,122 @@
+// Grid system
+//
+// Generate semantic grid columns with these mixins.
+
+// Centered container element
+.container-fixed(@gutter: @grid-gutter-width) {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: (@gutter / 2);
+ padding-right: (@gutter / 2);
+ &:extend(.clearfix all);
+}
+
+// Creates a wrapper for a series of columns
+.make-row(@gutter: @grid-gutter-width) {
+ margin-left: (@gutter / -2);
+ margin-right: (@gutter / -2);
+ &:extend(.clearfix all);
+}
+
+// Generate the extra small columns
+.make-xs-column(@columns; @gutter: @grid-gutter-width) {
+ position: relative;
+ float: left;
+ width: percentage((@columns / @grid-columns));
+ min-height: 1px;
+ padding-left: (@gutter / 2);
+ padding-right: (@gutter / 2);
+}
+.make-xs-column-offset(@columns) {
+ margin-left: percentage((@columns / @grid-columns));
+}
+.make-xs-column-push(@columns) {
+ left: percentage((@columns / @grid-columns));
+}
+.make-xs-column-pull(@columns) {
+ right: percentage((@columns / @grid-columns));
+}
+
+// Generate the small columns
+.make-sm-column(@columns; @gutter: @grid-gutter-width) {
+ position: relative;
+ min-height: 1px;
+ padding-left: (@gutter / 2);
+ padding-right: (@gutter / 2);
+
+ @media (min-width: @screen-sm-min) {
+ float: left;
+ width: percentage((@columns / @grid-columns));
+ }
+}
+.make-sm-column-offset(@columns) {
+ @media (min-width: @screen-sm-min) {
+ margin-left: percentage((@columns / @grid-columns));
+ }
+}
+.make-sm-column-push(@columns) {
+ @media (min-width: @screen-sm-min) {
+ left: percentage((@columns / @grid-columns));
+ }
+}
+.make-sm-column-pull(@columns) {
+ @media (min-width: @screen-sm-min) {
+ right: percentage((@columns / @grid-columns));
+ }
+}
+
+// Generate the medium columns
+.make-md-column(@columns; @gutter: @grid-gutter-width) {
+ position: relative;
+ min-height: 1px;
+ padding-left: (@gutter / 2);
+ padding-right: (@gutter / 2);
+
+ @media (min-width: @screen-md-min) {
+ float: left;
+ width: percentage((@columns / @grid-columns));
+ }
+}
+.make-md-column-offset(@columns) {
+ @media (min-width: @screen-md-min) {
+ margin-left: percentage((@columns / @grid-columns));
+ }
+}
+.make-md-column-push(@columns) {
+ @media (min-width: @screen-md-min) {
+ left: percentage((@columns / @grid-columns));
+ }
+}
+.make-md-column-pull(@columns) {
+ @media (min-width: @screen-md-min) {
+ right: percentage((@columns / @grid-columns));
+ }
+}
+
+// Generate the large columns
+.make-lg-column(@columns; @gutter: @grid-gutter-width) {
+ position: relative;
+ min-height: 1px;
+ padding-left: (@gutter / 2);
+ padding-right: (@gutter / 2);
+
+ @media (min-width: @screen-lg-min) {
+ float: left;
+ width: percentage((@columns / @grid-columns));
+ }
+}
+.make-lg-column-offset(@columns) {
+ @media (min-width: @screen-lg-min) {
+ margin-left: percentage((@columns / @grid-columns));
+ }
+}
+.make-lg-column-push(@columns) {
+ @media (min-width: @screen-lg-min) {
+ left: percentage((@columns / @grid-columns));
+ }
+}
+.make-lg-column-pull(@columns) {
+ @media (min-width: @screen-lg-min) {
+ right: percentage((@columns / @grid-columns));
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/hide-text.less b/MVC/Content/css/themes/bootstrap-less/mixins/hide-text.less
new file mode 100644
index 0000000..c2315e5
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/hide-text.less
@@ -0,0 +1,21 @@
+// CSS image replacement
+//
+// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for
+// mixins being reused as classes with the same name, this doesn't hold up. As
+// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.
+//
+// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
+
+// Deprecated as of v3.0.1 (will be removed in v4)
+.hide-text() {
+ font: ~"0/0" a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+// New mixin to use as of v3.0.1
+.text-hide() {
+ .hide-text();
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/image.less b/MVC/Content/css/themes/bootstrap-less/mixins/image.less
new file mode 100644
index 0000000..5d2cccb
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/image.less
@@ -0,0 +1,34 @@
+// Image Mixins
+// - Responsive image
+// - Retina image
+
+
+// Responsive image
+//
+// Keep images from scaling beyond the width of their parents.
+.img-responsive(@display: block) {
+ display: @display;
+ width: 100% \9; // Force IE10 and below to size SVG images correctly
+ max-width: 100%; // Part 1: Set a maximum relative to the parent
+ height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
+}
+
+
+// Retina image
+//
+// Short retina mixin for setting background-image and -size. Note that the
+// spelling of `min--moz-device-pixel-ratio` is intentional.
+.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {
+ background-image: url("@{file-1x}");
+
+ @media
+ only screen and (-webkit-min-device-pixel-ratio: 2),
+ only screen and ( min--moz-device-pixel-ratio: 2),
+ only screen and ( -o-min-device-pixel-ratio: 2/1),
+ only screen and ( min-device-pixel-ratio: 2),
+ only screen and ( min-resolution: 192dpi),
+ only screen and ( min-resolution: 2dppx) {
+ background-image: url("@{file-2x}");
+ background-size: @width-1x @height-1x;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/labels.less b/MVC/Content/css/themes/bootstrap-less/mixins/labels.less
new file mode 100644
index 0000000..6f9e490
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/labels.less
@@ -0,0 +1,12 @@
+// Labels
+
+.label-variant(@color) {
+ background-color: @color;
+
+ &[href] {
+ &:hover,
+ &:focus {
+ background-color: darken(@color, 10%);
+ }
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/list-group.less b/MVC/Content/css/themes/bootstrap-less/mixins/list-group.less
new file mode 100644
index 0000000..8b5b065
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/list-group.less
@@ -0,0 +1,29 @@
+// List Groups
+
+.list-group-item-variant(@state; @background; @color) {
+ .list-group-item-@{state} {
+ color: @color;
+ background-color: @background;
+
+ a& {
+ color: @color;
+
+ .list-group-item-heading {
+ color: inherit;
+ }
+
+ &:hover,
+ &:focus {
+ color: @color;
+ background-color: darken(@background, 5%);
+ }
+ &.active,
+ &.active:hover,
+ &.active:focus {
+ color: #fff;
+ background-color: @color;
+ border-color: @color;
+ }
+ }
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/nav-divider.less b/MVC/Content/css/themes/bootstrap-less/mixins/nav-divider.less
new file mode 100644
index 0000000..feb1e9e
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/nav-divider.less
@@ -0,0 +1,10 @@
+// Horizontal dividers
+//
+// Dividers (basically an hr) within dropdowns and nav lists
+
+.nav-divider(@color: #e5e5e5) {
+ height: 1px;
+ margin: ((@line-height-computed / 2) - 1) 0;
+ overflow: hidden;
+ background-color: @color;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/nav-vertical-align.less b/MVC/Content/css/themes/bootstrap-less/mixins/nav-vertical-align.less
new file mode 100644
index 0000000..d458c78
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/nav-vertical-align.less
@@ -0,0 +1,9 @@
+// Navbar vertical align
+//
+// Vertically center elements in the navbar.
+// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
+
+.navbar-vertical-align(@element-height) {
+ margin-top: ((@navbar-height - @element-height) / 2);
+ margin-bottom: ((@navbar-height - @element-height) / 2);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/opacity.less b/MVC/Content/css/themes/bootstrap-less/mixins/opacity.less
new file mode 100644
index 0000000..33ed25c
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/opacity.less
@@ -0,0 +1,8 @@
+// Opacity
+
+.opacity(@opacity) {
+ opacity: @opacity;
+ // IE8 filter
+ @opacity-ie: (@opacity * 100);
+ filter: ~"alpha(opacity=@{opacity-ie})";
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/pagination.less b/MVC/Content/css/themes/bootstrap-less/mixins/pagination.less
new file mode 100644
index 0000000..7deb505
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/pagination.less
@@ -0,0 +1,23 @@
+// Pagination
+
+.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {
+ > li {
+ > a,
+ > span {
+ padding: @padding-vertical @padding-horizontal;
+ font-size: @font-size;
+ }
+ &:first-child {
+ > a,
+ > span {
+ .border-left-radius(@border-radius);
+ }
+ }
+ &:last-child {
+ > a,
+ > span {
+ .border-right-radius(@border-radius);
+ }
+ }
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/panels.less b/MVC/Content/css/themes/bootstrap-less/mixins/panels.less
new file mode 100644
index 0000000..49ee10d
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/panels.less
@@ -0,0 +1,24 @@
+// Panels
+
+.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {
+ border-color: @border;
+
+ & > .panel-heading {
+ color: @heading-text-color;
+ background-color: @heading-bg-color;
+ border-color: @heading-border;
+
+ + .panel-collapse > .panel-body {
+ border-top-color: @border;
+ }
+ .badge {
+ color: @heading-bg-color;
+ background-color: @heading-text-color;
+ }
+ }
+ & > .panel-footer {
+ + .panel-collapse > .panel-body {
+ border-bottom-color: @border;
+ }
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/progress-bar.less b/MVC/Content/css/themes/bootstrap-less/mixins/progress-bar.less
new file mode 100644
index 0000000..f07996a
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/progress-bar.less
@@ -0,0 +1,10 @@
+// Progress bars
+
+.progress-bar-variant(@color) {
+ background-color: @color;
+
+ // Deprecated parent class requirement as of v3.2.0
+ .progress-striped & {
+ #gradient > .striped();
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/reset-filter.less b/MVC/Content/css/themes/bootstrap-less/mixins/reset-filter.less
new file mode 100644
index 0000000..68cdb5e
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/reset-filter.less
@@ -0,0 +1,8 @@
+// Reset filters for IE
+//
+// When you need to remove a gradient background, do not forget to use this to reset
+// the IE filter for IE9 and below.
+
+.reset-filter() {
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/resize.less b/MVC/Content/css/themes/bootstrap-less/mixins/resize.less
new file mode 100644
index 0000000..3acd3af
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/resize.less
@@ -0,0 +1,6 @@
+// Resize anything
+
+.resizable(@direction) {
+ resize: @direction; // Options: horizontal, vertical, both
+ overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/responsive-visibility.less b/MVC/Content/css/themes/bootstrap-less/mixins/responsive-visibility.less
new file mode 100644
index 0000000..f7951c3
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/responsive-visibility.less
@@ -0,0 +1,15 @@
+// Responsive utilities
+
+//
+// More easily include all the states for responsive-utilities.less.
+.responsive-visibility() {
+ display: block !important;
+ table& { display: table; }
+ tr& { display: table-row !important; }
+ th&,
+ td& { display: table-cell !important; }
+}
+
+.responsive-invisibility() {
+ display: none !important;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/size.less b/MVC/Content/css/themes/bootstrap-less/mixins/size.less
new file mode 100644
index 0000000..a8be650
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/size.less
@@ -0,0 +1,10 @@
+// Sizing shortcuts
+
+.size(@width; @height) {
+ width: @width;
+ height: @height;
+}
+
+.square(@size) {
+ .size(@size; @size);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/tab-focus.less b/MVC/Content/css/themes/bootstrap-less/mixins/tab-focus.less
new file mode 100644
index 0000000..1f1f05a
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/tab-focus.less
@@ -0,0 +1,9 @@
+// WebKit-style focus
+
+.tab-focus() {
+ // Default
+ outline: thin dotted;
+ // WebKit
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/table-row.less b/MVC/Content/css/themes/bootstrap-less/mixins/table-row.less
new file mode 100644
index 0000000..0f287f1
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/table-row.less
@@ -0,0 +1,28 @@
+// Tables
+
+.table-row-variant(@state; @background) {
+ // Exact selectors below required to override `.table-striped` and prevent
+ // inheritance to nested tables.
+ .table > thead > tr,
+ .table > tbody > tr,
+ .table > tfoot > tr {
+ > td.@{state},
+ > th.@{state},
+ &.@{state} > td,
+ &.@{state} > th {
+ background-color: @background;
+ }
+ }
+
+ // Hover states for `.table-hover`
+ // Note: this is not available for cells or rows within `thead` or `tfoot`.
+ .table-hover > tbody > tr {
+ > td.@{state}:hover,
+ > th.@{state}:hover,
+ &.@{state}:hover > td,
+ &:hover > .@{state},
+ &.@{state}:hover > th {
+ background-color: darken(@background, 5%);
+ }
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/text-emphasis.less b/MVC/Content/css/themes/bootstrap-less/mixins/text-emphasis.less
new file mode 100644
index 0000000..0868ef9
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/text-emphasis.less
@@ -0,0 +1,8 @@
+// Typography
+
+.text-emphasis-variant(@color) {
+ color: @color;
+ a&:hover {
+ color: darken(@color, 10%);
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/text-overflow.less b/MVC/Content/css/themes/bootstrap-less/mixins/text-overflow.less
new file mode 100644
index 0000000..c11ad2f
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/text-overflow.less
@@ -0,0 +1,8 @@
+// Text overflow
+// Requires inline-block or block for proper styling
+
+.text-overflow() {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/mixins/vendor-prefixes.less b/MVC/Content/css/themes/bootstrap-less/mixins/vendor-prefixes.less
new file mode 100644
index 0000000..e2008c8
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/mixins/vendor-prefixes.less
@@ -0,0 +1,224 @@
+// Vendor Prefixes
+//
+// All vendor mixins are deprecated as of v3.2.0 due to the introduction of
+// Autoprefixer in our Gruntfile. They will be removed in v4.
+
+// - Animations
+// - Backface visibility
+// - Box shadow
+// - Box sizing
+// - Content columns
+// - Hyphens
+// - Placeholder text
+// - Transformations
+// - Transitions
+// - User Select
+
+
+// Animations
+.animation(@animation) {
+ -webkit-animation: @animation;
+ -o-animation: @animation;
+ animation: @animation;
+}
+.animation-name(@name) {
+ -webkit-animation-name: @name;
+ animation-name: @name;
+}
+.animation-duration(@duration) {
+ -webkit-animation-duration: @duration;
+ animation-duration: @duration;
+}
+.animation-timing-function(@timing-function) {
+ -webkit-animation-timing-function: @timing-function;
+ animation-timing-function: @timing-function;
+}
+.animation-delay(@delay) {
+ -webkit-animation-delay: @delay;
+ animation-delay: @delay;
+}
+.animation-iteration-count(@iteration-count) {
+ -webkit-animation-iteration-count: @iteration-count;
+ animation-iteration-count: @iteration-count;
+}
+.animation-direction(@direction) {
+ -webkit-animation-direction: @direction;
+ animation-direction: @direction;
+}
+.animation-fill-mode(@fill-mode) {
+ -webkit-animation-fill-mode: @fill-mode;
+ animation-fill-mode: @fill-mode;
+}
+
+// Backface visibility
+// Prevent browsers from flickering when using CSS 3D transforms.
+// Default value is `visible`, but can be changed to `hidden`
+
+.backface-visibility(@visibility){
+ -webkit-backface-visibility: @visibility;
+ -moz-backface-visibility: @visibility;
+ backface-visibility: @visibility;
+}
+
+// Drop shadows
+//
+// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
+// supported browsers that have box shadow capabilities now support it.
+
+.box-shadow(@shadow) {
+ -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
+ box-shadow: @shadow;
+}
+
+// Box sizing
+.box-sizing(@boxmodel) {
+ -webkit-box-sizing: @boxmodel;
+ -moz-box-sizing: @boxmodel;
+ box-sizing: @boxmodel;
+}
+
+// CSS3 Content Columns
+.content-columns(@column-count; @column-gap: @grid-gutter-width) {
+ -webkit-column-count: @column-count;
+ -moz-column-count: @column-count;
+ column-count: @column-count;
+ -webkit-column-gap: @column-gap;
+ -moz-column-gap: @column-gap;
+ column-gap: @column-gap;
+}
+
+// Optional hyphenation
+.hyphens(@mode: auto) {
+ word-wrap: break-word;
+ -webkit-hyphens: @mode;
+ -moz-hyphens: @mode;
+ -ms-hyphens: @mode; // IE10+
+ -o-hyphens: @mode;
+ hyphens: @mode;
+}
+
+// Placeholder text
+.placeholder(@color: @input-color-placeholder) {
+ &::-moz-placeholder { color: @color; // Firefox
+ opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526
+ &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+
+ &::-webkit-input-placeholder { color: @color; } // Safari and Chrome
+}
+
+// Transformations
+.scale(@ratio) {
+ -webkit-transform: scale(@ratio);
+ -ms-transform: scale(@ratio); // IE9 only
+ -o-transform: scale(@ratio);
+ transform: scale(@ratio);
+}
+.scale(@ratioX; @ratioY) {
+ -webkit-transform: scale(@ratioX, @ratioY);
+ -ms-transform: scale(@ratioX, @ratioY); // IE9 only
+ -o-transform: scale(@ratioX, @ratioY);
+ transform: scale(@ratioX, @ratioY);
+}
+.scaleX(@ratio) {
+ -webkit-transform: scaleX(@ratio);
+ -ms-transform: scaleX(@ratio); // IE9 only
+ -o-transform: scaleX(@ratio);
+ transform: scaleX(@ratio);
+}
+.scaleY(@ratio) {
+ -webkit-transform: scaleY(@ratio);
+ -ms-transform: scaleY(@ratio); // IE9 only
+ -o-transform: scaleY(@ratio);
+ transform: scaleY(@ratio);
+}
+.skew(@x; @y) {
+ -webkit-transform: skewX(@x) skewY(@y);
+ -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
+ -o-transform: skewX(@x) skewY(@y);
+ transform: skewX(@x) skewY(@y);
+}
+.translate(@x; @y) {
+ -webkit-transform: translate(@x, @y);
+ -ms-transform: translate(@x, @y); // IE9 only
+ -o-transform: translate(@x, @y);
+ transform: translate(@x, @y);
+}
+.translate3d(@x; @y; @z) {
+ -webkit-transform: translate3d(@x, @y, @z);
+ transform: translate3d(@x, @y, @z);
+}
+.rotate(@degrees) {
+ -webkit-transform: rotate(@degrees);
+ -ms-transform: rotate(@degrees); // IE9 only
+ -o-transform: rotate(@degrees);
+ transform: rotate(@degrees);
+}
+.rotateX(@degrees) {
+ -webkit-transform: rotateX(@degrees);
+ -ms-transform: rotateX(@degrees); // IE9 only
+ -o-transform: rotateX(@degrees);
+ transform: rotateX(@degrees);
+}
+.rotateY(@degrees) {
+ -webkit-transform: rotateY(@degrees);
+ -ms-transform: rotateY(@degrees); // IE9 only
+ -o-transform: rotateY(@degrees);
+ transform: rotateY(@degrees);
+}
+.perspective(@perspective) {
+ -webkit-perspective: @perspective;
+ -moz-perspective: @perspective;
+ perspective: @perspective;
+}
+.perspective-origin(@perspective) {
+ -webkit-perspective-origin: @perspective;
+ -moz-perspective-origin: @perspective;
+ perspective-origin: @perspective;
+}
+.transform-origin(@origin) {
+ -webkit-transform-origin: @origin;
+ -moz-transform-origin: @origin;
+ -ms-transform-origin: @origin; // IE9 only
+ transform-origin: @origin;
+}
+
+
+// Transitions
+
+.transition(@transition) {
+ -webkit-transition: @transition;
+ -o-transition: @transition;
+ transition: @transition;
+}
+.transition-property(@transition-property) {
+ -webkit-transition-property: @transition-property;
+ transition-property: @transition-property;
+}
+.transition-delay(@transition-delay) {
+ -webkit-transition-delay: @transition-delay;
+ transition-delay: @transition-delay;
+}
+.transition-duration(@transition-duration) {
+ -webkit-transition-duration: @transition-duration;
+ transition-duration: @transition-duration;
+}
+.transition-timing-function(@timing-function) {
+ -webkit-transition-timing-function: @timing-function;
+ transition-timing-function: @timing-function;
+}
+.transition-transform(@transition) {
+ -webkit-transition: -webkit-transform @transition;
+ -moz-transition: -moz-transform @transition;
+ -o-transition: -o-transform @transition;
+ transition: transform @transition;
+}
+
+
+// User select
+// For selecting text on the page
+
+.user-select(@select) {
+ -webkit-user-select: @select;
+ -moz-user-select: @select;
+ -ms-user-select: @select; // IE10+
+ user-select: @select;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/modals.less b/MVC/Content/css/themes/bootstrap-less/modals.less
new file mode 100644
index 0000000..6da50ba
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/modals.less
@@ -0,0 +1,150 @@
+//
+// Modals
+// --------------------------------------------------
+
+// .modal-open - body class for killing the scroll
+// .modal - container to scroll within
+// .modal-dialog - positioning shell for the actual modal
+// .modal-content - actual modal w/ bg and corners and shit
+
+// Kill the scroll on the body
+.modal-open {
+ overflow: hidden;
+}
+
+// Container that the modal scrolls within
+.modal {
+ display: none;
+ overflow: hidden;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: @zindex-modal;
+ -webkit-overflow-scrolling: touch;
+
+ // Prevent Chrome on Windows from adding a focus outline. For details, see
+ // https://github.com/twbs/bootstrap/pull/10951.
+ outline: 0;
+
+ // When fading in the modal, animate it to slide down
+ &.fade .modal-dialog {
+ .translate3d(0, -25%, 0);
+ .transition-transform(~"0.3s ease-out");
+ }
+ &.in .modal-dialog { .translate3d(0, 0, 0) }
+}
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+// Shell div to position the modal with bottom padding
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+
+// Actual modal
+.modal-content {
+ position: relative;
+ background-color: @modal-content-bg;
+ border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
+ border: 1px solid @modal-content-border-color;
+ border-radius: @border-radius-large;
+ .box-shadow(0 3px 9px rgba(0,0,0,.5));
+ background-clip: padding-box;
+ // Remove focus outline from opened modal
+ outline: 0;
+}
+
+// Modal background
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: @zindex-modal-background;
+ background-color: @modal-backdrop-bg;
+ // Fade for backdrop
+ &.fade { .opacity(0); }
+ &.in { .opacity(@modal-backdrop-opacity); }
+}
+
+// Modal header
+// Top section of the modal w/ title and dismiss
+.modal-header {
+ padding: @modal-title-padding;
+ border-bottom: 1px solid @modal-header-border-color;
+ min-height: (@modal-title-padding + @modal-title-line-height);
+}
+// Close icon
+.modal-header .close {
+ margin-top: -2px;
+}
+
+// Title text within header
+.modal-title {
+ margin: 0;
+ line-height: @modal-title-line-height;
+}
+
+// Modal body
+// Where all modal content resides (sibling of .modal-header and .modal-footer)
+.modal-body {
+ position: relative;
+ padding: @modal-inner-padding;
+}
+
+// Footer (for actions)
+.modal-footer {
+ padding: @modal-inner-padding;
+ text-align: right; // right align buttons
+ border-top: 1px solid @modal-footer-border-color;
+ &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons
+
+ // Properly space out buttons
+ .btn + .btn {
+ margin-left: 5px;
+ margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
+ }
+ // but override that for button groups
+ .btn-group .btn + .btn {
+ margin-left: -1px;
+ }
+ // and override it for block buttons as well
+ .btn-block + .btn-block {
+ margin-left: 0;
+ }
+}
+
+// Measure scrollbar width for padding body during modal show/hide
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll;
+}
+
+// Scale up the modal
+@media (min-width: @screen-sm-min) {
+ // Automatically set modal's width for larger viewports
+ .modal-dialog {
+ width: @modal-md;
+ margin: 30px auto;
+ }
+ .modal-content {
+ .box-shadow(0 5px 15px rgba(0,0,0,.5));
+ }
+
+ // Modal sizes
+ .modal-sm { width: @modal-sm; }
+}
+
+@media (min-width: @screen-md-min) {
+ .modal-lg { width: @modal-lg; }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/navbar.less b/MVC/Content/css/themes/bootstrap-less/navbar.less
new file mode 100644
index 0000000..55bfd29
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/navbar.less
@@ -0,0 +1,655 @@
+//
+// Navbars
+// --------------------------------------------------
+
+
+// Wrapper and base class
+//
+// Provide a static navbar from which we expand to create full-width, fixed, and
+// other navbar variations.
+
+.navbar {
+ position: relative;
+ min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)
+ margin-bottom: @navbar-margin-bottom;
+ border: 1px solid transparent;
+
+ // Prevent floats from breaking the navbar
+ &:extend(.clearfix all);
+
+ @media (min-width: @grid-float-breakpoint) {
+ border-radius: @navbar-border-radius;
+ }
+}
+
+
+// Navbar heading
+//
+// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy
+// styling of responsive aspects.
+
+.navbar-header {
+ &:extend(.clearfix all);
+
+ @media (min-width: @grid-float-breakpoint) {
+ float: left;
+ }
+}
+
+
+// Navbar collapse (body)
+//
+// Group your navbar content into this for easy collapsing and expanding across
+// various device sizes. By default, this content is collapsed when <768px, but
+// will expand past that for a horizontal display.
+//
+// To start (on mobile devices) the navbar links, forms, and buttons are stacked
+// vertically and include a `max-height` to overflow in case you have too much
+// content for the user's viewport.
+
+.navbar-collapse {
+ overflow-x: visible;
+ padding-right: @navbar-padding-horizontal;
+ padding-left: @navbar-padding-horizontal;
+ border-top: 1px solid transparent;
+ box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+ &:extend(.clearfix all);
+ -webkit-overflow-scrolling: touch;
+
+ &.in {
+ overflow-y: auto;
+ }
+
+ @media (min-width: @grid-float-breakpoint) {
+ width: auto;
+ border-top: 0;
+ box-shadow: none;
+
+ &.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0; // Override default setting
+ overflow: visible !important;
+ }
+
+ &.in {
+ overflow-y: visible;
+ }
+
+ // Undo the collapse side padding for navbars with containers to ensure
+ // alignment of right-aligned contents.
+ .navbar-fixed-top &,
+ .navbar-static-top &,
+ .navbar-fixed-bottom & {
+ padding-left: 0;
+ padding-right: 0;
+ }
+ }
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ .navbar-collapse {
+ max-height: @navbar-collapse-max-height;
+
+ @media (max-width: @screen-xs-min) and (orientation: landscape) {
+ max-height: 200px;
+ }
+ }
+}
+
+
+// Both navbar header and collapse
+//
+// When a container is present, change the behavior of the header and collapse.
+
+.container,
+.container-fluid {
+ > .navbar-header,
+ > .navbar-collapse {
+ margin-right: -@navbar-padding-horizontal;
+ margin-left: -@navbar-padding-horizontal;
+
+ @media (min-width: @grid-float-breakpoint) {
+ margin-right: 0;
+ margin-left: 0;
+ }
+ }
+}
+
+
+//
+// Navbar alignment options
+//
+// Display the navbar across the entirety of the page or fixed it to the top or
+// bottom of the page.
+
+// Static top (unfixed, but 100% wide) navbar
+.navbar-static-top {
+ z-index: @zindex-navbar;
+ border-width: 0 0 1px;
+
+ @media (min-width: @grid-float-breakpoint) {
+ border-radius: 0;
+ }
+}
+
+// Fix the top/bottom navbars when screen real estate supports it
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: @zindex-navbar-fixed;
+ .translate3d(0, 0, 0);
+
+ // Undo the rounded corners
+ @media (min-width: @grid-float-breakpoint) {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0; // override .navbar defaults
+ border-width: 1px 0 0;
+}
+
+
+// Brand/project name
+
+.navbar-brand {
+ float: left;
+ padding: @navbar-padding-vertical @navbar-padding-horizontal;
+ font-size: @font-size-large;
+ line-height: @line-height-computed;
+ height: @navbar-height;
+
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ }
+
+ @media (min-width: @grid-float-breakpoint) {
+ .navbar > .container &,
+ .navbar > .container-fluid & {
+ margin-left: -@navbar-padding-horizontal;
+ }
+ }
+}
+
+
+// Navbar toggle
+//
+// Custom button for toggling the `.navbar-collapse`, powered by the collapse
+// JavaScript plugin.
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ margin-right: @navbar-padding-horizontal;
+ padding: 9px 10px;
+ .navbar-vertical-align(34px);
+ background-color: transparent;
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
+ border: 1px solid transparent;
+ border-radius: @border-radius-base;
+
+ // We remove the `outline` here, but later compensate by attaching `:hover`
+ // styles to `:focus`.
+ &:focus {
+ outline: 0;
+ }
+
+ // Bars
+ .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+ }
+ .icon-bar + .icon-bar {
+ margin-top: 4px;
+ }
+
+ @media (min-width: @grid-float-breakpoint) {
+ display: none;
+ }
+}
+
+
+// Navbar nav links
+//
+// Builds on top of the `.nav` components with its own modifier class to make
+// the nav the full height of the horizontal nav (above 768px).
+
+.navbar-nav {
+ margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;
+
+ > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: @line-height-computed;
+ }
+
+ @media (max-width: @grid-float-breakpoint-max) {
+ // Dropdowns get custom display when collapsed
+ .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ box-shadow: none;
+ > li > a,
+ .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+ > li > a {
+ line-height: @line-height-computed;
+ &:hover,
+ &:focus {
+ background-image: none;
+ }
+ }
+ }
+ }
+
+ // Uncollapse the nav
+ @media (min-width: @grid-float-breakpoint) {
+ float: left;
+ margin: 0;
+
+ > li {
+ float: left;
+ > a {
+ padding-top: @navbar-padding-vertical;
+ padding-bottom: @navbar-padding-vertical;
+ }
+ }
+
+ &.navbar-right:last-child {
+ margin-right: -@navbar-padding-horizontal;
+ }
+ }
+}
+
+
+// Component alignment
+//
+// Repurpose the pull utilities as their own navbar utilities to avoid specificity
+// issues with parents and chaining. Only do this when the navbar is uncollapsed
+// though so that navbar contents properly stack and align in mobile.
+
+@media (min-width: @grid-float-breakpoint) {
+ .navbar-left { .pull-left(); }
+ .navbar-right { .pull-right(); }
+}
+
+
+// Navbar form
+//
+// Extension of the `.form-inline` with some extra flavor for optimum display in
+// our navbars.
+
+.navbar-form {
+ margin-left: -@navbar-padding-horizontal;
+ margin-right: -@navbar-padding-horizontal;
+ padding: 10px @navbar-padding-horizontal;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
+ .box-shadow(@shadow);
+
+ // Mixin behavior for optimum display
+ .form-inline();
+
+ .form-group {
+ @media (max-width: @grid-float-breakpoint-max) {
+ margin-bottom: 5px;
+ }
+ }
+
+ // Vertically center in expanded, horizontal navbar
+ .navbar-vertical-align(@input-height-base);
+
+ // Undo 100% width for pull classes
+ @media (min-width: @grid-float-breakpoint) {
+ width: auto;
+ border: 0;
+ margin-left: 0;
+ margin-right: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ .box-shadow(none);
+
+ // Outdent the form if last child to line up with content down the page
+ &.navbar-right:last-child {
+ margin-right: -@navbar-padding-horizontal;
+ }
+ }
+}
+
+
+// Dropdown menus
+
+// Menu position and menu carets
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ .border-top-radius(0);
+}
+// Menu position and menu caret support for dropups via extra dropup class
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ .border-bottom-radius(0);
+}
+
+
+// Buttons in navbars
+//
+// Vertically center a button within a navbar (when *not* in a form).
+
+.navbar-btn {
+ .navbar-vertical-align(@input-height-base);
+
+ &.btn-sm {
+ .navbar-vertical-align(@input-height-small);
+ }
+ &.btn-xs {
+ .navbar-vertical-align(22);
+ }
+}
+
+
+// Text in navbars
+//
+// Add a class to make any element properly align itself vertically within the navbars.
+
+.navbar-text {
+ .navbar-vertical-align(@line-height-computed);
+
+ @media (min-width: @grid-float-breakpoint) {
+ float: left;
+ margin-left: @navbar-padding-horizontal;
+ margin-right: @navbar-padding-horizontal;
+
+ // Outdent the form if last child to line up with content down the page
+ &.navbar-right:last-child {
+ margin-right: 0;
+ }
+ }
+}
+
+// Alternate navbars
+// --------------------------------------------------
+
+// Default navbar
+.navbar-default {
+ background-color: @navbar-default-bg;
+ border-color: @navbar-default-border;
+
+ .navbar-brand {
+ color: @navbar-default-brand-color;
+ &:hover,
+ &:focus {
+ color: @navbar-default-brand-hover-color;
+ background-color: @navbar-default-brand-hover-bg;
+ }
+ }
+
+ .navbar-text {
+ color: @navbar-default-color;
+ }
+
+ .navbar-nav {
+ > li > a {
+ color: @navbar-default-link-color;
+
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-hover-color;
+ background-color: @navbar-default-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-active-color;
+ background-color: @navbar-default-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-disabled-color;
+ background-color: @navbar-default-link-disabled-bg;
+ }
+ }
+ }
+
+ .navbar-toggle {
+ border-color: @navbar-default-toggle-border-color;
+ &:hover,
+ &:focus {
+ background-color: @navbar-default-toggle-hover-bg;
+ }
+ .icon-bar {
+ background-color: @navbar-default-toggle-icon-bar-bg;
+ }
+ }
+
+ .navbar-collapse,
+ .navbar-form {
+ border-color: @navbar-default-border;
+ }
+
+ // Dropdown menu items
+ .navbar-nav {
+ // Remove background color from open dropdown
+ > .open > a {
+ &,
+ &:hover,
+ &:focus {
+ background-color: @navbar-default-link-active-bg;
+ color: @navbar-default-link-active-color;
+ }
+ }
+
+ @media (max-width: @grid-float-breakpoint-max) {
+ // Dropdowns get custom display when collapsed
+ .open .dropdown-menu {
+ > li > a {
+ color: @navbar-default-link-color;
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-hover-color;
+ background-color: @navbar-default-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-active-color;
+ background-color: @navbar-default-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-disabled-color;
+ background-color: @navbar-default-link-disabled-bg;
+ }
+ }
+ }
+ }
+ }
+
+
+ // Links in navbars
+ //
+ // Add a class to ensure links outside the navbar nav are colored correctly.
+
+ .navbar-link {
+ color: @navbar-default-link-color;
+ &:hover {
+ color: @navbar-default-link-hover-color;
+ }
+ }
+
+ .btn-link {
+ color: @navbar-default-link-color;
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-hover-color;
+ }
+ &[disabled],
+ fieldset[disabled] & {
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-disabled-color;
+ }
+ }
+ }
+}
+
+// Inverse navbar
+
+.navbar-inverse {
+ background-color: @navbar-inverse-bg;
+ border-color: @navbar-inverse-border;
+
+ .navbar-brand {
+ color: @navbar-inverse-brand-color;
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-brand-hover-color;
+ background-color: @navbar-inverse-brand-hover-bg;
+ }
+ }
+
+ .navbar-text {
+ color: @navbar-inverse-color;
+ }
+
+ .navbar-nav {
+ > li > a {
+ color: @navbar-inverse-link-color;
+
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-hover-color;
+ background-color: @navbar-inverse-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-active-color;
+ background-color: @navbar-inverse-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-disabled-color;
+ background-color: @navbar-inverse-link-disabled-bg;
+ }
+ }
+ }
+
+ // Darken the responsive nav toggle
+ .navbar-toggle {
+ border-color: @navbar-inverse-toggle-border-color;
+ &:hover,
+ &:focus {
+ background-color: @navbar-inverse-toggle-hover-bg;
+ }
+ .icon-bar {
+ background-color: @navbar-inverse-toggle-icon-bar-bg;
+ }
+ }
+
+ .navbar-collapse,
+ .navbar-form {
+ border-color: darken(@navbar-inverse-bg, 7%);
+ }
+
+ // Dropdowns
+ .navbar-nav {
+ > .open > a {
+ &,
+ &:hover,
+ &:focus {
+ background-color: @navbar-inverse-link-active-bg;
+ color: @navbar-inverse-link-active-color;
+ }
+ }
+
+ @media (max-width: @grid-float-breakpoint-max) {
+ // Dropdowns get custom display
+ .open .dropdown-menu {
+ > .dropdown-header {
+ border-color: @navbar-inverse-border;
+ }
+ .divider {
+ background-color: @navbar-inverse-border;
+ }
+ > li > a {
+ color: @navbar-inverse-link-color;
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-hover-color;
+ background-color: @navbar-inverse-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-active-color;
+ background-color: @navbar-inverse-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-disabled-color;
+ background-color: @navbar-inverse-link-disabled-bg;
+ }
+ }
+ }
+ }
+ }
+
+ .navbar-link {
+ color: @navbar-inverse-link-color;
+ &:hover {
+ color: @navbar-inverse-link-hover-color;
+ }
+ }
+
+ .btn-link {
+ color: @navbar-inverse-link-color;
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-hover-color;
+ }
+ &[disabled],
+ fieldset[disabled] & {
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-disabled-color;
+ }
+ }
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/navs.less b/MVC/Content/css/themes/bootstrap-less/navs.less
new file mode 100644
index 0000000..98a6430
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/navs.less
@@ -0,0 +1,242 @@
+//
+// Navs
+// --------------------------------------------------
+
+
+// Base class
+// --------------------------------------------------
+
+.nav {
+ margin-bottom: 0;
+ padding-left: 0; // Override default ul/ol
+ list-style: none;
+ &:extend(.clearfix all);
+
+ > li {
+ position: relative;
+ display: block;
+
+ > a {
+ position: relative;
+ display: block;
+ padding: @nav-link-padding;
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ background-color: @nav-link-hover-bg;
+ }
+ }
+
+ // Disabled state sets text to gray and nukes hover/tab effects
+ &.disabled > a {
+ color: @nav-disabled-link-color;
+
+ &:hover,
+ &:focus {
+ color: @nav-disabled-link-hover-color;
+ text-decoration: none;
+ background-color: transparent;
+ cursor: not-allowed;
+ }
+ }
+ }
+
+ // Open dropdowns
+ .open > a {
+ &,
+ &:hover,
+ &:focus {
+ background-color: @nav-link-hover-bg;
+ border-color: @link-color;
+ }
+ }
+
+ // Nav dividers (deprecated with v3.0.1)
+ //
+ // This should have been removed in v3 with the dropping of `.nav-list`, but
+ // we missed it. We don't currently support this anywhere, but in the interest
+ // of maintaining backward compatibility in case you use it, it's deprecated.
+ .nav-divider {
+ .nav-divider();
+ }
+
+ // Prevent IE8 from misplacing imgs
+ //
+ // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
+ > li > a > img {
+ max-width: none;
+ }
+}
+
+
+// Tabs
+// -------------------------
+
+// Give the tabs something to sit on
+.nav-tabs {
+ border-bottom: 1px solid @nav-tabs-border-color;
+ > li {
+ float: left;
+ // Make the list-items overlay the bottom border
+ margin-bottom: -1px;
+
+ // Actual tabs (as links)
+ > a {
+ margin-right: 2px;
+ line-height: @line-height-base;
+ border: 1px solid transparent;
+ border-radius: @border-radius-base @border-radius-base 0 0;
+ &:hover {
+ border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;
+ }
+ }
+
+ // Active state, and its :hover to override normal :hover
+ &.active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @nav-tabs-active-link-hover-color;
+ background-color: @nav-tabs-active-link-hover-bg;
+ border: 1px solid @nav-tabs-active-link-hover-border-color;
+ border-bottom-color: transparent;
+ cursor: default;
+ }
+ }
+ }
+ // pulling this in mainly for less shorthand
+ &.nav-justified {
+ .nav-justified();
+ .nav-tabs-justified();
+ }
+}
+
+
+// Pills
+// -------------------------
+.nav-pills {
+ > li {
+ float: left;
+
+ // Links rendered as pills
+ > a {
+ border-radius: @nav-pills-border-radius;
+ }
+ + li {
+ margin-left: 2px;
+ }
+
+ // Active state
+ &.active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @nav-pills-active-link-hover-color;
+ background-color: @nav-pills-active-link-hover-bg;
+ }
+ }
+ }
+}
+
+
+// Stacked pills
+.nav-stacked {
+ > li {
+ float: none;
+ + li {
+ margin-top: 2px;
+ margin-left: 0; // no need for this gap between nav items
+ }
+ }
+}
+
+
+// Nav variations
+// --------------------------------------------------
+
+// Justified nav links
+// -------------------------
+
+.nav-justified {
+ width: 100%;
+
+ > li {
+ float: none;
+ > a {
+ text-align: center;
+ margin-bottom: 5px;
+ }
+ }
+
+ > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+ }
+
+ @media (min-width: @screen-sm-min) {
+ > li {
+ display: table-cell;
+ width: 1%;
+ > a {
+ margin-bottom: 0;
+ }
+ }
+ }
+}
+
+// Move borders to anchors instead of bottom of list
+//
+// Mixin for adding on top the shared `.nav-justified` styles for our tabs
+.nav-tabs-justified {
+ border-bottom: 0;
+
+ > li > a {
+ // Override margin from .nav-tabs
+ margin-right: 0;
+ border-radius: @border-radius-base;
+ }
+
+ > .active > a,
+ > .active > a:hover,
+ > .active > a:focus {
+ border: 1px solid @nav-tabs-justified-link-border-color;
+ }
+
+ @media (min-width: @screen-sm-min) {
+ > li > a {
+ border-bottom: 1px solid @nav-tabs-justified-link-border-color;
+ border-radius: @border-radius-base @border-radius-base 0 0;
+ }
+ > .active > a,
+ > .active > a:hover,
+ > .active > a:focus {
+ border-bottom-color: @nav-tabs-justified-active-link-border-color;
+ }
+ }
+}
+
+
+// Tabbable tabs
+// -------------------------
+
+// Hide tabbable panes to start, show them when `.active`
+.tab-content {
+ > .tab-pane {
+ display: none;
+ }
+ > .active {
+ display: block;
+ }
+}
+
+
+// Dropdowns
+// -------------------------
+
+// Specific dropdowns
+.nav-tabs .dropdown-menu {
+ // make dropdown border overlap tab border
+ margin-top: -1px;
+ // Remove the top rounded corners here since there is a hard edge above the menu
+ .border-top-radius(0);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/normalize.less b/MVC/Content/css/themes/bootstrap-less/normalize.less
new file mode 100644
index 0000000..ce04b6a
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/normalize.less
@@ -0,0 +1,425 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+//
+// 1. Set default font family to sans-serif.
+// 2. Prevent iOS text size adjust after orientation change, without disabling
+// user zoom.
+//
+
+html {
+ font-family: sans-serif; // 1
+ -ms-text-size-adjust: 100%; // 2
+ -webkit-text-size-adjust: 100%; // 2
+}
+
+//
+// Remove default margin.
+//
+
+body {
+ margin: 0;
+}
+
+// HTML5 display definitions
+// ==========================================================================
+
+//
+// Correct `block` display not defined for any HTML5 element in IE 8/9.
+// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
+// Correct `block` display not defined for `main` in IE 11.
+//
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+//
+// 1. Correct `inline-block` display not defined in IE 8/9.
+// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+//
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; // 1
+ vertical-align: baseline; // 2
+}
+
+//
+// Prevent modern browsers from displaying `audio` without controls.
+// Remove excess height in iOS 5 devices.
+//
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+//
+// Address `[hidden]` styling not present in IE 8/9/10.
+// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+//
+
+[hidden],
+template {
+ display: none;
+}
+
+// Links
+// ==========================================================================
+
+//
+// Remove the gray background color from active links in IE 10.
+//
+
+a {
+ background: transparent;
+}
+
+//
+// Improve readability when focused and also mouse hovered in all browsers.
+//
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+// Text-level semantics
+// ==========================================================================
+
+//
+// Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+//
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+//
+// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+//
+
+b,
+strong {
+ font-weight: bold;
+}
+
+//
+// Address styling not present in Safari and Chrome.
+//
+
+dfn {
+ font-style: italic;
+}
+
+//
+// Address variable `h1` font-size and margin within `section` and `article`
+// contexts in Firefox 4+, Safari, and Chrome.
+//
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+//
+// Address styling not present in IE 8/9.
+//
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+//
+// Address inconsistent and variable font size in all browsers.
+//
+
+small {
+ font-size: 80%;
+}
+
+//
+// Prevent `sub` and `sup` affecting `line-height` in all browsers.
+//
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+// Embedded content
+// ==========================================================================
+
+//
+// Remove border when inside `a` element in IE 8/9/10.
+//
+
+img {
+ border: 0;
+}
+
+//
+// Correct overflow not hidden in IE 9/10/11.
+//
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+// Grouping content
+// ==========================================================================
+
+//
+// Address margin not present in IE 8/9 and Safari.
+//
+
+figure {
+ margin: 1em 40px;
+}
+
+//
+// Address differences between Firefox and other browsers.
+//
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+//
+// Contain overflow in all browsers.
+//
+
+pre {
+ overflow: auto;
+}
+
+//
+// Address odd `em`-unit font size rendering in all browsers.
+//
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+// Forms
+// ==========================================================================
+
+//
+// Known limitation: by default, Chrome and Safari on OS X allow very limited
+// styling of `select`, unless a `border` property is set.
+//
+
+//
+// 1. Correct color not being inherited.
+// Known issue: affects color of disabled elements.
+// 2. Correct font properties not being inherited.
+// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+//
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; // 1
+ font: inherit; // 2
+ margin: 0; // 3
+}
+
+//
+// Address `overflow` set to `hidden` in IE 8/9/10/11.
+//
+
+button {
+ overflow: visible;
+}
+
+//
+// Address inconsistent `text-transform` inheritance for `button` and `select`.
+// All other form control elements do not inherit `text-transform` values.
+// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+// Correct `select` style inheritance in Firefox.
+//
+
+button,
+select {
+ text-transform: none;
+}
+
+//
+// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+// and `video` controls.
+// 2. Correct inability to style clickable `input` types in iOS.
+// 3. Improve usability and consistency of cursor style between image-type
+// `input` and others.
+//
+
+button,
+html input[type="button"], // 1
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; // 2
+ cursor: pointer; // 3
+}
+
+//
+// Re-set default cursor for disabled elements.
+//
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+//
+// Remove inner padding and border in Firefox 4+.
+//
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+//
+// Address Firefox 4+ setting `line-height` on `input` using `!important` in
+// the UA stylesheet.
+//
+
+input {
+ line-height: normal;
+}
+
+//
+// It's recommended that you don't attempt to style these elements.
+// Firefox's implementation doesn't respect box-sizing, padding, or width.
+//
+// 1. Address box sizing set to `content-box` in IE 8/9/10.
+// 2. Remove excess padding in IE 8/9/10.
+//
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; // 1
+ padding: 0; // 2
+}
+
+//
+// Fix the cursor style for Chrome's increment/decrement buttons. For certain
+// `font-size` values of the `input`, it causes the cursor style of the
+// decrement button to change from `default` to `text`.
+//
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+//
+// 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+// 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+// (include `-moz` to future-proof).
+//
+
+input[type="search"] {
+ -webkit-appearance: textfield; // 1
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; // 2
+ box-sizing: content-box;
+}
+
+//
+// Remove inner padding and search cancel button in Safari and Chrome on OS X.
+// Safari (but not Chrome) clips the cancel button when the search input has
+// padding (and `textfield` appearance).
+//
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+//
+// Define consistent border, margin, and padding.
+//
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+//
+// 1. Correct `color` not being inherited in IE 8/9/10/11.
+// 2. Remove padding so people aren't caught out if they zero out fieldsets.
+//
+
+legend {
+ border: 0; // 1
+ padding: 0; // 2
+}
+
+//
+// Remove default vertical scrollbar in IE 8/9/10/11.
+//
+
+textarea {
+ overflow: auto;
+}
+
+//
+// Don't inherit the `font-weight` (applied by a rule above).
+// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+//
+
+optgroup {
+ font-weight: bold;
+}
+
+// Tables
+// ==========================================================================
+
+//
+// Remove most spacing between table cells.
+//
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/pager.less b/MVC/Content/css/themes/bootstrap-less/pager.less
new file mode 100644
index 0000000..59103f4
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/pager.less
@@ -0,0 +1,55 @@
+//
+// Pager pagination
+// --------------------------------------------------
+
+
+.pager {
+ padding-left: 0;
+ margin: @line-height-computed 0;
+ list-style: none;
+ text-align: center;
+ &:extend(.clearfix all);
+ li {
+ display: inline;
+ > a,
+ > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: @pager-bg;
+ border: 1px solid @pager-border;
+ border-radius: @pager-border-radius;
+ }
+
+ > a:hover,
+ > a:focus {
+ text-decoration: none;
+ background-color: @pager-hover-bg;
+ }
+ }
+
+ .next {
+ > a,
+ > span {
+ float: right;
+ }
+ }
+
+ .previous {
+ > a,
+ > span {
+ float: left;
+ }
+ }
+
+ .disabled {
+ > a,
+ > a:hover,
+ > a:focus,
+ > span {
+ color: @pager-disabled-color;
+ background-color: @pager-bg;
+ cursor: not-allowed;
+ }
+ }
+
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/pagination.less b/MVC/Content/css/themes/bootstrap-less/pagination.less
new file mode 100644
index 0000000..b2856ae
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/pagination.less
@@ -0,0 +1,88 @@
+//
+// Pagination (multiple pages)
+// --------------------------------------------------
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: @line-height-computed 0;
+ border-radius: @border-radius-base;
+
+ > li {
+ display: inline; // Remove list-style and block-level defaults
+ > a,
+ > span {
+ position: relative;
+ float: left; // Collapse white-space
+ padding: @padding-base-vertical @padding-base-horizontal;
+ line-height: @line-height-base;
+ text-decoration: none;
+ color: @pagination-color;
+ background-color: @pagination-bg;
+ border: 1px solid @pagination-border;
+ margin-left: -1px;
+ }
+ &:first-child {
+ > a,
+ > span {
+ margin-left: 0;
+ .border-left-radius(@border-radius-base);
+ }
+ }
+ &:last-child {
+ > a,
+ > span {
+ .border-right-radius(@border-radius-base);
+ }
+ }
+ }
+
+ > li > a,
+ > li > span {
+ &:hover,
+ &:focus {
+ color: @pagination-hover-color;
+ background-color: @pagination-hover-bg;
+ border-color: @pagination-hover-border;
+ }
+ }
+
+ > .active > a,
+ > .active > span {
+ &,
+ &:hover,
+ &:focus {
+ z-index: 2;
+ color: @pagination-active-color;
+ background-color: @pagination-active-bg;
+ border-color: @pagination-active-border;
+ cursor: default;
+ }
+ }
+
+ > .disabled {
+ > span,
+ > span:hover,
+ > span:focus,
+ > a,
+ > a:hover,
+ > a:focus {
+ color: @pagination-disabled-color;
+ background-color: @pagination-disabled-bg;
+ border-color: @pagination-disabled-border;
+ cursor: not-allowed;
+ }
+ }
+}
+
+// Sizing
+// --------------------------------------------------
+
+// Large
+.pagination-lg {
+ .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);
+}
+
+// Small
+.pagination-sm {
+ .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/panels.less b/MVC/Content/css/themes/bootstrap-less/panels.less
new file mode 100644
index 0000000..2dc2131
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/panels.less
@@ -0,0 +1,243 @@
+//
+// Panels
+// --------------------------------------------------
+
+
+// Base class
+.panel {
+ margin-bottom: @line-height-computed;
+ background-color: @panel-bg;
+ border: 1px solid transparent;
+ border-radius: @panel-border-radius;
+ .box-shadow(0 1px 1px rgba(0,0,0,.05));
+}
+
+// Panel contents
+.panel-body {
+ padding: @panel-body-padding;
+ &:extend(.clearfix all);
+}
+
+// Optional heading
+.panel-heading {
+ padding: @panel-heading-padding;
+ border-bottom: 1px solid transparent;
+ .border-top-radius((@panel-border-radius - 1));
+
+ > .dropdown .dropdown-toggle {
+ color: inherit;
+ }
+}
+
+// Within heading, strip any `h*` tag of its default margins for spacing.
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: ceil((@font-size-base * 1.125));
+ color: inherit;
+
+ > a {
+ color: inherit;
+ }
+}
+
+// Optional footer (stays gray in every modifier class)
+.panel-footer {
+ padding: @panel-footer-padding;
+ background-color: @panel-footer-bg;
+ border-top: 1px solid @panel-inner-border;
+ .border-bottom-radius((@panel-border-radius - 1));
+}
+
+
+// List groups in panels
+//
+// By default, space out list group content from panel headings to account for
+// any kind of custom content between the two.
+
+.panel {
+ > .list-group {
+ margin-bottom: 0;
+
+ .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+ }
+
+ // Add border top radius for first one
+ &:first-child {
+ .list-group-item:first-child {
+ border-top: 0;
+ .border-top-radius((@panel-border-radius - 1));
+ }
+ }
+ // Add border bottom radius for last one
+ &:last-child {
+ .list-group-item:last-child {
+ border-bottom: 0;
+ .border-bottom-radius((@panel-border-radius - 1));
+ }
+ }
+ }
+}
+// Collapse space between when there's no additional content.
+.panel-heading + .list-group {
+ .list-group-item:first-child {
+ border-top-width: 0;
+ }
+}
+.list-group + .panel-footer {
+ border-top-width: 0;
+}
+
+// Tables in panels
+//
+// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and
+// watch it go full width.
+
+.panel {
+ > .table,
+ > .table-responsive > .table,
+ > .panel-collapse > .table {
+ margin-bottom: 0;
+ }
+ // Add border top radius for first one
+ > .table:first-child,
+ > .table-responsive:first-child > .table:first-child {
+ .border-top-radius((@panel-border-radius - 1));
+
+ > thead:first-child,
+ > tbody:first-child {
+ > tr:first-child {
+ td:first-child,
+ th:first-child {
+ border-top-left-radius: (@panel-border-radius - 1);
+ }
+ td:last-child,
+ th:last-child {
+ border-top-right-radius: (@panel-border-radius - 1);
+ }
+ }
+ }
+ }
+ // Add border bottom radius for last one
+ > .table:last-child,
+ > .table-responsive:last-child > .table:last-child {
+ .border-bottom-radius((@panel-border-radius - 1));
+
+ > tbody:last-child,
+ > tfoot:last-child {
+ > tr:last-child {
+ td:first-child,
+ th:first-child {
+ border-bottom-left-radius: (@panel-border-radius - 1);
+ }
+ td:last-child,
+ th:last-child {
+ border-bottom-right-radius: (@panel-border-radius - 1);
+ }
+ }
+ }
+ }
+ > .panel-body + .table,
+ > .panel-body + .table-responsive {
+ border-top: 1px solid @table-border-color;
+ }
+ > .table > tbody:first-child > tr:first-child th,
+ > .table > tbody:first-child > tr:first-child td {
+ border-top: 0;
+ }
+ > .table-bordered,
+ > .table-responsive > .table-bordered {
+ border: 0;
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th:first-child,
+ > td:first-child {
+ border-left: 0;
+ }
+ > th:last-child,
+ > td:last-child {
+ border-right: 0;
+ }
+ }
+ }
+ > thead,
+ > tbody {
+ > tr:first-child {
+ > td,
+ > th {
+ border-bottom: 0;
+ }
+ }
+ }
+ > tbody,
+ > tfoot {
+ > tr:last-child {
+ > td,
+ > th {
+ border-bottom: 0;
+ }
+ }
+ }
+ }
+ > .table-responsive {
+ border: 0;
+ margin-bottom: 0;
+ }
+}
+
+
+// Collapsable panels (aka, accordion)
+//
+// Wrap a series of panels in `.panel-group` to turn them into an accordion with
+// the help of our collapse JavaScript plugin.
+
+.panel-group {
+ margin-bottom: @line-height-computed;
+
+ // Tighten up margin so it's only between panels
+ .panel {
+ margin-bottom: 0;
+ border-radius: @panel-border-radius;
+ + .panel {
+ margin-top: 5px;
+ }
+ }
+
+ .panel-heading {
+ border-bottom: 0;
+ + .panel-collapse > .panel-body {
+ border-top: 1px solid @panel-inner-border;
+ }
+ }
+ .panel-footer {
+ border-top: 0;
+ + .panel-collapse .panel-body {
+ border-bottom: 1px solid @panel-inner-border;
+ }
+ }
+}
+
+
+// Contextual variations
+.panel-default {
+ .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);
+}
+.panel-primary {
+ .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);
+}
+.panel-success {
+ .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);
+}
+.panel-info {
+ .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);
+}
+.panel-warning {
+ .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);
+}
+.panel-danger {
+ .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/popovers.less b/MVC/Content/css/themes/bootstrap-less/popovers.less
new file mode 100644
index 0000000..bf6af40
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/popovers.less
@@ -0,0 +1,133 @@
+//
+// Popovers
+// --------------------------------------------------
+
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: @zindex-popover;
+ display: none;
+ max-width: @popover-max-width;
+ padding: 1px;
+ text-align: left; // Reset given new insertion method
+ background-color: @popover-bg;
+ background-clip: padding-box;
+ border: 1px solid @popover-fallback-border-color;
+ border: 1px solid @popover-border-color;
+ border-radius: @border-radius-large;
+ .box-shadow(0 5px 10px rgba(0,0,0,.2));
+
+ // Overrides for proper insertion
+ white-space: normal;
+
+ // Offset the popover to account for the popover arrow
+ &.top { margin-top: -@popover-arrow-width; }
+ &.right { margin-left: @popover-arrow-width; }
+ &.bottom { margin-top: @popover-arrow-width; }
+ &.left { margin-left: -@popover-arrow-width; }
+}
+
+.popover-title {
+ margin: 0; // reset heading margin
+ padding: 8px 14px;
+ font-size: @font-size-base;
+ font-weight: normal;
+ line-height: 18px;
+ background-color: @popover-title-bg;
+ border-bottom: 1px solid darken(@popover-title-bg, 5%);
+ border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;
+}
+
+.popover-content {
+ padding: 9px 14px;
+}
+
+// Arrows
+//
+// .arrow is outer, .arrow:after is inner
+
+.popover > .arrow {
+ &,
+ &:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+ }
+}
+.popover > .arrow {
+ border-width: @popover-arrow-outer-width;
+}
+.popover > .arrow:after {
+ border-width: @popover-arrow-width;
+ content: "";
+}
+
+.popover {
+ &.top > .arrow {
+ left: 50%;
+ margin-left: -@popover-arrow-outer-width;
+ border-bottom-width: 0;
+ border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+ border-top-color: @popover-arrow-outer-color;
+ bottom: -@popover-arrow-outer-width;
+ &:after {
+ content: " ";
+ bottom: 1px;
+ margin-left: -@popover-arrow-width;
+ border-bottom-width: 0;
+ border-top-color: @popover-arrow-color;
+ }
+ }
+ &.right > .arrow {
+ top: 50%;
+ left: -@popover-arrow-outer-width;
+ margin-top: -@popover-arrow-outer-width;
+ border-left-width: 0;
+ border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+ border-right-color: @popover-arrow-outer-color;
+ &:after {
+ content: " ";
+ left: 1px;
+ bottom: -@popover-arrow-width;
+ border-left-width: 0;
+ border-right-color: @popover-arrow-color;
+ }
+ }
+ &.bottom > .arrow {
+ left: 50%;
+ margin-left: -@popover-arrow-outer-width;
+ border-top-width: 0;
+ border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+ border-bottom-color: @popover-arrow-outer-color;
+ top: -@popover-arrow-outer-width;
+ &:after {
+ content: " ";
+ top: 1px;
+ margin-left: -@popover-arrow-width;
+ border-top-width: 0;
+ border-bottom-color: @popover-arrow-color;
+ }
+ }
+
+ &.left > .arrow {
+ top: 50%;
+ right: -@popover-arrow-outer-width;
+ margin-top: -@popover-arrow-outer-width;
+ border-right-width: 0;
+ border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+ border-left-color: @popover-arrow-outer-color;
+ &:after {
+ content: " ";
+ right: 1px;
+ border-right-width: 0;
+ border-left-color: @popover-arrow-color;
+ bottom: -@popover-arrow-width;
+ }
+ }
+
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/print.less b/MVC/Content/css/themes/bootstrap-less/print.less
new file mode 100644
index 0000000..3655d03
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/print.less
@@ -0,0 +1,101 @@
+//
+// Basic print styles
+// --------------------------------------------------
+// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
+
+@media print {
+
+ * {
+ text-shadow: none !important;
+ color: #000 !important; // Black prints faster: h5bp.com/s
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ // Don't show links for images, or javascript/internal links
+ a[href^="javascript:"]:after,
+ a[href^="#"]:after {
+ content: "";
+ }
+
+ pre,
+ blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid;
+ }
+
+ thead {
+ display: table-header-group; // h5bp.com/t
+ }
+
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+
+ // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245
+ // Once fixed, we can just straight up remove this.
+ select {
+ background: #fff !important;
+ }
+
+ // Bootstrap components
+ .navbar {
+ display: none;
+ }
+ .table {
+ td,
+ th {
+ background-color: #fff !important;
+ }
+ }
+ .btn,
+ .dropup > .btn {
+ > .caret {
+ border-top-color: #000 !important;
+ }
+ }
+ .label {
+ border: 1px solid #000;
+ }
+
+ .table {
+ border-collapse: collapse !important;
+ }
+ .table-bordered {
+ th,
+ td {
+ border: 1px solid #ddd !important;
+ }
+ }
+
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/progress-bars.less b/MVC/Content/css/themes/bootstrap-less/progress-bars.less
new file mode 100644
index 0000000..3ac52a2
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/progress-bars.less
@@ -0,0 +1,105 @@
+//
+// Progress bars
+// --------------------------------------------------
+
+
+// Bar animations
+// -------------------------
+
+// WebKit
+@-webkit-keyframes progress-bar-stripes {
+ from { background-position: 40px 0; }
+ to { background-position: 0 0; }
+}
+
+// Spec and IE10+
+@keyframes progress-bar-stripes {
+ from { background-position: 40px 0; }
+ to { background-position: 0 0; }
+}
+
+
+
+// Bar itself
+// -------------------------
+
+// Outer container
+.progress {
+ overflow: hidden;
+ height: @line-height-computed;
+ margin-bottom: @line-height-computed;
+ background-color: @progress-bg;
+ border-radius: @border-radius-base;
+ .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
+}
+
+// Bar of progress
+.progress-bar {
+ float: left;
+ width: 0%;
+ height: 100%;
+ font-size: @font-size-small;
+ line-height: @line-height-computed;
+ color: @progress-bar-color;
+ text-align: center;
+ background-color: @progress-bar-bg;
+ .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
+ .transition(width .6s ease);
+}
+
+// Striped bars
+//
+// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the
+// `.progress-bar-striped` class, which you just add to an existing
+// `.progress-bar`.
+.progress-striped .progress-bar,
+.progress-bar-striped {
+ #gradient > .striped();
+ background-size: 40px 40px;
+}
+
+// Call animation for the active one
+//
+// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the
+// `.progress-bar.active` approach.
+.progress.active .progress-bar,
+.progress-bar.active {
+ .animation(progress-bar-stripes 2s linear infinite);
+}
+
+// Account for lower percentages
+.progress-bar {
+ &[aria-valuenow="1"],
+ &[aria-valuenow="2"] {
+ min-width: 30px;
+ }
+
+ &[aria-valuenow="0"] {
+ color: @gray-light;
+ min-width: 30px;
+ background-color: transparent;
+ background-image: none;
+ box-shadow: none;
+ }
+}
+
+
+
+// Variations
+// -------------------------
+
+.progress-bar-success {
+ .progress-bar-variant(@progress-bar-success-bg);
+}
+
+.progress-bar-info {
+ .progress-bar-variant(@progress-bar-info-bg);
+}
+
+.progress-bar-warning {
+ .progress-bar-variant(@progress-bar-warning-bg);
+}
+
+.progress-bar-danger {
+ .progress-bar-variant(@progress-bar-danger-bg);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/responsive-embed.less b/MVC/Content/css/themes/bootstrap-less/responsive-embed.less
new file mode 100644
index 0000000..a884d49
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/responsive-embed.less
@@ -0,0 +1,34 @@
+// Embeds responsive
+//
+// Credit: Nicolas Gallagher and SUIT CSS.
+
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+
+ .embed-responsive-item,
+ iframe,
+ embed,
+ object {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ height: 100%;
+ width: 100%;
+ border: 0;
+ }
+
+ // Modifier class for 16:9 aspect ratio
+ &.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+ }
+
+ // Modifier class for 4:3 aspect ratio
+ &.embed-responsive-4by3 {
+ padding-bottom: 75%;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/responsive-utilities.less b/MVC/Content/css/themes/bootstrap-less/responsive-utilities.less
new file mode 100644
index 0000000..b1db31d
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/responsive-utilities.less
@@ -0,0 +1,194 @@
+//
+// Responsive: Utility classes
+// --------------------------------------------------
+
+
+// IE10 in Windows (Phone) 8
+//
+// Support for responsive views via media queries is kind of borked in IE10, for
+// Surface/desktop in split view and for Windows Phone 8. This particular fix
+// must be accompanied by a snippet of JavaScript to sniff the user agent and
+// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at
+// our Getting Started page for more information on this bug.
+//
+// For more information, see the following:
+//
+// Issue: https://github.com/twbs/bootstrap/issues/10497
+// Docs: http://getbootstrap.com/getting-started/#support-ie10-width
+// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/
+// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
+
+@-ms-viewport {
+ width: device-width;
+}
+
+
+// Visibility utilities
+// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ .responsive-invisibility();
+}
+
+.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;
+}
+
+.visible-xs {
+ @media (max-width: @screen-xs-max) {
+ .responsive-visibility();
+ }
+}
+.visible-xs-block {
+ @media (max-width: @screen-xs-max) {
+ display: block !important;
+ }
+}
+.visible-xs-inline {
+ @media (max-width: @screen-xs-max) {
+ display: inline !important;
+ }
+}
+.visible-xs-inline-block {
+ @media (max-width: @screen-xs-max) {
+ display: inline-block !important;
+ }
+}
+
+.visible-sm {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .responsive-visibility();
+ }
+}
+.visible-sm-block {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ display: block !important;
+ }
+}
+.visible-sm-inline {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ display: inline !important;
+ }
+}
+.visible-sm-inline-block {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ display: inline-block !important;
+ }
+}
+
+.visible-md {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .responsive-visibility();
+ }
+}
+.visible-md-block {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ display: block !important;
+ }
+}
+.visible-md-inline {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ display: inline !important;
+ }
+}
+.visible-md-inline-block {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ display: inline-block !important;
+ }
+}
+
+.visible-lg {
+ @media (min-width: @screen-lg-min) {
+ .responsive-visibility();
+ }
+}
+.visible-lg-block {
+ @media (min-width: @screen-lg-min) {
+ display: block !important;
+ }
+}
+.visible-lg-inline {
+ @media (min-width: @screen-lg-min) {
+ display: inline !important;
+ }
+}
+.visible-lg-inline-block {
+ @media (min-width: @screen-lg-min) {
+ display: inline-block !important;
+ }
+}
+
+.hidden-xs {
+ @media (max-width: @screen-xs-max) {
+ .responsive-invisibility();
+ }
+}
+.hidden-sm {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .responsive-invisibility();
+ }
+}
+.hidden-md {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .responsive-invisibility();
+ }
+}
+.hidden-lg {
+ @media (min-width: @screen-lg-min) {
+ .responsive-invisibility();
+ }
+}
+
+
+// Print utilities
+//
+// Media queries are placed on the inside to be mixin-friendly.
+
+// Note: Deprecated .visible-print as of v3.2.0
+.visible-print {
+ .responsive-invisibility();
+
+ @media print {
+ .responsive-visibility();
+ }
+}
+.visible-print-block {
+ display: none !important;
+
+ @media print {
+ display: block !important;
+ }
+}
+.visible-print-inline {
+ display: none !important;
+
+ @media print {
+ display: inline !important;
+ }
+}
+.visible-print-inline-block {
+ display: none !important;
+
+ @media print {
+ display: inline-block !important;
+ }
+}
+
+.hidden-print {
+ @media print {
+ .responsive-invisibility();
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/scaffolding.less b/MVC/Content/css/themes/bootstrap-less/scaffolding.less
new file mode 100644
index 0000000..c1e270f
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/scaffolding.less
@@ -0,0 +1,150 @@
+//
+// Scaffolding
+// --------------------------------------------------
+
+
+// Reset the box-sizing
+//
+// Heads up! This reset may cause conflicts with some third-party widgets.
+// For recommendations on resolving such conflicts, see
+// http://getbootstrap.com/getting-started/#third-box-sizing
+* {
+ .box-sizing(border-box);
+}
+*:before,
+*:after {
+ .box-sizing(border-box);
+}
+
+
+// Body reset
+
+html {
+ font-size: 10px;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+}
+
+body {
+ font-family: @font-family-base;
+ font-size: @font-size-base;
+ line-height: @line-height-base;
+ color: @text-color;
+ background-color: @body-bg;
+}
+
+// Reset fonts for relevant elements
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+
+// Links
+
+a {
+ color: @link-color;
+ text-decoration: none;
+
+ &:hover,
+ &:focus {
+ color: @link-hover-color;
+ text-decoration: underline;
+ }
+
+ &:focus {
+ .tab-focus();
+ }
+}
+
+
+// Figures
+//
+// We reset this here because previously Normalize had no `figure` margins. This
+// ensures we don't break anyone's use of the element.
+
+figure {
+ margin: 0;
+}
+
+
+// Images
+
+img {
+ vertical-align: middle;
+}
+
+// Responsive images (ensure images don't scale beyond their parents)
+.img-responsive {
+ .img-responsive();
+}
+
+// Rounded corners
+.img-rounded {
+ border-radius: @border-radius-large;
+}
+
+// Image thumbnails
+//
+// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.
+.img-thumbnail {
+ padding: @thumbnail-padding;
+ line-height: @line-height-base;
+ background-color: @thumbnail-bg;
+ border: 1px solid @thumbnail-border;
+ border-radius: @thumbnail-border-radius;
+ .transition(all .2s ease-in-out);
+
+ // Keep them at most 100% wide
+ .img-responsive(inline-block);
+}
+
+// Perfect circle
+.img-circle {
+ border-radius: 50%; // set radius in percents
+}
+
+
+// Horizontal rules
+
+hr {
+ margin-top: @line-height-computed;
+ margin-bottom: @line-height-computed;
+ border: 0;
+ border-top: 1px solid @hr-border;
+}
+
+
+// Only display content to screen readers
+//
+// See: http://a11yproject.com/posts/how-to-hide-content/
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ margin: -1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0,0,0,0);
+ border: 0;
+}
+
+// Use in conjunction with .sr-only to only display content when it's focused.
+// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
+// Credit: HTML5 Boilerplate
+
+.sr-only-focusable {
+ &:active,
+ &:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/tables.less b/MVC/Content/css/themes/bootstrap-less/tables.less
new file mode 100644
index 0000000..2e1ef33
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/tables.less
@@ -0,0 +1,233 @@
+//
+// Tables
+// --------------------------------------------------
+
+
+table {
+ background-color: @table-bg;
+}
+th {
+ text-align: left;
+}
+
+
+// Baseline styles
+
+.table {
+ width: 100%;
+ max-width: 100%;
+ margin-bottom: @line-height-computed;
+ // Cells
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ padding: @table-cell-padding;
+ line-height: @line-height-base;
+ vertical-align: top;
+ border-top: 1px solid @table-border-color;
+ }
+ }
+ }
+ // Bottom align for column headings
+ > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid @table-border-color;
+ }
+ // Remove top border from thead by default
+ > caption + thead,
+ > colgroup + thead,
+ > thead:first-child {
+ > tr:first-child {
+ > th,
+ > td {
+ border-top: 0;
+ }
+ }
+ }
+ // Account for multiple tbody instances
+ > tbody + tbody {
+ border-top: 2px solid @table-border-color;
+ }
+
+ // Nesting
+ .table {
+ background-color: @body-bg;
+ }
+}
+
+
+// Condensed table w/ half padding
+
+.table-condensed {
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ padding: @table-condensed-cell-padding;
+ }
+ }
+ }
+}
+
+
+// Bordered version
+//
+// Add borders all around the table and between all the columns.
+
+.table-bordered {
+ border: 1px solid @table-border-color;
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ border: 1px solid @table-border-color;
+ }
+ }
+ }
+ > thead > tr {
+ > th,
+ > td {
+ border-bottom-width: 2px;
+ }
+ }
+}
+
+
+// Zebra-striping
+//
+// Default zebra-stripe styles (alternating gray and transparent backgrounds)
+
+.table-striped {
+ > tbody > tr:nth-child(odd) {
+ > td,
+ > th {
+ background-color: @table-bg-accent;
+ }
+ }
+}
+
+
+// Hover effect
+//
+// Placed here since it has to come after the potential zebra striping
+
+.table-hover {
+ > tbody > tr:hover {
+ > td,
+ > th {
+ background-color: @table-bg-hover;
+ }
+ }
+}
+
+
+// Table cell sizing
+//
+// Reset default table behavior
+
+table col[class*="col-"] {
+ position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
+ float: none;
+ display: table-column;
+}
+table {
+ td,
+ th {
+ &[class*="col-"] {
+ position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
+ float: none;
+ display: table-cell;
+ }
+ }
+}
+
+
+// Table backgrounds
+//
+// Exact selectors below required to override `.table-striped` and prevent
+// inheritance to nested tables.
+
+// Generate the contextual variants
+.table-row-variant(active; @table-bg-active);
+.table-row-variant(success; @state-success-bg);
+.table-row-variant(info; @state-info-bg);
+.table-row-variant(warning; @state-warning-bg);
+.table-row-variant(danger; @state-danger-bg);
+
+
+// Responsive tables
+//
+// Wrap your tables in `.table-responsive` and we'll make them mobile friendly
+// by enabling horizontal scrolling. Only applies <768px. Everything above that
+// will display normally.
+
+.table-responsive {
+ @media screen and (max-width: @screen-xs-max) {
+ width: 100%;
+ margin-bottom: (@line-height-computed * 0.75);
+ overflow-y: hidden;
+ overflow-x: auto;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid @table-border-color;
+ -webkit-overflow-scrolling: touch;
+
+ // Tighten up spacing
+ > .table {
+ margin-bottom: 0;
+
+ // Ensure the content doesn't wrap
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ white-space: nowrap;
+ }
+ }
+ }
+ }
+
+ // Special overrides for the bordered tables
+ > .table-bordered {
+ border: 0;
+
+ // Nuke the appropriate borders so that the parent can handle them
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th:first-child,
+ > td:first-child {
+ border-left: 0;
+ }
+ > th:last-child,
+ > td:last-child {
+ border-right: 0;
+ }
+ }
+ }
+
+ // Only nuke the last row's bottom-border in `tbody` and `tfoot` since
+ // chances are there will be only one `tr` in a `thead` and that would
+ // remove the border altogether.
+ > tbody,
+ > tfoot {
+ > tr:last-child {
+ > th,
+ > td {
+ border-bottom: 0;
+ }
+ }
+ }
+
+ }
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/theme.less b/MVC/Content/css/themes/bootstrap-less/theme.less
new file mode 100644
index 0000000..b089424
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/theme.less
@@ -0,0 +1,258 @@
+
+//
+// Load core variables and mixins
+// --------------------------------------------------
+
+@import "variables.less";
+@import "mixins.less";
+
+
+
+//
+// Buttons
+// --------------------------------------------------
+
+// Common styles
+.btn-default,
+.btn-primary,
+.btn-success,
+.btn-info,
+.btn-warning,
+.btn-danger {
+ text-shadow: 0 -1px 0 rgba(0,0,0,.2);
+ @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);
+ .box-shadow(@shadow);
+
+ // Reset the shadow
+ &:active,
+ &.active {
+ .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+ }
+}
+
+// Mixin for generating new styles
+.btn-styles(@btn-color: #555) {
+ #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));
+ .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners
+ background-repeat: repeat-x;
+ border-color: darken(@btn-color, 14%);
+
+ &:hover,
+ &:focus {
+ background-color: darken(@btn-color, 12%);
+ background-position: 0 -15px;
+ }
+
+ &:active,
+ &.active {
+ background-color: darken(@btn-color, 12%);
+ border-color: darken(@btn-color, 14%);
+ }
+
+ &:disabled,
+ &[disabled] {
+ background-color: darken(@btn-color, 12%);
+ background-image: none;
+ }
+}
+
+// Common styles
+.btn {
+ // Remove the gradient for the pressed/active state
+ &:active,
+ &.active {
+ background-image: none;
+ }
+}
+
+// Apply the mixin to the buttons
+.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }
+.btn-primary { .btn-styles(@btn-primary-bg); }
+.btn-success { .btn-styles(@btn-success-bg); }
+.btn-info { .btn-styles(@btn-info-bg); }
+.btn-warning { .btn-styles(@btn-warning-bg); }
+.btn-danger { .btn-styles(@btn-danger-bg); }
+
+
+
+//
+// Images
+// --------------------------------------------------
+
+.thumbnail,
+.img-thumbnail {
+ .box-shadow(0 1px 2px rgba(0,0,0,.075));
+}
+
+
+
+//
+// Dropdowns
+// --------------------------------------------------
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));
+ background-color: darken(@dropdown-link-hover-bg, 5%);
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));
+ background-color: darken(@dropdown-link-active-bg, 5%);
+}
+
+
+
+//
+// Navbar
+// --------------------------------------------------
+
+// Default navbar
+.navbar-default {
+ #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);
+ .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
+ border-radius: @navbar-border-radius;
+ @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);
+ .box-shadow(@shadow);
+
+ .navbar-nav > .active > a {
+ #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));
+ .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);
+}
+
+// Inverted navbar
+.navbar-inverse {
+ #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);
+ .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
+
+ .navbar-nav > .active > a {
+ #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));
+ .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));
+ }
+
+ .navbar-brand,
+ .navbar-nav > li > a {
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+ }
+}
+
+// Undo rounded corners in static and fixed navbars
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ border-radius: 0;
+}
+
+
+
+//
+// Alerts
+// --------------------------------------------------
+
+// Common styles
+.alert {
+ text-shadow: 0 1px 0 rgba(255,255,255,.2);
+ @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);
+ .box-shadow(@shadow);
+}
+
+// Mixin for generating new styles
+.alert-styles(@color) {
+ #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));
+ border-color: darken(@color, 15%);
+}
+
+// Apply the mixin to the alerts
+.alert-success { .alert-styles(@alert-success-bg); }
+.alert-info { .alert-styles(@alert-info-bg); }
+.alert-warning { .alert-styles(@alert-warning-bg); }
+.alert-danger { .alert-styles(@alert-danger-bg); }
+
+
+
+//
+// Progress bars
+// --------------------------------------------------
+
+// Give the progress background some depth
+.progress {
+ #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)
+}
+
+// Mixin for generating new styles
+.progress-bar-styles(@color) {
+ #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));
+}
+
+// Apply the mixin to the progress bars
+.progress-bar { .progress-bar-styles(@progress-bar-bg); }
+.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }
+.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }
+.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }
+.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }
+
+// Reset the striped class because our mixins don't do multiple gradients and
+// the above custom styles override the new `.progress-bar-striped` in v3.2.0.
+.progress-bar-striped {
+ #gradient > .striped();
+}
+
+
+//
+// List groups
+// --------------------------------------------------
+
+.list-group {
+ border-radius: @border-radius-base;
+ .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 darken(@list-group-active-bg, 10%);
+ #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));
+ border-color: darken(@list-group-active-border, 7.5%);
+}
+
+
+
+//
+// Panels
+// --------------------------------------------------
+
+// Common styles
+.panel {
+ .box-shadow(0 1px 2px rgba(0,0,0,.05));
+}
+
+// Mixin for generating new styles
+.panel-heading-styles(@color) {
+ #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));
+}
+
+// Apply the mixin to the panel headings only
+.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }
+.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }
+.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }
+.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }
+.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }
+.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }
+
+
+
+//
+// Wells
+// --------------------------------------------------
+
+.well {
+ #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);
+ border-color: darken(@well-bg, 10%);
+ @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);
+ .box-shadow(@shadow);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/thumbnails.less b/MVC/Content/css/themes/bootstrap-less/thumbnails.less
new file mode 100644
index 0000000..c428920
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/thumbnails.less
@@ -0,0 +1,36 @@
+//
+// Thumbnails
+// --------------------------------------------------
+
+
+// Mixin and adjust the regular image class
+.thumbnail {
+ display: block;
+ padding: @thumbnail-padding;
+ margin-bottom: @line-height-computed;
+ line-height: @line-height-base;
+ background-color: @thumbnail-bg;
+ border: 1px solid @thumbnail-border;
+ border-radius: @thumbnail-border-radius;
+ .transition(all .2s ease-in-out);
+
+ > img,
+ a > img {
+ &:extend(.img-responsive);
+ margin-left: auto;
+ margin-right: auto;
+ }
+
+ // Add a hover state for linked versions only
+ a&:hover,
+ a&:focus,
+ a&.active {
+ border-color: @link-color;
+ }
+
+ // Image captions
+ .caption {
+ padding: @thumbnail-caption-padding;
+ color: @thumbnail-caption-color;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/tooltip.less b/MVC/Content/css/themes/bootstrap-less/tooltip.less
new file mode 100644
index 0000000..bd62699
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/tooltip.less
@@ -0,0 +1,95 @@
+//
+// Tooltips
+// --------------------------------------------------
+
+
+// Base class
+.tooltip {
+ position: absolute;
+ z-index: @zindex-tooltip;
+ display: block;
+ visibility: visible;
+ font-size: @font-size-small;
+ line-height: 1.4;
+ .opacity(0);
+
+ &.in { .opacity(@tooltip-opacity); }
+ &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }
+ &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }
+ &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }
+ &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }
+}
+
+// Wrapper for the tooltip content
+.tooltip-inner {
+ max-width: @tooltip-max-width;
+ padding: 3px 8px;
+ color: @tooltip-color;
+ text-align: center;
+ text-decoration: none;
+ background-color: @tooltip-bg;
+ border-radius: @border-radius-base;
+}
+
+// Arrows
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.tooltip {
+ &.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -@tooltip-arrow-width;
+ border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
+ border-top-color: @tooltip-arrow-color;
+ }
+ &.top-left .tooltip-arrow {
+ bottom: 0;
+ left: @tooltip-arrow-width;
+ border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
+ border-top-color: @tooltip-arrow-color;
+ }
+ &.top-right .tooltip-arrow {
+ bottom: 0;
+ right: @tooltip-arrow-width;
+ border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
+ border-top-color: @tooltip-arrow-color;
+ }
+ &.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -@tooltip-arrow-width;
+ border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;
+ border-right-color: @tooltip-arrow-color;
+ }
+ &.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -@tooltip-arrow-width;
+ border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;
+ border-left-color: @tooltip-arrow-color;
+ }
+ &.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -@tooltip-arrow-width;
+ border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
+ border-bottom-color: @tooltip-arrow-color;
+ }
+ &.bottom-left .tooltip-arrow {
+ top: 0;
+ left: @tooltip-arrow-width;
+ border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
+ border-bottom-color: @tooltip-arrow-color;
+ }
+ &.bottom-right .tooltip-arrow {
+ top: 0;
+ right: @tooltip-arrow-width;
+ border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
+ border-bottom-color: @tooltip-arrow-color;
+ }
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/type.less b/MVC/Content/css/themes/bootstrap-less/type.less
new file mode 100644
index 0000000..9b1e48b
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/type.less
@@ -0,0 +1,313 @@
+//
+// Typography
+// --------------------------------------------------
+
+
+// Headings
+// -------------------------
+
+h1, h2, h3, h4, h5, h6,
+.h1, .h2, .h3, .h4, .h5, .h6 {
+ font-family: @headings-font-family;
+ font-weight: @headings-font-weight;
+ line-height: @headings-line-height;
+ color: @headings-color;
+
+ small,
+ .small {
+ font-weight: normal;
+ line-height: 1;
+ color: @headings-small-color;
+ }
+}
+
+h1, .h1,
+h2, .h2,
+h3, .h3 {
+ margin-top: @line-height-computed;
+ margin-bottom: (@line-height-computed / 2);
+
+ small,
+ .small {
+ font-size: 65%;
+ }
+}
+h4, .h4,
+h5, .h5,
+h6, .h6 {
+ margin-top: (@line-height-computed / 2);
+ margin-bottom: (@line-height-computed / 2);
+
+ small,
+ .small {
+ font-size: 75%;
+ }
+}
+
+h1, .h1 { font-size: @font-size-h1; }
+h2, .h2 { font-size: @font-size-h2; }
+h3, .h3 { font-size: @font-size-h3; }
+h4, .h4 { font-size: @font-size-h4; }
+h5, .h5 { font-size: @font-size-h5; }
+h6, .h6 { font-size: @font-size-h6; }
+
+
+// Body text
+// -------------------------
+
+p {
+ margin: 0 0 (@line-height-computed / 2);
+}
+
+.lead {
+ margin-bottom: @line-height-computed;
+ font-size: floor((@font-size-base * 1.15));
+ font-weight: 300;
+ line-height: 1.4;
+
+ @media (min-width: @screen-sm-min) {
+ font-size: (@font-size-base * 1.5);
+ }
+}
+
+
+// Emphasis & misc
+// -------------------------
+
+// Ex: (12px small font / 14px base font) * 100% = about 85%
+small,
+.small {
+ font-size: floor((100% * @font-size-small / @font-size-base));
+}
+
+// Undo browser default styling
+cite {
+ font-style: normal;
+}
+
+mark,
+.mark {
+ background-color: @state-warning-bg;
+ padding: .2em;
+}
+
+// Alignment
+.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; }
+
+// Transformation
+.text-lowercase { text-transform: lowercase; }
+.text-uppercase { text-transform: uppercase; }
+.text-capitalize { text-transform: capitalize; }
+
+// Contextual colors
+.text-muted {
+ color: @text-muted;
+}
+.text-primary {
+ .text-emphasis-variant(@brand-primary);
+}
+.text-success {
+ .text-emphasis-variant(@state-success-text);
+}
+.text-info {
+ .text-emphasis-variant(@state-info-text);
+}
+.text-warning {
+ .text-emphasis-variant(@state-warning-text);
+}
+.text-danger {
+ .text-emphasis-variant(@state-danger-text);
+}
+
+// Contextual backgrounds
+// For now we'll leave these alongside the text classes until v4 when we can
+// safely shift things around (per SemVer rules).
+.bg-primary {
+ // Given the contrast here, this is the only class to have its color inverted
+ // automatically.
+ color: #fff;
+ .bg-variant(@brand-primary);
+}
+.bg-success {
+ .bg-variant(@state-success-bg);
+}
+.bg-info {
+ .bg-variant(@state-info-bg);
+}
+.bg-warning {
+ .bg-variant(@state-warning-bg);
+}
+.bg-danger {
+ .bg-variant(@state-danger-bg);
+}
+
+
+// Page header
+// -------------------------
+
+.page-header {
+ padding-bottom: ((@line-height-computed / 2) - 1);
+ margin: (@line-height-computed * 2) 0 @line-height-computed;
+ border-bottom: 1px solid @page-header-border-color;
+}
+
+
+// Lists
+// -------------------------
+
+// Unordered and Ordered lists
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: (@line-height-computed / 2);
+ ul,
+ ol {
+ margin-bottom: 0;
+ }
+}
+
+// List options
+
+// Unstyled keeps list items block level, just removes default browser padding and list-style
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+
+// Inline turns list items into inline-block
+.list-inline {
+ .list-unstyled();
+ margin-left: -5px;
+
+ > li {
+ display: inline-block;
+ padding-left: 5px;
+ padding-right: 5px;
+ }
+}
+
+// Description Lists
+dl {
+ margin-top: 0; // Remove browser default
+ margin-bottom: @line-height-computed;
+}
+dt,
+dd {
+ line-height: @line-height-base;
+}
+dt {
+ font-weight: bold;
+}
+dd {
+ margin-left: 0; // Undo browser default
+}
+
+// Horizontal description lists
+//
+// Defaults to being stacked without any of the below styles applied, until the
+// grid breakpoint is reached (default of ~768px).
+
+.dl-horizontal {
+ dd {
+ &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present
+ }
+
+ @media (min-width: @grid-float-breakpoint) {
+ dt {
+ float: left;
+ width: (@dl-horizontal-offset - 20);
+ clear: left;
+ text-align: right;
+ .text-overflow();
+ }
+ dd {
+ margin-left: @dl-horizontal-offset;
+ }
+ }
+}
+
+
+// Misc
+// -------------------------
+
+// Abbreviations and acronyms
+abbr[title],
+// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted @abbr-border-color;
+}
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+
+// Blockquotes
+blockquote {
+ padding: (@line-height-computed / 2) @line-height-computed;
+ margin: 0 0 @line-height-computed;
+ font-size: @blockquote-font-size;
+ border-left: 5px solid @blockquote-border-color;
+
+ p,
+ ul,
+ ol {
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ // Note: Deprecated small and .small as of v3.1.0
+ // Context: https://github.com/twbs/bootstrap/issues/11660
+ footer,
+ small,
+ .small {
+ display: block;
+ font-size: 80%; // back to default font-size
+ line-height: @line-height-base;
+ color: @blockquote-small-color;
+
+ &:before {
+ content: '\2014 \00A0'; // em dash, nbsp
+ }
+ }
+}
+
+// Opposite alignment of blockquote
+//
+// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid @blockquote-border-color;
+ border-left: 0;
+ text-align: right;
+
+ // Account for citation
+ footer,
+ small,
+ .small {
+ &:before { content: ''; }
+ &:after {
+ content: '\00A0 \2014'; // nbsp, em dash
+ }
+ }
+}
+
+// Quotes
+blockquote:before,
+blockquote:after {
+ content: "";
+}
+
+// Addresses
+address {
+ margin-bottom: @line-height-computed;
+ font-style: normal;
+ line-height: @line-height-base;
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/utilities.less b/MVC/Content/css/themes/bootstrap-less/utilities.less
new file mode 100644
index 0000000..c0becab
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/utilities.less
@@ -0,0 +1,57 @@
+//
+// Utility classes
+// --------------------------------------------------
+
+
+// Floats
+// -------------------------
+
+.clearfix {
+ .clearfix();
+}
+.center-block {
+ .center-block();
+}
+.pull-right {
+ float: right !important;
+}
+.pull-left {
+ float: left !important;
+}
+
+
+// Toggling content
+// -------------------------
+
+// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1
+.hide {
+ display: none !important;
+}
+.show {
+ display: block !important;
+}
+.invisible {
+ visibility: hidden;
+}
+.text-hide {
+ .text-hide();
+}
+
+
+// Hide from screenreaders and browsers
+//
+// Credit: HTML5 Boilerplate
+
+.hidden {
+ display: none !important;
+ visibility: hidden !important;
+}
+
+
+// For Affix plugin
+// -------------------------
+
+.affix {
+ position: fixed;
+ .translate3d(0, 0, 0);
+}
diff --git a/MVC/Content/css/themes/bootstrap-less/variables.less b/MVC/Content/css/themes/bootstrap-less/variables.less
new file mode 100644
index 0000000..582f0f8
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/variables.less
@@ -0,0 +1,846 @@
+//
+// Variables
+// --------------------------------------------------
+
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+@gray-darker: lighten(#000, 13.5%); // #222
+@gray-dark: lighten(#000, 20%); // #333
+@gray: lighten(#000, 33.5%); // #555
+@gray-light: lighten(#000, 46.7%); // #777
+@gray-lighter: lighten(#000, 93.5%); // #eee
+
+@brand-primary: #428bca;
+@brand-success: #5cb85c;
+@brand-info: #5bc0de;
+@brand-warning: #f0ad4e;
+@brand-danger: #d9534f;
+
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for ``.
+@body-bg: #fff;
+//** Global text color on ``.
+@text-color: @gray-dark;
+
+//** Global textual link color.
+@link-color: @brand-primary;
+//** Link hover color set via `darken()` function.
+@link-hover-color: darken(@link-color, 15%);
+
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif;
+@font-family-serif: Georgia, "Times New Roman", Times, serif;
+//** Default monospace fonts for ``, ``, and ``.
+@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base: @font-family-sans-serif;
+
+@font-size-base: 14px;
+@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
+@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
+
+@font-size-h1: floor((@font-size-base * 2.6)); // ~36px
+@font-size-h2: floor((@font-size-base * 2.15)); // ~30px
+@font-size-h3: ceil((@font-size-base * 1.7)); // ~24px
+@font-size-h4: ceil((@font-size-base * 1.25)); // ~18px
+@font-size-h5: @font-size-base;
+@font-size-h6: ceil((@font-size-base * 0.85)); // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+@line-height-base: 1.428571429; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
+
+//** By default, this inherits from the ``.
+@headings-font-family: inherit;
+@headings-font-weight: 500;
+@headings-line-height: 1.1;
+@headings-color: inherit;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+@icon-font-path: "../fonts/";
+//** File name for all font files.
+@icon-font-name: "glyphicons-halflings-regular";
+//** Element ID within SVG icon file.
+@icon-font-svg-id: "glyphicons_halflingsregular";
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+@padding-base-vertical: 6px;
+@padding-base-horizontal: 12px;
+
+@padding-large-vertical: 10px;
+@padding-large-horizontal: 16px;
+
+@padding-small-vertical: 5px;
+@padding-small-horizontal: 10px;
+
+@padding-xs-vertical: 1px;
+@padding-xs-horizontal: 5px;
+
+@line-height-large: 1.33;
+@line-height-small: 1.5;
+
+@border-radius-base: 4px;
+@border-radius-large: 6px;
+@border-radius-small: 3px;
+
+//** Global color for active items (e.g., navs or dropdowns).
+@component-active-color: #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+@component-active-bg: @brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+@caret-width-base: 4px;
+//** Carets increase slightly in size for larger components.
+@caret-width-large: 5px;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for ``s and ` `s.
+@table-cell-padding: 8px;
+//** Padding for cells in `.table-condensed`.
+@table-condensed-cell-padding: 5px;
+
+//** Default background color used for all tables.
+@table-bg: transparent;
+//** Background color used for `.table-striped`.
+@table-bg-accent: #f9f9f9;
+//** Background color used for `.table-hover`.
+@table-bg-hover: #f5f5f5;
+@table-bg-active: @table-bg-hover;
+
+//** Border color for table and cell borders.
+@table-border-color: #ddd;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+@btn-font-weight: normal;
+
+@btn-default-color: #333;
+@btn-default-bg: #fff;
+@btn-default-border: #ccc;
+
+@btn-primary-color: #fff;
+@btn-primary-bg: @brand-primary;
+@btn-primary-border: darken(@btn-primary-bg, 5%);
+
+@btn-success-color: #fff;
+@btn-success-bg: @brand-success;
+@btn-success-border: darken(@btn-success-bg, 5%);
+
+@btn-info-color: #fff;
+@btn-info-bg: @brand-info;
+@btn-info-border: darken(@btn-info-bg, 5%);
+
+@btn-warning-color: #fff;
+@btn-warning-bg: @brand-warning;
+@btn-warning-border: darken(@btn-warning-bg, 5%);
+
+@btn-danger-color: #fff;
+@btn-danger-bg: @brand-danger;
+@btn-danger-border: darken(@btn-danger-bg, 5%);
+
+@btn-link-disabled-color: @gray-light;
+
+
+//== Forms
+//
+//##
+
+//** ` ` background color
+@input-bg: #fff;
+//** ` ` background color
+@input-bg-disabled: @gray-lighter;
+
+//** Text color for ` `s
+@input-color: @gray;
+//** ` ` border color
+@input-border: #ccc;
+//** ` ` border radius
+@input-border-radius: @border-radius-base;
+//** Border color for inputs on focus
+@input-border-focus: #66afe9;
+
+//** Placeholder text color
+@input-color-placeholder: @gray-light;
+
+//** Default `.form-control` height
+@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
+//** Large `.form-control` height
+@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+//** Small `.form-control` height
+@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+@legend-color: @gray-dark;
+@legend-border-color: #e5e5e5;
+
+//** Background color for textual input addons
+@input-group-addon-bg: @gray-lighter;
+//** Border color for textual input addons
+@input-group-addon-border-color: @input-border;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+@dropdown-bg: #fff;
+//** Dropdown menu `border-color`.
+@dropdown-border: rgba(0,0,0,.15);
+//** Dropdown menu `border-color` **for IE8**.
+@dropdown-fallback-border: #ccc;
+//** Divider color for between dropdown items.
+@dropdown-divider-bg: #e5e5e5;
+
+//** Dropdown link text color.
+@dropdown-link-color: @gray-dark;
+//** Hover color for dropdown links.
+@dropdown-link-hover-color: darken(@gray-dark, 5%);
+//** Hover background for dropdown links.
+@dropdown-link-hover-bg: #f5f5f5;
+
+//** Active dropdown menu item text color.
+@dropdown-link-active-color: @component-active-color;
+//** Active dropdown menu item background color.
+@dropdown-link-active-bg: @component-active-bg;
+
+//** Disabled dropdown menu item background color.
+@dropdown-link-disabled-color: @gray-light;
+
+//** Text color for headers within dropdown menus.
+@dropdown-header-color: @gray-light;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+@dropdown-caret-color: #000;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+@zindex-navbar: 1000;
+@zindex-dropdown: 1000;
+@zindex-popover: 1060;
+@zindex-tooltip: 1070;
+@zindex-navbar-fixed: 1030;
+@zindex-modal-background: 1040;
+@zindex-modal: 1050;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `@screen-xs` as of v3.0.1
+@screen-xs: 480px;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+@screen-xs-min: @screen-xs;
+//** Deprecated `@screen-phone` as of v3.0.1
+@screen-phone: @screen-xs-min;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+@screen-sm: 768px;
+@screen-sm-min: @screen-sm;
+//** Deprecated `@screen-tablet` as of v3.0.1
+@screen-tablet: @screen-sm-min;
+
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+@screen-md: 992px;
+@screen-md-min: @screen-md;
+//** Deprecated `@screen-desktop` as of v3.0.1
+@screen-desktop: @screen-md-min;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+@screen-lg: 1200px;
+@screen-lg-min: @screen-lg;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+@screen-lg-desktop: @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max: (@screen-sm-min - 1);
+@screen-sm-max: (@screen-md-min - 1);
+@screen-md-max: (@screen-lg-min - 1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+@grid-columns: 12;
+//** Padding between columns. Gets divided in half for the left and right.
+@grid-gutter-width: 30px;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+@grid-float-breakpoint: @screen-sm-min;
+//** Point at which the navbar begins collapsing.
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+@container-tablet: ((720px + @grid-gutter-width));
+//** For `@screen-sm-min` and up.
+@container-sm: @container-tablet;
+
+// Medium screen / desktop
+@container-desktop: ((940px + @grid-gutter-width));
+//** For `@screen-md-min` and up.
+@container-md: @container-desktop;
+
+// Large screen / wide desktop
+@container-large-desktop: ((1140px + @grid-gutter-width));
+//** For `@screen-lg-min` and up.
+@container-lg: @container-large-desktop;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+@navbar-height: 50px;
+@navbar-margin-bottom: @line-height-computed;
+@navbar-border-radius: @border-radius-base;
+@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
+@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height: 340px;
+
+@navbar-default-color: #777;
+@navbar-default-bg: #f8f8f8;
+@navbar-default-border: darken(@navbar-default-bg, 6.5%);
+
+// Navbar links
+@navbar-default-link-color: #777;
+@navbar-default-link-hover-color: #333;
+@navbar-default-link-hover-bg: transparent;
+@navbar-default-link-active-color: #555;
+@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);
+@navbar-default-link-disabled-color: #ccc;
+@navbar-default-link-disabled-bg: transparent;
+
+// Navbar brand label
+@navbar-default-brand-color: @navbar-default-link-color;
+@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%);
+@navbar-default-brand-hover-bg: transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg: #ddd;
+@navbar-default-toggle-icon-bar-bg: #888;
+@navbar-default-toggle-border-color: #ddd;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+@navbar-inverse-color: @gray-light;
+@navbar-inverse-bg: #222;
+@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+@navbar-inverse-link-color: @gray-light;
+@navbar-inverse-link-hover-color: #fff;
+@navbar-inverse-link-hover-bg: transparent;
+@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
+@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-link-disabled-color: #444;
+@navbar-inverse-link-disabled-bg: transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color: @navbar-inverse-link-color;
+@navbar-inverse-brand-hover-color: #fff;
+@navbar-inverse-brand-hover-bg: transparent;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg: #333;
+@navbar-inverse-toggle-icon-bar-bg: #fff;
+@navbar-inverse-toggle-border-color: #333;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+@nav-link-padding: 10px 15px;
+@nav-link-hover-bg: @gray-lighter;
+
+@nav-disabled-link-color: @gray-light;
+@nav-disabled-link-hover-color: @gray-light;
+
+@nav-open-link-hover-color: #fff;
+
+//== Tabs
+@nav-tabs-border-color: #ddd;
+
+@nav-tabs-link-hover-border-color: @gray-lighter;
+
+@nav-tabs-active-link-hover-bg: @body-bg;
+@nav-tabs-active-link-hover-color: @gray;
+@nav-tabs-active-link-hover-border-color: #ddd;
+
+@nav-tabs-justified-link-border-color: #ddd;
+@nav-tabs-justified-active-link-border-color: @body-bg;
+
+//== Pills
+@nav-pills-border-radius: @border-radius-base;
+@nav-pills-active-link-hover-bg: @component-active-bg;
+@nav-pills-active-link-hover-color: @component-active-color;
+
+
+//== Pagination
+//
+//##
+
+@pagination-color: @link-color;
+@pagination-bg: #fff;
+@pagination-border: #ddd;
+
+@pagination-hover-color: @link-hover-color;
+@pagination-hover-bg: @gray-lighter;
+@pagination-hover-border: #ddd;
+
+@pagination-active-color: #fff;
+@pagination-active-bg: @brand-primary;
+@pagination-active-border: @brand-primary;
+
+@pagination-disabled-color: @gray-light;
+@pagination-disabled-bg: #fff;
+@pagination-disabled-border: #ddd;
+
+
+//== Pager
+//
+//##
+
+@pager-bg: @pagination-bg;
+@pager-border: @pagination-border;
+@pager-border-radius: 15px;
+
+@pager-hover-bg: @pagination-hover-bg;
+
+@pager-active-bg: @pagination-active-bg;
+@pager-active-color: @pagination-active-color;
+
+@pager-disabled-color: @pagination-disabled-color;
+
+
+//== Jumbotron
+//
+//##
+
+@jumbotron-padding: 30px;
+@jumbotron-color: inherit;
+@jumbotron-bg: @gray-lighter;
+@jumbotron-heading-color: inherit;
+@jumbotron-font-size: ceil((@font-size-base * 1.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+@state-success-text: #3c763d;
+@state-success-bg: #dff0d8;
+@state-success-border: darken(spin(@state-success-bg, -10), 5%);
+
+@state-info-text: #31708f;
+@state-info-bg: #d9edf7;
+@state-info-border: darken(spin(@state-info-bg, -10), 7%);
+
+@state-warning-text: #8a6d3b;
+@state-warning-bg: #fcf8e3;
+@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);
+
+@state-danger-text: #a94442;
+@state-danger-bg: #f2dede;
+@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+@tooltip-max-width: 200px;
+//** Tooltip text color
+@tooltip-color: #fff;
+//** Tooltip background color
+@tooltip-bg: #000;
+@tooltip-opacity: .9;
+
+//** Tooltip arrow width
+@tooltip-arrow-width: 5px;
+//** Tooltip arrow color
+@tooltip-arrow-color: @tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+@popover-bg: #fff;
+//** Popover maximum width
+@popover-max-width: 276px;
+//** Popover border color
+@popover-border-color: rgba(0,0,0,.2);
+//** Popover fallback border color
+@popover-fallback-border-color: #ccc;
+
+//** Popover title background color
+@popover-title-bg: darken(@popover-bg, 3%);
+
+//** Popover arrow width
+@popover-arrow-width: 10px;
+//** Popover arrow color
+@popover-arrow-color: #fff;
+
+//** Popover outer arrow width
+@popover-arrow-outer-width: (@popover-arrow-width + 1);
+//** Popover outer arrow color
+@popover-arrow-outer-color: fadein(@popover-border-color, 5%);
+//** Popover outer arrow fallback color
+@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+@label-default-bg: @gray-light;
+//** Primary label background color
+@label-primary-bg: @brand-primary;
+//** Success label background color
+@label-success-bg: @brand-success;
+//** Info label background color
+@label-info-bg: @brand-info;
+//** Warning label background color
+@label-warning-bg: @brand-warning;
+//** Danger label background color
+@label-danger-bg: @brand-danger;
+
+//** Default label text color
+@label-color: #fff;
+//** Default text color of a linked label
+@label-link-hover-color: #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+@modal-inner-padding: 15px;
+
+//** Padding applied to the modal title
+@modal-title-padding: 15px;
+//** Modal title line-height
+@modal-title-line-height: @line-height-base;
+
+//** Background color of modal content area
+@modal-content-bg: #fff;
+//** Modal content border color
+@modal-content-border-color: rgba(0,0,0,.2);
+//** Modal content border color **for IE8**
+@modal-content-fallback-border-color: #999;
+
+//** Modal backdrop background color
+@modal-backdrop-bg: #000;
+//** Modal backdrop opacity
+@modal-backdrop-opacity: .5;
+//** Modal header border color
+@modal-header-border-color: #e5e5e5;
+//** Modal footer border color
+@modal-footer-border-color: @modal-header-border-color;
+
+@modal-lg: 900px;
+@modal-md: 600px;
+@modal-sm: 300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+@alert-padding: 15px;
+@alert-border-radius: @border-radius-base;
+@alert-link-font-weight: bold;
+
+@alert-success-bg: @state-success-bg;
+@alert-success-text: @state-success-text;
+@alert-success-border: @state-success-border;
+
+@alert-info-bg: @state-info-bg;
+@alert-info-text: @state-info-text;
+@alert-info-border: @state-info-border;
+
+@alert-warning-bg: @state-warning-bg;
+@alert-warning-text: @state-warning-text;
+@alert-warning-border: @state-warning-border;
+
+@alert-danger-bg: @state-danger-bg;
+@alert-danger-text: @state-danger-text;
+@alert-danger-border: @state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+@progress-bg: #f5f5f5;
+//** Progress bar text color
+@progress-bar-color: #fff;
+
+//** Default progress bar color
+@progress-bar-bg: @brand-primary;
+//** Success progress bar color
+@progress-bar-success-bg: @brand-success;
+//** Warning progress bar color
+@progress-bar-warning-bg: @brand-warning;
+//** Danger progress bar color
+@progress-bar-danger-bg: @brand-danger;
+//** Info progress bar color
+@progress-bar-info-bg: @brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+@list-group-bg: #fff;
+//** `.list-group-item` border color
+@list-group-border: #ddd;
+//** List group border radius
+@list-group-border-radius: @border-radius-base;
+
+//** Background color of single list items on hover
+@list-group-hover-bg: #f5f5f5;
+//** Text color of active list items
+@list-group-active-color: @component-active-color;
+//** Background color of active list items
+@list-group-active-bg: @component-active-bg;
+//** Border color of active list elements
+@list-group-active-border: @list-group-active-bg;
+//** Text color for content within active list items
+@list-group-active-text-color: lighten(@list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+@list-group-disabled-color: @gray-light;
+//** Background color of disabled list items
+@list-group-disabled-bg: @gray-lighter;
+//** Text color for content within disabled list items
+@list-group-disabled-text-color: @list-group-disabled-color;
+
+@list-group-link-color: #555;
+@list-group-link-hover-color: @list-group-link-color;
+@list-group-link-heading-color: #333;
+
+
+//== Panels
+//
+//##
+
+@panel-bg: #fff;
+@panel-body-padding: 15px;
+@panel-heading-padding: 10px 15px;
+@panel-footer-padding: @panel-heading-padding;
+@panel-border-radius: @border-radius-base;
+
+//** Border color for elements within panels
+@panel-inner-border: #ddd;
+@panel-footer-bg: #f5f5f5;
+
+@panel-default-text: @gray-dark;
+@panel-default-border: #ddd;
+@panel-default-heading-bg: #f5f5f5;
+
+@panel-primary-text: #fff;
+@panel-primary-border: @brand-primary;
+@panel-primary-heading-bg: @brand-primary;
+
+@panel-success-text: @state-success-text;
+@panel-success-border: @state-success-border;
+@panel-success-heading-bg: @state-success-bg;
+
+@panel-info-text: @state-info-text;
+@panel-info-border: @state-info-border;
+@panel-info-heading-bg: @state-info-bg;
+
+@panel-warning-text: @state-warning-text;
+@panel-warning-border: @state-warning-border;
+@panel-warning-heading-bg: @state-warning-bg;
+
+@panel-danger-text: @state-danger-text;
+@panel-danger-border: @state-danger-border;
+@panel-danger-heading-bg: @state-danger-bg;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+@thumbnail-padding: 4px;
+//** Thumbnail background color
+@thumbnail-bg: @body-bg;
+//** Thumbnail border color
+@thumbnail-border: #ddd;
+//** Thumbnail border radius
+@thumbnail-border-radius: @border-radius-base;
+
+//** Custom text color for thumbnail captions
+@thumbnail-caption-color: @text-color;
+//** Padding around the thumbnail caption
+@thumbnail-caption-padding: 9px;
+
+
+//== Wells
+//
+//##
+
+@well-bg: #f5f5f5;
+@well-border: darken(@well-bg, 7%);
+
+
+//== Badges
+//
+//##
+
+@badge-color: #fff;
+//** Linked badge text color on hover
+@badge-link-hover-color: #fff;
+@badge-bg: @gray-light;
+
+//** Badge text color in active nav link
+@badge-active-color: @link-color;
+//** Badge background color in active nav link
+@badge-active-bg: #fff;
+
+@badge-font-weight: bold;
+@badge-line-height: 1;
+@badge-border-radius: 10px;
+
+
+//== Breadcrumbs
+//
+//##
+
+@breadcrumb-padding-vertical: 8px;
+@breadcrumb-padding-horizontal: 15px;
+//** Breadcrumb background color
+@breadcrumb-bg: #f5f5f5;
+//** Breadcrumb text color
+@breadcrumb-color: #ccc;
+//** Text color of current page in the breadcrumb
+@breadcrumb-active-color: @gray-light;
+//** Textual separator for between breadcrumb elements
+@breadcrumb-separator: "/";
+
+
+//== Carousel
+//
+//##
+
+@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
+
+@carousel-control-color: #fff;
+@carousel-control-width: 15%;
+@carousel-control-opacity: .5;
+@carousel-control-font-size: 20px;
+
+@carousel-indicator-active-bg: #fff;
+@carousel-indicator-border-color: #fff;
+
+@carousel-caption-color: #fff;
+
+
+//== Close
+//
+//##
+
+@close-font-weight: bold;
+@close-color: #000;
+@close-text-shadow: 0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+@code-color: #c7254e;
+@code-bg: #f9f2f4;
+
+@kbd-color: #fff;
+@kbd-bg: #333;
+
+@pre-bg: #f5f5f5;
+@pre-color: @gray-dark;
+@pre-border-color: #ccc;
+@pre-scrollable-max-height: 340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+@component-offset-horizontal: 180px;
+//** Text muted color
+@text-muted: @gray-light;
+//** Abbreviations and acronyms border color
+@abbr-border-color: @gray-light;
+//** Headings small color
+@headings-small-color: @gray-light;
+//** Blockquote small color
+@blockquote-small-color: @gray-light;
+//** Blockquote font size
+@blockquote-font-size: (@font-size-base * 1.25);
+//** Blockquote border color
+@blockquote-border-color: @gray-lighter;
+//** Page header border color
+@page-header-border-color: @gray-lighter;
+//** Width of horizontal description list titles
+@dl-horizontal-offset: @component-offset-horizontal;
+//** Horizontal line color.
+@hr-border: @gray-lighter;
+
+
diff --git a/MVC/Content/css/themes/bootstrap-less/wells.less b/MVC/Content/css/themes/bootstrap-less/wells.less
new file mode 100644
index 0000000..15d072b
--- /dev/null
+++ b/MVC/Content/css/themes/bootstrap-less/wells.less
@@ -0,0 +1,29 @@
+//
+// Wells
+// --------------------------------------------------
+
+
+// Base class
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: @well-bg;
+ border: 1px solid @well-border;
+ border-radius: @border-radius-base;
+ .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
+ blockquote {
+ border-color: #ddd;
+ border-color: rgba(0,0,0,.15);
+ }
+}
+
+// Sizes
+.well-lg {
+ padding: 24px;
+ border-radius: @border-radius-large;
+}
+.well-sm {
+ padding: 9px;
+ border-radius: @border-radius-small;
+}
diff --git a/MVC/Content/fonts/glyphicons-halflings-regular.eot b/MVC/Content/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000..4a4ca86
Binary files /dev/null and b/MVC/Content/fonts/glyphicons-halflings-regular.eot differ
diff --git a/MVC/Content/fonts/glyphicons-halflings-regular.svg b/MVC/Content/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000..e3e2dc7
--- /dev/null
+++ b/MVC/Content/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/MVC/Content/fonts/glyphicons-halflings-regular.ttf b/MVC/Content/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000..67fa00b
Binary files /dev/null and b/MVC/Content/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/MVC/Content/fonts/glyphicons-halflings-regular.woff b/MVC/Content/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000..8c54182
Binary files /dev/null and b/MVC/Content/fonts/glyphicons-halflings-regular.woff differ
diff --git a/MVC/Content/scripts/_references.js b/MVC/Content/scripts/_references.js
new file mode 100644
index 0000000..bf59292
Binary files /dev/null and b/MVC/Content/scripts/_references.js differ
diff --git a/MVC/Content/scripts/custom/site.js b/MVC/Content/scripts/custom/site.js
new file mode 100644
index 0000000..5f28270
--- /dev/null
+++ b/MVC/Content/scripts/custom/site.js
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/MVC/Content/scripts/lib/bootstrap/bootstrap.js b/MVC/Content/scripts/lib/bootstrap/bootstrap.js
new file mode 100644
index 0000000..53da1c7
--- /dev/null
+++ b/MVC/Content/scripts/lib/bootstrap/bootstrap.js
@@ -0,0 +1,2114 @@
+/*!
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.2.0
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2014 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.2.0
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2014 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.2.0'
+
+ 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)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.hasClass('alert') ? $this : $this.parent()
+ }
+
+ $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(150) :
+ 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.2.0
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2014 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.2.0'
+
+ 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 = state + 'Text'
+
+ if (data.resetText == null) $el.data('resetText', $el[val]())
+
+ $el[val](data[state] == null ? this.options[state] : data[state])
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d)
+ }
+ }, 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') && this.$element.hasClass('active')) changed = false
+ else $parent.find('.active').removeClass('active')
+ }
+ if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
+ }
+
+ if (changed) 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)
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+ Plugin.call($btn, 'toggle')
+ e.preventDefault()
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.2.0
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2014 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).on('keydown.bs.carousel', $.proxy(this.keydown, this))
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused =
+ this.sliding =
+ this.interval =
+ this.$active =
+ this.$items = null
+
+ this.options.pause == 'hover' && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+ }
+
+ Carousel.VERSION = '3.2.0'
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ 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.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[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 || $active[type]()
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var fallback = type == 'next' ? 'first' : 'last'
+ var that = this
+
+ if (!$next.length) {
+ if (!this.options.wrap) return
+ $next = this.$element.find('.item')[fallback]()
+ }
+
+ 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($active.css('transition-duration').slice(0, -1) * 1000)
+ } 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
+ // =================
+
+ $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', 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()
+ })
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ Plugin.call($carousel, $carousel.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.2.0
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.transitioning = null
+
+ if (this.options.parent) this.$parent = $(this.options.parent)
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.VERSION = '3.2.0'
+
+ 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 startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var actives = this.$parent && this.$parent.find('> .panel > .in')
+
+ if (actives && actives.length) {
+ var hasData = actives.data('bs.collapse')
+ if (hasData && hasData.transitioning) return
+ Plugin.call(actives, 'hide')
+ hasData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')[dimension](0)
+
+ 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(350)[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')
+ .removeClass('in')
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .trigger('hidden.bs.collapse')
+ .removeClass('collapsing')
+ .addClass('collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(350)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+
+ // 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 && option == 'show') option = !option
+ 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 href
+ var $this = $(this)
+ var target = $this.attr('data-target')
+ || e.preventDefault()
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+ var $target = $(target)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+ var parent = $this.attr('data-parent')
+ var $parent = parent && $(parent)
+
+ if (!data || !data.transitioning) {
+ if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
+ $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
+ }
+
+ Plugin.call($target, option)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.2.0
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2014 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.2.0'
+
+ 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
+ $('
').insertAfter($(this)).on('click', clearMenus)
+ }
+
+ var relatedTarget = { relatedTarget: this }
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this.trigger('focus')
+
+ $parent
+ .toggleClass('open')
+ .trigger('shown.bs.dropdown', relatedTarget)
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27)/.test(e.keyCode)) 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 || (isActive && e.keyCode == 27)) {
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
+ return $this.trigger('click')
+ }
+
+ var desc = ' li:not(.divider):visible a'
+ var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
+
+ if (!$items.length) return
+
+ var index = $items.index($items.filter(':focus'))
+
+ if (e.keyCode == 38 && index > 0) index-- // up
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq(index).trigger('focus')
+ }
+
+ function clearMenus(e) {
+ if (e && e.which === 3) return
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $parent = getParent($(this))
+ var relatedTarget = { relatedTarget: this }
+ if (!$parent.hasClass('open')) return
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+ if (e.isDefaultPrevented()) return
+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
+ })
+ }
+
+ 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()
+ }
+
+
+ // 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 + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.2.0
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2014 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.$backdrop =
+ this.isShown = null
+ this.scrollbarWidth = 0
+
+ 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.2.0'
+
+ 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.$body.addClass('modal-open')
+
+ this.setScrollbar()
+ this.escape()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ 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)
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element
+ .addClass('in')
+ .attr('aria-hidden', false)
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$element.find('.modal-dialog') // wait for modal to slide in
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
+ })
+ .emulateTransitionEnd(300) :
+ 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.$body.removeClass('modal-open')
+
+ this.resetScrollbar()
+ this.escape()
+
+ $(document).off('focusin.bs.modal')
+
+ this.$element
+ .removeClass('in')
+ .attr('aria-hidden', true)
+ .off('click.dismiss.bs.modal')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(300) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (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('keyup.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keyup.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ 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 = $('
')
+ .appendTo(this.$body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus.call(this.$element[0])
+ : this.hide.call(this)
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(150) :
+ 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(150) :
+ callbackRemove()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ Modal.prototype.checkScrollbar = function () {
+ if (document.body.clientWidth >= window.innerWidth) return
+ this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
+ }
+
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', '')
+ }
+
+ 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.2.0
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2014 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 =
+ this.options =
+ this.enabled =
+ this.timeout =
+ this.hoverState =
+ this.$element = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.VERSION = '3.2.0'
+
+ 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 && $(this.options.viewport.selector || this.options.viewport)
+
+ 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)
+ }
+
+ 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.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)
+ }
+
+ 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(document.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)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var orgPlacement = placement
+ var $parent = this.$element.parent()
+ var parentDim = this.getPosition($parent)
+
+ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :
+ placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+
+ var complete = function () {
+ that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(150) :
+ 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 = offset.top + marginTop
+ offset.left = 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 arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowPosition = delta.left ? 'left' : 'top'
+ var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
+
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
+ this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
+ }
+
+ 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 () {
+ var that = this
+ var $tip = this.tip()
+ var e = $.Event('hide.bs.' + this.type)
+
+ this.$element.removeAttr('aria-describedby')
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ that.$element.trigger('hidden.bs.' + that.type)
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(150) :
+ 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'
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
+ scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
+ width: isBody ? $(window).width() : $element.outerWidth(),
+ height: isBody ? $(window).height() : $element.outerHeight()
+ }, isBody ? { top: 0, left: 0 } : $element.offset())
+ }
+
+ 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.width) { // 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 () {
+ return (this.$tip = this.$tip || $(this.options.template))
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+ }
+
+ Tooltip.prototype.validate = function () {
+ if (!this.$element[0].parentNode) {
+ this.hide()
+ this.$element = null
+ this.options = null
+ }
+ }
+
+ 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)
+ }
+ }
+
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+
+ Tooltip.prototype.destroy = function () {
+ clearTimeout(this.timeout)
+ this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
+ }
+
+
+ // 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 && option == 'destroy') 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.2.0
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2014 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.2.0'
+
+ 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').empty()[ // 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.prototype.tip = function () {
+ if (!this.$tip) this.$tip = $(this.options.template)
+ return this.$tip
+ }
+
+
+ // 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 && option == 'destroy') 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.2.0
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ var process = $.proxy(this.process, this)
+
+ this.$body = $('body')
+ this.$scrollElement = $(element).is('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', process)
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.2.0'
+
+ 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 offsetMethod = 'offset'
+ var offsetBase = 0
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ var self = this
+
+ 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 () {
+ self.offsets.push(this[0])
+ self.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]) {
+ return activeTarget != (i = targets[0]) && this.activate(i)
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+
+ 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 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.2.0
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ this.element = $(element)
+ }
+
+ Tab.VERSION = '3.2.0'
+
+ 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')[0]
+ var e = $.Event('show.bs.tab', {
+ relatedTarget: previous
+ })
+
+ $this.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.closest('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: previous
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && $active.hasClass('fade')
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+
+ element.addClass('active')
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu')) {
+ element.closest('li.dropdown').addClass('active')
+ }
+
+ callback && callback()
+ }
+
+ transition ?
+ $active
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(150) :
+ 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
+ // ============
+
+ $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
+ e.preventDefault()
+ Plugin.call($(this), 'show')
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.2.0
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2014 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 =
+ this.unpin =
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.2.0'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ 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 scrollHeight = $(document).height()
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+
+ 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.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
+ offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
+ offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
+
+ if (this.affixed === affix) return
+ 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($.Event(affixType.replace('affix', 'affixed')))
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - this.$element.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) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
+ })
+ })
+
+}(jQuery);
diff --git a/MVC/Content/scripts/lib/bootstrap/bootstrap.min.js b/MVC/Content/scripts/lib/bootstrap/bootstrap.min.js
new file mode 100644
index 0000000..7c1561a
--- /dev/null
+++ b/MVC/Content/scripts/lib/bootstrap/bootstrap.min.js
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires 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){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(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.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):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.2.0",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]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},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")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&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);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(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).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){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.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},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(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&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},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",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(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){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.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").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(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 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.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('
').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j ').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);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)),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.leave=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)),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 c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-kg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.width&&(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(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},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))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};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"!=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.2.0",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").empty()[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")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};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){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("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",e),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.2.0",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="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.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[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.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},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(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=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},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=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};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||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/MVC/Content/scripts/lib/jquery/jquery-1.8.2.intellisense.js b/MVC/Content/scripts/lib/jquery/jquery-1.8.2.intellisense.js
new file mode 100644
index 0000000..5514196
--- /dev/null
+++ b/MVC/Content/scripts/lib/jquery/jquery-1.8.2.intellisense.js
@@ -0,0 +1,2494 @@
+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.
+ /// A set of key/value pairs that configure the default Ajax request. All options are optional.
+ ///
+ },
+ '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. We recommend against using this property; please try to use feature detection instead (see jQuery.support). jQuery.browser may be moved to a plugin in a future release of jQuery.
+ ///
+ },
+ 'browser.version': function() {
+ /// The version number of the rendering engine for the user's browser.
+ ///
+ },
+ '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 within another DOM element.
+ /// The DOM element that may contain the other element.
+ /// The DOM element that may be contained by 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.
+ ///
+ ///
+ },
+ '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.
+ ///
+ ///
+ },
+ 'get': function() {
+ ///
+ /// Load data from the server using a HTTP GET request.
+ /// A string containing the URL to which the request is sent.
+ /// A map or string that is sent to the server with the request.
+ /// A callback function that is executed if the request succeeds.
+ /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
+ ///
+ ///
+ },
+ '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 map 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 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.
+ ///
+ ///
+ },
+ '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 map or string that is sent to the server with the request.
+ /// A callback function that is executed if the request succeeds.
+ /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
+ ///
+ ///
+ },
+ '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).
+ ///
+ ///
+ },
+ '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.
+ },
+ '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, that is 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 or rejected.
+ /// 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 or rejected.
+ /// 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 data map 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.
+ ///
+ },
+ '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.
+ ///
+ ///
+ },
+ 'addClass': function() {
+ ///
+ /// Adds the specified class(es) to each of the set of matched elements.
+ /// One or more class names 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 Ajax Event.
+ /// 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.
+ /// A map of CSS properties that the animation will move toward.
+ /// A string or number determining how long the animation will run.
+ /// A string indicating which easing function to use for the transition.
+ /// A function to call once the animation is complete.
+ ///
+ ///
+ ///
+ /// Perform a custom animation of a set of CSS properties.
+ /// A map of CSS properties that the animation will move toward.
+ /// A map of additional options to pass to the method. Supported keys: duration: A string or number determining how long the animation will run.easing: A string indicating which easing function to use for the transition.complete: A function to call once the animation is complete.step: A function to be called after each step of the animation.queue: A Boolean indicating whether to place the animation in the effects queue. If false, the animation will begin immediately. As of jQuery 1.7, the queue option can also accept a string, in which case the animation is added to the queue represented by that string.specialEasing: A map of one or more of the CSS properties defined by the properties argument and their corresponding easing functions (added 1.4).
+ ///
+ ///
+ },
+ '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.
+ /// A map 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.
+ /// A map of 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.
+ /// A map of 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.
+ /// A map of 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.
+ /// A map of 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.
+ /// A map of 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.
+ },
+ '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.
+ /// A map of 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() {
+ ///
+ /// Get the first element that matches the selector, beginning at the current element and progressing up through the DOM tree.
+ /// A string containing a selector expression to match elements against.
+ ///
+ ///
+ ///
+ /// Get the first element that matches the selector, beginning at the current element and progressing up through 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.
+ ///
+ ///
+ ///
+ /// Get the first element that matches the selector, beginning at the current element and progressing up through the DOM tree.
+ /// A jQuery object to match elements against.
+ ///
+ ///
+ ///
+ /// Get the first element that matches the selector, beginning at the current element and progressing up through 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.
+ /// A map 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.
+ /// A map of 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.
+ /// A map of 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 map 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 an event handler 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 an event handler previously attached using .live() from the elements.
+ /// A map 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() {
+ ///
+ /// Reduce the set of matched elements to the one at the specified index.
+ /// An integer indicating the 0-based position of the element.
+ ///
+ ///
+ ///
+ /// Reduce the set of matched elements to the one at the specified index.
+ /// An integer indicating the position of the element, counting backwards from the last element in the set.
+ ///
+ ///
+ },
+ '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.
+ /// A map of 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 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 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.
+ ///
+ ///
+ },
+ '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.
+ ///
+ ///
+ },
+ 'first': function() {
+ /// Selects the first matched element.
+ },
+ 'first-child': function() {
+ /// Selects all elements that are the first child of their parent.
+ },
+ '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.
+ /// A map of 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.
+ /// A map of 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.
+ /// A map of data that will be passed to the event handler.
+ /// A function to execute each time the event is triggered.
+ ///
+ ///
+ },
+ 'get': function() {
+ ///
+ /// Retrieve 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.
+ ///
+ },
+ '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 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.
+ /// 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 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.
+ /// 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.
+ /// A map of 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.
+ /// A map of 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.
+ /// A map of data that will be passed to the event handler.
+ /// A function to execute each time the event is triggered.
+ ///
+ ///
+ },
+ 'last': function() {
+ /// Selects the last matched element.
+ },
+ 'last-child': function() {
+ /// Selects all elements that are the last child of their parent.
+ },
+ '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.
+ /// A map of 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 map 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.
+ /// A map of 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.
+ ///
+ },
+ '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.
+ /// A map of 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.
+ /// A map of 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.
+ /// A map of 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.
+ /// A map of 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.
+ /// A map of 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.
+ /// A map of 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.
+ /// A map of 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) )
+ ///
+ },
+ '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.
+ /// A map 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.
+ /// A map 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.
+ /// A map of 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.
+ /// A map 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.
+ },
+ '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.
+ /// A map 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 on the matched elements.
+ /// 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 elements.
+ /// 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 set.
+ ///
+ ///
+ },
+ 'replaceAll': function() {
+ ///
+ /// Replace each target element with the set of matched elements.
+ /// A selector expression indicating which element(s) to replace.
+ ///
+ ///
+ },
+ 'replaceWith': function() {
+ ///
+ /// Replace each element in the set of matched elements with the provided new content.
+ /// 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.
+ /// 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.
+ /// A map of data that will be passed to the event handler.
+ /// A function to execute each time the event is triggered.
+ ///
+ ///
+ },
+ '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.
+ /// A map of 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.
+ /// A map of 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.
+ },
+ '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 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 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 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 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.
+ /// A map of data that will be passed to the event handler.
+ /// A function to execute each time the event is triggered.
+ ///
+ ///
+ },
+ '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 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.
+ ///
+ ///
+ },
+ '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.
+ /// A map 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 map 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.
+ /// An HTML snippet, selector expression, jQuery object, or DOM element 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.
+ /// An HTML snippet, selector expression, jQuery object, or DOM element 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.
+ /// 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 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.
+ /// An existing jQuery object to clone.
+ ///
+ ///
+ },
+});
+
diff --git a/MVC/Content/scripts/lib/jquery/jquery-1.8.2.js b/MVC/Content/scripts/lib/jquery/jquery-1.8.2.js
new file mode 100644
index 0000000..12c7797
--- /dev/null
+++ b/MVC/Content/scripts/lib/jquery/jquery-1.8.2.js
@@ -0,0 +1,9440 @@
+/*!
+ * jQuery JavaScript Library v1.8.2
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: Thu Sep 20 2012 21:13:05 GMT-0400 (Eastern Daylight Time)
+ */
+(function( window, undefined ) {
+var
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // The deferred used on DOM ready
+ readyList,
+
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+ location = window.location,
+ navigator = window.navigator,
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // Save a reference to some core methods
+ core_push = Array.prototype.push,
+ core_slice = Array.prototype.slice,
+ core_indexOf = Array.prototype.indexOf,
+ core_toString = Object.prototype.toString,
+ core_hasOwn = Object.prototype.hasOwnProperty,
+ core_trim = String.prototype.trim,
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context, rootjQuery );
+ },
+
+ // Used for matching numbers
+ core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,
+
+ // Used for detecting and trimming whitespace
+ core_rnotwhite = /\S/,
+ core_rspace = /\s+/,
+
+ // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over to avoid XSS via location.hash (#9521)
+ rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+ // JSON RegExp
+ rvalidchars = /^[\],:{}\s]*$/,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,
+
+ // Matches dashed string for camelizing
+ rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([\da-z])/gi,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function( all, letter ) {
+ return ( letter + "" ).toUpperCase();
+ },
+
+ // The ready event handler and self cleanup method
+ DOMContentLoaded = function() {
+ if ( document.addEventListener ) {
+ document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+ jQuery.ready();
+ } else if ( document.readyState === "complete" ) {
+ // we're here because readyState === "complete" in oldIE
+ // which is good enough for us to call the dom ready!
+ document.detachEvent( "onreadystatechange", DOMContentLoaded );
+ jQuery.ready();
+ }
+ },
+
+ // [[Class]] -> type pairs
+ class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+ constructor: jQuery,
+ init: function( selector, context, rootjQuery ) {
+ var match, elem, ret, doc;
+
+ // Handle $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = 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;
+ doc = ( context && context.nodeType ? context.ownerDocument || context : document );
+
+ // scripts is true for back-compat
+ selector = jQuery.parseHTML( match[1], doc, true );
+ if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+ this.attr.call( selector, context, true );
+ }
+
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || rootjQuery ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
+
+ if ( selector.selector !== undefined ) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The current version of jQuery being used
+ jquery: "1.8.2",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ return this.length;
+ },
+
+ toArray: function() {
+ return core_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 num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this[ this.length + num ] : this[ num ] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems, name, selector ) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge( this.constructor(), elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ ret.context = this.context;
+
+ if ( name === "find" ) {
+ ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+ } else if ( name ) {
+ ret.selector = this.selector + "." + name + "(" + selector + ")";
+ }
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ ready: function( fn ) {
+ // Add the callback
+ jQuery.ready.promise().done( fn );
+
+ return this;
+ },
+
+ eq: function( i ) {
+ i = +i;
+ return i === -1 ?
+ this.slice( i ) :
+ this.slice( i, i + 1 );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ slice: function() {
+ return this.pushStack( core_slice.apply( this, arguments ),
+ "slice", core_slice.call(arguments).join(",") );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: core_push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+
+ // Abort if there are pending holds or we're already ready
+ if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+ return;
+ }
+
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.trigger ) {
+ jQuery( document ).trigger("ready").off("ready");
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function( obj ) {
+ return jQuery.type(obj) === "array";
+ },
+
+ isWindow: function( obj ) {
+ return obj != null && obj == obj.window;
+ },
+
+ isNumeric: function( obj ) {
+ return !isNaN( parseFloat(obj) ) && isFinite( obj );
+ },
+
+ type: function( obj ) {
+ return obj == null ?
+ String( obj ) :
+ class2type[ core_toString.call(obj) ] || "object";
+ },
+
+ isPlainObject: function( obj ) {
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ try {
+ // Not own constructor property must be Object
+ if ( obj.constructor &&
+ !core_hasOwn.call(obj, "constructor") &&
+ !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+ } catch ( e ) {
+ // IE8,9 Will throw exceptions on certain host objects #9897
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+
+ var key;
+ for ( key in obj ) {}
+
+ return key === undefined || core_hasOwn.call( obj, key );
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ // data: string of html
+ // context (optional): If specified, the fragment will be created in this context, defaults to document
+ // scripts (optional): If true, will include scripts passed in the html string
+ parseHTML: function( data, context, scripts ) {
+ var parsed;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+ if ( typeof context === "boolean" ) {
+ scripts = context;
+ context = 0;
+ }
+ context = context || document;
+
+ // Single tag
+ if ( (parsed = rsingleTag.exec( data )) ) {
+ return [ context.createElement( parsed[1] ) ];
+ }
+
+ parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] );
+ return jQuery.merge( [],
+ (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes );
+ },
+
+ parseJSON: function( data ) {
+ if ( !data || typeof data !== "string") {
+ return null;
+ }
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
+
+ // Attempt to parse using the native JSON parser first
+ if ( window.JSON && window.JSON.parse ) {
+ return window.JSON.parse( data );
+ }
+
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+ .replace( rvalidtokens, "]" )
+ .replace( rvalidbraces, "")) ) {
+
+ return ( new Function( "return " + data ) )();
+
+ }
+ jQuery.error( "Invalid JSON: " + data );
+ },
+
+ // Cross-browser xml parsing
+ parseXML: function( data ) {
+ var xml, tmp;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+ try {
+ if ( window.DOMParser ) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } else { // IE
+ xml = new ActiveXObject( "Microsoft.XMLDOM" );
+ xml.async = "false";
+ xml.loadXML( data );
+ }
+ } catch( e ) {
+ xml = undefined;
+ }
+ if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+ },
+
+ noop: function() {},
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+ globalEval: function( data ) {
+ if ( data && core_rnotwhite.test( data ) ) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function( data ) {
+ window[ "eval" ].call( window, data );
+ } )( data );
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ },
+
+ // args is for internal usage only
+ each: function( obj, callback, args ) {
+ var name,
+ i = 0,
+ length = obj.length,
+ isObj = length === undefined || jQuery.isFunction( obj );
+
+ if ( args ) {
+ if ( isObj ) {
+ for ( name in obj ) {
+ if ( callback.apply( obj[ name ], args ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.apply( obj[ i++ ], args ) === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isObj ) {
+ for ( name in obj ) {
+ if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Use native String.trim function wherever possible
+ trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+ function( text ) {
+ return text == null ?
+ "" :
+ core_trim.call( text );
+ } :
+
+ // Otherwise use our own trimming functionality
+ function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var type,
+ ret = results || [];
+
+ if ( arr != null ) {
+ // The window, strings (and functions) also have 'length'
+ // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+ type = jQuery.type( arr );
+
+ if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) {
+ core_push.call( ret, arr );
+ } else {
+ jQuery.merge( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ var len;
+
+ if ( arr ) {
+ if ( core_indexOf ) {
+ return core_indexOf.call( arr, elem, i );
+ }
+
+ len = arr.length;
+ i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+ for ( ; i < len; i++ ) {
+ // Skip accessing in sparse arrays
+ if ( i in arr && arr[ i ] === elem ) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ var l = second.length,
+ i = first.length,
+ j = 0;
+
+ if ( typeof l === "number" ) {
+ for ( ; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var retVal,
+ ret = [],
+ i = 0,
+ length = elems.length;
+ inv = !!inv;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ retVal = !!callback( elems[ i ], i );
+ if ( inv !== retVal ) {
+ ret.push( elems[ i ] );
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var value, key,
+ ret = [],
+ i = 0,
+ length = elems.length,
+ // jquery objects are treated as arrays
+ isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+ // Go through the array, translating each of the items to their
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( key in elems ) {
+ value = callback( elems[ key ], key, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return ret.concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ 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 = core_slice.call( arguments, 2 );
+ proxy = function() {
+ return fn.apply( context, args.concat( core_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;
+ },
+
+ // Multifunctional method to get and set values of a collection
+ // The value/s can optionally be executed if it's a function
+ access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
+ var exec,
+ bulk = key == null,
+ i = 0,
+ length = elems.length;
+
+ // Sets many values
+ if ( key && typeof key === "object" ) {
+ for ( i in key ) {
+ jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
+ }
+ chainable = 1;
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ // Optionally, function values get executed if exec is true
+ exec = pass === undefined && jQuery.isFunction( value );
+
+ if ( bulk ) {
+ // Bulk operations only iterate when executing function values
+ if ( exec ) {
+ exec = fn;
+ fn = function( elem, key, value ) {
+ return exec.call( jQuery( elem ), value );
+ };
+
+ // Otherwise they run against the entire set
+ } else {
+ fn.call( elems, value );
+ fn = null;
+ }
+ }
+
+ if ( fn ) {
+ for (; i < length; i++ ) {
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ }
+ }
+
+ chainable = 1;
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call( elems ) :
+ length ? fn( elems[0], key ) : emptyGet;
+ },
+
+ now: function() {
+ return ( new Date() ).getTime();
+ }
+});
+
+jQuery.ready.promise = function( obj ) {
+ if ( !readyList ) {
+
+ readyList = jQuery.Deferred();
+
+ // Catch cases where $(document).ready() is called after the browser event has already occurred.
+ // we once tried to use readyState "interactive" here, but it caused issues like the one
+ // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ setTimeout( jQuery.ready, 1 );
+
+ // Standards-based browsers support DOMContentLoaded
+ } else if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", jQuery.ready, false );
+
+ // If IE event model is used
+ } else {
+ // Ensure firing before onload, maybe late but safe also for iframes
+ document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", jQuery.ready );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var top = false;
+
+ try {
+ top = window.frameElement == null && document.documentElement;
+ } catch(e) {}
+
+ if ( top && top.doScroll ) {
+ (function doScrollCheck() {
+ if ( !jQuery.isReady ) {
+
+ try {
+ // Use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ top.doScroll("left");
+ } catch(e) {
+ return setTimeout( doScrollCheck, 50 );
+ }
+
+ // and execute any waiting functions
+ jQuery.ready();
+ }
+ })();
+ }
+ }
+ }
+ return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+ var object = optionsCache[ options ] = {};
+ jQuery.each( options.split( core_rspace ), 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" ?
+ ( optionsCache[ options ] || createOptions( options ) ) :
+ jQuery.extend( {}, options );
+
+ var // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // Flag to know if list is currently firing
+ firing,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function( data ) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if ( list ) {
+ if ( stack ) {
+ if ( stack.length ) {
+ fire( stack.shift() );
+ }
+ } else if ( memory ) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+ // First, we save the current length
+ var start = list.length;
+ (function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ var type = jQuery.type( arg );
+ if ( type === "function" && ( !options.unique || !self.has( arg ) ) ) {
+ list.push( arg );
+ } else if ( arg && arg.length && type !== "string" ) {
+ // Inspect recursively
+ add( arg );
+ }
+ });
+ })( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if ( memory ) {
+ firingStart = start;
+ fire( memory );
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ if ( list ) {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+ // Handle firing indexes
+ if ( firing ) {
+ if ( index <= firingLength ) {
+ firingLength--;
+ }
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ }
+ });
+ }
+ return this;
+ },
+ // Control if a given callback is in the list
+ has: function( fn ) {
+ return jQuery.inArray( fn, list ) > -1;
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ list = [];
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function() {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function() {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function() {
+ stack = undefined;
+ if ( !memory ) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function() {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ if ( list && ( !fired || stack ) ) {
+ if ( firing ) {
+ stack.push( args );
+ } else {
+ fire( args );
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+jQuery.extend({
+
+ Deferred: function( func ) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+ [ "notify", "progress", jQuery.Callbacks("memory") ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ then: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+ var action = tuple[ 0 ],
+ fn = fns[ i ];
+ // deferred[ done | fail | progress ] for forwarding actions to newDefer
+ deferred[ tuple[1] ]( jQuery.isFunction( fn ) ?
+ function() {
+ var returned = fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise()
+ .done( newDefer.resolve )
+ .fail( newDefer.reject )
+ .progress( newDefer.notify );
+ } else {
+ newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+ }
+ } :
+ newDefer[ action ]
+ );
+ });
+ fns = null;
+ }).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 = {};
+
+ // Keep pipe for back-compat
+ promise.pipe = promise.then;
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 3 ];
+
+ // promise[ done | fail | progress ] = list.add
+ promise[ tuple[1] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(function() {
+ // state = [ resolved | rejected ]
+ state = stateString;
+
+ // [ reject_list | resolve_list ].disable; progress_list.lock
+ }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+ }
+
+ // deferred[ resolve | reject | notify ] = list.fire
+ deferred[ tuple[0] ] = list.fire;
+ 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( subordinate /* , ..., subordinateN */ ) {
+ var i = 0,
+ resolveValues = core_slice.call( arguments ),
+ length = resolveValues.length,
+
+ // the count of uncompleted subordinates
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+ deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+ // Update function for both resolve and progress values
+ updateFunc = function( i, contexts, values ) {
+ return function( value ) {
+ contexts[ i ] = this;
+ values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+ if( values === progressValues ) {
+ deferred.notifyWith( contexts, values );
+ } else if ( !( --remaining ) ) {
+ deferred.resolveWith( contexts, values );
+ }
+ };
+ },
+
+ progressValues, progressContexts, resolveContexts;
+
+ // add listeners to Deferred subordinates; treat others as resolved
+ if ( length > 1 ) {
+ progressValues = new Array( length );
+ progressContexts = new Array( length );
+ resolveContexts = new Array( length );
+ for ( ; i < length; i++ ) {
+ if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+ resolveValues[ i ].promise()
+ .done( updateFunc( i, resolveContexts, resolveValues ) )
+ .fail( deferred.reject )
+ .progress( updateFunc( i, progressContexts, progressValues ) );
+ } else {
+ --remaining;
+ }
+ }
+ }
+
+ // if we're not waiting on anything, resolve the master
+ if ( !remaining ) {
+ deferred.resolveWith( resolveContexts, resolveValues );
+ }
+
+ return deferred.promise();
+ }
+});
+jQuery.support = (function() {
+
+ var support,
+ all,
+ a,
+ select,
+ opt,
+ input,
+ fragment,
+ eventName,
+ i,
+ isSupported,
+ clickFn,
+ div = document.createElement("div");
+
+ // Preliminary tests
+ div.setAttribute( "className", "t" );
+ div.innerHTML = " a ";
+
+ all = div.getElementsByTagName("*");
+ a = div.getElementsByTagName("a")[ 0 ];
+ a.style.cssText = "top:1px;float:left;opacity:.5";
+
+ // Can't get basic test support
+ if ( !all || !all.length ) {
+ return {};
+ }
+
+ // First batch of supports tests
+ select = document.createElement("select");
+ opt = select.appendChild( document.createElement("option") );
+ input = div.getElementsByTagName("input")[ 0 ];
+
+ support = {
+ // IE strips leading whitespace when .innerHTML is used
+ leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ tbody: !div.getElementsByTagName("tbody").length,
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ htmlSerialize: !!div.getElementsByTagName("link").length,
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText instead)
+ style: /top/.test( a.getAttribute("style") ),
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ hrefNormalized: ( a.getAttribute("href") === "/a" ),
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ opacity: /^0.5/.test( a.style.opacity ),
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ cssFloat: !!a.style.cssFloat,
+
+ // Make sure that if no value is specified for a checkbox
+ // that it defaults to "on".
+ // (WebKit defaults to "" instead)
+ checkOn: ( input.value === "on" ),
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ optSelected: opt.selected,
+
+ // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+ getSetAttribute: div.className !== "t",
+
+ // Tests for enctype support on a form(#6743)
+ enctype: !!document.createElement("form").enctype,
+
+ // Makes sure cloning an html5 element does not cause problems
+ // Where outerHTML is undefined, this still works
+ html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>",
+
+ // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+ boxModel: ( document.compatMode === "CSS1Compat" ),
+
+ // Will be defined later
+ submitBubbles: true,
+ changeBubbles: true,
+ focusinBubbles: false,
+ deleteExpando: true,
+ noCloneEvent: true,
+ inlineBlockNeedsLayout: false,
+ shrinkWrapBlocks: false,
+ reliableMarginRight: true,
+ boxSizingReliable: true,
+ pixelPosition: false
+ };
+
+ // Make sure checked status is properly cloned
+ input.checked = true;
+ support.noCloneChecked = input.cloneNode( true ).checked;
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as disabled)
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Test to see if it's possible to delete an expando from an element
+ // Fails in Internet Explorer
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
+ }
+
+ if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+ div.attachEvent( "onclick", clickFn = function() {
+ // Cloning a node shouldn't copy over any
+ // bound event handlers (IE does this)
+ support.noCloneEvent = false;
+ });
+ div.cloneNode( true ).fireEvent("onclick");
+ div.detachEvent( "onclick", clickFn );
+ }
+
+ // Check if a radio maintains its value
+ // after being appended to the DOM
+ input = document.createElement("input");
+ input.value = "t";
+ input.setAttribute( "type", "radio" );
+ support.radioValue = input.value === "t";
+
+ input.setAttribute( "checked", "checked" );
+
+ // #11217 - WebKit loses check when the name is after the checked attribute
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+ fragment = document.createDocumentFragment();
+ fragment.appendChild( div.lastChild );
+
+ // WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ support.appendChecked = input.checked;
+
+ fragment.removeChild( input );
+ fragment.appendChild( div );
+
+ // Technique from Juriy Zaytsev
+ // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+ // We only care about the case where non-standard event systems
+ // are used, namely in IE. Short-circuiting here helps us to
+ // avoid an eval call (in setAttribute) which can cause CSP
+ // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+ if ( div.attachEvent ) {
+ for ( i in {
+ submit: true,
+ change: true,
+ focusin: true
+ }) {
+ eventName = "on" + i;
+ isSupported = ( eventName in div );
+ if ( !isSupported ) {
+ div.setAttribute( eventName, "return;" );
+ isSupported = ( typeof div[ eventName ] === "function" );
+ }
+ support[ i + "Bubbles" ] = isSupported;
+ }
+ }
+
+ // Run tests that need a body at doc ready
+ jQuery(function() {
+ var container, div, tds, marginDiv,
+ divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;",
+ body = document.getElementsByTagName("body")[0];
+
+ if ( !body ) {
+ // Return for frameset docs that don't have a body
+ return;
+ }
+
+ container = document.createElement("div");
+ container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px";
+ body.insertBefore( container, body.firstChild );
+
+ // Construct the test element
+ div = document.createElement("div");
+ container.appendChild( div );
+
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ // (only IE 8 fails this test)
+ div.innerHTML = "";
+ tds = div.getElementsByTagName("td");
+ tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+ isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+ tds[ 0 ].style.display = "";
+ tds[ 1 ].style.display = "none";
+
+ // Check if empty table cells still have offsetWidth/Height
+ // (IE <= 8 fail this test)
+ support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+ // Check box-sizing and margin behavior
+ div.innerHTML = "";
+ div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+ support.boxSizing = ( div.offsetWidth === 4 );
+ support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+ // NOTE: To any future maintainer, we've window.getComputedStyle
+ // because jsdom on node.js will break without it.
+ if ( window.getComputedStyle ) {
+ support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+ support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. For more
+ // info see bug #3333
+ // Fails in WebKit before Feb 2011 nightlies
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ marginDiv = document.createElement("div");
+ marginDiv.style.cssText = div.style.cssText = divReset;
+ marginDiv.style.marginRight = marginDiv.style.width = "0";
+ div.style.width = "1px";
+ div.appendChild( marginDiv );
+ support.reliableMarginRight =
+ !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+ }
+
+ if ( typeof div.style.zoom !== "undefined" ) {
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ // (IE < 8 does this)
+ div.innerHTML = "";
+ div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+ support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+ // Check if elements with layout shrink-wrap their children
+ // (IE 6 does this)
+ div.style.display = "block";
+ div.style.overflow = "visible";
+ div.innerHTML = "
";
+ div.firstChild.style.width = "5px";
+ support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+ container.style.zoom = 1;
+ }
+
+ // Null elements to avoid leaks in IE
+ body.removeChild( container );
+ container = div = tds = marginDiv = null;
+ });
+
+ // Null elements to avoid leaks in IE
+ fragment.removeChild( div );
+ all = a = select = opt = input = fragment = div = null;
+
+ return support;
+})();
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+ cache: {},
+
+ deletedIds: [],
+
+ // Remove at next major release (1.9/2.0)
+ uuid: 0,
+
+ // Unique for each copy of jQuery on the page
+ // Non-digits removed to match rinlinejQuery
+ expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "embed": true,
+ // Ban all objects except for Flash (which handle expandos)
+ "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+ "applet": true
+ },
+
+ hasData: function( elem ) {
+ elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+ return !!elem && !isEmptyDataObject( elem );
+ },
+
+ data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var thisCache, ret,
+ internalKey = jQuery.expando,
+ getByName = typeof name === "string",
+
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
+
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
+
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+ return;
+ }
+
+ if ( !id ) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
+ if ( isNode ) {
+ elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++;
+ } else {
+ id = internalKey;
+ }
+ }
+
+ if ( !cache[ id ] ) {
+ cache[ id ] = {};
+
+ // Avoids exposing jQuery metadata on plain JS objects when the object
+ // is serialized using JSON.stringify
+ if ( !isNode ) {
+ cache[ id ].toJSON = jQuery.noop;
+ }
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if ( typeof name === "object" || typeof name === "function" ) {
+ if ( pvt ) {
+ cache[ id ] = jQuery.extend( cache[ id ], name );
+ } else {
+ cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+ }
+ }
+
+ thisCache = cache[ id ];
+
+ // jQuery data() is stored in a separate object inside the object's internal data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data.
+ if ( !pvt ) {
+ if ( !thisCache.data ) {
+ thisCache.data = {};
+ }
+
+ thisCache = thisCache.data;
+ }
+
+ if ( data !== undefined ) {
+ thisCache[ jQuery.camelCase( name ) ] = data;
+ }
+
+ // Check for both converted-to-camel and non-converted data property names
+ // If a data property was specified
+ if ( getByName ) {
+
+ // First Try to find as-is property data
+ ret = thisCache[ name ];
+
+ // Test for null|undefined property data
+ if ( ret == null ) {
+
+ // Try to find the camelCased property
+ ret = thisCache[ jQuery.camelCase( name ) ];
+ }
+ } else {
+ ret = thisCache;
+ }
+
+ return ret;
+ },
+
+ removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var thisCache, i, l,
+
+ isNode = elem.nodeType,
+
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+ id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if ( !cache[ id ] ) {
+ return;
+ }
+
+ if ( name ) {
+
+ thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+ if ( thisCache ) {
+
+ // Support array or space separated string names for data keys
+ if ( !jQuery.isArray( name ) ) {
+
+ // try the string as a key before any manipulation
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+
+ // split the camel cased version by spaces unless a key with the spaces exists
+ name = jQuery.camelCase( name );
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+ name = name.split(" ");
+ }
+ }
+ }
+
+ for ( i = 0, l = name.length; i < l; i++ ) {
+ delete thisCache[ name[i] ];
+ }
+
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+ return;
+ }
+ }
+ }
+
+ // See jQuery.data for more information
+ if ( !pvt ) {
+ delete cache[ id ].data;
+
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if ( !isEmptyDataObject( cache[ id ] ) ) {
+ return;
+ }
+ }
+
+ // Destroy the cache
+ if ( isNode ) {
+ jQuery.cleanData( [ elem ], true );
+
+ // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+ } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+ delete cache[ id ];
+
+ // When all else fails, null
+ } else {
+ cache[ id ] = null;
+ }
+ },
+
+ // For internal use only.
+ _data: function( elem, name, data ) {
+ return jQuery.data( elem, name, data, true );
+ },
+
+ // A method for determining if a DOM node can handle the data expando
+ acceptData: function( elem ) {
+ var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+ // nodes accept data unless otherwise specified; rejection can be conditional
+ return !noData || noData !== true && elem.getAttribute("classid") === noData;
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var parts, part, attr, name, l,
+ elem = this[0],
+ i = 0,
+ data = null;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = jQuery.data( elem );
+
+ if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+ attr = elem.attributes;
+ for ( l = attr.length; i < l; i++ ) {
+ name = attr[i].name;
+
+ if ( !name.indexOf( "data-" ) ) {
+ name = jQuery.camelCase( name.substring(5) );
+
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ jQuery._data( elem, "parsedAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
+ });
+ }
+
+ parts = key.split( ".", 2 );
+ parts[1] = parts[1] ? "." + parts[1] : "";
+ part = parts[1] + "!";
+
+ return jQuery.access( this, function( value ) {
+
+ if ( value === undefined ) {
+ data = this.triggerHandler( "getData" + part, [ parts[0] ] );
+
+ // Try to fetch any internally stored data first
+ if ( data === undefined && elem ) {
+ data = jQuery.data( elem, key );
+ data = dataAttr( elem, key, data );
+ }
+
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+ }
+
+ parts[1] = value;
+ this.each(function() {
+ var self = jQuery( this );
+
+ self.triggerHandler( "setData" + part, parts );
+ jQuery.data( this, key, value );
+ self.triggerHandler( "changeData" + part, parts );
+ });
+ }, null, value, arguments.length > 1, null, false );
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+
+function dataAttr( elem, key, data ) {
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+
+ var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ // Only convert to a number if it doesn't change the string
+ +data + "" === data ? +data :
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
+ data;
+ } catch( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ jQuery.data( elem, key, data );
+
+ } else {
+ data = undefined;
+ }
+ }
+
+ return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+ var name;
+ for ( name in obj ) {
+
+ // if the public data object is empty, the private is still empty
+ if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+ continue;
+ }
+ if ( name !== "toJSON" ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = jQuery._data( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || jQuery.isArray(data) ) {
+ queue = jQuery._data( 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 intended for public consumption - generates a queueHooks object, or returns the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function() {
+ jQuery.removeData( elem, type + "queue", true );
+ jQuery.removeData( elem, key, true );
+ })
+ });
+ }
+});
+
+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 );
+ });
+ },
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function( next, hooks ) {
+ var timeout = setTimeout( next, time );
+ hooks.stop = function() {
+ clearTimeout( timeout );
+ };
+ });
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, 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 = jQuery._data( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
+ count++;
+ tmp.empty.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( obj );
+ }
+});
+var nodeHook, boolHook, fixSpecified,
+ rclass = /[\t\r\n]/g,
+ rreturn = /\r/g,
+ rtype = /^(?:button|input)$/i,
+ rfocusable = /^(?:button|input|object|select|textarea)$/i,
+ rclickable = /^a(?:rea|)$/i,
+ rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+ getSetAttribute = jQuery.support.getSetAttribute;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+ },
+
+ removeAttr: function( name ) {
+ return this.each(function() {
+ jQuery.removeAttr( this, name );
+ });
+ },
+
+ prop: function( name, value ) {
+ return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ name = jQuery.propFix[ name ] || name;
+ return this.each(function() {
+ // try/catch handles cases where IE balks (such as removing a property on window)
+ try {
+ this[ name ] = undefined;
+ delete this[ name ];
+ } catch( e ) {}
+ });
+ },
+
+ addClass: function( value ) {
+ var classNames, i, l, elem,
+ setClass, c, cl;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).addClass( value.call(this, j, this.className) );
+ });
+ }
+
+ if ( value && typeof value === "string" ) {
+ classNames = value.split( core_rspace );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ elem = this[ i ];
+
+ if ( elem.nodeType === 1 ) {
+ if ( !elem.className && classNames.length === 1 ) {
+ elem.className = value;
+
+ } else {
+ setClass = " " + elem.className + " ";
+
+ for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+ if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) {
+ setClass += classNames[ c ] + " ";
+ }
+ }
+ elem.className = jQuery.trim( setClass );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var removes, className, elem, c, cl, i, l;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).removeClass( value.call(this, j, this.className) );
+ });
+ }
+ if ( (value && typeof value === "string") || value === undefined ) {
+ removes = ( value || "" ).split( core_rspace );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ elem = this[ i ];
+ if ( elem.nodeType === 1 && elem.className ) {
+
+ className = (" " + elem.className + " ").replace( rclass, " " );
+
+ // loop over each item in the removal list
+ for ( c = 0, cl = removes.length; c < cl; c++ ) {
+ // Remove until there is nothing to remove,
+ while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) {
+ className = className.replace( " " + removes[ c ] + " " , " " );
+ }
+ }
+ elem.className = value ? jQuery.trim( className ) : "";
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value,
+ isBool = typeof stateVal === "boolean";
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery( this ),
+ state = stateVal,
+ classNames = value.split( core_rspace );
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space separated list
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
+ }
+
+ } else if ( type === "undefined" || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery._data( this, "__className__", this.className );
+ }
+
+ // toggle whole className
+ this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ",
+ i = 0,
+ l = this.length;
+ for ( ; i < l; i++ ) {
+ if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function( value ) {
+ var hooks, ret, isFunction,
+ elem = this[0];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // handle most common string cases
+ ret.replace(rreturn, "") :
+ // handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ isFunction = jQuery.isFunction( value );
+
+ return this.each(function( i ) {
+ var val,
+ self = jQuery(this);
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call( this, i, self.val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+ } else if ( typeof val === "number" ) {
+ val += "";
+ } else if ( jQuery.isArray( val ) ) {
+ val = jQuery.map(val, function ( value ) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ valHooks: {
+ option: {
+ get: function( elem ) {
+ // attributes.value is undefined in Blackberry 4.7 but
+ // uses .value. See #6932
+ var val = elem.attributes.value;
+ return !val || val.specified ? elem.value : elem.text;
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value, i, max, option,
+ index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type === "select-one";
+
+ // Nothing was selected
+ if ( index < 0 ) {
+ return null;
+ }
+
+ // Loop through all the selected options
+ i = one ? index : 0;
+ max = one ? index + 1 : options.length;
+ for ( ; i < max; i++ ) {
+ option = options[ i ];
+
+ // Don't return options that are disabled or in a disabled optgroup
+ if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+ (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+ if ( one && !values.length && options.length ) {
+ return jQuery( options[ index ] ).val();
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var values = jQuery.makeArray( value );
+
+ jQuery(elem).find("option").each(function() {
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+ });
+
+ if ( !values.length ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ },
+
+ // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9
+ attrFn: {},
+
+ attr: function( elem, name, value, pass ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {
+ return jQuery( elem )[ name ]( value );
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( typeof elem.getAttribute === "undefined" ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ // All attributes are lowercase
+ // Grab necessary hook if one is defined
+ if ( notxml ) {
+ name = name.toLowerCase();
+ hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+ }
+
+ if ( value !== undefined ) {
+
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+ return;
+
+ } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ elem.setAttribute( name, value + "" );
+ return value;
+ }
+
+ } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+
+ ret = elem.getAttribute( name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret === null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function( elem, value ) {
+ var propName, attrNames, name, isBool,
+ i = 0;
+
+ if ( value && elem.nodeType === 1 ) {
+
+ attrNames = value.split( core_rspace );
+
+ for ( ; i < attrNames.length; i++ ) {
+ name = attrNames[ i ];
+
+ if ( name ) {
+ propName = jQuery.propFix[ name ] || name;
+ isBool = rboolean.test( name );
+
+ // See #9699 for explanation of this approach (setting first, then removal)
+ // Do not do this for boolean attributes (see #10870)
+ if ( !isBool ) {
+ jQuery.attr( elem, name, "" );
+ }
+ elem.removeAttribute( getSetAttribute ? name : propName );
+
+ // Set corresponding property to false for boolean attributes
+ if ( isBool && propName in elem ) {
+ elem[ propName ] = false;
+ }
+ }
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+ jQuery.error( "type property can't be changed" );
+ } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to it's default in case type is set after value
+ // This is for element creation
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ },
+ // Use the value property for back compat
+ // Use the nodeHook for button elements in IE6/7 (#1954)
+ value: {
+ get: function( elem, name ) {
+ if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+ return nodeHook.get( elem, name );
+ }
+ return name in elem ?
+ elem.value :
+ null;
+ },
+ set: function( elem, value, name ) {
+ if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+ return nodeHook.set( elem, value, name );
+ }
+ // Does not return so that setAttribute is also used
+ elem.value = value;
+ }
+ }
+ },
+
+ propFix: {
+ tabindex: "tabIndex",
+ readonly: "readOnly",
+ "for": "htmlFor",
+ "class": "className",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing",
+ cellpadding: "cellPadding",
+ rowspan: "rowSpan",
+ colspan: "colSpan",
+ usemap: "useMap",
+ frameborder: "frameBorder",
+ contenteditable: "contentEditable"
+ },
+
+ prop: function( elem, name, value ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set properties on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ if ( notxml ) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ return ( elem[ name ] = value );
+ }
+
+ } else {
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+ return elem[ name ];
+ }
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ var attributeNode = elem.getAttributeNode("tabindex");
+
+ return attributeNode && attributeNode.specified ?
+ parseInt( attributeNode.value, 10 ) :
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+ 0 :
+ undefined;
+ }
+ }
+ }
+});
+
+// Hook for boolean attributes
+boolHook = {
+ get: function( elem, name ) {
+ // Align boolean attributes with corresponding properties
+ // Fall back to attribute presence where some booleans are not supported
+ var attrNode,
+ property = jQuery.prop( elem, name );
+ return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+ name.toLowerCase() :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ var propName;
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ // value is true since we know at this point it's type boolean and not false
+ // Set boolean attributes to the same name and set the DOM property
+ propName = jQuery.propFix[ name ] || name;
+ if ( propName in elem ) {
+ // Only set the IDL specifically if it already exists on the element
+ elem[ propName ] = true;
+ }
+
+ elem.setAttribute( name, name.toLowerCase() );
+ }
+ return name;
+ }
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+ fixSpecified = {
+ name: true,
+ id: true,
+ coords: true
+ };
+
+ // Use this for any attribute in IE6/7
+ // This fixes almost every IE6/7 issue
+ nodeHook = jQuery.valHooks.button = {
+ get: function( elem, name ) {
+ var ret;
+ ret = elem.getAttributeNode( name );
+ return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ?
+ ret.value :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ // Set the existing or create a new attribute node
+ var ret = elem.getAttributeNode( name );
+ if ( !ret ) {
+ ret = document.createAttribute( name );
+ elem.setAttributeNode( ret );
+ }
+ return ( ret.value = value + "" );
+ }
+ };
+
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+ // This is for removals
+ jQuery.each([ "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ set: function( elem, value ) {
+ if ( value === "" ) {
+ elem.setAttribute( name, "auto" );
+ return value;
+ }
+ }
+ });
+ });
+
+ // Set contenteditable to false on removals(#10429)
+ // Setting to empty string throws an error as an invalid value
+ jQuery.attrHooks.contenteditable = {
+ get: nodeHook.get,
+ set: function( elem, value, name ) {
+ if ( value === "" ) {
+ value = "false";
+ }
+ nodeHook.set( elem, value, name );
+ }
+ };
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+ jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ get: function( elem ) {
+ var ret = elem.getAttribute( name, 2 );
+ return ret === null ? undefined : ret;
+ }
+ });
+ });
+}
+
+if ( !jQuery.support.style ) {
+ jQuery.attrHooks.style = {
+ get: function( elem ) {
+ // Return undefined in the case of empty string
+ // Normalize to lowercase since IE uppercases css property names
+ return elem.style.cssText.toLowerCase() || undefined;
+ },
+ set: function( elem, value ) {
+ return ( elem.style.cssText = value + "" );
+ }
+ };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+ jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ return null;
+ }
+ });
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+ jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+ jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ get: function( elem ) {
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ }
+ };
+ });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+ set: function( elem, value ) {
+ if ( jQuery.isArray( value ) ) {
+ return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+ }
+ }
+ });
+});
+var rformElems = /^(?:textarea|input|select)$/i,
+ rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/,
+ rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ hoverHack = function( events ) {
+ return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+ };
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var elemData, eventHandle, events,
+ t, tns, type, namespaces, handleObj,
+ handleObjIn, handlers, special;
+
+ // Don't attach events to noData or text/comment nodes (allow plain objects tho)
+ if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ events = elemData.events;
+ if ( !events ) {
+ elemData.events = events = {};
+ }
+ eventHandle = elemData.handle;
+ if ( !eventHandle ) {
+ elemData.handle = eventHandle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+ eventHandle.elem = elem;
+ }
+
+ // Handle multiple events separated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ types = jQuery.trim( hoverHack(types) ).split( " " );
+ for ( t = 0; t < types.length; t++ ) {
+
+ tns = rtypenamespace.exec( types[t] ) || [];
+ type = tns[1];
+ namespaces = ( tns[2] || "" ).split( "." ).sort();
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend({
+ type: type,
+ origType: tns[1],
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+ namespace: namespaces.join(".")
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ handlers = events[ type ];
+ if ( !handlers ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener/attachEvent if the special events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ global: {},
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var t, tns, type, origType, namespaces, origCount,
+ j, events, special, eventType, handleObj,
+ elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+ if ( !elemData || !(events = elemData.events) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
+ for ( t = 0; t < types.length; t++ ) {
+ tns = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tns[1];
+ namespaces = tns[2];
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector? special.delegateType : special.bindType ) || type;
+ eventType = events[ type ] || [];
+ origCount = eventType.length;
+ namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
+
+ // Remove matching events
+ for ( j = 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+ eventType.splice( j--, 1 );
+
+ if ( handleObj.selector ) {
+ eventType.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( eventType.length === 0 && origCount !== eventType.length ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ delete elemData.handle;
+
+ // removeData also checks for emptiness and clears the expando if empty
+ // so use it instead of delete
+ jQuery.removeData( elem, "events", true );
+ }
+ },
+
+ // Events that are safe to short-circuit if no handlers are attached.
+ // Native DOM events should not be added, they may have inline handlers.
+ customEvent: {
+ "getData": true,
+ "setData": true,
+ "changeData": true
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+ // Don't do events on text and comment nodes
+ if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+ return;
+ }
+
+ // Event object or event type
+ var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType,
+ type = event.type || event,
+ namespaces = [];
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf( "!" ) >= 0 ) {
+ // Exclusive events trigger only for the exact event (no namespaces)
+ type = type.slice(0, -1);
+ exclusive = true;
+ }
+
+ if ( type.indexOf( "." ) >= 0 ) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+
+ if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+ // No jQuery handlers for this event type, and it can't have inline handlers
+ return;
+ }
+
+ // Caller can pass in an Event, Object, or just an event type string
+ event = typeof event === "object" ?
+ // jQuery.Event object
+ event[ jQuery.expando ] ? event :
+ // Object literal
+ new jQuery.Event( type, event ) :
+ // Just the event type (string)
+ new jQuery.Event( type );
+
+ event.type = type;
+ event.isTrigger = true;
+ event.exclusive = exclusive;
+ event.namespace = namespaces.join( "." );
+ event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
+ ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+ // Handle a global trigger
+ if ( !elem ) {
+
+ // TODO: Stop taunting the data cache; remove global events and always attach to document
+ cache = jQuery.cache;
+ for ( i in cache ) {
+ if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+ jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+ }
+ }
+ return;
+ }
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data != null ? jQuery.makeArray( data ) : [];
+ data.unshift( event );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ eventPath = [[ elem, special.bindType || type ]];
+ if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
+ for ( old = elem; cur; cur = cur.parentNode ) {
+ eventPath.push([ cur, bubbleType ]);
+ old = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( old === (elem.ownerDocument || document) ) {
+ eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+ }
+ }
+
+ // Fire handlers on the event path
+ for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
+
+ cur = eventPath[i][0];
+ event.type = eventPath[i][1];
+
+ handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+ // Note that this is a bare JS function and not a jQuery handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+ event.preventDefault();
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+ if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+ !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction() check here because IE6/7 fails that test.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ // IE<9 dies on focus/blur to hidden element (#1486)
+ if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ old = elem[ ontype ];
+
+ if ( old ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ elem[ type ]();
+ jQuery.event.triggered = undefined;
+
+ if ( old ) {
+ elem[ ontype ] = old;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function( event ) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix( event || window.event );
+
+ var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related,
+ handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+ delegateCount = handlers.delegateCount,
+ args = core_slice.call( arguments ),
+ run_all = !event.exclusive && !event.namespace,
+ special = jQuery.event.special[ event.type ] || {},
+ handlerQueue = [];
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers that should run if there are delegated events
+ // Avoid non-left-click bubbling in Firefox (#3861)
+ if ( delegateCount && !(event.button && event.type === "click") ) {
+
+ for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+
+ // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)
+ if ( cur.disabled !== true || event.type !== "click" ) {
+ selMatch = {};
+ matches = [];
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+ sel = handleObj.selector;
+
+ if ( selMatch[ sel ] === undefined ) {
+ selMatch[ sel ] = handleObj.needsContext ?
+ jQuery( sel, this ).index( cur ) >= 0 :
+ jQuery.find( sel, this, null, [ cur ] ).length;
+ }
+ if ( selMatch[ sel ] ) {
+ matches.push( handleObj );
+ }
+ }
+ if ( matches.length ) {
+ handlerQueue.push({ elem: cur, matches: matches });
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ if ( handlers.length > delegateCount ) {
+ handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+ }
+
+ // Run delegates first; they may want to stop propagation beneath us
+ for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+ matched = handlerQueue[ i ];
+ event.currentTarget = matched.elem;
+
+ for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+ handleObj = matched.matches[ j ];
+
+ // Triggered event must either 1) be non-exclusive and have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+ if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+ event.data = handleObj.data;
+ event.handleObj = handleObj;
+
+ ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+ .apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ event.result = ret;
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ // Includes some event props shared by KeyEvent and MouseEvent
+ // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+ props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+ fixHooks: {},
+
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function( event, original ) {
+
+ // Add which for key events
+ if ( event.which == null ) {
+ event.which = original.charCode != null ? original.charCode : original.keyCode;
+ }
+
+ return event;
+ }
+ },
+
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function( event, original ) {
+ var eventDoc, doc, body,
+ button = original.button,
+ fromElement = original.fromElement;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && original.clientX != null ) {
+ eventDoc = event.target.ownerDocument || document;
+ doc = eventDoc.documentElement;
+ body = eventDoc.body;
+
+ event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+ event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
+ }
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && fromElement ) {
+ event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && button !== undefined ) {
+ event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+ }
+
+ return event;
+ }
+ },
+
+ fix: function( event ) {
+ if ( event[ jQuery.expando ] ) {
+ return event;
+ }
+
+ // Create a writable copy of the event object and normalize some properties
+ var i, prop,
+ originalEvent = event,
+ fixHook = jQuery.event.fixHooks[ event.type ] || {},
+ copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+ event = jQuery.Event( originalEvent );
+
+ for ( i = copy.length; i; ) {
+ prop = copy[ --i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+ if ( !event.target ) {
+ event.target = originalEvent.srcElement || document;
+ }
+
+ // Target should not be a text node (#504, Safari)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)
+ event.metaKey = !!event.metaKey;
+
+ return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+ },
+
+ special: {
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+
+ focus: {
+ delegateType: "focusin"
+ },
+ blur: {
+ delegateType: "focusout"
+ },
+
+ beforeunload: {
+ setup: function( data, namespaces, eventHandle ) {
+ // We only want to do this special case on windows
+ if ( jQuery.isWindow( this ) ) {
+ this.onbeforeunload = eventHandle;
+ }
+ },
+
+ teardown: function( namespaces, eventHandle ) {
+ if ( this.onbeforeunload === eventHandle ) {
+ this.onbeforeunload = null;
+ }
+ }
+ }
+ },
+
+ simulate: function( type, elem, event, bubble ) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ { type: type,
+ isSimulated: true,
+ originalEvent: {}
+ }
+ );
+ if ( bubble ) {
+ jQuery.event.trigger( e, null, elem );
+ } else {
+ jQuery.event.dispatch.call( elem, e );
+ }
+ if ( e.isDefaultPrevented() ) {
+ event.preventDefault();
+ }
+ }
+};
+
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+jQuery.event.handle = jQuery.event.dispatch;
+
+jQuery.removeEvent = document.removeEventListener ?
+ function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+ } :
+ function( elem, type, handle ) {
+ var name = "on" + type;
+
+ if ( elem.detachEvent ) {
+
+ // #8545, #7054, preventing memory leaks for custom events in IE6-8 –
+ // detachEvent needed property on element, by name of that event, to properly expose it to GC
+ if ( typeof elem[ name ] === "undefined" ) {
+ elem[ name ] = null;
+ }
+
+ elem.detachEvent( name, handle );
+ }
+ };
+
+jQuery.Event = function( src, props ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !(this instanceof jQuery.Event) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+ src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+ return false;
+}
+function returnTrue() {
+ return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+
+ // if preventDefault exists run it on the original event
+ if ( e.preventDefault ) {
+ e.preventDefault();
+
+ // otherwise set the returnValue property of the original event to false (IE)
+ } else {
+ e.returnValue = false;
+ }
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+ // if stopPropagation exists run it on the original event
+ if ( e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ },
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj,
+ selector = handleObj.selector;
+
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+ jQuery.event.special.submit = {
+ setup: function() {
+ // Only need this for delegated form submit events
+ if ( jQuery.nodeName( this, "form" ) ) {
+ return false;
+ }
+
+ // Lazy-add a submit handler when a descendant form may potentially be submitted
+ jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+ // Node name check avoids a VML-related crash in IE (#9807)
+ var elem = e.target,
+ form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+ if ( form && !jQuery._data( form, "_submit_attached" ) ) {
+ jQuery.event.add( form, "submit._submit", function( event ) {
+ event._submit_bubble = true;
+ });
+ jQuery._data( form, "_submit_attached", true );
+ }
+ });
+ // return undefined since we don't need an event listener
+ },
+
+ postDispatch: function( event ) {
+ // If form was submitted by the user, bubble the event up the tree
+ if ( event._submit_bubble ) {
+ delete event._submit_bubble;
+ if ( this.parentNode && !event.isTrigger ) {
+ jQuery.event.simulate( "submit", this.parentNode, event, true );
+ }
+ }
+ },
+
+ teardown: function() {
+ // Only need this for delegated form submit events
+ if ( jQuery.nodeName( this, "form" ) ) {
+ return false;
+ }
+
+ // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+ jQuery.event.remove( this, "._submit" );
+ }
+ };
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+ jQuery.event.special.change = {
+
+ setup: function() {
+
+ if ( rformElems.test( this.nodeName ) ) {
+ // IE doesn't fire change on a check/radio until blur; trigger it on click
+ // after a propertychange. Eat the blur-change in special.change.handle.
+ // This still fires onchange a second time for check/radio after blur.
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ jQuery.event.add( this, "propertychange._change", function( event ) {
+ if ( event.originalEvent.propertyName === "checked" ) {
+ this._just_changed = true;
+ }
+ });
+ jQuery.event.add( this, "click._change", function( event ) {
+ if ( this._just_changed && !event.isTrigger ) {
+ this._just_changed = false;
+ }
+ // Allow triggered, simulated change events (#11500)
+ jQuery.event.simulate( "change", this, event, true );
+ });
+ }
+ return false;
+ }
+ // Delegated event; lazy-add a change handler on descendant inputs
+ jQuery.event.add( this, "beforeactivate._change", function( e ) {
+ var elem = e.target;
+
+ if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) {
+ jQuery.event.add( elem, "change._change", function( event ) {
+ if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+ jQuery.event.simulate( "change", this.parentNode, event, true );
+ }
+ });
+ jQuery._data( elem, "_change_attached", true );
+ }
+ });
+ },
+
+ handle: function( event ) {
+ var elem = event.target;
+
+ // Swallow native change events from checkbox/radio, we already triggered them above
+ if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+ return event.handleObj.handler.apply( this, arguments );
+ }
+ },
+
+ teardown: function() {
+ jQuery.event.remove( this, "._change" );
+
+ return !rformElems.test( this.nodeName );
+ }
+ };
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler while someone wants focusin/focusout
+ var attaches = 0,
+ handler = function( event ) {
+ jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+ };
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ if ( attaches++ === 0 ) {
+ document.addEventListener( orig, handler, true );
+ }
+ },
+ teardown: function() {
+ if ( --attaches === 0 ) {
+ document.removeEventListener( orig, handler, true );
+ }
+ }
+ };
+ });
+}
+
+jQuery.fn.extend({
+
+ on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) { // && selector != null
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ this.on( type, selector, data, types[ type ], one );
+ }
+ return this;
+ }
+
+ if ( data == null && fn == null ) {
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return this;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return this.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ });
+ },
+ one: function( types, selector, data, fn ) {
+ return this.on( types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ 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 );
+ });
+ },
+
+ bind: function( types, data, fn ) {
+ return this.on( types, null, data, fn );
+ },
+ unbind: function( types, fn ) {
+ return this.off( types, null, fn );
+ },
+
+ live: function( types, data, fn ) {
+ jQuery( this.context ).on( types, this.selector, data, fn );
+ return this;
+ },
+ die: function( types, fn ) {
+ jQuery( this.context ).off( types, this.selector || "**", fn );
+ return this;
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.on( types, selector, data, fn );
+ },
+ undelegate: function( selector, types, fn ) {
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+ triggerHandler: function( type, data ) {
+ if ( this[0] ) {
+ return jQuery.event.trigger( type, data, this[0], true );
+ }
+ },
+
+ toggle: function( fn ) {
+ // Save reference to arguments for access in closure
+ var args = arguments,
+ guid = fn.guid || jQuery.guid++,
+ i = 0,
+ toggler = function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ };
+
+ // link all the functions, so any of them can unbind this click handler
+ toggler.guid = guid;
+ while ( i < args.length ) {
+ args[ i++ ].guid = guid;
+ }
+
+ return this.click( toggler );
+ },
+
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ if ( fn == null ) {
+ fn = data;
+ data = null;
+ }
+
+ return arguments.length > 0 ?
+ this.on( name, null, data, fn ) :
+ this.trigger( name );
+ };
+
+ if ( rkeyEvent.test( name ) ) {
+ jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+ }
+
+ if ( rmouseEvent.test( name ) ) {
+ jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+ }
+});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://sizzlejs.com/
+ */
+(function( window, undefined ) {
+
+var cachedruns,
+ assertGetIdNotName,
+ Expr,
+ getText,
+ isXML,
+ contains,
+ compile,
+ sortOrder,
+ hasDuplicate,
+ outermostContext,
+
+ baseHasDuplicate = true,
+ strundefined = "undefined",
+
+ expando = ( "sizcache" + Math.random() ).replace( ".", "" ),
+
+ Token = String,
+ document = window.document,
+ docElem = document.documentElement,
+ dirruns = 0,
+ done = 0,
+ pop = [].pop,
+ push = [].push,
+ slice = [].slice,
+ // Use a stripped-down indexOf if a native one is unavailable
+ indexOf = [].indexOf || function( elem ) {
+ var i = 0,
+ len = this.length;
+ for ( ; i < len; i++ ) {
+ if ( this[i] === elem ) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ // Augment a function for special use by Sizzle
+ markFunction = function( fn, value ) {
+ fn[ expando ] = value == null || value;
+ return fn;
+ },
+
+ createCache = function() {
+ var cache = {},
+ keys = [];
+
+ return markFunction(function( key, value ) {
+ // Only keep the most recent entries
+ if ( keys.push( key ) > Expr.cacheLength ) {
+ delete cache[ keys.shift() ];
+ }
+
+ return (cache[ key ] = value);
+ }, cache );
+ },
+
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+
+ // Regex
+
+ // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+ // http://www.w3.org/TR/css3-syntax/#characters
+ characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",
+
+ // Loosely modeled on CSS identifier characters
+ // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)
+ // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = characterEncoding.replace( "w", "w#" ),
+
+ // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+ operators = "([*^$|!~]?=)",
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+ "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+ // Prefer arguments not in parens/brackets,
+ // then attribute selectors and non-pseudos (denoted by :),
+ // then anything else
+ // These preferences are here to reduce the number of selectors
+ // needing tokenize in the PSEUDO preFilter
+ pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)",
+
+ // For matchExpr.POS and matchExpr.needsContext
+ pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+ "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+ rpseudo = new RegExp( pseudos ),
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,
+
+ rnot = /^:not/,
+ rsibling = /[\x20\t\r\n\f]*[+~]/,
+ rendsWithNot = /:not\($/,
+
+ rheader = /h\d/i,
+ rinputs = /input|select|textarea|button/i,
+
+ rbackslash = /\\(?!\\)/g,
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + characterEncoding + ")" ),
+ "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+ "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+ "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "POS": new RegExp( pos, "i" ),
+ "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ // For use in libraries implementing .is()
+ "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" )
+ },
+
+ // Support
+
+ // Used for testing something on an element
+ assert = function( fn ) {
+ var div = document.createElement("div");
+
+ try {
+ return fn( div );
+ } catch (e) {
+ return false;
+ } finally {
+ // release memory in IE
+ div = null;
+ }
+ },
+
+ // Check if getElementsByTagName("*") returns only elements
+ assertTagNameNoComments = assert(function( div ) {
+ div.appendChild( document.createComment("") );
+ return !div.getElementsByTagName("*").length;
+ }),
+
+ // Check if getAttribute returns normalized href attributes
+ assertHrefNotNormalized = assert(function( div ) {
+ div.innerHTML = " ";
+ return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+ div.firstChild.getAttribute("href") === "#";
+ }),
+
+ // Check if attributes should be retrieved by attribute nodes
+ assertAttributes = assert(function( div ) {
+ div.innerHTML = " ";
+ var type = typeof div.lastChild.getAttribute("multiple");
+ // IE8 returns a string for some attributes even when not present
+ return type !== "boolean" && type !== "string";
+ }),
+
+ // Check if getElementsByClassName can be trusted
+ assertUsableClassName = assert(function( div ) {
+ // Opera can't find a second classname (in 9.6)
+ div.innerHTML = "
";
+ if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+ return false;
+ }
+
+ // Safari 3.2 caches class attributes and doesn't catch changes
+ div.lastChild.className = "e";
+ return div.getElementsByClassName("e").length === 2;
+ }),
+
+ // Check if getElementById returns elements by name
+ // Check if getElementsByName privileges form controls or returns elements by ID
+ assertUsableName = assert(function( div ) {
+ // Inject content
+ div.id = expando + 0;
+ div.innerHTML = "
";
+ docElem.insertBefore( div, docElem.firstChild );
+
+ // Test
+ var pass = document.getElementsByName &&
+ // buggy browsers will return fewer than the correct 2
+ document.getElementsByName( expando ).length === 2 +
+ // buggy browsers will return more than the correct 0
+ document.getElementsByName( expando + 0 ).length;
+ assertGetIdNotName = !document.getElementById( expando );
+
+ // Cleanup
+ docElem.removeChild( div );
+
+ return pass;
+ });
+
+// If slice is not available, provide a backup
+try {
+ slice.call( docElem.childNodes, 0 )[0].nodeType;
+} catch ( e ) {
+ slice = function( i ) {
+ var elem,
+ results = [];
+ for ( ; (elem = this[i]); i++ ) {
+ results.push( elem );
+ }
+ return results;
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ results = results || [];
+ context = context || document;
+ var match, elem, xml, m,
+ nodeType = context.nodeType;
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ if ( nodeType !== 1 && nodeType !== 9 ) {
+ return [];
+ }
+
+ xml = isXML( context );
+
+ if ( !xml && !seed ) {
+ if ( (match = rquickExpr.exec( selector )) ) {
+ // Speed-up: Sizzle("#ID")
+ if ( (m = match[1]) ) {
+ if ( nodeType === 9 ) {
+ elem = context.getElementById( m );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE, Opera, and Webkit return items
+ // by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+ } else {
+ // Context is not a document
+ if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+ contains( context, elem ) && elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Speed-up: Sizzle("TAG")
+ } else if ( match[2] ) {
+ push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+ return results;
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {
+ push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+ return results;
+ }
+ }
+ }
+
+ // All others
+ return select( selector.replace( rtrim, "$1" ), context, results, seed, xml );
+}
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ return Sizzle( expr, null, null, [ elem ] ).length > 0;
+};
+
+// Returns a function to use in pseudos for input types
+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
+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 positionals
+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]);
+ }
+ }
+ });
+ });
+}
+
+/**
+ * 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 ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (see #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
+ } else {
+
+ // If no nodeType, this is expected to be an array
+ for ( ; (node = elem[i]); i++ ) {
+ // Do not traverse comment nodes
+ ret += getText( node );
+ }
+ }
+ return ret;
+};
+
+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;
+};
+
+// Element contains another
+contains = Sizzle.contains = 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) );
+ } :
+ docElem.compareDocumentPosition ?
+ function( a, b ) {
+ return b && !!( a.compareDocumentPosition( b ) & 16 );
+ } :
+ function( a, b ) {
+ while ( (b = b.parentNode) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+Sizzle.attr = function( elem, name ) {
+ var val,
+ xml = isXML( elem );
+
+ if ( !xml ) {
+ name = name.toLowerCase();
+ }
+ if ( (val = Expr.attrHandle[ name ]) ) {
+ return val( elem );
+ }
+ if ( xml || assertAttributes ) {
+ return elem.getAttribute( name );
+ }
+ val = elem.getAttributeNode( name );
+ return val ?
+ typeof elem[ name ] === "boolean" ?
+ elem[ name ] ? name : null :
+ val.specified ? val.value : null :
+ null;
+};
+
+Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ // IE6/7 return a modified href
+ attrHandle: assertHrefNotNormalized ?
+ {} :
+ {
+ "href": function( elem ) {
+ return elem.getAttribute( "href", 2 );
+ },
+ "type": function( elem ) {
+ return elem.getAttribute("type");
+ }
+ },
+
+ find: {
+ "ID": assertGetIdNotName ?
+ function( id, context, xml ) {
+ if ( typeof context.getElementById !== strundefined && !xml ) {
+ var m = context.getElementById( id );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ } :
+ function( id, context, xml ) {
+ if ( typeof context.getElementById !== strundefined && !xml ) {
+ var m = context.getElementById( id );
+
+ return m ?
+ m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+ [m] :
+ undefined :
+ [];
+ }
+ },
+
+ "TAG": assertTagNameNoComments ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== strundefined ) {
+ return context.getElementsByTagName( tag );
+ }
+ } :
+ function( tag, context ) {
+ var results = context.getElementsByTagName( tag );
+
+ // Filter out possible comments
+ if ( tag === "*" ) {
+ var elem,
+ tmp = [],
+ i = 0;
+
+ for ( ; (elem = results[i]); i++ ) {
+ if ( elem.nodeType === 1 ) {
+ tmp.push( elem );
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ },
+
+ "NAME": assertUsableName && function( tag, context ) {
+ if ( typeof context.getElementsByName !== strundefined ) {
+ return context.getElementsByName( name );
+ }
+ },
+
+ "CLASS": assertUsableClassName && function( className, context, xml ) {
+ if ( typeof context.getElementsByClassName !== strundefined && !xml ) {
+ return context.getElementsByClassName( className );
+ }
+ }
+ },
+
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+
+ preFilter: {
+ "ATTR": function( match ) {
+ match[1] = match[1].replace( rbackslash, "" );
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" );
+
+ if ( match[2] === "~=" ) {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice( 0, 4 );
+ },
+
+ "CHILD": function( match ) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 3 xn-component of xn+y argument ([+-]?\d*n|)
+ 4 sign of xn-component
+ 5 x of xn-component
+ 6 sign of y-component
+ 7 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if ( match[1] === "nth" ) {
+ // nth-child requires argument
+ if ( !match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) );
+ match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" );
+
+ // other types prohibit arguments
+ } else if ( match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function( match ) {
+ var unquoted, excess;
+ if ( matchExpr["CHILD"].test( match[0] ) ) {
+ return null;
+ }
+
+ if ( match[3] ) {
+ match[2] = match[3];
+ } else if ( (unquoted = match[4]) ) {
+ // Only check arguments that contain a pseudo
+ if ( 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
+ unquoted = unquoted.slice( 0, excess );
+ match[0] = match[0].slice( 0, excess );
+ }
+ match[2] = unquoted;
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice( 0, 3 );
+ }
+ },
+
+ filter: {
+ "ID": assertGetIdNotName ?
+ function( id ) {
+ id = id.replace( rbackslash, "" );
+ return function( elem ) {
+ return elem.getAttribute("id") === id;
+ };
+ } :
+ function( id ) {
+ id = id.replace( rbackslash, "" );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+ return node && node.value === id;
+ };
+ },
+
+ "TAG": function( nodeName ) {
+ if ( nodeName === "*" ) {
+ return function() { return true; };
+ }
+ nodeName = nodeName.replace( rbackslash, "" ).toLowerCase();
+
+ return function( elem ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function( className ) {
+ var pattern = classCache[ expando ][ className ];
+ if ( !pattern ) {
+ pattern = classCache( className, new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)") );
+ }
+ return function( elem ) {
+ return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+ };
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem, context ) {
+ 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.substr( result.length - check.length ) === check :
+ operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function( type, argument, first, last ) {
+
+ if ( type === "nth" ) {
+ return function( elem ) {
+ var node, diff,
+ parent = elem.parentNode;
+
+ if ( first === 1 && last === 0 ) {
+ return true;
+ }
+
+ if ( parent ) {
+ diff = 0;
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ diff++;
+ if ( elem === node ) {
+ break;
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset (or cast to NaN), then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ };
+ }
+
+ return function( elem ) {
+ var node = elem;
+
+ switch ( type ) {
+ case "only":
+ case "first":
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ if ( type === "first" ) {
+ return true;
+ }
+
+ node = elem;
+
+ /* falls through */
+ case "last":
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ };
+ },
+
+ "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.call( seed, matched[i] );
+ seed[ idx ] = !( matches[ idx ] = matched[i] );
+ }
+ }) :
+ function( elem ) {
+ return fn( elem, 0, args );
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ 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 );
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function( text ) {
+ return function( elem ) {
+ return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+ };
+ }),
+
+ "enabled": function( elem ) {
+ return elem.disabled === false;
+ },
+
+ "disabled": function( elem ) {
+ return elem.disabled === 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;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos["empty"]( elem );
+ },
+
+ "empty": function( elem ) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+ // not comment, processing instructions, or others
+ // Thanks to Diego Perini for the nodeName shortcut
+ // Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+ var nodeType;
+ elem = elem.firstChild;
+ while ( elem ) {
+ if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {
+ return false;
+ }
+ elem = elem.nextSibling;
+ }
+ return true;
+ },
+
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "text": function( elem ) {
+ var type, attr;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" &&
+ (type = elem.type) === "text" &&
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type );
+ },
+
+ // Input types
+ "radio": createInputPseudo("radio"),
+ "checkbox": createInputPseudo("checkbox"),
+ "file": createInputPseudo("file"),
+ "password": createInputPseudo("password"),
+ "image": createInputPseudo("image"),
+
+ "submit": createButtonPseudo("submit"),
+ "reset": createButtonPseudo("reset"),
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "focus": function( elem ) {
+ var doc = elem.ownerDocument;
+ return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href);
+ },
+
+ "active": function( elem ) {
+ return elem === elem.ownerDocument.activeElement;
+ },
+
+ // Positional types
+ "first": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ 0 ];
+ }),
+
+ "last": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ length - 1 ];
+ }),
+
+ "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ }),
+
+ "even": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ for ( var i = 0; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ for ( var i = 1; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ })
+ }
+};
+
+function siblingCheck( a, b, ret ) {
+ if ( a === b ) {
+ return ret;
+ }
+
+ var cur = a.nextSibling;
+
+ while ( cur ) {
+ if ( cur === b ) {
+ return -1;
+ }
+
+ cur = cur.nextSibling;
+ }
+
+ return 1;
+}
+
+sortOrder = docElem.compareDocumentPosition ?
+ function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ return ( !a.compareDocumentPosition || !b.compareDocumentPosition ?
+ a.compareDocumentPosition :
+ a.compareDocumentPosition(b) & 4
+ ) ? -1 : 1;
+ } :
+ function( a, b ) {
+ // The nodes are identical, we can exit early
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // Fallback to using sourceIndex (in IE) if it's available on both nodes
+ } else if ( a.sourceIndex && b.sourceIndex ) {
+ return a.sourceIndex - b.sourceIndex;
+ }
+
+ var al, bl,
+ ap = [],
+ bp = [],
+ aup = a.parentNode,
+ bup = b.parentNode,
+ cur = aup;
+
+ // If the nodes are siblings (or identical) we can do a quick check
+ if ( aup === bup ) {
+ return siblingCheck( a, b );
+
+ // If no parents were found then the nodes are disconnected
+ } else if ( !aup ) {
+ return -1;
+
+ } else if ( !bup ) {
+ return 1;
+ }
+
+ // Otherwise they're somewhere else in the tree so we need
+ // to build up a full list of the parentNodes for comparison
+ while ( cur ) {
+ ap.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ cur = bup;
+
+ while ( cur ) {
+ bp.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ al = ap.length;
+ bl = bp.length;
+
+ // Start walking down the tree looking for a discrepancy
+ for ( var i = 0; i < al && i < bl; i++ ) {
+ if ( ap[i] !== bp[i] ) {
+ return siblingCheck( ap[i], bp[i] );
+ }
+ }
+
+ // We ended someplace up the tree so do a sibling check
+ return i === al ?
+ siblingCheck( a, bp[i], -1 ) :
+ siblingCheck( ap[i], b, 1 );
+ };
+
+// Always assume the presence of duplicates if sort doesn't
+// pass them to our comparison function (as in Google Chrome).
+[0, 0].sort( sortOrder );
+baseHasDuplicate = !hasDuplicate;
+
+// Document sorting and removing duplicates
+Sizzle.uniqueSort = function( results ) {
+ var elem,
+ i = 1;
+
+ hasDuplicate = baseHasDuplicate;
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ for ( ; (elem = results[i]); i++ ) {
+ if ( elem === results[ i - 1 ] ) {
+ results.splice( i--, 1 );
+ }
+ }
+ }
+
+ return results;
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+function tokenize( selector, parseOnly ) {
+ var matched, match, tokens, type, soFar, groups, preFilters,
+ cached = tokenCache[ expando ][ 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 ) {
+ soFar = soFar.slice( match[0].length );
+ }
+ groups.push( tokens = [] );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( (match = rcombinators.exec( soFar )) ) {
+ tokens.push( matched = new Token( match.shift() ) );
+ soFar = soFar.slice( matched.length );
+
+ // Cast descendant combinators to space
+ matched.type = match[0].replace( rtrim, " " );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+ // The last two arguments here are (context, xml) for backCompat
+ (match = preFilters[ type ]( match, document, true ))) ) {
+
+ tokens.push( matched = new Token( match.shift() ) );
+ soFar = soFar.slice( matched.length );
+ matched.type = type;
+ matched.matches = match;
+ }
+ }
+
+ 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 addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ checkNonElements = base && combinator.dir === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( checkNonElements || elem.nodeType === 1 ) {
+ return matcher( elem, context, xml );
+ }
+ }
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+ if ( !xml ) {
+ var cache,
+ dirkey = dirruns + " " + doneName + " ",
+ cachedkey = dirkey + cachedruns;
+ while ( (elem = elem[ dir ]) ) {
+ if ( checkNonElements || elem.nodeType === 1 ) {
+ if ( (cache = elem[ expando ]) === cachedkey ) {
+ return elem.sizset;
+ } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {
+ if ( elem.sizset ) {
+ return elem;
+ }
+ } else {
+ elem[ expando ] = cachedkey;
+ if ( matcher( elem, context, xml ) ) {
+ elem.sizset = true;
+ return elem;
+ }
+ elem.sizset = false;
+ }
+ }
+ }
+ } else {
+ while ( (elem = elem[ dir ]) ) {
+ if ( checkNonElements || elem.nodeType === 1 ) {
+ if ( matcher( elem, context, xml ) ) {
+ return elem;
+ }
+ }
+ }
+ }
+ };
+}
+
+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 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 ) {
+ // Positional selectors apply to seed elements, so it is invalid to follow them with relative ones
+ if ( seed && postFinder ) {
+ return;
+ }
+
+ var i, elem, postFilterIn,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [], seed ),
+
+ // 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 ) {
+ postFilterIn = condense( matcherOut, postMap );
+ postFilter( postFilterIn, [], context, xml );
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = postFilterIn.length;
+ while ( i-- ) {
+ if ( (elem = postFilterIn[i]) ) {
+ matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+ }
+ }
+ }
+
+ // Keep seed and results synchronized
+ if ( seed ) {
+ // Ignore postFinder because it can't coexist with seed
+ i = preFilter && matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) ) {
+ seed[ preMap[i] ] = !(results[ preMap[i] ] = elem);
+ }
+ }
+ } 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.call( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+ matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
+ } else {
+ // The concatenated values are (context, xml) for backCompat
+ 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 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+ j < len && tokens.join("")
+ );
+ }
+ 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, expandContext ) {
+ var elem, j, matcher,
+ setMatched = [],
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ outermost = expandContext != null,
+ contextBackup = outermostContext,
+ // We must always have either seed elements or context
+ elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+ // Nested matchers should use non-integer dirruns
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);
+
+ if ( outermost ) {
+ outermostContext = context !== document && context;
+ cachedruns = superMatcher.el;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ for ( ; (elem = elems[i]) != null; i++ ) {
+ if ( byElement && elem ) {
+ for ( j = 0; (matcher = elementMatchers[j]); j++ ) {
+ if ( matcher( elem, context, xml ) ) {
+ results.push( elem );
+ break;
+ }
+ }
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ cachedruns = ++superMatcher.el;
+ }
+ }
+
+ // 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 );
+ }
+ }
+ }
+
+ // Apply set filters to unmatched elements
+ matchedCount += i;
+ if ( bySet && i !== matchedCount ) {
+ for ( j = 0; (matcher = setMatchers[j]); 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;
+ };
+
+ superMatcher.el = 0;
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ expando ][ selector ];
+
+ if ( !cached ) {
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !group ) {
+ group = tokenize( selector );
+ }
+ i = group.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( group[i] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+ }
+ return cached;
+};
+
+function multipleContexts( selector, contexts, results, seed ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[i], results, seed );
+ }
+ return results;
+}
+
+function select( selector, context, results, seed, xml ) {
+ var i, tokens, token, type, find,
+ match = tokenize( selector ),
+ j = match.length;
+
+ if ( !seed ) {
+ // Try to minimize operations if there is only one group
+ if ( match.length === 1 ) {
+
+ // Take a shortcut and set the context if the root selector is an ID
+ tokens = match[0] = match[0].slice( 0 );
+ if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ context.nodeType === 9 && !xml &&
+ Expr.relative[ tokens[1].type ] ) {
+
+ context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0];
+ if ( !context ) {
+ return results;
+ }
+
+ selector = selector.slice( tokens.shift().length );
+ }
+
+ // Fetch a seed set for right-to-left matching
+ for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; 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( rbackslash, "" ),
+ rsibling.test( tokens[0].type ) && context.parentNode || context,
+ xml
+ )) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && tokens.join("");
+ if ( !selector ) {
+ push.apply( results, slice.call( seed, 0 ) );
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function
+ // Provide `match` to avoid retokenization if we modified the selector above
+ compile( selector, match )(
+ seed,
+ context,
+ xml,
+ results,
+ rsibling.test( selector )
+ );
+ return results;
+}
+
+if ( document.querySelectorAll ) {
+ (function() {
+ var disconnectedMatch,
+ oldSelect = select,
+ rescape = /'|\\/g,
+ rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+
+ // qSa(:focus) reports false when true (Chrome 21),
+ // A support test would require too much code (would include document ready)
+ rbuggyQSA = [":focus"],
+
+ // matchesSelector(:focus) reports false when true (Chrome 21),
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ // A support test would require too much code (would include document ready)
+ // just skip matchesSelector for :active
+ rbuggyMatches = [ ":active", ":focus" ],
+ matches = docElem.matchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.webkitMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector;
+
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function( div ) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explictly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // http://bugs.jquery.com/ticket/12359
+ div.innerHTML = " ";
+
+ // IE8 - Some boolean attributes are not treated correctly
+ if ( !div.querySelectorAll("[selected]").length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here (do not put tests after this one)
+ if ( !div.querySelectorAll(":checked").length ) {
+ rbuggyQSA.push(":checked");
+ }
+ });
+
+ assert(function( div ) {
+
+ // Opera 10-12/IE9 - ^= $= *= and empty values
+ // Should not select anything
+ div.innerHTML = "
";
+ if ( div.querySelectorAll("[test^='']").length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here (do not put tests after this one)
+ div.innerHTML = " ";
+ if ( !div.querySelectorAll(":enabled").length ) {
+ rbuggyQSA.push(":enabled", ":disabled");
+ }
+ });
+
+ // rbuggyQSA always contains :focus, so no need for a length check
+ rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") );
+
+ select = function( selector, context, results, seed, xml ) {
+ // Only use querySelectorAll when not filtering,
+ // when this is not xml,
+ // and when no QSA bugs apply
+ if ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+ var groups, i,
+ old = true,
+ nid = expando,
+ newContext = context,
+ newSelector = context.nodeType === 9 && selector;
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ groups = tokenize( selector );
+
+ if ( (old = context.getAttribute("id")) ) {
+ nid = old.replace( rescape, "\\$&" );
+ } else {
+ context.setAttribute( "id", nid );
+ }
+ nid = "[id='" + nid + "'] ";
+
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = nid + groups[i].join("");
+ }
+ newContext = rsibling.test( selector ) && context.parentNode || context;
+ newSelector = groups.join(",");
+ }
+
+ if ( newSelector ) {
+ try {
+ push.apply( results, slice.call( newContext.querySelectorAll(
+ newSelector
+ ), 0 ) );
+ return results;
+ } catch(qsaError) {
+ } finally {
+ if ( !old ) {
+ context.removeAttribute("id");
+ }
+ }
+ }
+ }
+
+ return oldSelect( selector, context, results, seed, xml );
+ };
+
+ if ( matches ) {
+ assert(function( div ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ disconnectedMatch = matches.call( div, "div" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ try {
+ matches.call( div, "[test!='']:sizzle" );
+ rbuggyMatches.push( "!=", pseudos );
+ } catch ( e ) {}
+ });
+
+ // rbuggyMatches always contains :active and :focus, so no need for a length check
+ rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") );
+
+ Sizzle.matchesSelector = function( elem, expr ) {
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace( rattributeQuotes, "='$1']" );
+
+ // rbuggyMatches always contains :active, so no need for an existence check
+ if ( !isXML( elem ) && !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 || 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, null, null, [ elem ] ).length > 0;
+ };
+ }
+ })();
+}
+
+// Deprecated
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Back-compat
+function setFilters() {}
+Expr.filters = setFilters.prototype = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+var runtil = /Until$/,
+ rparentsprev = /^(?:parents|prev(?:Until|All))/,
+ isSimple = /^.[^:#\[\.,]*$/,
+ rneedsContext = jQuery.expr.match.needsContext,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var i, l, length, n, r, ret,
+ self = this;
+
+ if ( typeof selector !== "string" ) {
+ return jQuery( selector ).filter(function() {
+ for ( i = 0, l = self.length; i < l; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ });
+ }
+
+ ret = this.pushStack( "", "find", selector );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ length = ret.length;
+ jQuery.find( selector, this[i], ret );
+
+ if ( i > 0 ) {
+ // Make sure that the results are unique
+ for ( n = length; n < ret.length; n++ ) {
+ for ( r = 0; r < length; r++ ) {
+ if ( ret[r] === ret[n] ) {
+ ret.splice(n--, 1);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ has: function( target ) {
+ var i,
+ targets = jQuery( target, this ),
+ len = targets.length;
+
+ return this.filter(function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector, false), "not", selector);
+ },
+
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector, true), "filter", selector );
+ },
+
+ is: function( selector ) {
+ return !!selector && (
+ typeof selector === "string" ?
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ rneedsContext.test( selector ) ?
+ jQuery( selector, this.context ).index( this[0] ) >= 0 :
+ jQuery.filter( selector, this ).length > 0 :
+ this.filter( selector ).length > 0 );
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ ret = [],
+ pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+ jQuery( selectors, context || this.context ) :
+ 0;
+
+ for ( ; i < l; i++ ) {
+ cur = this[i];
+
+ while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+ ret.push( cur );
+ break;
+ }
+ cur = cur.parentNode;
+ }
+ }
+
+ ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+ return this.pushStack( ret, "closest", selectors );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+ }
+
+ // index in selector
+ if ( typeof elem === "string" ) {
+ return jQuery.inArray( this[0], jQuery( elem ) );
+ }
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context ) :
+ jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+ all :
+ jQuery.unique( all ) );
+ },
+
+ addBack: function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter(selector)
+ );
+ }
+});
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+ return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+function sibling( cur, dir ) {
+ do {
+ cur = cur[ dir ];
+ } while ( cur && 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 jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until );
+
+ if ( !runtil.test( name ) ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
+
+ ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+ if ( this.length > 1 && rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
+
+ return this.pushStack( ret, name, core_slice.call( arguments ).join(",") );
+ };
+});
+
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 ?
+ jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+ jQuery.find.matches(expr, elems);
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ cur = elem[ dir ];
+
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+ // Can't pass null or undefined to indexOf in Firefox 4
+ // Set to 0 to skip string check
+ qualifier = qualifier || 0;
+
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ var retVal = !!qualifier.call( elem, i, elem );
+ return retVal === keep;
+ });
+
+ } else if ( qualifier.nodeType ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return ( elem === qualifier ) === keep;
+ });
+
+ } else if ( typeof qualifier === "string" ) {
+ var filtered = jQuery.grep(elements, function( elem ) {
+ return elem.nodeType === 1;
+ });
+
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter(qualifier, filtered, !keep);
+ } else {
+ qualifier = jQuery.filter( qualifier, filtered );
+ }
+ }
+
+ return jQuery.grep(elements, function( elem, i ) {
+ return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+ });
+}
+function createSafeFragment( document ) {
+ var list = nodeNames.split( "|" ),
+ safeFrag = document.createDocumentFragment();
+
+ if ( safeFrag.createElement ) {
+ while ( list.length ) {
+ safeFrag.createElement(
+ list.pop()
+ );
+ }
+ }
+ return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+ "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+ rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ rtagName = /<([\w:]+)/,
+ rtbody = / ]", "i"),
+ rcheckableType = /^(?:checkbox|radio)$/,
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /\/(java|ecma)script/i,
+ rcleanScript = /^\s*\s*$/g,
+ wrapMap = {
+ option: [ 1, "", " " ],
+ legend: [ 1, "", " " ],
+ thead: [ 1, "" ],
+ tr: [ 2, "" ],
+ td: [ 3, "" ],
+ col: [ 2, "" ],
+ area: [ 1, "", " " ],
+ _default: [ 0, "", "" ]
+ },
+ safeFragment = createSafeFragment( document ),
+ fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+// unless wrapped in a div with non-breaking characters in front of it.
+if ( !jQuery.support.htmlSerialize ) {
+ wrapMap._default = [ 1, "X", "
" ];
+}
+
+jQuery.fn.extend({
+ text: function( value ) {
+ return jQuery.access( this, function( value ) {
+ return value === undefined ?
+ jQuery.text( this ) :
+ this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+ }, null, value, arguments.length );
+ },
+
+ wrapAll: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapAll( html.call(this, i) );
+ });
+ }
+
+ if ( this[0] ) {
+ // The elements to wrap the target around
+ var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+ if ( this[0].parentNode ) {
+ wrap.insertBefore( this[0] );
+ }
+
+ wrap.map(function() {
+ var elem = this;
+
+ while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+ elem = elem.firstChild;
+ }
+
+ return elem;
+ }).append( this );
+ }
+
+ return this;
+ },
+
+ 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() {
+ return this.parent().each(function() {
+ if ( !jQuery.nodeName( this, "body" ) ) {
+ jQuery( this ).replaceWith( this.childNodes );
+ }
+ }).end();
+ },
+
+ append: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 ) {
+ this.appendChild( elem );
+ }
+ });
+ },
+
+ prepend: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 ) {
+ this.insertBefore( elem, this.firstChild );
+ }
+ });
+ },
+
+ before: function() {
+ if ( !isDisconnected( this[0] ) ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this );
+ });
+ }
+
+ if ( arguments.length ) {
+ var set = jQuery.clean( arguments );
+ return this.pushStack( jQuery.merge( set, this ), "before", this.selector );
+ }
+ },
+
+ after: function() {
+ if ( !isDisconnected( this[0] ) ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ }
+
+ if ( arguments.length ) {
+ var set = jQuery.clean( arguments );
+ return this.pushStack( jQuery.merge( this, set ), "after", this.selector );
+ }
+ },
+
+ // keepData is for internal use only--do not document
+ remove: function( selector, keepData ) {
+ var elem,
+ i = 0;
+
+ for ( ; (elem = this[i]) != null; i++ ) {
+ if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ jQuery.cleanData( [ elem ] );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+ }
+ }
+
+ return this;
+ },
+
+ empty: function() {
+ var elem,
+ i = 0;
+
+ for ( ; (elem = this[i]) != null; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ }
+
+ // Remove any remaining nodes
+ while ( elem.firstChild ) {
+ elem.removeChild( elem.firstChild );
+ }
+ }
+
+ return this;
+ },
+
+ 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 jQuery.access( this, function( value ) {
+ var elem = this[0] || {},
+ i = 0,
+ l = this.length;
+
+ if ( value === undefined ) {
+ return elem.nodeType === 1 ?
+ elem.innerHTML.replace( rinlinejQuery, "" ) :
+ undefined;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&
+ ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+ !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+ value = value.replace( rxhtmlTag, "<$1>$2>" );
+
+ try {
+ for (; i < l; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ elem = this[i] || {};
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName( "*" ) );
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch(e) {}
+ }
+
+ if ( elem ) {
+ this.empty().append( value );
+ }
+ }, null, value, arguments.length );
+ },
+
+ replaceWith: function( value ) {
+ if ( !isDisconnected( this[0] ) ) {
+ // Make sure that the elements are removed from the DOM before they are inserted
+ // this can help fix replacing a parent with child elements
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this), old = self.html();
+ self.replaceWith( value.call( this, i, old ) );
+ });
+ }
+
+ if ( typeof value !== "string" ) {
+ value = jQuery( value ).detach();
+ }
+
+ return this.each(function() {
+ var next = this.nextSibling,
+ parent = this.parentNode;
+
+ jQuery( this ).remove();
+
+ if ( next ) {
+ jQuery(next).before( value );
+ } else {
+ jQuery(parent).append( value );
+ }
+ });
+ }
+
+ return this.length ?
+ this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+ this;
+ },
+
+ detach: function( selector ) {
+ return this.remove( selector, true );
+ },
+
+ domManip: function( args, table, callback ) {
+
+ // Flatten any nested arrays
+ args = [].concat.apply( [], args );
+
+ var results, first, fragment, iNoClone,
+ i = 0,
+ value = args[0],
+ scripts = [],
+ l = this.length;
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) {
+ return this.each(function() {
+ jQuery(this).domManip( args, table, callback );
+ });
+ }
+
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ args[0] = value.call( this, i, table ? self.html() : undefined );
+ self.domManip( args, table, callback );
+ });
+ }
+
+ if ( this[0] ) {
+ results = jQuery.buildFragment( args, this, scripts );
+ fragment = results.fragment;
+ first = fragment.firstChild;
+
+ if ( fragment.childNodes.length === 1 ) {
+ fragment = first;
+ }
+
+ if ( first ) {
+ table = table && jQuery.nodeName( first, "tr" );
+
+ // Use the original fragment for the last item instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ // Fragments from the fragment cache must always be cloned and never used in place.
+ for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) {
+ callback.call(
+ table && jQuery.nodeName( this[i], "table" ) ?
+ findOrAppend( this[i], "tbody" ) :
+ this[i],
+ i === iNoClone ?
+ fragment :
+ jQuery.clone( fragment, true, true )
+ );
+ }
+ }
+
+ // Fix #11809: Avoid leaking memory
+ fragment = first = null;
+
+ if ( scripts.length ) {
+ jQuery.each( scripts, function( i, elem ) {
+ if ( elem.src ) {
+ if ( jQuery.ajax ) {
+ jQuery.ajax({
+ url: elem.src,
+ type: "GET",
+ dataType: "script",
+ async: false,
+ global: false,
+ "throws": true
+ });
+ } else {
+ jQuery.error("no ajax");
+ }
+ } else {
+ jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+ });
+ }
+ }
+
+ return this;
+ }
+});
+
+function findOrAppend( elem, tag ) {
+ return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+}
+
+function cloneCopyEvent( src, dest ) {
+
+ if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+ return;
+ }
+
+ var type, i, l,
+ oldData = jQuery._data( src ),
+ curData = jQuery._data( dest, oldData ),
+ events = oldData.events;
+
+ if ( events ) {
+ delete curData.handle;
+ curData.events = {};
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
+ }
+ }
+
+ // make the cloned public data object a copy from the original
+ if ( curData.data ) {
+ curData.data = jQuery.extend( {}, curData.data );
+ }
+}
+
+function cloneFixAttributes( src, dest ) {
+ var nodeName;
+
+ // We do not need to do anything for non-Elements
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // clearAttributes removes the attributes, which we don't want,
+ // but also removes the attachEvent events, which we *do* want
+ if ( dest.clearAttributes ) {
+ dest.clearAttributes();
+ }
+
+ // mergeAttributes, in contrast, only merges back on the
+ // original attributes, not the events
+ if ( dest.mergeAttributes ) {
+ dest.mergeAttributes( src );
+ }
+
+ nodeName = dest.nodeName.toLowerCase();
+
+ if ( nodeName === "object" ) {
+ // IE6-10 improperly clones children of object elements using classid.
+ // IE10 throws NoModificationAllowedError if parent is null, #12132.
+ if ( dest.parentNode ) {
+ dest.outerHTML = src.outerHTML;
+ }
+
+ // This path appears unavoidable for IE9. When cloning an object
+ // element in IE9, the outerHTML strategy above is not sufficient.
+ // If the src has innerHTML and the destination does not,
+ // copy the src.innerHTML into the dest.innerHTML. #10324
+ if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) {
+ dest.innerHTML = src.innerHTML;
+ }
+
+ } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+ // IE6-8 fails to persist the checked state of a cloned checkbox
+ // or radio button. Worse, IE6-7 fail to give the cloned element
+ // a checked appearance if the defaultChecked value isn't also set
+
+ dest.defaultChecked = dest.checked = src.checked;
+
+ // IE6-7 get confused and end up setting the value of a cloned
+ // checkbox/radio button to an empty string instead of "on"
+ if ( dest.value !== src.value ) {
+ dest.value = src.value;
+ }
+
+ // IE6-8 fails to return the selected option to the default selected
+ // state when cloning options
+ } else if ( nodeName === "option" ) {
+ dest.selected = src.defaultSelected;
+
+ // IE6-8 fails to set the defaultValue to the correct value when
+ // cloning other types of input fields
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+
+ // IE blanks contents when cloning scripts
+ } else if ( nodeName === "script" && dest.text !== src.text ) {
+ dest.text = src.text;
+ }
+
+ // Event data gets referenced instead of copied if the expando
+ // gets copied too
+ dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, context, scripts ) {
+ var fragment, cacheable, cachehit,
+ first = args[ 0 ];
+
+ // Set context from what may come in as undefined or a jQuery collection or a node
+ // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 &
+ // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception
+ context = context || document;
+ context = !context.nodeType && context[0] || context;
+ context = context.ownerDocument || context;
+
+ // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+ // Cloning options loses the selected state, so don't cache them
+ // IE 6 doesn't like it when you put or elements in a fragment
+ // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+ // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
+ if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document &&
+ first.charAt(0) === "<" && !rnocache.test( first ) &&
+ (jQuery.support.checkClone || !rchecked.test( first )) &&
+ (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
+
+ // Mark cacheable and look for a hit
+ cacheable = true;
+ fragment = jQuery.fragments[ first ];
+ cachehit = fragment !== undefined;
+ }
+
+ if ( !fragment ) {
+ fragment = context.createDocumentFragment();
+ jQuery.clean( args, context, fragment, scripts );
+
+ // Update the cache, but only store false
+ // unless this is a second parsing of the same content
+ if ( cacheable ) {
+ jQuery.fragments[ first ] = cachehit && fragment;
+ }
+ }
+
+ return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var elems,
+ i = 0,
+ ret = [],
+ insert = jQuery( selector ),
+ l = insert.length,
+ parent = this.length === 1 && this[0].parentNode;
+
+ if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) {
+ insert[ original ]( this[0] );
+ return this;
+ } else {
+ for ( ; i < l; i++ ) {
+ elems = ( i > 0 ? this.clone(true) : this ).get();
+ jQuery( insert[i] )[ original ]( elems );
+ ret = ret.concat( elems );
+ }
+
+ return this.pushStack( ret, name, insert.selector );
+ }
+ };
+});
+
+function getAll( elem ) {
+ if ( typeof elem.getElementsByTagName !== "undefined" ) {
+ return elem.getElementsByTagName( "*" );
+
+ } else if ( typeof elem.querySelectorAll !== "undefined" ) {
+ return elem.querySelectorAll( "*" );
+
+ } else {
+ return [];
+ }
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+ if ( rcheckableType.test( elem.type ) ) {
+ elem.defaultChecked = elem.checked;
+ }
+}
+
+jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var srcElements,
+ destElements,
+ i,
+ clone;
+
+ if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+ clone = elem.cloneNode( true );
+
+ // IE<=8 does not properly clone detached, unknown element nodes
+ } else {
+ fragmentDiv.innerHTML = elem.outerHTML;
+ fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+ }
+
+ if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+ (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+ // IE copies events bound via attachEvent when using cloneNode.
+ // Calling detachEvent on the clone will also remove the events
+ // from the original. In order to get around this, we use some
+ // proprietary methods to clear the events. Thanks to MooTools
+ // guys for this hotness.
+
+ cloneFixAttributes( elem, clone );
+
+ // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ // Weird iteration because IE will replace the length property
+ // with an element if you are cloning the body and one of the
+ // elements on the page has a name or id of "length"
+ for ( i = 0; srcElements[i]; ++i ) {
+ // Ensure that the destination node is not null; Fixes #9587
+ if ( destElements[i] ) {
+ cloneFixAttributes( srcElements[i], destElements[i] );
+ }
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ cloneCopyEvent( elem, clone );
+
+ if ( deepDataAndEvents ) {
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ for ( i = 0; srcElements[i]; ++i ) {
+ cloneCopyEvent( srcElements[i], destElements[i] );
+ }
+ }
+ }
+
+ srcElements = destElements = null;
+
+ // Return the cloned set
+ return clone;
+ },
+
+ clean: function( elems, context, fragment, scripts ) {
+ var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags,
+ safe = context === document && safeFragment,
+ ret = [];
+
+ // Ensure that context is a document
+ if ( !context || typeof context.createDocumentFragment === "undefined" ) {
+ context = document;
+ }
+
+ // Use the already-created safe fragment if context permits
+ for ( i = 0; (elem = elems[i]) != null; i++ ) {
+ if ( typeof elem === "number" ) {
+ elem += "";
+ }
+
+ if ( !elem ) {
+ continue;
+ }
+
+ // Convert html string into DOM nodes
+ if ( typeof elem === "string" ) {
+ if ( !rhtml.test( elem ) ) {
+ elem = context.createTextNode( elem );
+ } else {
+ // Ensure a safe container in which to render the html
+ safe = safe || createSafeFragment( context );
+ div = context.createElement("div");
+ safe.appendChild( div );
+
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(rxhtmlTag, "<$1>$2>");
+
+ // Go to html and back, then peel off extra wrappers
+ tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+ wrap = wrapMap[ tag ] || wrapMap._default;
+ depth = wrap[0];
+ div.innerHTML = wrap[1] + elem + wrap[2];
+
+ // Move to the right depth
+ while ( depth-- ) {
+ div = div.lastChild;
+ }
+
+ // Remove IE's autoinserted from table fragments
+ if ( !jQuery.support.tbody ) {
+
+ // String was a , *may* have spurious
+ hasBody = rtbody.test(elem);
+ tbody = tag === "table" && !hasBody ?
+ div.firstChild && div.firstChild.childNodes :
+
+ // String was a bare or
+ wrap[1] === "" && !hasBody ?
+ div.childNodes :
+ [];
+
+ for ( j = tbody.length - 1; j >= 0 ; --j ) {
+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
+ }
+ }
+ }
+
+ // IE completely kills leading whitespace when innerHTML is used
+ if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+ div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+ }
+
+ elem = div.childNodes;
+
+ // Take out of fragment container (we need a fresh div each time)
+ div.parentNode.removeChild( div );
+ }
+ }
+
+ if ( elem.nodeType ) {
+ ret.push( elem );
+ } else {
+ jQuery.merge( ret, elem );
+ }
+ }
+
+ // Fix #11356: Clear elements from safeFragment
+ if ( div ) {
+ elem = div = safe = null;
+ }
+
+ // Reset defaultChecked for any radios and checkboxes
+ // about to be appended to the DOM in IE 6/7 (#8060)
+ if ( !jQuery.support.appendChecked ) {
+ for ( i = 0; (elem = ret[i]) != null; i++ ) {
+ if ( jQuery.nodeName( elem, "input" ) ) {
+ fixDefaultChecked( elem );
+ } else if ( typeof elem.getElementsByTagName !== "undefined" ) {
+ jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+ }
+ }
+ }
+
+ // Append elements to a provided document fragment
+ if ( fragment ) {
+ // Special handling of each script element
+ handleScript = function( elem ) {
+ // Check if we consider it executable
+ if ( !elem.type || rscriptType.test( elem.type ) ) {
+ // Detach the script and store it in the scripts array (if provided) or the fragment
+ // Return truthy to indicate that it has been handled
+ return scripts ?
+ scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
+ fragment.appendChild( elem );
+ }
+ };
+
+ for ( i = 0; (elem = ret[i]) != null; i++ ) {
+ // Check if we're done after handling an executable script
+ if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
+ // Append to fragment and handle embedded scripts
+ fragment.appendChild( elem );
+ if ( typeof elem.getElementsByTagName !== "undefined" ) {
+ // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
+ jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
+
+ // Splice the scripts into ret after their former ancestor and advance our index beyond them
+ ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+ i += jsTags.length;
+ }
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ cleanData: function( elems, /* internal */ acceptData ) {
+ var data, id, elem, type,
+ i = 0,
+ internalKey = jQuery.expando,
+ cache = jQuery.cache,
+ deleteExpando = jQuery.support.deleteExpando,
+ special = jQuery.event.special;
+
+ for ( ; (elem = elems[i]) != null; i++ ) {
+
+ if ( acceptData || jQuery.acceptData( elem ) ) {
+
+ id = elem[ internalKey ];
+ data = id && cache[ id ];
+
+ if ( data ) {
+ 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 );
+ }
+ }
+ }
+
+ // Remove cache only if it was not already removed by jQuery.event.remove
+ if ( cache[ id ] ) {
+
+ delete cache[ id ];
+
+ // IE does not allow us to delete expando properties from nodes,
+ // nor does it have a removeAttribute function on Document nodes;
+ // we must handle all of these cases
+ if ( deleteExpando ) {
+ delete elem[ internalKey ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( internalKey );
+
+ } else {
+ elem[ internalKey ] = null;
+ }
+
+ jQuery.deletedIds.push( id );
+ }
+ }
+ }
+ }
+ }
+});
+// Limit scope pollution from any deprecated API
+(function() {
+
+var matched, browser;
+
+// Use of jQuery.browser is frowned upon.
+// More details: http://api.jquery.com/jQuery.browser
+// jQuery.uaMatch maintained for back-compat
+jQuery.uaMatch = function( ua ) {
+ ua = ua.toLowerCase();
+
+ var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
+ /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+ /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
+ /(msie) ([\w.]+)/.exec( ua ) ||
+ ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
+ [];
+
+ return {
+ browser: match[ 1 ] || "",
+ version: match[ 2 ] || "0"
+ };
+};
+
+matched = jQuery.uaMatch( navigator.userAgent );
+browser = {};
+
+if ( matched.browser ) {
+ browser[ matched.browser ] = true;
+ browser.version = matched.version;
+}
+
+// Chrome is Webkit, but Webkit is also Safari.
+if ( browser.chrome ) {
+ browser.webkit = true;
+} else if ( browser.webkit ) {
+ browser.safari = true;
+}
+
+jQuery.browser = browser;
+
+jQuery.sub = function() {
+ function jQuerySub( selector, context ) {
+ return new jQuerySub.fn.init( selector, context );
+ }
+ jQuery.extend( true, jQuerySub, this );
+ jQuerySub.superclass = this;
+ jQuerySub.fn = jQuerySub.prototype = this();
+ jQuerySub.fn.constructor = jQuerySub;
+ jQuerySub.sub = this.sub;
+ jQuerySub.fn.init = function init( selector, context ) {
+ if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+ context = jQuerySub( context );
+ }
+
+ return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+ };
+ jQuerySub.fn.init.prototype = jQuerySub.fn;
+ var rootjQuerySub = jQuerySub(document);
+ return jQuerySub;
+};
+
+})();
+var curCSS, iframe, iframeDoc,
+ ralpha = /alpha\([^)]*\)/i,
+ ropacity = /opacity=([^)]*)/,
+ rposition = /^(top|right|bottom|left)$/,
+ // 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]).+)/,
+ rmargin = /^margin/,
+ rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+ rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+ rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ),
+ elemdisplay = {},
+
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssNormalTransform = {
+ letterSpacing: 0,
+ fontWeight: 400
+ },
+
+ cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+ cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
+
+ eventsToggle = jQuery.fn.toggle;
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+ // shortcut for names that are not vendor prefixed
+ if ( name in style ) {
+ return name;
+ }
+
+ // check for vendor prefixed names
+ var capName = name.charAt(0).toUpperCase() + name.slice(1),
+ origName = name,
+ i = cssPrefixes.length;
+
+ while ( i-- ) {
+ name = cssPrefixes[ i ] + capName;
+ if ( name in style ) {
+ return name;
+ }
+ }
+
+ return origName;
+}
+
+function isHidden( elem, el ) {
+ elem = el || elem;
+ return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+ var elem, display,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ for ( ; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+ values[ index ] = jQuery._data( elem, "olddisplay" );
+ if ( show ) {
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if ( !values[ index ] && elem.style.display === "none" ) {
+ elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if ( elem.style.display === "" && isHidden( elem ) ) {
+ values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+ }
+ } else {
+ display = curCSS( elem, "display" );
+
+ if ( !values[ index ] && display !== "none" ) {
+ jQuery._data( elem, "olddisplay", display );
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for ( index = 0; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+ if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+ elem.style.display = show ? values[ index ] || "" : "none";
+ }
+ }
+
+ return elements;
+}
+
+jQuery.fn.extend({
+ css: function( name, value ) {
+ return jQuery.access( this, function( elem, name, value ) {
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ }, name, value, arguments.length > 1 );
+ },
+ show: function() {
+ return showHide( this, true );
+ },
+ hide: function() {
+ return showHide( this );
+ },
+ toggle: function( state, fn2 ) {
+ var bool = typeof state === "boolean";
+
+ if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {
+ return eventsToggle.apply( this, arguments );
+ }
+
+ return this.each(function() {
+ if ( bool ? state : isHidden( this ) ) {
+ jQuery( this ).show();
+ } else {
+ jQuery( this ).hide();
+ }
+ });
+ }
+});
+
+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;
+
+ }
+ }
+ }
+ },
+
+ // Exclude the following css properties to add px
+ cssNumber: {
+ "fillOpacity": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": 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: {
+ // normalize float css property
+ "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+ },
+
+ // 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( style, origName ) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // convert relative number strings (+= or -=) to relative numbers. #7345
+ if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+ value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that NaN and null values aren't set. See: #7116
+ if ( value == null || type === "number" && isNaN( value ) ) {
+ return;
+ }
+
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+ // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+ // Fixes bug #5509
+ try {
+ style[ name ] = value;
+ } catch(e) {}
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, numeric, extra ) {
+ 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( elem.style, origName ) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ 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 );
+ }
+
+ //convert "normal" to computed value
+ if ( val === "normal" && name in cssNormalTransform ) {
+ val = cssNormalTransform[ name ];
+ }
+
+ // Return, converting to number if forced or a qualifier was provided and val looks numeric
+ if ( numeric || extra !== undefined ) {
+ num = parseFloat( val );
+ return numeric || jQuery.isNumeric( num ) ? num || 0 : val;
+ }
+ return val;
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ 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.call( elem );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+
+ return ret;
+ }
+});
+
+// NOTE: To any future maintainer, we've window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+ curCSS = function( elem, name ) {
+ var ret, width, minWidth, maxWidth,
+ computed = window.getComputedStyle( elem, null ),
+ style = elem.style;
+
+ if ( computed ) {
+
+ ret = computed[ name ];
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+
+ // A tribute to the "awesome hack by Dean Edwards"
+ // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+ // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+ // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+ if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ return ret;
+ };
+} else if ( document.documentElement.currentStyle ) {
+ curCSS = function( elem, name ) {
+ var left, rsLeft,
+ ret = elem.currentStyle && elem.currentStyle[ name ],
+ style = elem.style;
+
+ // Avoid setting ret to empty string here
+ // so we don't default to auto
+ if ( ret == null && style && style[ name ] ) {
+ ret = style[ name ];
+ }
+
+ // 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
+ // but not position css attributes, as those are proportional to the parent element instead
+ // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+ if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+ // Remember the original values
+ left = style.left;
+ rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
+
+ // Put in the new values to get a computed value out
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ }
+ style.left = name === "fontSize" ? "1em" : ret;
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = rsLeft;
+ }
+ }
+
+ return ret === "" ? "auto" : ret;
+ };
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+ var matches = rnumsplit.exec( value );
+ return matches ?
+ Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+ value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox ) {
+ var i = extra === ( isBorderBox ? "border" : "content" ) ?
+ // If we already have the right measurement, avoid augmentation
+ 4 :
+ // Otherwise initialize for horizontal or vertical properties
+ name === "width" ? 1 : 0,
+
+ val = 0;
+
+ for ( ; i < 4; i += 2 ) {
+ // both box models exclude margin, so add it if we want it
+ if ( extra === "margin" ) {
+ // we use jQuery.css instead of curCSS here
+ // because of the reliableMarginRight CSS hook!
+ val += jQuery.css( elem, extra + cssExpand[ i ], true );
+ }
+
+ // From this point on we use curCSS for maximum performance (relevant in animations)
+ if ( isBorderBox ) {
+ // border-box includes padding, so remove it if we want content
+ if ( extra === "content" ) {
+ val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
+ }
+
+ // at this point, extra isn't border nor margin, so remove border
+ if ( extra !== "margin" ) {
+ val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+ }
+ } else {
+ // at this point, extra isn't content, so add padding
+ val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
+
+ // at this point, extra isn't content nor padding, so add border
+ if ( extra !== "padding" ) {
+ val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+ }
+ }
+ }
+
+ return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+ // Start with offset property, which is equivalent to the border-box value
+ var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+ valueIsBorderBox = true,
+ isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box";
+
+ // 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 );
+ if ( val < 0 || val == null ) {
+ val = elem.style[ name ];
+ }
+
+ // Computed unit is not pixels. Stop here and return.
+ if ( rnumnonpx.test(val) ) {
+ return val;
+ }
+
+ // we need the check for style in case a browser which returns unreliable values
+ // for getComputedStyle silently falls back to the reliable elem.style
+ valueIsBorderBox = isBorderBox && ( jQuery.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
+ )
+ ) + "px";
+}
+
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+ if ( elemdisplay[ nodeName ] ) {
+ return elemdisplay[ nodeName ];
+ }
+
+ var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ),
+ display = elem.css("display");
+ elem.remove();
+
+ // If the simple way fails,
+ // get element's real default display by attaching it to a temp iframe
+ if ( display === "none" || display === "" ) {
+ // Use the already-created iframe if possible
+ iframe = document.body.appendChild(
+ iframe || jQuery.extend( document.createElement("iframe"), {
+ frameBorder: 0,
+ width: 0,
+ height: 0
+ })
+ );
+
+ // Create a cacheable copy of the iframe document on first call.
+ // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+ // document to it; WebKit & Firefox won't allow reusing the iframe document.
+ if ( !iframeDoc || !iframe.createElement ) {
+ iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+ iframeDoc.write("");
+ iframeDoc.close();
+ }
+
+ elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );
+
+ display = curCSS( elem, "display" );
+ document.body.removeChild( iframe );
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+
+ return display;
+}
+
+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
+ // however, it must have a current display style that would benefit from this
+ if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) {
+ return jQuery.swap( elem, cssShow, function() {
+ return getWidthOrHeight( elem, name, extra );
+ });
+ } else {
+ return getWidthOrHeight( elem, name, extra );
+ }
+ }
+ },
+
+ set: function( elem, value, extra ) {
+ return setPositiveNumber( elem, value, extra ?
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra,
+ jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"
+ ) : 0
+ );
+ }
+ };
+});
+
+if ( !jQuery.support.opacity ) {
+ jQuery.cssHooks.opacity = {
+ get: function( elem, computed ) {
+ // IE uses filters for opacity
+ return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+ ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+ computed ? "1" : "";
+ },
+
+ set: function( elem, value ) {
+ var style = elem.style,
+ currentStyle = elem.currentStyle,
+ opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+ filter = currentStyle && currentStyle.filter || style.filter || "";
+
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ style.zoom = 1;
+
+ // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+ if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+ style.removeAttribute ) {
+
+ // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+ // if "filter:" is present at all, clearType is disabled, we want to avoid this
+ // style.removeAttribute is IE Only, but so apparently is this code path...
+ style.removeAttribute( "filter" );
+
+ // if there there is no filter style applied in a css rule, we are done
+ if ( currentStyle && !currentStyle.filter ) {
+ return;
+ }
+ }
+
+ // otherwise, set new filter values
+ style.filter = ralpha.test( filter ) ?
+ filter.replace( ralpha, opacity ) :
+ filter + " " + opacity;
+ }
+ };
+}
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+ if ( !jQuery.support.reliableMarginRight ) {
+ jQuery.cssHooks.marginRight = {
+ get: function( elem, computed ) {
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ return jQuery.swap( elem, { "display": "inline-block" }, function() {
+ if ( computed ) {
+ return curCSS( elem, "marginRight" );
+ }
+ });
+ }
+ };
+ }
+
+ // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+ // getComputedStyle returns percent when specified for top/left/bottom/right
+ // rather than make the css module depend on the offset module, we just check for it here
+ if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+ jQuery.each( [ "top", "left" ], function( i, prop ) {
+ jQuery.cssHooks[ prop ] = {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ var ret = curCSS( elem, prop );
+ // if curCSS returns percentage, fallback to offset
+ return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret;
+ }
+ }
+ };
+ });
+ }
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.hidden = function( elem ) {
+ return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none");
+ };
+
+ jQuery.expr.filters.visible = function( elem ) {
+ return !jQuery.expr.filters.hidden( elem );
+ };
+}
+
+// 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,
+
+ // assumes a single number if not a string
+ parts = typeof value === "string" ? value.split(" ") : [ value ],
+ expanded = {};
+
+ for ( i = 0; 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;
+ }
+});
+var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+ rselectTextarea = /^(?:select|textarea)/i;
+
+jQuery.fn.extend({
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+ serializeArray: function() {
+ return this.map(function(){
+ return this.elements ? jQuery.makeArray( this.elements ) : this;
+ })
+ .filter(function(){
+ return this.name && !this.disabled &&
+ ( this.checked || rselectTextarea.test( this.nodeName ) ||
+ rinput.test( this.type ) );
+ })
+ .map(function( i, elem ){
+ var val = jQuery( this ).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray( val ) ?
+ jQuery.map( val, function( val, i ){
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }) :
+ { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }).get();
+ }
+});
+
+//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, value ) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+ s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if ( traditional === undefined ) {
+ traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" ).replace( r20, "+" );
+};
+
+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 {
+ // If array item is non-scalar (array or object), encode its
+ // numeric index to resolve deserialization ambiguity issues.
+ // Note that rack (as of 1.0.0) can't currently deserialize
+ // nested arrays properly, and attempting to do so may cause
+ // a server error. Possible fixes are to modify rack's
+ // deserialization algorithm or to provide an option or flag
+ // to force array serialization to be shallow.
+ buildParams( prefix + "[" + ( typeof v === "object" ? 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 );
+ }
+}
+var
+ // Document location
+ ajaxLocParts,
+ ajaxLocation,
+
+ rhash = /#.*$/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rquery = /\?/,
+ rscript = /
+<%@ Application Codebehind="Global.asax.cs" Inherits="MVC.Web.MvcApplication" Language="C#" %>
diff --git a/MVC/Global.asax.cs b/MVC/Global.asax.cs
new file mode 100644
index 0000000..04748d4
--- /dev/null
+++ b/MVC/Global.asax.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.Http;
+using System.Web.Mvc;
+using System.Web.Optimization;
+using System.Web.Routing;
+using MVC.Web.App_Start;
+
+namespace MVC.Web
+{
+ // Note: For instructions on enabling IIS6 or IIS7 classic mode,
+ // visit http://go.microsoft.com/?LinkId=9394801
+
+ public class MvcApplication : System.Web.HttpApplication
+ {
+ protected void Application_Start()
+ {
+ AreaRegistration.RegisterAllAreas();
+
+ //Run IOC Container configuration
+ IocConfig.SetupIoc();
+
+ WebApiConfig.Register(GlobalConfiguration.Configuration);
+ FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
+ RouteConfig.RegisterRoutes(RouteTable.Routes);
+ BundleConfig.RegisterBundles(BundleTable.Bundles);
+ }
+ }
+}
\ No newline at end of file
diff --git a/MVC/Helpers/SitecoreFieldHelper.cs b/MVC/Helpers/SitecoreFieldHelper.cs
index 2da997d..8df0914 100644
--- a/MVC/Helpers/SitecoreFieldHelper.cs
+++ b/MVC/Helpers/SitecoreFieldHelper.cs
@@ -2,7 +2,7 @@
using Sitecore.Mvc.Helpers;
using Sitecore.Data.Items;
-namespace MVC.Tutorial
+namespace MVC.Web.Helpers
{
///
///
diff --git a/MVC/IoC/Installers/DefaultInstallers.cs b/MVC/IoC/Installers/DefaultInstallers.cs
index ce6eaa1..b79f7bb 100644
--- a/MVC/IoC/Installers/DefaultInstallers.cs
+++ b/MVC/IoC/Installers/DefaultInstallers.cs
@@ -3,17 +3,13 @@
using Castle.Windsor;
using MVC.Data.Domain;
using MVC.Data.Repositories;
+using MVC.Data.Services;
using Sitecore.Mvc.Presentation;
using Sitecore.MVC.Presentation;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Web;
using System.Web.Mvc;
-namespace MVC.Tutorial.IoC.Installers
+namespace MVC.Web.IoC.Installers
{
-
public class DefaultInstallers : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
@@ -23,10 +19,11 @@ public void Install(IWindsorContainer container, IConfigurationStore store)
.LifestyleTransient()
.Configure(x => x.Named(x.Implementation.FullName)));
- container.Register(Component.For().ImplementedBy());
- container.Register(Component.For().ImplementedBy());
- container.Register(Component.For().ImplementedBy());
- container.Register(Component.For().ImplementedBy());
+ container.Register(Component.For().ImplementedBy().Named("MVC.LocationDomain"));
+ container.Register(Component.For().ImplementedBy().Named("Mvc.SitecoreRepository"));
+ container.Register(Component.For().ImplementedBy().Named("Mvc.RenderingContextWrapper"));
+ container.Register(Component.For().ImplementedBy().Named("Mvc.PageContextWrapper"));
+ container.Register(Component.For().ImplementedBy().Named("Mvc.SearchService"));
}
}
}
\ No newline at end of file
diff --git a/MVC/IoC/WindsorControllerFactory.cs b/MVC/IoC/WindsorControllerFactory.cs
index 60267da..9c95d61 100644
--- a/MVC/IoC/WindsorControllerFactory.cs
+++ b/MVC/IoC/WindsorControllerFactory.cs
@@ -1,12 +1,10 @@
using Castle.MicroKernel;
using System;
-using System.Collections.Generic;
-using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
-namespace MVC.Tutorial.IoC
+namespace MVC.Web.IoC
{
public class WindsorControllerFactory : DefaultControllerFactory
{
diff --git a/MVC/MVC.Web.csproj b/MVC/MVC.Web.csproj
new file mode 100644
index 0000000..9fbd292
--- /dev/null
+++ b/MVC/MVC.Web.csproj
@@ -0,0 +1,433 @@
+
+
+
+
+ Debug
+ AnyCPU
+
+
+ 2.0
+ {2B755E45-F3ED-4548-AA96-0E5ED7EC7018}
+ {E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
+ Library
+ Properties
+ MVC.Web
+ MVC.Web
+ v4.5
+ false
+ true
+
+
+
+
+ ..\
+ true
+
+
+ true
+ full
+ false
+ bin\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\packages\Castle.Core.3.3.0\lib\net45\Castle.Core.dll
+
+
+ ..\packages\Castle.Windsor.3.3.0\lib\net45\Castle.Windsor.dll
+
+
+ False
+ ..\packages\Kamsar.WebConsole.1.2.2.0\lib\net40\Kamsar.WebConsole.dll
+
+
+
+ False
+ ..\packages\Ninject.3.0.1.10\lib\net45-full\Ninject.dll
+
+
+ ..\Libraries\Sitecore.ContentSearch.dll
+ False
+
+
+ ..\Libraries\Sitecore.Kernel.dll
+ False
+
+
+ ..\Libraries\Sitecore.Logging.dll
+ False
+
+
+ ..\Libraries\Sitecore.Mvc.dll
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\packages\EntityFramework.5.0.0\lib\net45\EntityFramework.dll
+
+
+ True
+ ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll
+
+
+ True
+ ..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.0\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll
+
+
+ ..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll
+
+
+
+
+ ..\packages\Microsoft.AspNet.WebApi.Client.4.0.20710.0\lib\net40\System.Net.Http.Formatting.dll
+
+
+
+
+ ..\packages\Microsoft.AspNet.WebApi.Core.4.0.20710.0\lib\net40\System.Web.Http.dll
+ True
+
+
+ ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.20710.0\lib\net40\System.Web.Http.WebHost.dll
+ True
+
+
+ False
+ ..\packages\Microsoft.AspNet.Mvc.4.0.20710.0\lib\net40\System.Web.Mvc.dll
+
+
+ ..\packages\Microsoft.AspNet.Web.Optimization.1.0.0\lib\net40\System.Web.Optimization.dll
+ True
+
+
+ ..\packages\Microsoft.AspNet.Providers.Core.1.2\lib\net40\System.Web.Providers.dll
+ False
+
+
+ False
+ ..\packages\Microsoft.AspNet.Razor.2.0.20715.0\lib\net40\System.Web.Razor.dll
+
+
+ False
+ ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.dll
+
+
+ False
+ ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Deployment.dll
+
+
+ False
+ ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll
+
+
+ False
+ ..\packages\Unicorn.2.0.4\lib\net45\Unicorn.dll
+
+
+ True
+ ..\packages\WebGrease.1.3.0\lib\WebGrease.dll
+
+
+ True
+ ..\packages\WebGrease.1.3.0\lib\Antlr3.Runtime.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Global.asax
+
+
+
+
+
+
+
+
+ site.less
+
+
+ site.less
+
+
+ bootstrap.less
+
+
+ bootstrap.less
+
+
+ variables.less
+
+
+ variables.less
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {93b9bb50-f423-44b9-b50d-3dcac0756b17}
+ MVC.Data
+
+
+
+ 10.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ 0
+ /
+ http://localhost:50410/
+ False
+ False
+
+
+ False
+
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
+
\ No newline at end of file
diff --git a/MVC/Properties/AssemblyInfo.cs b/MVC/Properties/AssemblyInfo.cs
index b6a037f..0a4e635 100644
--- a/MVC/Properties/AssemblyInfo.cs
+++ b/MVC/Properties/AssemblyInfo.cs
@@ -5,11 +5,11 @@
// 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("MVC")]
+[assembly: AssemblyTitle("MVC.Web")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("MVC")]
+[assembly: AssemblyProduct("MVC.Web")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("d7f4d25d-2da5-4720-80ab-c702a8823216")]
+[assembly: Guid("8b5a0b1d-918d-4ec5-85ac-c57701d932fd")]
// Version information for an assembly consists of the following four values:
//
diff --git a/MVC/Views/Registration/Register.cshtml b/MVC/Views/Registration/Register.cshtml
new file mode 100644
index 0000000..fe256c3
--- /dev/null
+++ b/MVC/Views/Registration/Register.cshtml
@@ -0,0 +1,71 @@
+@using Sitecore.Mvc.Presentation
+@using Sitecore.Mvc;
+@model MVC.Data.ViewModels.RegisterViewModel
+
+
diff --git a/MVC/Views/Registration/Register2.cshtml b/MVC/Views/Registration/Register2.cshtml
new file mode 100644
index 0000000..8730330
--- /dev/null
+++ b/MVC/Views/Registration/Register2.cshtml
@@ -0,0 +1,61 @@
+@using Sitecore.Mvc.Presentation
+@using Sitecore.Mvc;
+@model MVC.Data.ViewModels.RegisterViewModel
+
+
+
+
Now we need some more information @Model.CustomerContactDetails.FirstName
+
\ No newline at end of file
diff --git a/MVC/Views/Registration/Register3.cshtml b/MVC/Views/Registration/Register3.cshtml
new file mode 100644
index 0000000..4d8ec8b
--- /dev/null
+++ b/MVC/Views/Registration/Register3.cshtml
@@ -0,0 +1,48 @@
+@using System.Globalization
+@using Sitecore.Mvc.Presentation
+@using Sitecore.Mvc;
+@model MVC.Data.ViewModels.RegisterViewModel
+
+
\ No newline at end of file
diff --git a/MVC/Views/Registration/RegisterFinal.cshtml b/MVC/Views/Registration/RegisterFinal.cshtml
new file mode 100644
index 0000000..a1aad61
--- /dev/null
+++ b/MVC/Views/Registration/RegisterFinal.cshtml
@@ -0,0 +1,15 @@
+@using Sitecore.Mvc.Presentation
+@using Sitecore.Mvc;
+@model MVC.Data.ViewModels.RegisterViewModel
+
+
\ No newline at end of file
diff --git a/MVC/Views/Search/SearchBox.cshtml b/MVC/Views/Search/SearchBox.cshtml
new file mode 100644
index 0000000..bac7c6f
--- /dev/null
+++ b/MVC/Views/Search/SearchBox.cshtml
@@ -0,0 +1,10 @@
+@model MVC.Data.Models.Search
+@using Sitecore.Mvc;
+
+@using (Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName, FormMethod.Post, new { @class = "searchBox pull-right" }))
+{
+ @Html.AntiForgeryToken()
+ @Html.Sitecore().FormHandler("Search", "Submit")
+ @Html.TextBoxFor(x => x.SearchTerm, new {@placeholder="Search", @class = "form-control" })
+ @Html.ValidationMessageFor(x => x.SearchTerm, null, new {@class="bg-danger"})
+}
diff --git a/MVC/Views/Search/SearchResults.cshtml b/MVC/Views/Search/SearchResults.cshtml
new file mode 100644
index 0000000..bb6b991
--- /dev/null
+++ b/MVC/Views/Search/SearchResults.cshtml
@@ -0,0 +1,51 @@
+@using Sitecore.Links;
+
+@model MVC.Data.ViewModels.SearchResultViewModel
+
+
Search Results
+
+
+
Filters
+
+ @foreach (var category in Model.FacetCategories)
+ {
+ foreach(var facetValue in category.Values)
+ {
+
+ @facetValue.Name (@facetValue.Count)
+
+
+ }
+ }
+
+
+
\ No newline at end of file
diff --git a/MVC/Views/Shared/Header.cshtml b/MVC/Views/Shared/Header.cshtml
new file mode 100644
index 0000000..7c64af2
--- /dev/null
+++ b/MVC/Views/Shared/Header.cshtml
@@ -0,0 +1,13 @@
+@model RenderingModel
+@using Sitecore.Mvc.Presentation
+@using Sitecore.Mvc;
+
+
+
diff --git a/MVC/Views/Shared/Navigation.cshtml b/MVC/Views/Shared/Navigation.cshtml
new file mode 100644
index 0000000..b984d1b
--- /dev/null
+++ b/MVC/Views/Shared/Navigation.cshtml
@@ -0,0 +1,29 @@
+@model RenderingModel
+@using Sitecore.Mvc.Presentation
+@using Sitecore.Mvc;
+
+
+
+
+
+
+
+
+
+
+ @Html.Sitecore().Placeholder("navigationsearch")
+
+
+
+
\ No newline at end of file
diff --git a/MVC/Views/Shared/_Layout.cshtml b/MVC/Views/Shared/_Layout.cshtml
index a7cac92..2a05d87 100644
--- a/MVC/Views/Shared/_Layout.cshtml
+++ b/MVC/Views/Shared/_Layout.cshtml
@@ -1,11 +1,14 @@
-
Bootstrap 101 Template
+
Sitecore MVC Contrib
+
+
-
-
-
+
+
+ @Styles.Render("~/bundles/css/site")
+ @Styles.Render("~/bundles/themes/base/css")
@@ -13,12 +16,13 @@
+
@RenderBody()
-
-
-
-
+
+
+ @Scripts.Render("~/bundles/js/site")
+
\ No newline at end of file
diff --git a/MVC/Views/Web.config b/MVC/Views/Web.config
index 3dfe656..aa52615 100644
--- a/MVC/Views/Web.config
+++ b/MVC/Views/Web.config
@@ -15,9 +15,8 @@
+
-
-
diff --git a/MVC/Views/_ViewStart.cshtml b/MVC/Views/_ViewStart.cshtml
new file mode 100644
index 0000000..efda124
--- /dev/null
+++ b/MVC/Views/_ViewStart.cshtml
@@ -0,0 +1,3 @@
+@{
+ Layout = "~/Views/Shared/_Layout.cshtml";
+}
\ No newline at end of file
diff --git a/MVC/Views/layouts/Content.cshtml b/MVC/Views/layouts/Content.cshtml
index 90de10b..4562e85 100644
--- a/MVC/Views/layouts/Content.cshtml
+++ b/MVC/Views/layouts/Content.cshtml
@@ -1,4 +1,5 @@
-@model RenderingModel
+@using Sitecore.Mvc
+@model Sitecore.Mvc.Presentation.RenderingModel
diff --git a/MVC/Views/layouts/Main.cshtml b/MVC/Views/layouts/Main.cshtml
index d6ea4ca..2f07acb 100644
--- a/MVC/Views/layouts/Main.cshtml
+++ b/MVC/Views/layouts/Main.cshtml
@@ -1,7 +1,14 @@
-@{
+@using Sitecore.Mvc
+@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
+
+
+ @Html.Sitecore().ViewRendering("/views/Shared/Header", new { DataSource = "/sitecore/content/Home" })
+ @Html.Sitecore().ViewRendering("/views/Shared/Navigation", new { DataSource = "/sitecore/content/Home" } )
+
+
@Html.Sitecore().Placeholder("main")
\ No newline at end of file
diff --git a/MVC/Views/layouts/Spotlight.cshtml b/MVC/Views/layouts/Spotlight.cshtml
index 60edb1d..ef4bc57 100644
--- a/MVC/Views/layouts/Spotlight.cshtml
+++ b/MVC/Views/layouts/Spotlight.cshtml
@@ -1,5 +1,6 @@
-@model RenderingModel
-@using MVC.Tutorial
+@model Sitecore.Mvc.Presentation.RenderingModel
+@using MVC.Web
+@using Sitecore.Mvc
@Html.Sitecore().Field("Image", Model.Item, new { mw = 300, mh = 400, hspace = 10, vspace = 10, @class = "imageLeft", DisableWebEdit = true })
diff --git a/MVC/Views/layouts/ThreeColumns.cshtml b/MVC/Views/layouts/ThreeColumns.cshtml
index acc9d2e..d79d842 100644
--- a/MVC/Views/layouts/ThreeColumns.cshtml
+++ b/MVC/Views/layouts/ThreeColumns.cshtml
@@ -1,4 +1,5 @@
-@model RenderingModel
+@using Sitecore.Mvc
+@model Sitecore.Mvc.Presentation.RenderingModel
Related:
diff --git a/MVC/bin/Antlr3.Runtime.dll b/MVC/bin/Antlr3.Runtime.dll
new file mode 100644
index 0000000..9592285
Binary files /dev/null and b/MVC/bin/Antlr3.Runtime.dll differ
diff --git a/MVC/bin/EntityFramework.dll b/MVC/bin/EntityFramework.dll
new file mode 100644
index 0000000..2618485
Binary files /dev/null and b/MVC/bin/EntityFramework.dll differ
diff --git a/MVC/bin/EntityFramework.xml b/MVC/bin/EntityFramework.xml
new file mode 100644
index 0000000..aa84a9e
--- /dev/null
+++ b/MVC/bin/EntityFramework.xml
@@ -0,0 +1,17968 @@
+
+
+
+ EntityFramework
+
+
+
+
+ The base for all all Entity Data Model (EDM) types that represent a type from the EDM type system.
+
+
+
+
+ Represents an item in an Entity Data Model (EDM) .
+
+
+
+
+ The base for all all Entity Data Model (EDM) item types that with a Name property that represents a qualified (can be dotted) name.
+
+
+
+
+ The base for all all Entity Data Model (EDM) item types that with a property.
+
+
+
+
+ The base for all all Entity Data Model (EDM) types that support annotation using .
+
+
+
+
+ EdmDataModelItem is the base for all types in the Entity Data Model (EDM) metadata construction and modification API.
+
+
+
+
+ DataModelItem is the base for all types in the EDM metadata reflection, construction and modification API.
+
+
+
+
+ Gets an value indicating which Entity Data Model (EDM) concept is represented by this item.
+
+
+
+
+ IAnnotatedDataModelItem is implemented by model-specific base types for all types with an property.
+
+
+
+
+ Gets or sets the currently assigned annotations.
+
+
+
+
+ Gets or sets the currently assigned annotations.
+
+
+
+
+ Returns all EdmItem children directly contained by this EdmItem.
+
+
+
+
+ INamedDataModelItem is implemented by model-specific base types for all types with a property.
+
+
+
+
+ Gets or sets the currently assigned name.
+
+
+
+
+ Gets or sets the currently assigned name.
+
+
+
+
+ Gets a value indicating whether this type is abstract.
+
+
+
+
+ Gets the optional base type of this type.
+
+
+
+
+ EdmStructuralMember is the base for all types that represent members of structural items in the Entity Data Model (EDM) metadata construction and modification API.
+
+
+
+
+ Represents information about a database connection.
+
+
+
+
+ Creates a new instance of DbConnectionInfo representing a connection that is specified in the application configuration file.
+
+ The name of the connection string in the application configuration.
+
+
+
+ Creates a new instance of DbConnectionInfo based on a connection string.
+
+ The connection string to use for the connection.
+ The name of the provider to use for the connection. Use 'System.Data.SqlClient' for SQL Server.
+
+
+
+ Gets the connection information represented by this instance.
+
+ Configuration to use if connection comes from the configuration file.
+
+
+
+ Instances of this class are used to create DbConnection objects for
+ SQL Server LocalDb based on a given database name or connection string.
+
+
+ An instance of this class can be set on the class or in the
+ app.config/web.config for the application to cause all DbContexts created with no
+ connection information or just a database name to use SQL Server LocalDb by default.
+ This class is immutable since multiple threads may access instances simultaneously
+ when creating connections.
+
+
+
+
+ Implementations of this interface are used to create DbConnection objects for
+ a type of database server based on a given database name.
+ An Instance is set on the class to
+ cause all DbContexts created with no connection information or just a database
+ name or connection string to use a certain type of database server by default.
+ Two implementations of this interface are provided:
+ is used to create connections to Microsoft SQL Server, including EXPRESS editions.
+ is used to create connections to Microsoft SQL
+ Server Compact Editions.
+ Other implementations for other database servers can be added as needed.
+ Note that implementations should be thread safe or immutable since they may
+ be accessed by multiple threads at the same time.
+
+
+
+
+ Creates a connection based on the given database name or connection string.
+
+ The database name or connection string.
+ An initialized DbConnection.
+
+
+
+ Creates a new instance of the connection factory for the given version of LocalDb.
+ For SQL Server 2012 LocalDb use "v11.0".
+
+ The LocalDb version to use.
+
+
+
+ Creates a new instance of the connection factory for the given version of LocalDb.
+ For SQL Server 2012 LocalDb use "v11.0".
+
+
+ The LocalDb version to use.
+
+ The connection string to use for options to the database other than the 'Initial Catalog',
+ 'Data Source', and 'AttachDbFilename'.
+ The 'Initial Catalog' and 'AttachDbFilename' will be prepended to this string based on the
+ database name when CreateConnection is called.
+ The 'Data Source' will be set based on the LocalDbVersion argument.
+
+
+
+
+ Creates a connection for SQL Server LocalDb based on the given database name or connection string.
+ If the given string contains an '=' character then it is treated as a full connection string,
+ otherwise it is treated as a database name only.
+
+ The database name or connection string.
+ An initialized DbConnection.
+
+
+
+ The connection string to use for options to the database other than the 'Initial Catalog',
+ 'Data Source', and 'AttachDbFilename'.
+ The 'Initial Catalog' and 'AttachDbFilename' will be prepended to this string based on the
+ database name when CreateConnection is called.
+ The 'Data Source' will be set based on the LocalDbVersion argument.
+ The default is 'Integrated Security=True; MultipleActiveResultSets=True;'.
+
+
+
+
+ Encapsulates a cloned and store . Note that these
+ objects are disposable and should be used in a using block to ensure both the cloned context and the
+ cloned connection are disposed.
+
+
+
+
+ For mocking.
+
+
+
+
+ Creates a clone of the given . The underlying of
+ the context is also cloned and the given connection string is used for the connection string of
+ the cloned connection.
+
+
+
+
+ Finds the assemblies that were used for loading o-space types in the source context
+ and loads those assemblies in the cloned context.
+
+
+
+
+ Disposes both the underlying ObjectContext and its store connection.
+
+
+
+
+ The cloned context.
+
+
+
+
+ This is always the store connection of the underlying ObjectContext.
+
+
+
+
+ Represents setting the database initializer for a specific context type
+
+
+
+
+ Represents a parameter to be passed to a method
+
+
+
+
+ Represents a series of parameters to pass to a method
+
+
+
+
+ Adds a new parameter to the collection
+ Used for unit testing
+
+
+
+
+ Represents the configuration for a series of contexts
+
+
+
+
+ Adds a new context to the collection
+ Used for unit testing
+
+
+
+
+ Represents the configuration for a specific context type
+
+
+
+
+ Represents setting the default connection factory
+
+
+
+
+ Represents all Entity Framework related configuration
+
+
+
+
+ Handles creating databases either using the core provider or the Migrations pipeline.
+
+
+
+
+ Creates a database using the core provider (i.e. ObjectContext.CreateDatabase) or
+ by using Code First Migrations to create an empty database
+ and the perform an automatic migration to the current model.
+ Migrations is used if Code First is being used and the EF provider is for SQL Server
+ or SQL Compact. The core is used for non-Code First models and for other providers even
+ when using Code First.
+
+
+
+
+ A DbContext instance represents a combination of the Unit Of Work and Repository patterns such that
+ it can be used to query from a database and group together changes that will then be written
+ back to the store as a unit.
+ DbContext is conceptually similar to ObjectContext.
+
+
+ DbContext is usually used with a derived type that contains properties for
+ the root entities of the model. These sets are automatically initialized when the
+ instance of the derived class is created. This behavior can be modified by applying the
+ attribute to either the entire derived context
+ class, or to individual properties on the class.
+
+ The Entity Data Model backing the context can be specified in several ways. When using the Code First
+ approach, the properties on the derived context are used to build a model
+ by convention. The protected OnModelCreating method can be overridden to tweak this model. More
+ control over the model used for the Model First approach can be obtained by creating a
+ explicitly from a and passing this model to one of the DbContext constructors.
+
+ When using the Database First or Model First approach the Entity Data Model can be created using the
+ Entity Designer (or manually through creation of an EDMX file) and then this model can be specified using
+ entity connection string or an object.
+
+ The connection to the database (including the name of the database) can be specified in several ways.
+ If the parameterless DbContext constructor is called from a derived context, then the name of the derived context
+ is used to find a connection string in the app.config or web.config file. If no connection string is found, then
+ the name is passed to the DefaultConnectionFactory registered on the class. The connection
+ factory then uses the context name as the database name in a default connection string. (This default connection
+ string points to .\SQLEXPRESS on the local machine unless a different DefaultConnectionFactory is registered.)
+
+ Instead of using the derived context name, the connection/database name can also be specified explicitly by
+ passing the name to one of the DbContext constructors that takes a string. The name can also be passed in
+ the form "name=myname", in which case the name must be found in the config file or an exception will be thrown.
+
+ Note that the connection found in the app.config or web.config file can be a normal database connection
+ string (not a special Entity Framework connection string) in which case the DbContext will use Code First.
+ However, if the connection found in the config file is a special Entity Framework connection string, then the
+ DbContext will use Database/Model First and the model specified in the connection string will be used.
+
+ An existing or explicitly created DbConnection can also be used instead of the database/connection name.
+
+ A can be applied to a class derived from DbContext to set the
+ version of conventions used by the context when it creates a model. If no attribute is applied then the
+ latest version of conventions will be used.
+
+
+
+
+ Interface implemented by objects that can provide an instance.
+ The class implements this interface to provide access to the underlying
+ ObjectContext.
+
+
+
+
+ Gets the object context.
+
+ The object context.
+
+
+
+ Constructs a new context instance using conventions to create the name of the database to
+ which a connection will be made. The by-convention name is the full name (namespace + class name)
+ of the derived context class.
+ See the class remarks for how this is used to create a connection.
+
+
+
+
+ Constructs a new context instance using conventions to create the name of the database to
+ which a connection will be made, and initializes it from the given model.
+ The by-convention name is the full name (namespace + class name) of the derived context class.
+ See the class remarks for how this is used to create a connection.
+
+ The model that will back this context.
+
+
+
+ Constructs a new context instance using the given string as the name or connection string for the
+ database to which a connection will be made.
+ See the class remarks for how this is used to create a connection.
+
+ Either the database name or a connection string.
+
+
+
+ Constructs a new context instance using the given string as the name or connection string for the
+ database to which a connection will be made, and initializes it from the given model.
+ See the class remarks for how this is used to create a connection.
+
+ Either the database name or a connection string.
+ The model that will back this context.
+
+
+
+ Constructs a new context instance using the existing connection to connect to a database.
+ The connection will not be disposed when the context is disposed.
+
+ An existing connection to use for the new context.
+ If set to true the connection is disposed when
+ the context is disposed, otherwise the caller must dispose the connection.
+
+
+
+ Constructs a new context instance using the existing connection to connect to a database,
+ and initializes it from the given model.
+ The connection will not be disposed when the context is disposed.
+ An existing connection to use for the new context.
+ The model that will back this context.
+ If set to true the connection is disposed when
+ the context is disposed, otherwise the caller must dispose the connection.
+
+
+
+
+ Constructs a new context instance around an existing ObjectContext.
+ An existing ObjectContext to wrap with the new context.
+ If set to true the ObjectContext is disposed when
+ the DbContext is disposed, otherwise the caller must dispose the connection.
+
+
+
+
+ Initializes the internal context, discovers and initializes sets, and initializes from a model if one is provided.
+
+
+
+
+ Discovers DbSets and initializes them.
+
+
+
+
+ This method is called when the model for a derived context has been initialized, but
+ before the model has been locked down and used to initialize the context. The default
+ implementation of this method does nothing, but it can be overridden in a derived class
+ such that the model can be further configured before it is locked down.
+
+
+ Typically, this method is called only once when the first instance of a derived context
+ is created. The model for that context is then cached and is for all further instances of
+ the context in the app domain. This caching can be disabled by setting the ModelCaching
+ property on the given ModelBuidler, but note that this can seriously degrade performance.
+ More control over caching is provided through use of the DbModelBuilder and DbContextFactory
+ classes directly.
+
+ The builder that defines the model for the context being created.
+
+
+
+ Internal method used to make the call to the real OnModelCreating method.
+
+ The model builder.
+
+
+
+ Returns a DbSet instance for access to entities of the given type in the context,
+ the ObjectStateManager, and the underlying store.
+
+
+ See the DbSet class for more details.
+
+ The type entity for which a set should be returned.
+ A set for the given entity type.
+
+
+
+ Returns a non-generic DbSet instance for access to entities of the given type in the context,
+ the ObjectStateManager, and the underlying store.
+
+ The type of entity for which a set should be returned.
+ A set for the given entity type.
+
+ See the DbSet class for more details.
+
+
+
+
+ Saves all changes made in this context to the underlying database.
+
+ The number of objects written to the underlying database.
+ Thrown if the context has been disposed.
+
+
+
+ Validates tracked entities and returns a Collection of containing validation results.
+
+
+ Collection of validation results for invalid entities. The collection is never null and must not contain null
+ values or results for valid entities.
+
+
+ 1. This method calls DetectChanges() to determine states of the tracked entities unless
+ DbContextConfiguration.AutoDetectChangesEnabled is set to false.
+ 2. By default only Added on Modified entities are validated. The user is able to change this behavior
+ by overriding ShouldValidateEntity method.
+
+
+
+
+ Extension point allowing the user to override the default behavior of validating only
+ added and modified entities.
+
+ DbEntityEntry instance that is supposed to be validated.
+ true to proceed with validation. false otherwise.
+
+
+
+ Extension point allowing the user to customize validation of an entity or filter out validation results.
+ Called by .
+
+ DbEntityEntry instance to be validated.
+ User defined dictionary containing additional info for custom validation.
+ It will be passed to
+ and will be exposed as .
+ This parameter is optional and can be null.
+ Entity validation result. Possibly null when overridden.
+
+
+
+ Internal method that calls the protected ValidateEntity method.
+
+ DbEntityEntry instance to be validated.
+ User defined dictionary containing additional info for custom validation.
+ It will be passed to
+ and will be exposed as .
+ This parameter is optional and can be null.
+ Entity validation result. Possibly null when ValidateEntity is overridden.
+
+
+
+ Gets a object for the given entity providing access to
+ information about the entity and the ability to perform actions on the entity.
+
+ The type of the entity.
+ The entity.
+ An entry for the entity.
+
+
+
+ Gets a object for the given entity providing access to
+ information about the entity and the ability to perform actions on the entity.
+
+ The entity.
+ An entry for the entity.
+
+
+
+ Calls the protected Dispose method.
+
+
+
+
+ Disposes the context. The underlying is also disposed if it was created
+ is by this context or ownership was passed to this context when this context was created.
+ The connection to the database ( object) is also disposed if it was created
+ is by this context or ownership was passed to this context when this context was created.
+
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.
+
+
+
+ Creates a Database instance for this context that allows for creation/deletion/existence checks
+ for the underlying database.
+
+
+
+
+ Returns the Entity Framework ObjectContext that is underlying this context.
+
+ Thrown if the context has been disposed.
+
+
+
+ Provides access to features of the context that deal with change tracking of entities.
+
+ An object used to access features that deal with change tracking.
+
+
+
+ Provides access to configuration options for the context.
+
+ An object used to access configuration options.
+
+
+
+ Provides access to the underlying InternalContext for other parts of the internal design.
+
+
+
+
+ A simple representation of an app.config or web.config file.
+
+
+
+
+ Initializes a new instance of AppConfig based on supplied configuration
+
+ Configuration to load settings from
+
+
+
+ Initializes a new instance of AppConfig based on supplied connection strings
+ The default configuration for database initializers and default connection factory will be used
+
+ Connection strings to be used
+
+
+
+ Initializes a new instance of AppConfig based on the for the AppDomain
+
+
+ Use AppConfig.DefaultInstance instead of this constructor
+
+
+
+
+ Appies any database intializers specified in the configuration
+
+
+
+
+ Appies any database intializers specified in the configuration
+
+
+ Value indicating if initializers should be re-applied if they have already been applied in this AppDomain
+
+
+
+
+ Gets the specified connection string from the configuration
+
+ Name of the connection string to get
+ The connection string, or null if there is no connection string with the specified name
+
+
+
+ Gets the default connection factory based on the configuration
+
+
+
+
+ Gets a singleton instance of configuration based on the for the AppDomain
+
+
+
+
+ Acts as a proxy for that for the most part just passes calls
+ through to the real object but uses virtual methods/properties such that uses of the object
+ can be mocked.
+
+
+
+
+ Encapsulates information read from the application config file that specifies a database initializer
+ and allows that initializer to be dynamically applied.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The key from the entry in the config file.
+ The value from the enrty in the config file.
+
+
+
+ Uses the context type and initializer type specified in the config to create an initializer instance
+ and set it with the DbDbatabase.SetInitializer method.
+
+
+
+
+ Reads all initializers from the application config file and sets them using the Database class.
+
+
+
+
+ Calculates the model hash values used the EdmMetadata table from EF 4.1/4.2.
+
+
+
+
+ Calculates an SHA256 hash of the EDMX from the given code first model. This is the hash stored in
+ the database in the EdmMetadata table in EF 4.1/4.2. The hash is always calculated using a v2 schema
+ as was generated by EF 4.1/4.2 and with the entity included in the model.
+
+
+
+
+ Acts as a proxy for that for the most part just passes calls
+ through to the real object but uses virtual methods/properties such that uses of the object
+ can be mocked.
+
+
+
+
+ An implementation of that will use Code First Migrations
+ to update the database to the latest version.
+
+
+
+
+
+ Executes the strategy to initialize the database for the given context.
+
+ The context.
+
+
+
+ Initializes a new instance of the MigrateDatabaseToLatestVersion class.
+
+
+
+
+ Initializes a new instance of the MigrateDatabaseToLatestVersion class that will
+ use a specific connection string from the configuration file to connect to
+ the database to perform the migration.
+
+ The name of the connection string to use for migration.
+
+
+
+
+
+
+ Helper class that is used to configure a column.
+
+
+
+
+ Creates a new column definition to store Binary data.
+
+ Value indicating whether or not the column allows null values.
+ The maximum allowable length of the array data.
+ Value indicating whether or not all data should be padded to the maximum length.
+ Value indicating whether or not the maximum length supported by the database provider should be used.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ Value indicating whether or not this column should be configured as a timestamp.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store Boolean data.
+
+ Value indicating whether or not the column allows null values.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store Byte data.
+
+ Value indicating whether or not the column allows null values.
+ Value indicating whether or not the database will generate values for this column during insert.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store DateTime data.
+
+ Value indicating whether or not the column allows null values.
+ The precision of the column.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store Decimal data.
+
+ Value indicating whether or not the column allows null values.
+ The numeric precision of the column.
+ The numeric scale of the column.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ Value indicating whether or not the database will generate values for this column during insert.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store Double data.
+
+ Value indicating whether or not the column allows null values.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store GUID data.
+
+ Value indicating whether or not the column allows null values.
+ Value indicating whether or not the database will generate values for this column during insert.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store Single data.
+
+ Value indicating whether or not the column allows null values.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store Short data.
+
+ Value indicating whether or not the column allows null values.
+ Value indicating whether or not the database will generate values for this column during insert.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store Integer data.
+
+ Value indicating whether or not the column allows null values.
+ Value indicating whether or not the database will generate values for this column during insert.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store Long data.
+
+ Value indicating whether or not the column allows null values.
+ Value indicating whether or not the database will generate values for this column during insert.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store String data.
+
+ Value indicating whether or not the column allows null values.
+ The maximum allowable length of the string data.
+ Value indicating whether or not all data should be padded to the maximum length.
+ Value indicating whether or not the maximum length supported by the database provider should be used.
+ Value indicating whether or not the column supports Unicode content.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store Time data.
+
+ Value indicating whether or not the column allows null values.
+ The precision of the column.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store DateTimeOffset data.
+
+ Value indicating whether or not the column allows null values.
+ The precision of the column.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store geography data.
+
+ Value indicating whether or not the column allows null values.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Creates a new column definition to store geometry data.
+
+ Value indicating whether or not the column allows null values.
+ Constant value to use as the default value for this column.
+ SQL expression used as the default value for this column.
+ The name of the column.
+ Provider specific data type to use for this column.
+ The newly constructed column definition.
+
+
+
+ Helper class that is used to further configure a table being created from a CreateTable call on .
+
+
+
+
+ Initializes a new instance of the TableBuilder class.
+
+ The table creation operation to be further configured.
+ The migration the table is created in.
+
+
+
+ Specifies a primary key for the table.
+
+
+ A lambda expression representing the property to be used as the primary key.
+ C#: t => t.Id
+ VB.Net: Function(t) t.Id
+
+ If the primary key is made up of multiple properties then specify an anonymous type including the properties.
+ C#: t => new { t.Id1, t.Id2 }
+ VB.Net: Function(t) New With { t.Id1, t.Id2 }
+
+
+ The name of the primary key.
+ If null is supplied, a default name will be generated.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+ Itself, so that multiple calls can be chained.
+
+
+
+ Specifies an index to be created on the table.
+
+
+ A lambda expression representing the property to be indexed.
+ C#: t => t.PropertyOne
+ VB.Net: Function(t) t.PropertyOne
+
+ If multiple properties are to be indexed then specify an anonymous type including the properties.
+ C#: t => new { t.PropertyOne, t.PropertyTwo }
+ VB.Net: Function(t) New With { t.PropertyOne, t.PropertyTwo }
+
+ A value indicating whether or not this is a unique index.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+ Itself, so that multiple calls can be chained.
+
+
+
+ Specifies a foreign key constraint to be created on the table.
+
+ Name of the table that the foreign key constraint targets.
+
+ A lambda expression representing the properties of the foreign key.
+ C#: t => t.PropertyOne
+ VB.Net: Function(t) t.PropertyOne
+
+ If multiple properties make up the foreign key then specify an anonymous type including the properties.
+ C#: t => new { t.PropertyOne, t.PropertyTwo }
+ VB.Net: Function(t) New With { t.PropertyOne, t.PropertyTwo }
+
+ A value indicating whether or not cascade delete should be configured on the foreign key constraint.
+
+
+ The name of this foreign key constraint.
+ If no name is supplied, a default name will be calculated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+ Itself, so that multiple calls can be chained.
+
+
+
+ Base class for code-based migrations.
+
+
+
+
+ Operations to be performed during the upgrade process.
+
+
+
+
+ Operations to be performed during the downgrade process.
+
+
+
+
+ Adds an operation to create a new table.
+
+
+ The columns in this create table operation.
+ You do not need to specify this type, it will be inferred from the columnsAction parameter you supply.
+
+ The name of the table. Schema name is optional, if no schema is specified then dbo is assumed.
+
+ An action that specifies the columns to be included in the table.
+ i.e. t => new { Id = t.Int(identity: true), Name = t.String() }
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+ An object that allows further configuration of the table creation operation.
+
+
+
+ Adds an operation to create a new foreign key constraint.
+
+
+ The table that contains the foreign key column.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The foreign key column.
+
+ The table that contains the column this foreign key references.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+
+ The column this foreign key references.
+ If no value is supplied the primary key of the principal table will be referenced.
+
+
+ A value indicating if cascade delete should be configured for the foreign key relationship.
+ If no value is supplied, cascade delete will be off.
+
+
+ The name of the foreign key constraint in the database.
+ If no value is supplied a unique name will be generated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to create a new foreign key constraint.
+
+
+ The table that contains the foreign key columns.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The foreign key columns.
+
+ The table that contains the columns this foreign key references.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+
+ The columns this foreign key references.
+ If no value is supplied the primary key of the principal table will be referenced.
+
+
+ A value indicating if cascade delete should be configured for the foreign key relationship.
+ If no value is supplied, cascade delete will be off.
+
+
+ The name of the foreign key constraint in the database.
+ If no value is supplied a unique name will be generated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to drop a foreign key constraint based on its name.
+
+
+ The table that contains the foreign key column.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The name of the foreign key constraint in the database.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to drop a foreign key constraint based on the column it targets.
+
+
+ The table that contains the foreign key column.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The foreign key column.
+
+ The table that contains the column this foreign key references.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The columns this foreign key references.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to drop a foreign key constraint based on the columns it targets.
+
+
+ The table that contains the foreign key columns.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The foreign key columns.
+
+ The table that contains the columns this foreign key references.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The columns this foreign key references.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to drop a table.
+
+
+ The name of the table to be dropped.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to move a table to a new schema.
+
+
+ The name of the table to be moved.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The schema the table is to be moved to.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to rename a table. To change the schema of a table use MoveTable
+
+
+ The name of the table to be renamed.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+
+ The new name for the table.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to rename a column.
+
+
+ The name of the table that contains the column to be renamed.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The name of the column to be renamed.
+ The new name for the column.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to add a column to an existing table.
+
+
+ The name of the table to add the column to.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+
+ The name of the column to be added.
+
+
+ An action that specifies the column to be added.
+ i.e. c => c.Int(nullable: false, defaultValue: 3)
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to drop an existing column.
+
+
+ The name of the table to drop the column from.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The name of the column to be dropped.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to alter the definition of an existing column.
+
+
+ The name of the table the column exists in.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The name of the column to be changed.
+
+ An action that specifies the new definition for the column.
+ i.e. c => c.String(nullable: false, defaultValue: "none")
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to create a new primary key.
+
+
+ The table that contains the primary key column.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The primary key column.
+
+ The name of the primary key in the database.
+ If no value is supplied a unique name will be generated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to create a new primary key based on multiple columns.
+
+
+ The table that contains the primary key columns.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The primary key columns.
+
+ The name of the primary key in the database.
+ If no value is supplied a unique name will be generated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to drop an existing primary key that does not have the default name.
+
+
+ The table that contains the primary key column.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The name of the primary key to be dropped.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to drop an existing primary key that was created with the default name.
+
+
+ The table that contains the primary key column.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to create an index on a single column.
+
+
+ The name of the table to create the index on.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The name of the column to create the index on.
+
+ A value indicating if this is a unique index.
+ If no value is supplied a non-unique index will be created.
+
+
+ The name to use for the index in the database.
+ If no value is supplied a unique name will be generated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to create an index on multiple columns.
+
+
+ The name of the table to create the index on.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The name of the columns to create the index on.
+
+ A value indicating if this is a unique index.
+ If no value is supplied a non-unique index will be created.
+
+
+ The name to use for the index in the database.
+ If no value is supplied a unique name will be generated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to drop an index based on its name.
+
+
+ The name of the table to drop the index from.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The name of the index to be dropped.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to drop an index based on the columns it targets.
+
+
+ The name of the table to drop the index from.
+ Schema name is optional, if no schema is specified then dbo is assumed.
+
+ The name of the column(s) the index targets.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Adds an operation to execute a SQL command.
+
+ The SQL to be executed.
+
+ A value indicating if the SQL should be executed outside of the
+ transaction being used for the migration process.
+ If no value is supplied the SQL will be executed within the transaction.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Configuration relating to the use of migrations for a given model.
+ You will typically create a configuration class that derives
+ from rather than
+ using this class.
+
+
+
+
+ Initializes a new instance of the DbMigrationsConfiguration class.
+
+
+
+
+ Adds a new SQL generator to be used for a given database provider.
+
+ Name of the database provider to set the SQL generator for.
+ The SQL generator to be used.
+
+
+
+ Gets the SQL generator that is set to be used with a given database provider.
+
+ Name of the database provider to get the SQL generator for.
+ The SQL generator that is set for the database provider.
+
+
+
+ Gets or sets a value indicating if automatic migrations can be used when migration the database.
+
+
+
+
+ Gets or sets a value indicating if data loss is acceptable during automatic migration.
+ If set to false an exception will be thrown if data loss may occur as part of an automatic migration.
+
+
+
+
+ Gets or sets the derived DbContext representing the model to be migrated.
+
+
+
+
+ Gets or sets the namespace used for code-based migrations.
+
+
+
+
+ Gets or sets the sub-directory that code-based migrations are stored in.
+
+
+
+
+ Gets or sets the code generator to be used when scaffolding migrations.
+
+
+
+
+ Gets or sets the assembly containing code-based migrations.
+
+
+
+
+ Gets or sets a value to override the connection of the database to be migrated.
+
+
+
+
+ Gets or sets the timeout value used for the individual commands within a
+ migration. A null value indicates that the default value of the underlying
+ provider will be used.
+
+
+
+
+ Configuration relating to the use of migrations for a given model.
+
+ The context representing the model that this configuration applies to.
+
+
+
+ Initializes a new instance of the DbMigrationsConfiguration class.
+
+
+
+
+ Runs after upgrading to the latest migration to allow seed data to be updated.
+
+ Context to be used for updating seed data.
+
+
+
+ DbMigrator is used to apply existing migrations to a database.
+ DbMigrator can be used to upgrade and downgrade to any given migration.
+ To scaffold migrations based on changes to your model use
+
+
+
+
+ Base class for decorators that wrap the core
+
+
+
+
+ Initializes a new instance of the MigratorBase class.
+
+ The migrator that this decorator is wrapping.
+
+
+
+ Gets a list of the pending migrations that have not been applied to the database.
+
+ List of migration Ids
+
+
+
+ Updates the target database to the latest migration.
+
+
+
+
+ Updates the target database to a given migration.
+
+ The migration to upgrade/downgrade to.
+
+
+
+ Gets a list of the migrations that are defined in the assembly.
+
+ List of migration Ids
+
+
+
+ Gets a list of the migrations that have been applied to the database.
+
+ List of migration Ids
+
+
+
+ Gets the configuration being used for the migrations process.
+
+
+
+
+ Migration Id representing the state of the database before any migrations are applied.
+
+
+
+
+ Initializes a new instance of the DbMigrator class.
+
+ Configuration to be used for the migration process.
+
+
+
+ Gets all migrations that are defined in the configured migrations assembly.
+
+
+
+
+ Gets all migrations that have been applied to the target database.
+
+
+
+
+ Gets all migrations that are defined in the assembly but haven't been applied to the target database.
+
+
+
+
+ Updates the target database to a given migration.
+
+ The migration to upgrade/downgrade to.
+
+
+
+ Gets the configuration that is being used for the migration process.
+
+
+
+
+ A set of extension methods for
+
+
+
+
+ Adds or updates entities by key when SaveChanges is called. Equivalent to an "upsert" operation
+ from database terminology.
+ This method can useful when seeding data using Migrations.
+
+ The entities to add or update.
+
+ When the parameter is a custom or fake IDbSet implementation, this method will
+ attempt to locate and invoke a public, instance method with the same signature as this extension method.
+
+
+
+
+ Adds or updates entities by a custom identification expression when SaveChanges is called.
+ Equivalent to an "upsert" operation from database terminology.
+ This method can useful when seeding data using Migrations.
+
+
+ An expression specifying the properties that should be used when determining
+ whether an Add or Update operation should be performed.
+
+ The entities to add or update.
+
+ When the parameter is a custom or fake IDbSet implementation, this method will
+ attempt to locate and invoke a public, instance method with the same signature as this extension method.
+
+
+
+
+ Generates C# code for a code-based migration.
+
+
+
+
+ Base class for providers that generate code for code-based migrations.
+
+
+
+
+ Generates the code that should be added to the users project.
+
+ Unique identifier of the migration.
+ Operations to be performed by the migration.
+ Source model to be stored in the migration metadata.
+ Target model to be stored in the migration metadata.
+ Namespace that code should be generated in.
+ Name of the class that should be generated.
+ The generated code.
+
+
+
+ Gets the namespaces that must be output as "using" or "Imports" directives to handle
+ the code generated by the given operations.
+
+ The operations for which code is going to be generated.
+ An ordered list of namespace names.
+
+
+
+ Gets the default namespaces that must be output as "using" or "Imports" directives for
+ any code generated.
+
+ A value indicating if this class is being generated for a code-behind file.
+ An ordered list of namespace names.
+
+
+
+
+
+
+ Generates the primary code file that the user can view and edit.
+
+ Operations to be performed by the migration.
+ Namespace that code should be generated in.
+ Name of the class that should be generated.
+ The generated code.
+
+
+
+ Generates the code behind file with migration metadata.
+
+ Unique identifier of the migration.
+ Source model to be stored in the migration metadata.
+ Target model to be stored in the migration metadata.
+ Namespace that code should be generated in.
+ Name of the class that should be generated.
+ The generated code.
+
+
+
+ Generates a property to return the source or target model in the code behind file.
+
+ Name of the property.
+ Value to be returned.
+ Text writer to add the generated code to.
+
+
+
+ Generates a namespace, using statements and class definition.
+
+ Namespace that code should be generated in.
+ Name of the class that should be generated.
+ Text writer to add the generated code to.
+ Base class for the generated class.
+ A value indicating if this class is being generated for a code-behind file.
+ Namespaces for which using directives will be added. If null, then the namespaces returned from GetDefaultNamespaces will be used.
+
+
+
+ Generates the closing code for a class that was started with WriteClassStart.
+
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an as part of a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an as part of a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a as part of a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to specify a set of column names using a lambda expression.
+
+ The columns to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to specify the definition for a .
+
+ The column definition to generate code for.
+ Text writer to add the generated code to.
+ A value indicating whether to include the column name in the definition.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column of unknown data type.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Removes any invalid characters from the name of an database artifact.
+
+ The name to be scrubbed.
+ The scrubbed name.
+
+
+
+ Gets the type name to use for a column of the given data type.
+
+ The data type to translate.
+ The type name to use in the generated migration.
+
+
+
+ Quotes an identifier using appropriate escaping to allow it to be stored in a string.
+
+ The identifier to be quoted.
+ The quoted identifier.
+
+
+
+ Scaffolds code-based migrations to apply pending model changes to the database.
+
+
+
+
+ Initializes a new instance of the MigrationScaffolder class.
+
+ Configuration to be used for scaffolding.
+
+
+
+ Scaffolds a code based migration to apply any pending model changes to the database.
+
+ The name to use for the scaffolded migration.
+ The scaffolded migration.
+
+
+
+ Scaffolds a code based migration to apply any pending model changes to the database.
+
+ The name to use for the scaffolded migration.
+ Whether or not to include model changes.
+ The scaffolded migration.
+
+
+
+ Scaffolds the initial code-based migration corresponding to a previously run database initializer.
+
+ The scaffolded migration.
+
+
+
+ Gets or sets the namespace used in the migration's generated code.
+
+ By default, this is the same as MigrationsNamespace on the migrations
+ configuration object passed into the constructor. For VB.NET projects, this
+ will need to be updated to take into account the project's root namespace.
+
+
+
+
+ Represents a code-based migration that has been scaffolded and is ready to be written to a file.
+
+
+
+
+ Gets or sets the unique identifier for this migration.
+ Typically used for the file name of the generated code.
+
+
+
+
+ Gets or sets the scaffolded migration code that the user can edit.
+
+
+
+
+ Gets or sets the scaffolded migration code that should be stored in a code behind file.
+
+
+
+
+ Gets or sets the programming language used for this migration.
+ Typically used for the file extension of the generated code.
+
+
+
+
+ Gets or sets the subdirectory in the user's project that this migration should be saved in.
+
+
+
+
+ Gets a dictionary of string resources to add to the migration resource file.
+
+
+
+
+ Represents an exception that occurred while running an operation in another AppDomain in the .
+
+
+
+
+ Initializes a new instance of the ToolingException class.
+
+ Error that explains the reason for the exception.
+ The type of the exception that was thrown.
+ The stack trace of the exception that was thrown.
+
+
+
+
+
+
+
+
+
+ Gets the type of the exception that was thrown.
+
+
+
+
+ Gets the stack trace of the exception that was thrown.
+
+
+
+
+ Helper class that is used by design time tools to run migrations related
+ commands that need to interact with an application that is being edited
+ in Visual Studio.
+
+ Because the application is being edited the assemblies need to
+ be loaded in a separate AppDomain to ensure the latest version
+ is always loaded.
+
+ The App/Web.config file from the startup project is also copied
+ to ensure that any configuration is applied.
+
+
+
+
+ Initializes a new instance of the ToolingFacade class.
+
+
+ The name of the assembly that contains the migrations configuration to be used.
+
+
+ The namespace qualified name of migrations configuration to be used.
+
+
+ The working directory containing the compiled assemblies.
+
+
+ The path of the config file from the startup project.
+
+
+ The path of the application data directory from the startup project.
+ Typically the App_Data directory for web applications or the working directory for executables.
+
+
+ The connection to the database to be migrated.
+ If null is supplied, the default connection for the context will be used.
+
+
+
+
+ Releases all unmanaged resources used by the facade.
+
+
+
+
+ Gets the fully qualified name of all types deriving from .
+
+ All context types found.
+
+
+
+ Gets the fully qualified name of a type deriving from .
+
+ The name of the context type. If null, the single context type found in the assembly will be returned.
+ The context type found.
+
+
+
+ Gets a list of all migrations that have been applied to the database.
+
+ Ids of applied migrations.
+
+
+
+ Gets a list of all migrations that have not been applied to the database.
+
+ Ids of pending migrations.
+
+
+
+ Updates the database to the specified migration.
+
+
+ The Id of the migration to migrate to.
+ If null is supplied, the database will be updated to the latest migration.
+
+ Value indicating if data loss during automatic migration is acceptable.
+
+
+
+ Generates a SQL script to migrate between two migrations.
+
+
+ The migration to update from.
+ If null is supplied, a script to update the current database will be produced.
+
+
+ The migration to update to.
+ If null is supplied, a script to update to the latest migration will be produced.
+
+ Value indicating if data loss during automatic migration is acceptable.
+ The generated SQL script.
+
+
+
+ Scaffolds a code-based migration to apply any pending model changes.
+
+ The name for the generated migration.
+ The programming language of the generated migration.
+ The root namespace of the project the migration will be added to.
+ Whether or not to include model changes.
+ The scaffolded migration.
+
+
+
+ Scaffolds the initial code-based migration corresponding to a previously run database initializer.
+
+ The programming language of the generated migration.
+ The root namespace of the project the migration will be added to.
+ The scaffolded migration.
+
+
+
+
+
+
+ Releases all resources used by the facade.
+
+
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.
+
+
+
+
+ Gets or sets an action to be run to log information.
+
+
+
+
+ Gets or sets an action to be run to log warnings.
+
+
+
+
+ Gets or sets an action to be run to log verbose information.
+
+
+
+
+ Base class for loggers that can be used for the migrations process.
+
+
+
+
+ Logs an informational message.
+
+ The message to be logged.
+
+
+
+ Logs a warning that the user should be made aware of.
+
+ The message to be logged.
+
+
+
+ Logs some additional information that should only be presented to the user if they request verbose output.
+
+ The message to be logged.
+
+
+
+ Generates VB.Net code for a code-based migration.
+
+
+
+
+
+
+
+ Generates the primary code file that the user can view and edit.
+
+ Operations to be performed by the migration.
+ Namespace that code should be generated in.
+ Name of the class that should be generated.
+ The generated code.
+
+
+
+ Generates the code behind file with migration metadata.
+
+ Unique identifier of the migration.
+ Source model to be stored in the migration metadata.
+ Target model to be stored in the migration metadata.
+ Namespace that code should be generated in.
+ Name of the class that should be generated.
+ The generated code.
+
+
+
+ Generates a property to return the source or target model in the code behind file.
+
+ Name of the property.
+ Value to be returned.
+ Text writer to add the generated code to.
+
+
+
+ Generates a namespace, using statements and class definition.
+
+ Namespace that code should be generated in.
+ Name of the class that should be generated.
+ Text writer to add the generated code to.
+ Base class for the generated class.
+ A value indicating if this class is being generated for a code-behind file.
+ Namespaces for which Imports directives will be added. If null, then the namespaces returned from GetDefaultNamespaces will be used.
+
+
+
+ Generates the closing code for a class that was started with WriteClassStart.
+
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an as part of a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an as part of a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a as part of a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to specify a set of column names using a lambda expression.
+
+ The columns to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform an .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to specify the definition for a .
+
+ The column definition to generate code for.
+ Text writer to add the generated code to.
+ A value indicating whether to include the column name in the definition.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to specify the default value for a column of unknown data type.
+
+ The value to be used as the default.
+ Code representing the default value.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Generates code to perform a .
+
+ The operation to generate code for.
+ Text writer to add the generated code to.
+
+
+
+ Removes any invalid characters from the name of an database artifact.
+
+ The name to be scrubbed.
+ The scrubbed name.
+
+
+
+ Gets the type name to use for a column of the given data type.
+
+ The data type to translate.
+ The type name to use in the generated migration.
+
+
+
+ Quotes an identifier using appropriate escaping to allow it to be stored in a string.
+
+ The identifier to be quoted.
+ The quoted identifier.
+
+
+
+ This class is used by Code First Migrations to read and write migration history
+ from the database. It is not intended to be used by other code and is only public
+ so that it can be accessed by EF when running under partial trust. It may be
+ changed or removed in the future.
+
+
+
+
+ Gets or sets the Id of the migration this row represents.
+
+
+
+
+ Gets or sets the date and time that this migrations history entry was created.
+
+
+
+
+ Gets or sets the state of the model after this migration was applied.
+
+
+
+
+ Gets or sets the version of Entity Framework that created this entry.
+
+
+
+
+ This is a version of the HistoryContext that still includes CreatedOn in its model.
+ It is used when figuring out whether or not the CreatedOn column exists and so should
+ be dropped.
+
+
+
+
+ Represents an error that occurs when an automatic migration would result in data loss.
+
+
+
+
+ Represents errors that occur inside the Code First Migrations pipeline.
+
+
+
+
+ Initializes a new instance of the MigrationsException class.
+
+
+
+
+ Initializes a new instance of the MigrationsException class.
+
+ The message that describes the error.
+
+
+
+ Initializes a new instance of the MigrationsException class.
+
+ The message that describes the error.
+ The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.
+
+
+
+ Initializes a new instance of the MigrationsException class with serialized data.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+
+
+
+ Initializes a new instance of the AutomaticDataLossException class.
+
+ The message that describes the error.
+
+
+
+ Represents an error that occurs when there are pending model changes after applying the last migration and automatic migration is disabled.
+
+
+
+
+ Initializes a new instance of the AutomaticMigrationsDisabledException class.
+
+ The message that describes the error.
+
+
+
+ Provides additional metadata about a code-based migration.
+
+
+
+
+ Gets the unique identifier for the migration.
+
+
+
+
+ Gets the state of the model before this migration is run.
+
+
+
+
+ Gets the state of the model after this migration is run.
+
+
+
+
+ Decorator to provide logging during migrations operations..
+
+
+
+
+ Initializes a new instance of the MigratorLoggingDecorator class.
+
+ The migrator that this decorator is wrapping.
+ The logger to write messages to.
+
+
+
+ Decorator to produce a SQL script instead of applying changes to the database.
+ Using this decorator to wrap will prevent
+ from applying any changes to the target database.
+
+
+
+
+ Initializes a new instance of the MigratorScriptingDecorator class.
+
+ The migrator that this decorator is wrapping.
+
+
+
+
+ Represents a column being added to a table.
+
+
+
+
+ Represents an operation to modify a database schema.
+
+
+
+
+ Initializes a new instance of the MigrationOperation class.
+
+
+
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets additional arguments that may be processed by providers.
+
+
+
+
+ Gets an operation that will revert this operation.
+
+
+
+
+ Gets a value indicating if this operation may result in data loss.
+
+
+
+
+ Initializes a new instance of the AddColumnOperation class.
+
+ The name of the table the column should be added to.
+ Details of the column being added.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the name of the table the column should be added to.
+
+
+
+
+ Gets the details of the column being added.
+
+
+
+
+ Gets an operation that represents dropping the added column.
+
+
+
+
+
+
+
+ Represents a foreign key constraint being added to a table.
+
+
+
+
+ Base class for changes that affect foreign key constraints.
+
+
+
+
+ Initializes a new instance of the ForeignKeyOperation class.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets or sets the name of the table that the foreign key constraint targets.
+
+
+
+
+ Gets or sets the name of the table that the foreign key columns exist in.
+
+
+
+
+ The names of the foreign key column(s).
+
+
+
+
+ Gets a value indicating if a specific name has been supplied for this foreign key constraint.
+
+
+
+
+ Gets or sets the name of this foreign key constraint.
+ If no name is supplied, a default name will be calculated.
+
+
+
+
+ Initializes a new instance of the AddForeignKeyOperation class.
+ The PrincipalTable, PrincipalColumns, DependentTable and DependentColumns properties should also be populated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets an operation to create an index on the foreign key column(s).
+
+ An operation to add the index.
+
+
+
+ The names of the column(s) that the foreign key constraint should target.
+
+
+
+
+ Gets or sets a value indicating if cascade delete should be configured on the foreign key constraint.
+
+
+
+
+ Gets an operation to drop the foreign key constraint.
+
+
+
+
+
+
+
+ Represents adding a primary key to a table.
+
+
+
+
+ Common base class to represent operations affecting primary keys.
+
+
+
+
+ Initializes a new instance of the PrimaryKeyOperation class.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets or sets the name of the table that contains the primary key.
+
+
+
+
+ Gets the column(s) that make up the primary key.
+
+
+
+
+ Gets a value indicating if a specific name has been supplied for this primary key.
+
+
+
+
+ Gets or sets the name of this primary key.
+ If no name is supplied, a default name will be calculated.
+
+
+
+
+
+
+
+ Initializes a new instance of the AddPrimaryKeyOperation class.
+ The Table and Columns properties should also be populated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets an operation to drop the primary key.
+
+
+
+
+ Represents altering an existing column.
+
+
+
+
+ Initializes a new instance of the AlterColumnOperation class.
+
+ The name of the table that the column belongs to.
+ Details of what the column should be altered to.
+ Value indicating if this change will result in data loss.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Initializes a new instance of the AlterColumnOperation class.
+
+ The name of the table that the column belongs to.
+ Details of what the column should be altered to.
+ Value indicating if this change will result in data loss.
+ An operation to revert this alteration of the column.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the name of the table that the column belongs to.
+
+
+
+
+ Gets the new definition for the column.
+
+
+
+
+ Gets an operation that represents reverting the alteration.
+ The inverse cannot be automatically calculated,
+ if it was not supplied to the constructor this property will return null.
+
+
+
+
+
+
+
+ Represents information about a column.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The data type for this column.
+
+
+
+ Initializes a new instance of the class.
+
+ The data type for this column.
+
+ Additional details about the data type.
+ This includes details such as maximum length, nullability etc.
+
+
+
+
+ Determines if this column is a narrower data type than another column.
+ Used to determine if altering the supplied column definition to this definition will result in data loss.
+
+ The column to compare to.
+ Details of the database provider being used.
+ True if this column is of a narrower data type.
+
+
+
+ Gets the data type for this column.
+
+
+
+
+ Gets the CLR type corresponding to the database type of this column.
+
+
+
+
+ Gets the default value for the CLR type corresponding to the database type of this column.
+
+
+
+
+ Gets additional details about the data type of this column.
+ This includes details such as maximum length, nullability etc.
+
+
+
+
+ Gets or sets the name of the column.
+
+
+
+
+ Gets or sets a provider specific data type to use for this column.
+
+
+
+
+ Gets or sets a value indicating if this column can store null values.
+
+
+
+
+ Gets or sets a value indicating if values for this column will be generated by the database using the identity pattern.
+
+
+
+
+ Gets or sets the maximum length for this column.
+ Only valid for array data types.
+
+
+
+
+ Gets or sets the precision for this column.
+ Only valid for decimal data types.
+
+
+
+
+ Gets or sets the scale for this column.
+ Only valid for decimal data types.
+
+
+
+
+ Gets or sets a constant value to use as the default value for this column.
+
+
+
+
+ Gets or sets a SQL expression used as the default value for this column.
+
+
+
+
+ Gets or sets a value indicating if this column is fixed length.
+ Only valid for array data types.
+
+
+
+
+ Gets or sets a value indicating if this column supports Unicode characters.
+ Only valid for textual data types.
+
+
+
+
+ Gets or sets a value indicating if this column should be configured as a timestamp.
+
+
+
+
+ Represents creating a database index.
+
+
+
+
+ Common base class for operations affecting indexes.
+
+
+
+
+ Initializes a new instance of the IndexOperation class.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets or sets the table the index belongs to.
+
+
+
+
+ Gets or sets the columns that are indexed.
+
+
+
+
+ Gets a value indicating if a specific name has been supplied for this index.
+
+
+
+
+ Gets or sets the name of this index.
+ If no name is supplied, a default name will be calculated.
+
+
+
+
+ Initializes a new instance of the CreateIndexOperation class.
+ The Table and Columns properties should also be populated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets or sets a value indicating if this is a unique index.
+
+
+
+
+ Gets an operation to drop this index.
+
+
+
+
+
+
+
+ Represents creating a table.
+
+
+
+
+ Initializes a new instance of the CreateTableOperation class.
+
+ Name of the table to be created.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the name of the table to be created.
+
+
+
+
+ Gets the columns to be included in the new table.
+
+
+
+
+ Gets or sets the primary key for the new table.
+
+
+
+
+ Gets an operation to drop the table.
+
+
+
+
+
+
+
+ Represents deleting a new record from the migrations history table.
+ The migrations history table is used to store a log of the migrations that have been applied to the database.
+
+
+
+
+ Common base class for operations that affect the migrations history table.
+ The migrations history table is used to store a log of the migrations that have been applied to the database.
+
+
+
+
+ Initializes a new instance of the HistoryOperation class.
+
+ Name of the migrations history table.
+ Name of the migration being affected.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the name of the migrations history table.
+
+
+
+
+ Gets the name of the migration being affected.
+
+
+
+
+
+
+
+ Initializes a new instance of the DeleteHistoryOperation class.
+
+ Name of the migrations history table.
+ Id of the migration record to be deleted.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Represents a column being dropped from a table.
+
+
+
+
+ Initializes a new instance of the DropColumnOperation class.
+
+ The name of the table the column should be dropped from.
+ The name of the column to be dropped.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Initializes a new instance of the DropColumnOperation class.
+
+ The name of the table the column should be dropped from.
+ The name of the column to be dropped.
+ The operation that represents reverting the drop operation.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the name of the table the column should be dropped from.
+
+
+
+
+ Gets the name of the column to be dropped.
+
+
+
+
+ Gets an operation that represents reverting dropping the column.
+ The inverse cannot be automatically calculated,
+ if it was not supplied to the constructor this property will return null.
+
+
+
+
+
+
+
+ Represents a foreign key constraint being dropped from a table.
+
+
+
+
+ Initializes a new instance of the DropForeignKeyOperation class.
+ The PrincipalTable, DependentTable and DependentColumns properties should also be populated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Initializes a new instance of the DropForeignKeyOperation class.
+
+ The operation that represents reverting dropping the foreign key constraint.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets an operation to drop the associated index on the foreign key column(s).
+
+ An operation to drop the index.
+
+
+
+ Gets an operation that represents reverting dropping the foreign key constraint.
+ The inverse cannot be automatically calculated,
+ if it was not supplied to the constructor this property will return null.
+
+
+
+
+
+
+
+ Represents dropping an existing index.
+
+
+
+
+ Initializes a new instance of the DropIndexOperation class.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Initializes a new instance of the DropIndexOperation class.
+
+ The operation that represents reverting dropping the index.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets an operation that represents reverting dropping the index.
+ The inverse cannot be automatically calculated,
+ if it was not supplied to the constructor this property will return null.
+
+
+
+
+
+
+
+ Represents dropping a primary key from a table.
+
+
+
+
+ Initializes a new instance of the DropPrimaryKeyOperation class.
+ The Table and Columns properties should also be populated.
+
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets an operation to add the primary key.
+
+
+
+
+ Represents dropping an existing table.
+
+
+
+
+ Initializes a new instance of the DropTableOperation class.
+
+ The name of the table to be dropped.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Initializes a new instance of the DropTableOperation class.
+
+ The name of the table to be dropped.
+ An operation that represents reverting dropping the table.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the name of the table to be dropped.
+
+
+
+
+ Gets an operation that represents reverting dropping the table.
+ The inverse cannot be automatically calculated,
+ if it was not supplied to the constructor this property will return null.
+
+
+
+
+
+
+
+ Represents inserting a new record into the migrations history table.
+ The migrations history table is used to store a log of the migrations that have been applied to the database.
+
+
+
+
+ Initializes a new instance of the InsertHistoryOperation class.
+
+ Name of the migrations history table.
+ Id of the migration record to be inserted.
+ Value to be stored in the model column.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the value to store in the history table representing the target model of the migration.
+
+
+
+
+ Gets the value to store in the history table indicating the version of Entity Framework used to produce this migration.
+
+
+
+
+
+
+
+ Represents moving a table from one schema to another.
+
+
+
+
+ Initializes a new instance of the MoveTableOperation class.
+
+ Name of the table to be moved.
+ Name of the schema to move the table to.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the name of the table to be moved.
+
+
+
+
+ Gets the name of the schema to move the table to.
+
+
+
+
+ Gets an operation that moves the table back to its original schema.
+
+
+
+
+
+
+
+ Represents renaming an existing column.
+
+
+
+
+ Initializes a new instance of the RenameColumnOperation class.
+
+ Name of the table the column belongs to.
+ Name of the column to be renamed.
+ New name for the column.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the name of the table the column belongs to.
+
+
+
+
+ Gets the name of the column to be renamed.
+
+
+
+
+ Gets the new name for the column.
+
+
+
+
+ Gets an operation that reverts the rename.
+
+
+
+
+
+
+
+ Represents renaming an existing table.
+
+
+
+
+ Initializes a new instance of the RenameTableOperation class.
+
+ Name of the table to be renamed.
+ New name for the table.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the name of the table to be renamed.
+
+
+
+
+ Gets the new name for the table.
+
+
+
+
+ Gets an operation that reverts the rename.
+
+
+
+
+
+
+
+ Represents a provider specific SQL statement to be executed directly against the target database.
+
+
+
+
+ Initializes a new instance of the SqlOperation class.
+
+ The SQL to be executed.
+
+ Additional arguments that may be processed by providers.
+ Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'.
+
+
+
+
+ Gets the SQL to be executed.
+
+
+
+
+ Gets or sets a value indicating whether this statement should be performed outside of
+ the transaction scope that is used to make the migration process transactional.
+ If set to true, this operation will not be rolled back if the migration process fails.
+
+
+
+
+
+
+
+ Common base class for providers that convert provider agnostic migration
+ operations into database provider specific SQL commands.
+
+
+
+
+ Converts a set of migration operations into database provider specific SQL.
+
+ The operations to be converted.
+ Token representing the version of the database being targeted.
+ A list of SQL statements to be executed to perform the migration operations.
+
+
+
+ Represents a migration operation that has been translated into a SQL statement.
+
+
+
+
+ Gets or sets the SQL to be executed to perform this migration operation.
+
+
+
+
+ Gets or sets a value indicating whether this statement should be performed outside of
+ the transaction scope that is used to make the migration process transactional.
+ If set to true, this operation will not be rolled back if the migration process fails.
+
+
+
+
+ Provider to convert provider agnostic migration operations into SQL commands
+ that can be run against Microsoft SQL Server Compact Edition.
+
+
+
+
+ Provider to convert provider agnostic migration operations into SQL commands
+ that can be run against a Microsoft SQL Server database.
+
+
+
+
+ Converts a set of migration operations into Microsoft SQL Server specific SQL.
+
+ The operations to be converted.
+ Token representing the version of SQL Server being targeted (i.e. "2005", "2008").
+ A list of SQL statements to be executed to perform the migration operations.
+
+
+
+ Creates an empty connection for the current provider.
+ Allows derived providers to use connection other than .
+
+
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL to mark a table as a system table.
+ Generated SQL should be added using the Statement method.
+
+ The table to mark as a system table.
+
+
+
+ Generates SQL to create a database schema.
+ Generated SQL should be added using the Statement method.
+
+ The name of the schema to create.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL for a .
+ Generated SQL should be added using the Statement method.
+
+ The operation to produce SQL for.
+
+
+
+ Generates SQL to specify a constant byte[] default value being set on a column.
+ This method just generates the actual value, not the SQL to set the default value.
+
+ The value to be set.
+ SQL representing the default value.
+
+
+
+ Generates SQL to specify a constant bool default value being set on a column.
+ This method just generates the actual value, not the SQL to set the default value.
+
+ The value to be set.
+ SQL representing the default value.
+
+
+
+ Generates SQL to specify a constant DateTime default value being set on a column.
+ This method just generates the actual value, not the SQL to set the default value.
+
+ The value to be set.
+ SQL representing the default value.
+
+
+
+ Generates SQL to specify a constant DateTimeOffset default value being set on a column.
+ This method just generates the actual value, not the SQL to set the default value.
+
+ The value to be set.
+ SQL representing the default value.
+
+
+
+ Generates SQL to specify a constant Guid default value being set on a column.
+ This method just generates the actual value, not the SQL to set the default value.
+
+ The value to be set.
+ SQL representing the default value.
+
+
+
+ Generates SQL to specify a constant string default value being set on a column.
+ This method just generates the actual value, not the SQL to set the default value.
+
+ The value to be set.
+ SQL representing the default value.
+
+
+
+ Generates SQL to specify a constant TimeSpan default value being set on a column.
+ This method just generates the actual value, not the SQL to set the default value.
+
+ The value to be set.
+ SQL representing the default value.
+
+
+
+ Generates SQL to specify a constant geogrpahy default value being set on a column.
+ This method just generates the actual value, not the SQL to set the default value.
+
+ The value to be set.
+ SQL representing the default value.
+
+
+
+ Generates SQL to specify a constant geometry default value being set on a column.
+ This method just generates the actual value, not the SQL to set the default value.
+
+ The value to be set.
+ SQL representing the default value.
+
+
+
+ Generates SQL to specify a constant default value being set on a column.
+ This method just generates the actual value, not the SQL to set the default value.
+
+ The value to be set.
+ SQL representing the default value.
+
+
+
+ Generates SQL to specify the data type of a column.
+ This method just generates the actual type, not the SQL to create the column.
+
+ The definition of the column.
+ SQL representing the data type.
+
+
+
+ Generates a quoted name. The supplied name may or may not contain the schema.
+
+ The name to be quoted.
+ The quoted name.
+
+
+
+ Quotes an identifier for SQL Server.
+
+ The identifier to be quoted.
+ The quoted identifier.
+
+
+
+ Adds a new Statement to be executed against the database.
+
+ The statement to be executed.
+
+ Gets or sets a value indicating whether this statement should be performed outside of
+ the transaction scope that is used to make the migration process transactional.
+ If set to true, this operation will not be rolled back if the migration process fails.
+
+
+
+
+ Gets a new that can be used to build SQL.
+
+ This is just a helper method to create a writer. Writing to the writer will
+ not cause SQL to be registered for execution. You must pass the generated
+ SQL to the Statement method.
+
+ An empty text writer to use for SQL generation.
+
+
+
+ Adds a new Statement to be executed against the database.
+
+ The writer containing the SQL to be executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Utility class to prep the user's config file to run in an AppDomain
+
+
+
+
+ Updates a config file by adding binding redirects for EntityFramework.dll.
+ This ensures that the user's code can be ran in an AppDomain and the exact
+ same version of the assembly will be used for both domains.
+
+ That path of the user's config file. Can also be null or a path to an non-existent file.
+ The path of the updated config file. It is the caller's responsibility to delete this.
+
+
+
+ The same as but works in partial trust.
+
+
+
+
+ Specifies the default tab string. This field is constant.
+
+
+
+
+ Initializes a new instance of the IndentedTextWriter class using the specified text writer and default tab string.
+
+ The to use for output.
+
+
+
+ Initializes a new instance of the IndentedTextWriter class using the specified text writer and tab string.
+
+ The to use for output.
+ The tab string to use for indentation.
+
+
+
+ Closes the document being written to.
+
+
+
+
+ Flushes the stream.
+
+
+
+
+ Outputs the tab string once for each level of indentation according to the property.
+
+
+
+
+ Writes the specified string to the text stream.
+
+ The string to write.
+
+
+
+ Writes the text representation of a Boolean value to the text stream.
+
+ The Boolean value to write.
+
+
+
+ Writes a character to the text stream.
+
+ The character to write.
+
+
+
+ Writes a character array to the text stream.
+
+ The character array to write.
+
+
+
+ Writes a subarray of characters to the text stream.
+
+ The character array to write data from.
+ Starting index in the buffer.
+ The number of characters to write.
+
+
+
+ Writes the text representation of a Double to the text stream.
+
+ The double to write.
+
+
+
+ Writes the text representation of a Single to the text stream.
+
+ The single to write.
+
+
+
+ Writes the text representation of an integer to the text stream.
+
+ The integer to write.
+
+
+
+ Writes the text representation of an 8-byte integer to the text stream.
+
+ The 8-byte integer to write.
+
+
+
+ Writes the text representation of an object to the text stream.
+
+ The object to write.
+
+
+
+ Writes out a formatted string, using the same semantics as specified.
+
+ The formatting string.
+ The object to write into the formatted string.
+
+
+
+ Writes out a formatted string, using the same semantics as specified.
+
+ The formatting string to use.
+ The first object to write into the formatted string.
+ The second object to write into the formatted string.
+
+
+
+ Writes out a formatted string, using the same semantics as specified.
+
+ The formatting string to use.
+ The argument array to output.
+
+
+
+ Writes the specified string to a line without tabs.
+
+ The string to write.
+
+
+
+ Writes the specified string, followed by a line terminator, to the text stream.
+
+ The string to write.
+
+
+
+ Writes a line terminator.
+
+
+
+
+ Writes the text representation of a Boolean, followed by a line terminator, to the text stream.
+
+ The Boolean to write.
+
+
+
+ Writes a character, followed by a line terminator, to the text stream.
+
+ The character to write.
+
+
+
+ Writes a character array, followed by a line terminator, to the text stream.
+
+ The character array to write.
+
+
+
+ Writes a subarray of characters, followed by a line terminator, to the text stream.
+
+ The character array to write data from.
+ Starting index in the buffer.
+ The number of characters to write.
+
+
+
+ Writes the text representation of a Double, followed by a line terminator, to the text stream.
+
+ The double to write.
+
+
+
+ Writes the text representation of a Single, followed by a line terminator, to the text stream.
+
+ The single to write.
+
+
+
+ Writes the text representation of an integer, followed by a line terminator, to the text stream.
+
+ The integer to write.
+
+
+
+ Writes the text representation of an 8-byte integer, followed by a line terminator, to the text stream.
+
+ The 8-byte integer to write.
+
+
+
+ Writes the text representation of an object, followed by a line terminator, to the text stream.
+
+ The object to write.
+
+
+
+ Writes out a formatted string, followed by a line terminator, using the same semantics as specified.
+
+ The formatting string.
+ The object to write into the formatted string.
+
+
+
+ Writes out a formatted string, followed by a line terminator, using the same semantics as specified.
+
+ The formatting string to use.
+ The first object to write into the formatted string.
+ The second object to write into the formatted string.
+
+
+
+ Writes out a formatted string, followed by a line terminator, using the same semantics as specified.
+
+ The formatting string to use.
+ The argument array to output.
+
+
+
+ Writes the text representation of a UInt32, followed by a line terminator, to the text stream.
+
+ A UInt32 to output.
+
+
+
+ Gets the encoding for the text writer to use.
+
+
+ An that indicates the encoding for the text writer to use.
+
+
+
+
+ Gets or sets the new line character to use.
+
+
+ The new line character to use.
+
+
+
+
+ Gets or sets the number of spaces to indent.
+
+
+ The number of spaces to indent.
+
+
+
+
+ Gets the to use.
+
+
+ The to use.
+
+
+
+
+ Used for generating values that are always in sequential
+ order for the calling thread.
+
+
+
+
+ Returns the value of unless this value would be the same as the
+ last value returned by this thread calling this method, in which case the thread pushes the value
+ a little bit into the future. The comparison is in terms of the form used to store migration ID
+ in the database--i.e. to the 1/10 second.
+
+
+ There should never be any pushing to the future involved for normal use of migrations, but when
+ this method is called in rapid succession while testing or otherwise calling the DbMigrator APIs
+ there may be occasional sleeping.
+
+
+
+
+ Same as UtcNow method bur returns the time in the timestamp format used in migration IDs.
+
+
+
+
+ Convention to apply column ordering specified via
+ or the API. This convention throws if a duplicate configured column order
+ is detected.
+
+
+
+
+ Convention to apply column ordering specified via
+ or the API.
+
+
+
+
+ Identifies conventions that can be removed from a instance.
+
+ ///
+ Note that implementations of this interface must be immutable.
+
+
+
+
+ Strongly-typed and parameterized string resources.
+
+
+
+
+ A string like "Applying automatic migration: {0}."
+
+
+
+
+ A string like "Reverting automatic migration: {0}."
+
+
+
+
+ A string like "Applying code-based migration: {0}."
+
+
+
+
+ A string like "Reverting code-based migration: {0}."
+
+
+
+
+ A string like "Applying code-based migrations: [{1}]."
+
+
+
+
+ A string like "Reverting migrations: [{1}]."
+
+
+
+
+ A string like "Target database is already at version {0}."
+
+
+
+
+ A string like "Target database is: {0}."
+
+
+
+
+ A string like "'{1}' (DataSource: {0}, Provider: {2}, Origin: {3})"
+
+
+
+
+ A string like "The specified target migration '{0}' does not exist. Ensure that target migration refers to an existing migration id."
+
+
+
+
+ A string like "The Foreign Key on table '{0}' with columns '{1}' could not be created because the principal key columns could not be determined. Use the AddForeignKey fluent API to fully specify the Foreign Key."
+
+
+
+
+ A string like "'{0}' is not a valid target migration. When targeting a previously applied automatic migration, use the full migration id including timestamp."
+
+
+
+
+ A string like "'{0}' is not a valid migration. Code-based migrations must be used for both source and target when scripting the upgrade between them."
+
+
+
+
+ A string like "The target context '{0}' is not constructible. Add a default constructor or provide an implementation of IDbContextFactory."
+
+
+
+
+ A string like "The specified migration name '{0}' is ambiguous. Specify the full migration id including timestamp instead."
+
+
+
+
+ A string like "The migrations configuration type '{0}' was not be found in the assembly '{1}'."
+
+
+
+
+ A string like "More than one migrations configuration type '{0}' was found in the assembly '{1}'. Specify the fully qualified name of the one to use."
+
+
+
+
+ A string like "No migrations configuration type was found in the assembly '{0}'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration)."
+
+
+
+
+ A string like "More than one migrations configuration type was found in the assembly '{0}'. Specify the name of the one to use."
+
+
+
+
+ A string like "The type '{0}' is not a migrations configuration type."
+
+
+
+
+ A string like "The migrations configuration type '{0}' must have a public default constructor."
+
+
+
+
+ A string like "The migrations configuration type '{0}' must not be abstract."
+
+
+
+
+ A string like "The migrations configuration type '{0}' must not be generic."
+
+
+
+
+ A string like "In VB.NET projects, the migrations namespace '{0}' must be under the root namespace '{1}'. Update the migrations project's root namespace to allow classes under the migrations namespace to be added."
+
+
+
+
+
+ A string like "No MigrationSqlGenerator found for provider '{0}'. Use the SetSqlGenerator method in the target migrations configuration class to register additional SQL generators."
+
+
+
+
+ A string like "Could not load assembly '{0}'. (If you are using Code First Migrations inside Visual Studio this can happen if the startUp project for your solution does not reference the project that contains your migrations. You can either change the startUp project for your solution or use the -StartUpProjectName parameter.)"
+
+
+
+
+ A string like "No context type was found in the assembly '{0}'."
+
+
+
+
+ A string like "More than one context type was found in the assembly '{0}'."
+
+
+
+
+ A string like "To enable migrations for {0}, use Enable-Migrations -ContextTypeName {0}."
+
+
+
+
+ A string like "The context type '{0}' was not found in the assembly '{1}'."
+
+
+
+
+ A string like "More than one context type '{0}' was found in the assembly '{1}'. Specify the fully qualified name of the context."
+
+
+
+
+ A string like "The argument '{0}' cannot be null, empty or contain only white space."
+
+
+
+
+ A string like "The argument property '{0}' cannot be null."
+
+
+
+
+ A string like "The precondition '{0}' failed. {1}"
+
+
+
+
+ A string like "The type '{0}' has already been configured as a complex type. It cannot be reconfigured as an entity type."
+
+
+
+
+ A string like "The type '{0}' has already been configured as an entity type. It cannot be reconfigured as a complex type."
+
+
+
+
+ A string like "The key component '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property."
+
+
+
+
+ A string like "The foreign key component '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property."
+
+
+
+
+ A string like "The property '{0}' is not a declared property on type '{1}'. Verify that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation. Make sure that it is a valid primitive property."
+
+
+
+
+ A string like "The navigation property '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid navigation property."
+
+
+
+
+ A string like "The expression '{0}' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'."
+
+
+
+
+ A string like "The expression '{0}' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. Use dotted paths for nested properties: C#: 't => t.MyProperty.MyProperty' VB.Net: 'Function(t) t.MyProperty.MyProperty'."
+
+
+
+
+ A string like "The properties expression '{0}' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new {{ t.MyProperty1, t.MyProperty2 }}' VB.Net: 'Function(t) New With {{ t.MyProperty1, t.MyProperty2 }}'."
+
+
+
+
+ A string like "The properties expression '{0}' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new {{ t.MyProperty1, t.MyProperty2 }}' VB.Net: 'Function(t) New With {{ t.MyProperty1, t.MyProperty2 }}'."
+
+
+
+
+
+ A string like "Conflicting configuration settings were specified for property '{0}' on type '{1}': {2}"
+
+
+
+
+ A string like "Conflicting configuration settings were specified for column '{0}' on table '{1}': {2}"
+
+
+
+
+ A string like "{0} = {1} conflicts with {2} = {3}"
+
+
+
+
+ A string like "The type '{0}' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from ComplexObject."
+
+
+
+
+ A string like "The type '{0}' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from EntityObject."
+
+
+
+
+ A string like "The navigation property '{0}' declared on type '{1}' cannot be the inverse of itself."
+
+
+
+
+ A string like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting foreign keys."
+
+
+
+
+ A string like "Values of incompatible types ('{1}' and '{2}') were assigned to the '{0}' discriminator column. Values of the same type must be specified. To explicitly specify the type of the discriminator column use the HasColumnType method."
+
+
+
+
+ A string like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting mapping information."
+
+
+
+
+ A string like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting cascade delete operations using 'WillCascadeOnDelete'."
+
+
+
+
+ A string like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting multiplicities."
+
+
+
+
+ A string like "The MaxLengthAttribute on property '{0}' on type '{1} is not valid. The Length value must be greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length."
+
+
+
+
+ A string like "The StringLengthAttribute on property '{0}' on type '{1}' is not valid. The maximum length must be greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length."
+
+
+
+
+ A string like "Unable to determine composite primary key ordering for type '{0}'. Use the ColumnAttribute or the HasKey method to specify an order for composite primary keys."
+
+
+
+
+ A string like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. Name must not be empty."
+
+
+
+
+ A string like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. The foreign key name '{2}' was not found on the dependent type '{3}'. The Name value should be a comma separated list of foreign key property names."
+
+
+
+
+ A string like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. The navigation property '{2}' was not found on the dependent type '{1}'. The Name value should be a valid navigation property name."
+
+
+
+
+ A string like "Unable to determine a composite foreign key ordering for foreign key on type {0}. When using the ForeignKey data annotation on composite foreign key properties ensure order is specified by using the Column data annotation or the fluent API."
+
+
+
+
+ A string like "The InversePropertyAttribute on property '{2}' on type '{3}' is not valid. The property '{0}' is not a valid navigation property on the related type '{1}'. Ensure that the property exists and is a valid reference or collection navigation property."
+
+
+
+
+ A string like "A relationship cannot be established from property '{0}' on type '{1}' to property '{0}' on type '{1}'. Check the values in the InversePropertyAttribute to ensure relationship definitions are unique and reference from one navigation property to its corresponding inverse navigation property."
+
+
+
+
+ A string like "\t{0}: {1}: {2}"
+
+
+
+
+ A string like "A key is registered for the derived type '{0}'. Keys can only be registered for the root type '{1}'."
+
+
+
+
+ A string like "The {0} value '{1}' already exists in the user-defined dictionary."
+
+
+
+
+ A string like "The type '{0}' has already been mapped to table '{1}'. Specify all mapping aspects of a table in a single Map call."
+
+
+
+
+ A string like "Map was called more than once for type '{0}' and at least one of the calls didn't specify the target table name."
+
+
+
+
+ A string like "The derived type '{0}' has already been mapped using the chaining syntax. A derived type can only be mapped once using the chaining syntax."
+
+
+
+
+ A string like "An "is not null" condition cannot be specified on property '{0}' on type '{1}' because this property is not included in the model. Check that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation."
+
+
+
+
+ A string like "Values of type '{0}' cannot be used as type discriminator values. Supported types include byte, signed byte, bool, int16, int32, int64, and string."
+
+
+
+
+ A string like "Unable to add the convention '{0}'. Could not find an existing convention of type '{1}' in the current convention set."
+
+
+
+
+ A string like "Not all properties for type '{0}' have been mapped. Either map those properties or explicitly excluded them from the model."
+
+
+
+
+ A string like "Unable to determine the provider name for connection of type '{0}'."
+
+
+
+
+ A string like "The qualified table name '{0}' contains an invalid schema name. Schema names must have a non-zero length."
+
+
+
+
+ A string like "The qualified table name '{0}' contains an invalid table name. Table names must have a non-zero length."
+
+
+
+
+ A string like "Properties for type '{0}' can only be mapped once. Ensure the MapInheritedProperties method is only used during one call to the Map method."
+
+
+
+
+ A string like "Properties for type '{0}' can only be mapped once. Ensure the Properties method is used and that repeated calls specify each non-key property only once."
+
+
+
+
+ A string like "Properties for type '{0}' can only be mapped once. The non-key property '{1}' is mapped more than once. Ensure the Properties method specifies each non-key property only once."
+
+
+
+
+ A string like "The property '{1}' on type '{0}' cannot be mapped because it has been explicitly excluded from the model or it is of a type not supported by the DbModelBuilderVersion being used."
+
+
+
+
+ A string like "The entity types '{0}' and '{1}' cannot share table '{2}' because they are not in the same type hierarchy or do not have a valid one to one foreign key relationship with matching primary keys between them."
+
+
+
+
+ A string like "You cannot use Ignore method on the property '{0}' on type '{1}' because this type inherits from the type '{2}' where this property is mapped. To exclude this property from your model, use NotMappedAttribute or Ignore method on the base type."
+
+
+
+
+ A string like "The property '{0}' cannot be used as a key property on the entity '{1}' because the property type is not a valid key type. Only scalar types, string and byte[] are supported key types."
+
+
+
+
+ A string like "The specified table '{0}' was not found in the model. Ensure that the table name has been correctly specified."
+
+
+
+
+ A string like "The specified association foreign key columns '{0}' are invalid. The number of columns specified must match the number of primary key columns."
+
+
+
+
+ A string like "Unable to determine the principal end of an association between the types '{0}' and '{1}'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations."
+
+
+
+
+ A string like "The abstract type '{0}' has no mapped descendents and so cannot be mapped. Either remove '{0}' from the model or add one or more types deriving from '{0}' to the model. "
+
+
+
+
+ A string like "The type '{0}' cannot be mapped as defined because it maps inherited properties from types that use entity splitting or another form of inheritance. Either choose a different inheritance mapping strategy so as to not map inherited properties, or change all types in the hierarchy to map inherited properties and to not use splitting. "
+
+
+
+
+ A string like "The table '{0}' was configured but is not used in any mappings. Verify the mapping configuration for '{0}' is correct."
+
+
+
+
+ A string like "The configured column orders for the table '{0}' contains duplicates. Ensure the specified column order values are distinct."
+
+
+
+
+ A string like "The enum or spatial property '{1}' on type '{0}' cannot be mapped. Use DbModelBuilderVersion 'V5_0' or later to map enum or spatial properties."
+
+
+
+
+ A string like "Multiple potential primary key properties named '{0}' but differing only by case were found on entity type '{1}'. Configure the primary key explicitly using the HasKey fluent API or the KeyAttribute data annotation."
+
+
+
+
+ A string like "Cannot get value for property '{0}' from entity of type '{1}' because the property has no get accessor."
+
+
+
+
+ A string like "Cannot set value for property '{0}' on entity of type '{1}' because the property has no set accessor."
+
+
+
+
+
+ A string like "Cannot set value for property '{0}' on entity of type '{1}' because the property has no set accessor and is in the '{2}' state."
+
+
+
+
+ A string like "Member '{0}' cannot be called for property '{1}' on entity of type '{2}' because the property is not part of the Entity Data Model."
+
+
+
+
+
+ A string like "Cannot call the {0} method for an entity of type '{1}' on a DbSet for entities of type '{2}'. Only entities of type '{2}' or derived from type '{2}' can be added, attached, or removed."
+
+
+
+
+ A string like "Cannot call the Create method for the type '{0}' on a DbSet for entities of type '{1}'. Only entities of type '{1}' or derived from type '{1}' can be created."
+
+
+
+
+
+
+ A string like "The property '{0}' on type '{1}' is a collection navigation property. The Collection method should be used instead of the Reference method."
+
+
+
+
+ A string like "The property '{0}' on type '{1}' is a reference navigation property. The Reference method should be used instead of the Collection method."
+
+
+
+
+ A string like "The property '{0}' on type '{1}' is not a navigation property. The Reference and Collection methods can only be used with navigation properties. Use the Property or ComplexProperty method."
+
+
+
+
+ A string like "The property '{0}' on type '{1}' is not a primitive or complex property. The Property method can only be used with primitive or complex properties. Use the Reference or Collection method."
+
+
+
+
+ A string like "The property '{0}' on type '{1}' is not a complex property. The ComplexProperty method can only be used with complex properties. Use the Property, Reference or Collection method."
+
+
+
+
+ A string like "The property '{0}' on type '{1}' is not a primitive property, complex property, collection navigation property, or reference navigation property."
+
+
+
+
+ A string like ""The property '{0}' from the property path '{1}' is not a complex property on type '{2}'. Property paths must be composed of complex properties for all except the final property.""
+
+
+
+
+ A string like ""The property path '{0}' cannot be used for navigation properties. Property paths can only be used to access primitive or complex properties.""
+
+
+
+
+ A string like "The navigation property '{0}' on entity type '{1}' cannot be used for entities of type '{2}' because it refers to entities of type '{3}'."
+
+
+
+
+ A string like "The generic type argument '{0}' cannot be used with the Member method when accessing the collection navigation property '{1}' on entity type '{2}'. The generic type argument '{3}' must be used instead."
+
+
+
+
+ A string like "The property '{0}' on entity type '{1}' cannot be used for objects of type '{2}' because it is a property for objects of type '{3}'."
+
+
+
+
+ A string like "The expression passed to method {0} must represent a property defined on the type '{1}'."
+
+
+
+
+ A string like "{0} cannot be used for entities in the {1} state."
+
+
+
+
+ A string like "Cannot set non-nullable property '{0}' of type '{1}' to null on object of type '{2}'."
+
+
+
+
+ A string like "The property '{0}' in the entity of type '{1}' is null. Store values cannot be obtained for an entity with a null complex property."
+
+
+
+
+ A string like "Cannot assign value of type '{0}' to property '{1}' of type '{2}' in property values for type '{3}'."
+
+
+
+
+ A string like "The '{0}' property does not exist or is not mapped for the type '{1}'."
+
+
+
+
+ A string like "Cannot copy values from DbPropertyValues for type '{0}' into DbPropertyValues for type '{1}'."
+
+
+
+
+ A string like "Cannot copy from property values for object of type '{0}' into property values for object of type '{1}'."
+
+
+
+
+ A string like "The value of the complex property '{0}' on entity of type '{1}' is null. Complex properties cannot be set to null and values cannot be set for null complex properties."
+
+
+
+
+ A string like "The value of the nested property values property '{0}' on the values for entity of type '{1}' is null. Nested property values cannot be set to null and values cannot be set for null complex properties."
+
+
+
+
+ A string like "Cannot set the value of the nested property '{0}' because value of the complex property '{1}' to which it belongs is null."
+
+
+
+
+ A string like "Cannot set the original value of the nested property '{0}' because the original value of the complex property '{1}' to which it belongs is null."
+
+
+
+
+ A string like "The model backing the '{0}' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269)."
+
+
+
+
+ A string like "Database '{0}' cannot be created because it already exists."
+
+
+
+
+
+
+ A string like "Failed to set database initializer of type '{0}' for DbContext type '{1}' specified in the application configuration. See inner exception for details."
+
+
+
+
+ A string like "Configuration for DbContext type '{0}' is specified multiple times in the application configuration. Each context can only be configured once."
+
+
+
+
+ A string like "Failed to set Database.DefaultConnectionFactory to an instance of the '{0}' type as specified in the application configuration. See inner exception for details."
+
+
+
+
+ A string like "The type '{0}' could not be found. The type name must be an assembly-qualified name."
+
+
+
+
+ A string like "The connection string '{0}' in the application's configuration file does not contain the required providerName attribute.""
+
+
+
+
+ A string like "The entity found was of type {0} when an entity of type {1} was requested."
+
+
+
+
+ A string like "The type '{0}' is mapped as a complex type. The Set method, DbSet objects, and DbEntityEntry objects can only be used with entity types, not complex types."
+
+
+
+
+ A string like "The type '{0}' is not attributed with EdmEntityTypeAttribute but is contained in an assembly attributed with EdmSchemaAttribute. POCO entities that do not use EdmEntityTypeAttribute cannot be contained in the same assembly as non-POCO entities that use EdmEntityTypeAttribute."
+
+
+
+
+ A string like "The entity type {0} is not part of the model for the current context."
+
+
+
+
+ A string like "No connection string named '{0}' could be found in the application config file."
+
+
+
+
+ A string like "The collection navigation property '{0}' on the entity of type '{1}' cannot be set because the entity type does not define a navigation property with a set accessor."
+
+
+
+
+ A string like "Multiple object sets per type are not supported. The object sets '{0}' and '{1}' can both contain instances of type '{2}'."
+
+
+
+
+ A string like "The context type '{0}' must have a public constructor taking an EntityConnection."
+
+
+
+
+ A string like "An unexpected exception was thrown during validation of '{0}' when invoking {1}.IsValid. See the inner exception for details."
+
+
+
+
+ A string like "An unexpected exception was thrown during validation of '{0}' when invoking {1}.Validate. See the inner exception for details."
+
+
+
+
+ A string like "The database name '{0}' is not supported because it is an MDF file name. A full connection string must be provided to attach an MDF file."
+
+
+
+
+ A string like "The context factory type '{0}' must have a public default constructor."
+
+
+
+
+ A string like "The '{0}' property of EdmPrimitiveType is fixed and cannot be set."
+
+
+
+
+ A string like "The namespace '{0}' is a system namespace and cannot be used by other schemas. Choose another namespace name."
+
+
+
+
+ A string like "Role '{0}' in AssociationSets '{1}' and '{2}' refers to the same EntitySet '{3}' in EntityContainer '{4}'. Make sure that if two or more AssociationSets refer to the same AssociationType, the ends do not refer to the same EntitySet."
+
+
+
+
+ A string like "The referenced EntitySet '{0}' for End '{1}' could not be found in the containing EntityContainer."
+
+
+
+
+ A string like "Type '{0}' is derived from type '{1}' that is the type for EntitySet '{2}'. Type '{0}' defines new concurrency requirements that are not allowed for subtypes of base EntitySet types."
+
+
+
+
+ A string like "EntitySet '{0}' is based on type '{1}' that has no keys defined."
+
+
+
+
+ A string like "The end name '{0}' is already defined."
+
+
+
+
+ A string like "The key specified in EntityType '{0}' is not valid. Property '{1}' is referenced more than once in the Key element."
+
+
+
+
+ A string like "Property '{0}' has a CollectionKind specified but is not a collection property."
+
+
+
+
+ A string like "Property '{0}' has a CollectionKind specified. CollectionKind is only supported in version 1.1 EDM models."
+
+
+
+
+ A string like "ComplexType '{0}' is marked as abstract. Abstract ComplexTypes are only supported in version 1.1 EDM models."
+
+
+
+
+ A string like "ComplexType '{0}' has a BaseType specified. ComplexType inheritance is only supported in version 1.1 EDM models."
+
+
+
+
+ A string like "Key part '{0}' for type '{1}' is not valid. All parts of the key must be non-nullable."
+
+
+
+
+ A string like "The property '{0}' in EntityType '{1}' is not valid. All properties that are part of the EntityKey must be of PrimitiveType."
+
+
+
+
+ A string like "Key usage is not valid. The {0} class cannot define keys because one of its base classes ('{1}') defines keys."
+
+
+
+
+ A string like "EntityType '{0}' has no key defined. Define the key for this EntityType."
+
+
+
+
+ A string like "NavigationProperty is not valid. Role '{0}' or Role '{1}' is not defined in Relationship '{2}'."
+
+
+
+
+ A string like "End '{0}' on relationship '{1}' cannot have an operation specified because its multiplicity is '*'. Operations cannot be specified on ends with multiplicity '*'."
+
+
+
+
+ A string like "Each Name and PluralName in a relationship must be unique. '{0}' is already defined."
+
+
+
+
+ A string like "In relationship '{0}', the Principal and Dependent Role of the referential constraint refer to the same Role in the relationship type."
+
+
+
+
+ A string like "Multiplicity is not valid in Role '{0}' in relationship '{1}'. Valid values for multiplicity for the Principal Role are '0..1' or '1'."
+
+
+
+
+ A string like "Multiplicity is not valid in Role '{0}' in relationship '{1}'. Because all the properties in the Dependent Role are nullable, multiplicity of the Principal Role must be '0..1'."
+
+
+
+
+ A string like "Multiplicity conflicts with the referential constraint in Role '{0}' in relationship '{1}'. Because at least one of the properties in the Dependent Role is non-nullable, multiplicity of the Principal Role must be '1'."
+
+
+
+
+ A string like "Multiplicity conflicts with the referential constraint in Role '{0}' in relationship '{1}'. Because all of the properties in the Dependent Role are non-nullable, multiplicity of the Principal Role must be '1'."
+
+
+
+
+ A string like "Properties referred by the Dependent Role '{0}' must be a subset of the key of the EntityType '{1}' referred to by the Dependent Role in the referential constraint for relationship '{2}'."
+
+
+
+
+ A string like "Multiplicity is not valid in Role '{0}' in relationship '{1}'. Because the Dependent Role refers to the key properties, the upper bound of the multiplicity of the Dependent Role must be '1'."
+
+
+
+
+ A string like "Multiplicity is not valid in Role '{0}' in relationship '{1}'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'."
+
+
+
+
+ A string like "The types of all properties in the Dependent Role of a referential constraint must be the same as the corresponding property types in the Principal Role. The type of property '{0}' on entity '{1}' does not match the type of property '{2}' on entity '{3}' in the referential constraint '{4}'."
+
+
+
+
+ A string like "There is no property with name '{0}' defined in the type referred to by Role '{1}'."
+
+
+
+
+ A string like "A nullable ComplexType is not supported. Property '{0}' must not allow nulls."
+
+
+
+
+ A string like "A property cannot be of type '{0}'. The property type must be a ComplexType or a PrimitiveType."
+
+
+
+
+ A string like "Each member name in an EntityContainer must be unique. A member with name '{0}' is already defined."
+
+
+
+
+ A string like "Each type name in a schema must be unique. Type name '{0}' is already defined."
+
+
+
+
+ A string like "Name '{0}' cannot be used in type '{1}'. Member names cannot be the same as their enclosing type."
+
+
+
+
+ A string like "Each property name in a type must be unique. Property name '{0}' is already defined."
+
+
+
+
+ A string like "A cycle was detected in the type hierarchy of '{0}'."
+
+
+
+
+ A string like "A property cannot be of type '{0}'. The property type must be a ComplexType, a PrimitiveType, or a CollectionType."
+
+
+
+
+ A string like "A property cannot be of type {0}. The property type must be a ComplexType, a PrimitiveType or an EnumType."
+
+
+
+
+ A string like "The specified name must not be longer than 480 characters: '{0}'."
+
+
+
+
+ A string like "The specified name is not allowed: '{0}'."
+
+
+
+
+ A string like "The field {0} must be a string or array type with a maximum length of '{1}'."
+
+
+
+
+ A string like "The field {0} must be a string or array type with a minimum length of '{1}'."
+
+
+
+
+ A string like "No connection string named '{0}' could be found in the application config file."
+
+
+
+
+ A string like "AutomaticMigration"
+
+
+
+
+ A string like "BootstrapMigration"
+
+
+
+
+ A string like "InitialCreate"
+
+
+
+
+ A string like "Automatic migration was not applied because it would result in data loss."
+
+
+
+
+ A string like "[Inserting migration history record]"
+
+
+
+
+ A string like "[Deleting migration history record]"
+
+
+
+
+ A string like "[Updating EdmMetadata model hash]"
+
+
+
+
+ A string like "Running Seed method."
+
+
+
+
+ A string like "No pending code-based migrations."
+
+
+
+
+ A string like "Explicit"
+
+
+
+
+ A string like "Upgrading history table."
+
+
+
+
+ A string like "Cannot scaffold the next migration because the target database was created with a version of Code First earlier than EF 4.3 and does not contain the migrations history table. To start using migrations against this database, ensure the current model is compatible with the target database and execute the migrations Update process. (In Visual Studio you can use the Update-Database command from Package Manager Console to execute the migrations Update process)."
+
+
+
+
+ A string like "Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration."
+
+
+
+
+ A string like "Scripting the downgrade between two specified migrations is not supported."
+
+
+
+
+ A string like "Direct column renaming is not supported by SQL Server Compact. To rename a column in SQL Server Compact, you will need to recreate it."
+
+
+
+
+ A string like "One or more validation errors were detected during model generation:"
+
+
+
+
+ A string like "A circular ComplexType hierarchy was detected. Self-referencing ComplexTypes are not supported."
+
+
+
+
+ A string like "Connection to the database failed. The connection string is configured with an invalid LocalDB server name. This may have been set in 'global.asax' by a pre-release version of MVC4. The default connection factory is now set in web.config so the line in 'global.asax' starting with 'Database.DefaultConnectionFactory = ' should be removed. See http://go.microsoft.com/fwlink/?LinkId=243166 for details."
+
+
+
+
+ A string like "An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct."
+
+
+
+
+ A string like "Setting IsModified to false for a modified property is not supported."
+
+
+
+
+ A string like "An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details."
+
+
+
+
+ A string like "The set of property value names is read-only."
+
+
+
+
+ A string like "A property of a complex type must be set to an instance of the generic or non-generic DbPropertyValues class for that type."
+
+
+
+
+ A string like "Model compatibility cannot be checked because the DbContext instance was not created using Code First patterns. DbContext instances created from an ObjectContext or using an EDMX file cannot be checked for compatibility."
+
+
+
+
+ A string like "Model compatibility cannot be checked because the EdmMetadata type was not included in the model. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions."
+
+
+
+
+ A string like "Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only be checked for databases created using Code First or Code First Migrations."
+
+
+
+
+ A string like "The context cannot be used while the model is being created."
+
+
+
+
+ A string like "The DbContext class cannot be used with models that have multiple entity sets per type (MEST)."
+
+
+
+
+ A string like "The operation cannot be completed because the DbContext has been disposed."
+
+
+
+
+ A string like "The provider factory returned a null connection."
+
+
+
+
+ A string like "The DbConnectionFactory instance returned a null connection."
+
+
+
+
+ A string like "The number of primary key values passed must match number of primary key values defined on the entity."
+
+
+
+
+ A string like "The type of one of the primary key values did not match the type defined in the entity. See inner exception for details."
+
+
+
+
+ A string like "Multiple entities were found in the Added state that match the given primary key values."
+
+
+
+
+ A string like "Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList()."
+
+
+
+
+ A string like "The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties."
+
+
+
+
+ A string like "Cannot initialize a DbContext from an entity connection string or an EntityConnection instance together with a DbCompiledModel. If an entity connection string or EntityConnection instance is used, then the model will be created from the metadata in the connection. If a DbCompiledModel is used, then the connection supplied should be a standard database connection (for example, a SqlConnection instance) rather than an entity connection."
+
+
+
+
+ A string like "Using the same DbCompiledModel to create contexts against different types of database servers is not supported. Instead, create a separate DbCompiledModel for each type of server being used."
+
+
+
+
+ A string like "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."
+
+
+
+
+ A string like "An exception occurred while initializing the database. See the InnerException for details."
+
+
+
+
+ A string like "Creating a DbModelBuilder or writing the EDMX from a DbContext created using an existing ObjectContext is not supported. EDMX can only be obtained from a Code First DbContext created without using an existing DbCompiledModel."
+
+
+
+
+ A string like "Creating a DbModelBuilder or writing the EDMX from a DbContext created using an existing DbCompiledModel is not supported. EDMX can only be obtained from a Code First DbContext created without using an existing DbCompiledModel."
+
+
+
+
+ A string like "Creating a DbModelBuilder or writing the EDMX from a DbContext created using Database First or Model First is not supported. EDMX can only be obtained from a Code First DbContext created without using an existing DbCompiledModel."
+
+
+
+
+ A string like "Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception."
+
+
+
+
+ A string like "The generic 'Set' method cannot be called with a proxy type. Either use the actual entity type or call the non-generic 'Set' method."
+
+
+
+
+ A string like "NavigationProperty is not valid. The FromRole and ToRole are the same."
+
+
+
+
+ A string like "OnDelete can be specified on only one End of an EdmAssociation."
+
+
+
+
+ A string like "The number of properties in the Dependent and Principal Roles in a relationship constraint must be identical."
+
+
+
+
+ A string like "The name is missing or not valid."
+
+
+
+
+ A string like "AssociationEnd must not be null."
+
+
+
+
+ A string like "DependentEnd must not be null."
+
+
+
+
+ A string like "DependentProperties must not be empty."
+
+
+
+
+ A string like "Association must not be null."
+
+
+
+
+ A string like "ResultEnd must not be null."
+
+
+
+
+ A string like "EntityType must not be null."
+
+
+
+
+ A string like "ElementType must not be null."
+
+
+
+
+ A string like "ElementType must not be null."
+
+
+
+
+ A string like "SourceSet must not be null."
+
+
+
+
+ A string like "TargetSet must not be null."
+
+
+
+
+ A string like "The type is not a valid EdmTypeReference."
+
+
+
+
+ A string like "Serializer can only serialize an EdmModel that has one EdmNamespace and one EdmEntityContainer."
+
+
+
+
+ A string like "MaxLengthAttribute must have a Length value that is greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length."
+
+
+
+
+ A string like "MinLengthAttribute must have a Length value that is zero or greater."
+
+
+
+
+ A string like "The connection can not be overridden because this context was created from an existing ObjectContext."
+
+
+
+
+ A string like "Can not override the connection for this context with a standard DbConnection because the original connection was an EntityConnection."
+
+
+
+
+ A string like "Can not override the connection for this context with an EntityConnection because the original connection was a standard DbConnection."
+
+
+
+
+ Strongly-typed and parameterized exception factory.
+
+
+
+
+ Migrations.Infrastructure.AutomaticDataLossException with message like "Automatic migration was not applied because it would result in data loss."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "Cannot scaffold the next migration because the target database was created with a version of Code First earlier than EF 4.3 and does not contain the migrations history table. To start using migrations against this database, ensure the current model is compatible with the target database and execute the migrations Update process. (In Visual Studio you can use the Update-Database command from Package Manager Console to execute the migrations Update process)."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "The specified target migration '{0}' does not exist. Ensure that target migration refers to an existing migration id."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "The Foreign Key on table '{0}' with columns '{1}' could not be created because the principal key columns could not be determined. Use the AddForeignKey fluent API to fully specify the Foreign Key."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "'{0}' is not a valid target migration. When targeting a previously applied automatic migration, use the full migration id including timestamp."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "'{0}' is not a valid migration. Code-based migrations must be used for both source and target when scripting the upgrade between them."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "The target context '{0}' is not constructible. Add a default constructor or provide an implementation of IDbContextFactory."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "The specified migration name '{0}' is ambiguous. Specify the full migration id including timestamp instead."
+
+
+
+
+ Migrations.Infrastructure.AutomaticMigrationsDisabledException with message like "Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "Scripting the downgrade between two specified migrations is not supported."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "The migrations configuration type '{0}' was not be found in the assembly '{1}'."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "More than one migrations configuration type '{0}' was found in the assembly '{1}'. Specify the fully qualified name of the one to use."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "No migrations configuration type was found in the assembly '{0}'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration)."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "More than one migrations configuration type was found in the assembly '{0}'. Specify the name of the one to use."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "The type '{0}' is not a migrations configuration type."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "The migrations configuration type '{0}' must have a public default constructor."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "The migrations configuration type '{0}' must not be abstract."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "The migrations configuration type '{0}' must not be generic."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "Direct column renaming is not supported by SQL Server Compact. To rename a column in SQL Server Compact, you will need to recreate it."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "In VB.NET projects, the migrations namespace '{0}' must be under the root namespace '{1}'. Update the migrations project's root namespace to allow classes under the migrations namespace to be added."
+
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "No MigrationSqlGenerator found for provider '{0}'. Use the SetSqlGenerator method in the target migrations configuration class to register additional SQL generators."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "No context type was found in the assembly '{0}'."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "The context type '{0}' was not found in the assembly '{1}'."
+
+
+
+
+ Migrations.Infrastructure.MigrationsException with message like "More than one context type '{0}' was found in the assembly '{1}'. Specify the fully qualified name of the context."
+
+
+
+
+ ArgumentException with message like "The argument '{0}' cannot be null, empty or contain only white space."
+
+
+
+
+ ArgumentException with message like "The argument property '{0}' cannot be null."
+
+
+
+
+ ArgumentException with message like "The precondition '{0}' failed. {1}"
+
+
+
+
+ InvalidOperationException with message like "The type '{0}' has already been configured as a complex type. It cannot be reconfigured as an entity type."
+
+
+
+
+ InvalidOperationException with message like "The type '{0}' has already been configured as an entity type. It cannot be reconfigured as a complex type."
+
+
+
+
+ InvalidOperationException with message like "The key component '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property."
+
+
+
+
+ InvalidOperationException with message like "The foreign key component '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property."
+
+
+
+
+ InvalidOperationException with message like "The property '{0}' is not a declared property on type '{1}'. Verify that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation. Make sure that it is a valid primitive property."
+
+
+
+
+ InvalidOperationException with message like "The navigation property '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid navigation property."
+
+
+
+
+ InvalidOperationException with message like "The expression '{0}' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'."
+
+
+
+
+ InvalidOperationException with message like "The expression '{0}' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. Use dotted paths for nested properties: C#: 't => t.MyProperty.MyProperty' VB.Net: 'Function(t) t.MyProperty.MyProperty'."
+
+
+
+
+ InvalidOperationException with message like "The properties expression '{0}' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new {{ t.MyProperty1, t.MyProperty2 }}' VB.Net: 'Function(t) New With {{ t.MyProperty1, t.MyProperty2 }}'."
+
+
+
+
+ InvalidOperationException with message like "The properties expression '{0}' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new {{ t.MyProperty1, t.MyProperty2 }}' VB.Net: 'Function(t) New With {{ t.MyProperty1, t.MyProperty2 }}'."
+
+
+
+
+
+ InvalidOperationException with message like "Conflicting configuration settings were specified for property '{0}' on type '{1}': {2}"
+
+
+
+
+ InvalidOperationException with message like "Conflicting configuration settings were specified for column '{0}' on table '{1}': {2}"
+
+
+
+
+ InvalidOperationException with message like "The type '{0}' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from ComplexObject."
+
+
+
+
+ InvalidOperationException with message like "The type '{0}' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from EntityObject."
+
+
+
+
+ InvalidOperationException with message like "The navigation property '{0}' declared on type '{1}' cannot be the inverse of itself."
+
+
+
+
+ InvalidOperationException with message like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting foreign keys."
+
+
+
+
+ MappingException with message like "Values of incompatible types ('{1}' and '{2}') were assigned to the '{0}' discriminator column. Values of the same type must be specified. To explicitly specify the type of the discriminator column use the HasColumnType method."
+
+
+
+
+ InvalidOperationException with message like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting mapping information."
+
+
+
+
+ InvalidOperationException with message like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting cascade delete operations using 'WillCascadeOnDelete'."
+
+
+
+
+ InvalidOperationException with message like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting multiplicities."
+
+
+
+
+ InvalidOperationException with message like "The MaxLengthAttribute on property '{0}' on type '{1} is not valid. The Length value must be greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length."
+
+
+
+
+ InvalidOperationException with message like "The StringLengthAttribute on property '{0}' on type '{1}' is not valid. The maximum length must be greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length."
+
+
+
+
+ InvalidOperationException with message like "Unable to determine composite primary key ordering for type '{0}'. Use the ColumnAttribute or the HasKey method to specify an order for composite primary keys."
+
+
+
+
+ InvalidOperationException with message like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. Name must not be empty."
+
+
+
+
+ InvalidOperationException with message like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. The foreign key name '{2}' was not found on the dependent type '{3}'. The Name value should be a comma separated list of foreign key property names."
+
+
+
+
+ InvalidOperationException with message like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. The navigation property '{2}' was not found on the dependent type '{1}'. The Name value should be a valid navigation property name."
+
+
+
+
+ InvalidOperationException with message like "Unable to determine a composite foreign key ordering for foreign key on type {0}. When using the ForeignKey data annotation on composite foreign key properties ensure order is specified by using the Column data annotation or the fluent API."
+
+
+
+
+ InvalidOperationException with message like "The InversePropertyAttribute on property '{2}' on type '{3}' is not valid. The property '{0}' is not a valid navigation property on the related type '{1}'. Ensure that the property exists and is a valid reference or collection navigation property."
+
+
+
+
+ InvalidOperationException with message like "A relationship cannot be established from property '{0}' on type '{1}' to property '{0}' on type '{1}'. Check the values in the InversePropertyAttribute to ensure relationship definitions are unique and reference from one navigation property to its corresponding inverse navigation property."
+
+
+
+
+ InvalidOperationException with message like "A key is registered for the derived type '{0}'. Keys can only be registered for the root type '{1}'."
+
+
+
+
+ InvalidOperationException with message like "The type '{0}' has already been mapped to table '{1}'. Specify all mapping aspects of a table in a single Map call."
+
+
+
+
+ InvalidOperationException with message like "Map was called more than once for type '{0}' and at least one of the calls didn't specify the target table name."
+
+
+
+
+ InvalidOperationException with message like "The derived type '{0}' has already been mapped using the chaining syntax. A derived type can only be mapped once using the chaining syntax."
+
+
+
+
+ InvalidOperationException with message like "An "is not null" condition cannot be specified on property '{0}' on type '{1}' because this property is not included in the model. Check that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation."
+
+
+
+
+ ArgumentException with message like "Values of type '{0}' cannot be used as type discriminator values. Supported types include byte, signed byte, bool, int16, int32, int64, and string."
+
+
+
+
+ InvalidOperationException with message like "Unable to add the convention '{0}'. Could not find an existing convention of type '{1}' in the current convention set."
+
+
+
+
+ InvalidOperationException with message like "Not all properties for type '{0}' have been mapped. Either map those properties or explicitly excluded them from the model."
+
+
+
+
+ NotSupportedException with message like "Unable to determine the provider name for connection of type '{0}'."
+
+
+
+
+ ArgumentException with message like "The qualified table name '{0}' contains an invalid schema name. Schema names must have a non-zero length."
+
+
+
+
+ ArgumentException with message like "The qualified table name '{0}' contains an invalid table name. Table names must have a non-zero length."
+
+
+
+
+ InvalidOperationException with message like "Properties for type '{0}' can only be mapped once. Ensure the MapInheritedProperties method is only used during one call to the Map method."
+
+
+
+
+ InvalidOperationException with message like "Properties for type '{0}' can only be mapped once. Ensure the Properties method is used and that repeated calls specify each non-key property only once."
+
+
+
+
+ InvalidOperationException with message like "Properties for type '{0}' can only be mapped once. The non-key property '{1}' is mapped more than once. Ensure the Properties method specifies each non-key property only once."
+
+
+
+
+ InvalidOperationException with message like "The property '{1}' on type '{0}' cannot be mapped because it has been explicitly excluded from the model or it is of a type not supported by the DbModelBuilderVersion being used."
+
+
+
+
+ InvalidOperationException with message like "The entity types '{0}' and '{1}' cannot share table '{2}' because they are not in the same type hierarchy or do not have a valid one to one foreign key relationship with matching primary keys between them."
+
+
+
+
+ InvalidOperationException with message like "You cannot use Ignore method on the property '{0}' on type '{1}' because this type inherits from the type '{2}' where this property is mapped. To exclude this property from your model, use NotMappedAttribute or Ignore method on the base type."
+
+
+
+
+ InvalidOperationException with message like "The property '{0}' cannot be used as a key property on the entity '{1}' because the property type is not a valid key type. Only scalar types, string and byte[] are supported key types."
+
+
+
+
+ InvalidOperationException with message like "The specified table '{0}' was not found in the model. Ensure that the table name has been correctly specified."
+
+
+
+
+ InvalidOperationException with message like "The specified association foreign key columns '{0}' are invalid. The number of columns specified must match the number of primary key columns."
+
+
+
+
+ InvalidOperationException with message like "A circular ComplexType hierarchy was detected. Self-referencing ComplexTypes are not supported."
+
+
+
+
+ InvalidOperationException with message like "Unable to determine the principal end of an association between the types '{0}' and '{1}'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations."
+
+
+
+
+ InvalidOperationException with message like "The abstract type '{0}' has no mapped descendents and so cannot be mapped. Either remove '{0}' from the model or add one or more types deriving from '{0}' to the model. "
+
+
+
+
+ NotSupportedException with message like "The type '{0}' cannot be mapped as defined because it maps inherited properties from types that use entity splitting or another form of inheritance. Either choose a different inheritance mapping strategy so as to not map inherited properties, or change all types in the hierarchy to map inherited properties and to not use splitting. "
+
+
+
+
+ InvalidOperationException with message like "The table '{0}' was configured but is not used in any mappings. Verify the mapping configuration for '{0}' is correct."
+
+
+
+
+ InvalidOperationException with message like "The configured column orders for the table '{0}' contains duplicates. Ensure the specified column order values are distinct."
+
+
+
+
+ NotSupportedException with message like "The enum or spatial property '{1}' on type '{0}' cannot be mapped. Use DbModelBuilderVersion 'V5_0' or later to map enum or spatial properties."
+
+
+
+
+ InvalidOperationException with message like "Multiple potential primary key properties named '{0}' but differing only by case were found on entity type '{1}'. Configure the primary key explicitly using the HasKey fluent API or the KeyAttribute data annotation."
+
+
+
+
+ InvalidOperationException with message like "Cannot get value for property '{0}' from entity of type '{1}' because the property has no get accessor."
+
+
+
+
+ InvalidOperationException with message like "Cannot set value for property '{0}' on entity of type '{1}' because the property has no set accessor."
+
+
+
+
+
+ NotSupportedException with message like "Cannot set value for property '{0}' on entity of type '{1}' because the property has no set accessor and is in the '{2}' state."
+
+
+
+
+ InvalidOperationException with message like "Member '{0}' cannot be called for property '{1}' on entity of type '{2}' because the property is not part of the Entity Data Model."
+
+
+
+
+
+ ArgumentException with message like "Cannot call the {0} method for an entity of type '{1}' on a DbSet for entities of type '{2}'. Only entities of type '{2}' or derived from type '{2}' can be added, attached, or removed."
+
+
+
+
+ ArgumentException with message like "Cannot call the Create method for the type '{0}' on a DbSet for entities of type '{1}'. Only entities of type '{1}' or derived from type '{1}' can be created."
+
+
+
+
+
+
+ ArgumentException with message like "The property '{0}' on type '{1}' is a collection navigation property. The Collection method should be used instead of the Reference method."
+
+
+
+
+ ArgumentException with message like "The property '{0}' on type '{1}' is a reference navigation property. The Reference method should be used instead of the Collection method."
+
+
+
+
+ ArgumentException with message like "The property '{0}' on type '{1}' is not a navigation property. The Reference and Collection methods can only be used with navigation properties. Use the Property or ComplexProperty method."
+
+
+
+
+ ArgumentException with message like "The property '{0}' on type '{1}' is not a primitive or complex property. The Property method can only be used with primitive or complex properties. Use the Reference or Collection method."
+
+
+
+
+ ArgumentException with message like "The property '{0}' on type '{1}' is not a complex property. The ComplexProperty method can only be used with complex properties. Use the Property, Reference or Collection method."
+
+
+
+
+ ArgumentException with message like "The property '{0}' on type '{1}' is not a primitive property, complex property, collection navigation property, or reference navigation property."
+
+
+
+
+ ArgumentException with message like ""The property '{0}' from the property path '{1}' is not a complex property on type '{2}'. Property paths must be composed of complex properties for all except the final property.""
+
+
+
+
+ NotSupportedException with message like "Setting IsModified to false for a modified property is not supported."
+
+
+
+
+ ArgumentException with message like ""The property path '{0}' cannot be used for navigation properties. Property paths can only be used to access primitive or complex properties.""
+
+
+
+
+ ArgumentException with message like "The navigation property '{0}' on entity type '{1}' cannot be used for entities of type '{2}' because it refers to entities of type '{3}'."
+
+
+
+
+ ArgumentException with message like "The generic type argument '{0}' cannot be used with the Member method when accessing the collection navigation property '{1}' on entity type '{2}'. The generic type argument '{3}' must be used instead."
+
+
+
+
+ ArgumentException with message like "The property '{0}' on entity type '{1}' cannot be used for objects of type '{2}' because it is a property for objects of type '{3}'."
+
+
+
+
+ ArgumentException with message like "The expression passed to method {0} must represent a property defined on the type '{1}'."
+
+
+
+
+ InvalidOperationException with message like "{0} cannot be used for entities in the {1} state."
+
+
+
+
+ InvalidOperationException with message like "Cannot set non-nullable property '{0}' of type '{1}' to null on object of type '{2}'."
+
+
+
+
+ InvalidOperationException with message like "The property '{0}' in the entity of type '{1}' is null. Store values cannot be obtained for an entity with a null complex property."
+
+
+
+
+ InvalidOperationException with message like "Cannot assign value of type '{0}' to property '{1}' of type '{2}' in property values for type '{3}'."
+
+
+
+
+ NotSupportedException with message like "The set of property value names is read-only."
+
+
+
+
+ ArgumentException with message like "The '{0}' property does not exist or is not mapped for the type '{1}'."
+
+
+
+
+ ArgumentException with message like "Cannot copy values from DbPropertyValues for type '{0}' into DbPropertyValues for type '{1}'."
+
+
+
+
+ ArgumentException with message like "Cannot copy from property values for object of type '{0}' into property values for object of type '{1}'."
+
+
+
+
+ ArgumentException with message like "A property of a complex type must be set to an instance of the generic or non-generic DbPropertyValues class for that type."
+
+
+
+
+ InvalidOperationException with message like "The value of the complex property '{0}' on entity of type '{1}' is null. Complex properties cannot be set to null and values cannot be set for null complex properties."
+
+
+
+
+ InvalidOperationException with message like "The value of the nested property values property '{0}' on the values for entity of type '{1}' is null. Nested property values cannot be set to null and values cannot be set for null complex properties."
+
+
+
+
+ InvalidOperationException with message like "Cannot set the value of the nested property '{0}' because value of the complex property '{1}' to which it belongs is null."
+
+
+
+
+ InvalidOperationException with message like "Cannot set the original value of the nested property '{0}' because the original value of the complex property '{1}' to which it belongs is null."
+
+
+
+
+ InvalidOperationException with message like "The model backing the '{0}' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269)."
+
+
+
+
+ InvalidOperationException with message like "Database '{0}' cannot be created because it already exists."
+
+
+
+
+ NotSupportedException with message like "Model compatibility cannot be checked because the DbContext instance was not created using Code First patterns. DbContext instances created from an ObjectContext or using an EDMX file cannot be checked for compatibility."
+
+
+
+
+ NotSupportedException with message like "Model compatibility cannot be checked because the EdmMetadata type was not included in the model. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions."
+
+
+
+
+ NotSupportedException with message like "Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only be checked for databases created using Code First or Code First Migrations."
+
+
+
+
+
+
+ InvalidOperationException with message like "Failed to set database initializer of type '{0}' for DbContext type '{1}' specified in the application configuration. See inner exception for details."
+
+
+
+
+ InvalidOperationException with message like "Configuration for DbContext type '{0}' is specified multiple times in the application configuration. Each context can only be configured once."
+
+
+
+
+ InvalidOperationException with message like "Failed to set Database.DefaultConnectionFactory to an instance of the '{0}' type as specified in the application configuration. See inner exception for details."
+
+
+
+
+ InvalidOperationException with message like "The type '{0}' could not be found. The type name must be an assembly-qualified name."
+
+
+
+
+ InvalidOperationException with message like "The context cannot be used while the model is being created."
+
+
+
+
+ InvalidOperationException with message like "The DbContext class cannot be used with models that have multiple entity sets per type (MEST)."
+
+
+
+
+ InvalidOperationException with message like "The operation cannot be completed because the DbContext has been disposed."
+
+
+
+
+ InvalidOperationException with message like "The provider factory returned a null connection."
+
+
+
+
+ InvalidOperationException with message like "The connection string '{0}' in the application's configuration file does not contain the required providerName attribute.""
+
+
+
+
+ InvalidOperationException with message like "The DbConnectionFactory instance returned a null connection."
+
+
+
+
+ ArgumentException with message like "The number of primary key values passed must match number of primary key values defined on the entity."
+
+
+
+
+ ArgumentException with message like "The type of one of the primary key values did not match the type defined in the entity. See inner exception for details."
+
+
+
+
+ InvalidOperationException with message like "The entity found was of type {0} when an entity of type {1} was requested."
+
+
+
+
+ InvalidOperationException with message like "Multiple entities were found in the Added state that match the given primary key values."
+
+
+
+
+ InvalidOperationException with message like "The type '{0}' is mapped as a complex type. The Set method, DbSet objects, and DbEntityEntry objects can only be used with entity types, not complex types."
+
+
+
+
+ InvalidOperationException with message like "The type '{0}' is not attributed with EdmEntityTypeAttribute but is contained in an assembly attributed with EdmSchemaAttribute. POCO entities that do not use EdmEntityTypeAttribute cannot be contained in the same assembly as non-POCO entities that use EdmEntityTypeAttribute."
+
+
+
+
+ InvalidOperationException with message like "The entity type {0} is not part of the model for the current context."
+
+
+
+
+ NotSupportedException with message like "Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList()."
+
+
+
+
+ ArgumentException with message like "The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties."
+
+
+
+
+ InvalidOperationException with message like "No connection string named '{0}' could be found in the application config file."
+
+
+
+
+ InvalidOperationException with message like "Cannot initialize a DbContext from an entity connection string or an EntityConnection instance together with a DbCompiledModel. If an entity connection string or EntityConnection instance is used, then the model will be created from the metadata in the connection. If a DbCompiledModel is used, then the connection supplied should be a standard database connection (for example, a SqlConnection instance) rather than an entity connection."
+
+
+
+
+ NotSupportedException with message like "The collection navigation property '{0}' on the entity of type '{1}' cannot be set because the entity type does not define a navigation property with a set accessor."
+
+
+
+
+ NotSupportedException with message like "Using the same DbCompiledModel to create contexts against different types of database servers is not supported. Instead, create a separate DbCompiledModel for each type of server being used."
+
+
+
+
+ InvalidOperationException with message like "Multiple object sets per type are not supported. The object sets '{0}' and '{1}' can both contain instances of type '{2}'."
+
+
+
+
+ InvalidOperationException with message like "The context type '{0}' must have a public constructor taking an EntityConnection."
+
+
+
+
+ NotSupportedException with message like "The database name '{0}' is not supported because it is an MDF file name. A full connection string must be provided to attach an MDF file."
+
+
+
+
+ DataException with message like "An exception occurred while initializing the database. See the InnerException for details."
+
+
+
+
+ NotSupportedException with message like "Creating a DbModelBuilder or writing the EDMX from a DbContext created using an existing ObjectContext is not supported. EDMX can only be obtained from a Code First DbContext created without using an existing DbCompiledModel."
+
+
+
+
+ NotSupportedException with message like "Creating a DbModelBuilder or writing the EDMX from a DbContext created using an existing DbCompiledModel is not supported. EDMX can only be obtained from a Code First DbContext created without using an existing DbCompiledModel."
+
+
+
+
+ NotSupportedException with message like "Creating a DbModelBuilder or writing the EDMX from a DbContext created using Database First or Model First is not supported. EDMX can only be obtained from a Code First DbContext created without using an existing DbCompiledModel."
+
+
+
+
+ InvalidOperationException with message like "The context factory type '{0}' must have a public default constructor."
+
+
+
+
+ InvalidOperationException with message like "The generic 'Set' method cannot be called with a proxy type. Either use the actual entity type or call the non-generic 'Set' method."
+
+
+
+
+ InvalidOperationException with message like "MaxLengthAttribute must have a Length value that is greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length."
+
+
+
+
+ InvalidOperationException with message like "MinLengthAttribute must have a Length value that is zero or greater."
+
+
+
+
+ InvalidOperationException with message like "No connection string named '{0}' could be found in the application config file."
+
+
+
+
+ InvalidOperationException with message like "The connection can not be overridden because this context was created from an existing ObjectContext."
+
+
+
+
+ InvalidOperationException with message like "Can not override the connection for this context with a standard DbConnection because the original connection was an EntityConnection."
+
+
+
+
+ InvalidOperationException with message like "Can not override the connection for this context with an EntityConnection because the original connection was a standard DbConnection."
+
+
+
+
+ The exception that is thrown when a null reference (Nothing in Visual Basic) is passed to a method that does not accept it as a valid argument.
+
+
+
+
+ The exception that is thrown when the value of an argument is outside the allowable range of values as defined by the invoked method.
+
+
+
+
+ The exception that is thrown when the author has yet to implement the logic at this point in the program. This can act as an exception based TODO tag.
+
+
+
+
+ The exception that is thrown when an invoked method is not supported, or when there is an attempt to read, seek, or write to a stream that does not support the invoked functionality.
+
+
+
+
+ AutoGenerated resource class. Usage:
+
+ string s = EntityRes.GetString(EntityRes.MyIdenfitier);
+
+
+
+
+ Allows the construction and modification of a user-specified annotation (name-value pair) on a instance.
+
+
+
+
+ Gets or sets an optional namespace that can be used to distinguish the annotation from others with the same value.
+
+
+
+
+ Gets or sets the name of the annotation.
+
+
+
+
+ Gets or sets the value of the annotation.
+
+
+
+
+
+
+
+
+ DataModelEventArgs is the base argument type for all events raised by consumers of Entity Data Model (EDM) models.
+
+
+
+
+ Gets a value indicating the that caused the event to be raised.
+
+
+
+
+ Gets an optional value indicating which property of the source item caused the event to be raised.
+
+
+
+
+ Gets a value that identifies the specific error that is being raised.
+
+
+
+
+ Gets an optional descriptive message the describes the error that is being raised.
+
+
+
+
+ DbAliasedMetadataItem provides the base type for all Database Metadata types that can have an optional that should be used instead of the item's when referring to the item in the database.
+
+
+
+
+ NamedDbItem is the base for all types in the Database Metadata construction and modification API with a property.
+
+
+
+
+ The base for all all Database Metadata types that support annotation using .
+
+
+
+
+ DbDataModelItem is the base for all types in the Database Metadata construction and modification API.
+
+
+
+
+ Gets or sets the currently assigned annotations.
+
+
+
+
+ Gets or sets the currently assigned name.
+
+
+
+
+ Gets an optional alternative identifier that should be used when referring to this item in the database.
+
+
+
+
+ When implemented in derived types, allows the construction and modification of a column in a Database Metadata table or row.
+
+
+
+
+ Gets or sets a string indicating the database-specific type of the column.
+
+
+
+
+ Gets or sets a value indicating whether the column is nullable.
+
+
+
+
+ Gets or sets an optional instance that applies additional constraints to the referenced database-specific type of the column.
+
+
+
+
+ Allows the construction and modification of a database in a Database Metadata model.
+
+
+
+
+ Gets or sets an optional value that indicates the database model version.
+
+
+
+
+ Gets or sets the collection of instances that specifies the schemas within the database.
+
+
+
+
+ Allows the construction and modification of a foreign key constraint sourced by a instance.
+
+
+
+
+ Gets or sets the to take when a delete operation is attempted.
+
+
+
+
+ Indicates which Database Metadata concept is represented by a given item.
+
+
+
+
+ Database Kind
+
+
+
+
+ Schema Kind
+
+
+
+
+ Foreign Key Constraint Kind
+
+
+
+
+ Function Kind
+
+
+
+
+ Function Parameter Kind
+
+
+
+
+ Function Return or Parameter Type Kind
+
+
+
+
+ Row Column Kind
+
+
+
+
+ Table Kind
+
+
+
+
+ Table Column Kind
+
+
+
+
+ Primitive Facets Kind
+
+
+
+
+ Specifies the action to take on a given operation.
+
+
+
+
+ Default behavior
+
+
+
+
+ Restrict the operation
+
+
+
+
+ Cascade the operation
+
+
+
+
+ Allows the construction and modification of additional constraints that can be applied to a specific use of a primitive type in a Database Metadata item.
+
+
+
+
+ Returns true if any facet value property currently has a non-null value; otherwise returns false .
+
+
+
+
+ Gets or sets an optional value indicating whether the referenced type should be considered to have a fixed or variable length.
+
+
+
+
+ Gets or sets an optional value indicating whether the referenced type should be considered to have its intrinsic maximum length, rather than a specific value.
+
+
+
+
+ Gets or sets an optional value indicating whether the referenced type should be considered to be Unicode or non-Unicode.
+
+
+
+
+ Gets or sets an optional value indicating the current constraint on the type's maximum length.
+
+
+
+
+ Gets or sets an optional value indicating the current constraint on the type's precision.
+
+
+
+
+ Gets or sets an optional value indicating the current constraint on the type's scale.
+
+
+
+
+ Gets or sets an optional value indicating the current spatial type's SRID.
+
+
+
+
+ Gets or sets an optional value indicating the current spatial type's SRID.
+
+
+
+
+ Gets or sets an optional value indicating whether the spatial type is to be type checked strictly.
+
+
+
+
+ Allows the construction and modification of a database schema in a database model.
+
+
+
+
+ Gets or sets the collection of instances that specifies the tables declared within the schema.
+
+
+
+
+ DbSchemaMetadataItem is the base for all types that can be contained in a schema.
+
+
+
+
+ Allows the construction and modification of a column in a table.
+
+
+
+
+ Gets or sets a value indicating whether the column is part of the table's primary key.
+
+
+
+
+ Gets or sets a value indicating if and how the value of the column is automatically generated.
+
+
+
+
+ Gets or sets an optional value indicating the collation specific to this table column.
+
+
+
+
+ Gets or sets an optional value that specifies the default value for the column.
+
+
+
+
+ Allows the construction and modification a table in a database schema.
+
+
+
+
+ Gets or sets the collection of instances that specifies the columns present within the table.
+
+
+
+
+ Gets or sets the collection of instances from the collection of the table that are part of the primary key.
+
+
+
+
+ Gets or sets the collection of instances that defines the foreign key constraints sourced from the table.
+
+
+
+
+ Represents a specific use of a type in a Database Metadata item.
+
+
+
+
+ Gets or sets an optional instance that applies additional constraints to a referenced primitive type.
+
+
+ Accessing this property forces the creation of a DbPrimitiveTypeFacets value if no value has previously been set. Use to determine whether or not this property currently has a value.
+
+
+
+
+ Gets or sets a value indicating whether the represented type is a collection type.
+
+
+
+
+ Gets or sets an optional value indicating whether the referenced type should be considered nullable.
+
+
+
+
+ Gets a value indicating whether the type has been configured as a row type by the addition of one or more RowColumns.
+
+
+
+
+ Represents the mapping of an EDM association end ( ) as a collection of property mappings ( ).
+
+
+
+
+ DbMappingMetadataItem is the base for all types in the EDM-to-Database Mapping construction and modification API that support annotation using .
+
+
+
+
+ DbMappingModelItem is the base for all types in the EDM-to-Database Mapping construction and modification API.
+
+
+
+
+ Gets or sets the currently assigned annotations.
+
+
+
+
+ Gets an value representing the association end that is being mapped.
+
+
+
+
+ Gets the collection of s that specifies how the association end key properties are mapped to the table.
+
+
+
+
+ Gets an value representing the association set that is being mapped.
+
+
+
+
+ Gets a value representing the table to which the entity type's properties are being mapped.
+
+
+
+
+ Gets the collection of s that specifies the constant or null values that columns in must have for this type mapping to apply.
+
+
+
+
+ Allows the construction and modification of a condition for a column in a database table.
+
+
+
+
+ Gets or sets a value representing the table column which must contain for this condition to hold.
+
+
+
+
+ Gets or sets the value that must contain for this condition to hold.
+
+
+
+
+ Gets or sets an value representing the model that is being mapped.
+
+
+
+
+ Gets or sets a value representing the database that is the target of the mapping.
+
+
+
+
+ Gets or sets the collection of s that specifies how the model's entity containers are mapped to the database.
+
+
+
+
+ Represents the mapping of an entity property to a column in a database table.
+
+
+
+
+ Gets or sets the collection of instances that defines the mapped property, beginning from a property declared by the mapped entity type and optionally proceeding through properties of complex property result types.
+
+
+
+
+ Gets or sets a value representing the table column to which the entity property is being mapped.
+
+
+
+
+ Allows the construction and modification of the mapping of an EDM entity container ( ) to a database ( ).
+
+
+
+
+ Gets or sets an value representing the entity container that is being mapped.
+
+
+
+
+ Gets or sets the collection of s that specifies how the container's entity sets are mapped to the database.
+
+
+
+
+ Gets the collection of s that specifies how the container's association sets are mapped to the database.
+
+
+
+
+ Allows the construction and modification of the mapping of an EDM entity set ( ) to a database ( ).
+
+
+
+
+ Gets or sets an value representing the entity set that is being mapped.
+
+
+
+
+ Gets or sets the collection of s that specifies how the set's entity types are mapped to the database.
+
+
+
+
+ Allows the construction and modification of a complete or partial mapping of an EDM entity type ( ) or type hierarchy to a specific database table ( ).
+
+
+
+
+ Gets or sets an value representing the entity type or hierarchy that is being mapped.
+
+
+
+
+ Gets or sets a value indicating whether this type mapping applies to and all its direct or indirect subtypes ( true ), or only to ( false ).
+
+
+
+
+ Gets a value representing the table to which the entity type's properties are being mapped.
+
+
+
+
+ Gets the collection of s that specifies how the type's properties are mapped to the table.
+
+
+
+
+ Gets the collection of s that specifies the constant or null values that columns in must have for this type mapping fragment to apply.
+
+
+
+
+ Indicates which EDM-to-Database Mapping concept is represented by a given item.
+
+
+
+
+ Database Mapping Kind
+
+
+
+
+ Entity Container Mapping Kind
+
+
+
+
+ Entity Set Mapping Kind
+
+
+
+
+ Association Set Mapping Kind
+
+
+
+
+ Entity Type Mapping Kind
+
+
+
+
+ Query View Mapping Kind
+
+
+
+
+ Entity Type Mapping Fragment Kind
+
+
+
+
+ Edm Property Mapping Kind
+
+
+
+
+ Association End Mapping Kind
+
+
+
+
+ Column Condition Kind
+
+
+
+
+ Property Condition Kind
+
+
+
+
+ Allows the construction and modification of a constraint applied to an Entity Data Model (EDM) association.
+
+
+
+
+ Gets or sets the that represents the 'dependent' end of the constraint; properties from this association end's entity type contribute to the collection.
+
+
+
+
+ Gets or sets the collection of instances from the of the constraint. The values of these properties are constrained against the primary key values of the remaining, 'principal' association end's entity type.
+
+
+
+
+ Allows the construction and modification of one end of an Entity Data Model (EDM) association.
+
+
+
+
+ Gets or sets the entity type referenced by this association end.
+
+
+
+
+ Gets or sets the of this association end, which indicates the multiplicity of the end and whether or not it is required.
+
+
+
+
+ Gets or sets the to take when a delete operation is attempted.
+
+
+
+
+ Indicates the multiplicity of an and whether or not it is required.
+
+
+
+
+ Allows the construction and modification of an association set in an Entity Data Model (EDM) ).
+
+
+
+
+ Represents an item in an Entity Data Model (EDM) .
+
+
+
+
+ Gets or sets the that specifies the association type for the set.
+
+
+
+
+ Gets or sets the that specifies the entity set corresponding to the association end for this association set.
+
+
+
+
+ Gets or sets the that specifies the entity set corresponding to the association end for this association set.
+
+
+
+
+
+ The base for all all Entity Data Model (EDM) types that represent a structured type from the EDM type system.
+
+
+
+
+ Gets or sets the that defines the source end of the association.
+
+
+
+
+ Gets or sets the that defines the target end of the association.
+
+
+
+
+ Gets or sets the optional constraint that indicates whether the relationship is an independent association (no constraint present) or a foreign key relationship ( specified).
+
+
+
+
+ Collection semantics for properties.
+
+
+
+
+ The property does not have a collection type or does not specify explicit collection semantics.
+
+
+
+
+ The property is an unordered collection that may contain duplicates.
+
+
+
+
+ The property is an ordered collection that may contain duplicates.
+
+
+
+
+ Allows the construction and modification of a complex type in an Entity Data Model (EDM) .
+
+
+
+
+ Gets or sets the optional that indicates the base complex type of the complex type.
+
+
+
+
+ Gets or sets a value indicating whether the complex type is abstract.
+
+
+
+
+ Gets or sets the collection of instances that describe the (scalar or complex) properties of the complex type.
+
+
+
+
+ Concurrency mode for properties.
+
+
+
+
+ Default concurrency mode: the property is never validated at write time
+
+
+
+
+ Fixed concurrency mode: the property is always validated at write time
+
+
+
+
+ Allows the construction and modification of an entity container in an Entity Data Model (EDM) .
+
+
+
+
+ Gets all s declared within the namspace. Includes s and s.
+
+
+
+
+ Gets or sets the collection of s that specifies the association sets within the container.
+
+
+
+
+ Gets or sets the collection of s that specifies the entity sets within the container.
+
+
+
+
+ Allows the construction and modification of an entity set in an Entity Data Model (EDM) .
+
+
+
+
+ Gets or sets the that specifies the entity type for the set.
+
+
+
+
+ Allows the construction and modification of an entity type in an Entity Data Model (EDM) .
+
+
+
+
+ Gets or sets the optional that indicates the base entity type of the entity type.
+
+
+
+
+ Gets or sets a value indicating whether the entity type is abstract.
+
+
+
+
+ Gets or sets the collection of s that specifies the properties declared by the entity type.
+
+
+
+
+ Gets or sets the collection of s that indicates which properties from the collection are part of the entity key.
+
+
+
+
+ Gets or sets the optional collection of s that specifies the navigation properties declared by the entity type.
+
+
+
+
+ Indicates which Entity Data Model (EDM) concept is represented by a given item.
+
+
+
+
+ Association End Kind
+
+
+
+
+ Association Set Kind
+
+
+
+
+ Association Type Kind
+
+
+
+
+ Collection Type Kind
+
+
+
+
+ Complex Type Kind
+
+
+
+
+ Entity Container Kind
+
+
+
+
+ Entity Set Kind
+
+
+
+
+ Entity Type Kind
+
+
+
+
+ Function Group Kind
+
+
+
+
+ Function Overload Kind
+
+
+
+
+ Function Import Kind
+
+
+
+
+ Function Parameter Kind
+
+
+
+
+ Navigation Property Kind
+
+
+
+
+ EdmProperty Type Kind
+
+
+
+
+ Association Constraint Type Kind
+
+
+
+
+ Ref Type Kind
+
+
+
+
+ Row Column Kind
+
+
+
+
+ Row Type Kind
+
+
+
+
+ Type Reference Kind
+
+
+
+
+ Model Kind
+
+
+
+
+ Namespace Kind
+
+
+
+
+ Primitive Facets Kind
+
+
+
+
+ Primitive Type Kind
+
+
+
+
+ Enum Type Kind
+
+
+
+
+ Enum Type Member Kind
+
+
+
+
+ EdmModel is the top-level container for namespaces and entity containers belonging to the same logical Entity Data Model (EDM) model.
+
+
+
+
+ Gets or sets an optional value that indicates the entity model version.
+
+
+
+
+ Gets or sets the containers declared within the model.
+
+
+
+
+ Gets or sets the namespaces declared within the model.
+
+
+
+
+ Allows the construction and modification of a namespace in an .
+
+
+
+
+ Gets all s declared within the namspace. Includes s, s, s.
+
+
+
+
+ Gets or sets the s declared within the namespace.
+
+
+
+
+ Gets or sets the s declared within the namespace.
+
+
+
+
+ Gets or sets the s declared within the namespace.
+
+
+
+
+ Allows the construction and modification of an Entity Data Model (EDM) navigation property.
+
+
+
+
+ Gets or sets the that specifies the association over which navigation takes place.
+
+
+
+
+ Gets or sets the that specifies which association end is the 'destination' end of the navigation and produces the navigation property result.
+
+
+
+
+ Specifies the action to take on a given operation.
+
+
+
+
+ Default behavior
+
+
+
+
+ Restrict the operation
+
+
+
+
+ Cascade the operation
+
+
+
+
+ Represents one of the fixed set of Entity Data Model (EDM) primitive types.
+
+
+
+
+ The base for all all Entity Data Model (EDM) types that represent a scalar type from the EDM type system.
+
+
+
+
+ Retrieves the EdmPrimitiveType instance with the corresponding to the specified value, if any.
+
+ The name of the primitive type instance to retrieve
+ The EdmPrimitiveType with the specified name, if successful; otherwise null .
+ true if the given name corresponds to an EDM primitive type name; otherwise false .
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets the EdmPrimitiveType instance that represents the primitive type.
+
+
+
+
+ Gets an value that indicates which Entity Data Model (EDM) primitive type this type represents.
+
+
+
+
+ Allows the construction and modification of additional constraints that can be applied to a specific use of a primitive type in an Entity Data Model (EDM) item. See .
+
+
+
+
+ Returns true if any facet value property currently has a non-null value; otherwise returns false .
+
+
+
+
+ Gets or sets an optional value indicating the current constraint on the type's maximum length.
+
+
+
+
+ Gets or sets an optional value indicating whether the referenced type should be considered to have its intrinsic maximum length, rather than a specific value.
+
+
+
+
+ Gets or sets an optional value indicating whether the referenced type should be considered to have a fixed or variable length.
+
+
+
+
+ Gets or sets an optional value indicating whether the referenced type should be considered to be Unicode or non-Unicode.
+
+
+
+
+ Gets or sets an optional value indicating the current constraint on the type's precision.
+
+
+
+
+ Gets or sets an optional value indicating the current constraint on the type's scale.
+
+
+
+
+ Gets or sets an optional value indicating that the current spatial type's SRID is unconstrained.
+
+
+
+
+ Gets or sets an optional value indicating the current spatial type's SRID.
+
+
+
+
+ Gets or sets an optional value indicating whether the spatial type is to be type checked strictly.
+
+
+
+
+ Primitive Types as defined by the Entity Data Model (EDM).
+
+
+
+
+ Binary Type Kind
+
+
+
+
+ Boolean Type Kind
+
+
+
+
+ Byte Type Kind
+
+
+
+
+ DateTime Type Kind
+
+
+
+
+ Decimal Type Kind
+
+
+
+
+ Double Type Kind
+
+
+
+
+ Guid Type Kind
+
+
+
+
+ Single Type Kind
+
+
+
+
+ SByte Type Kind
+
+
+
+
+ Int16 Type Kind
+
+
+
+
+ Int32 Type Kind
+
+
+
+
+ Int64 Type Kind
+
+
+
+
+ String Type Kind
+
+
+
+
+ Time Type Kind
+
+
+
+
+ DateTimeOffset Type Kind
+
+
+
+
+ Geometry Type Kind
+
+
+
+
+ Geography Type Kind
+
+
+
+
+ Geometric point type kind
+
+
+
+
+ Geometric linestring type kind
+
+
+
+
+ Geometric polygon type kind
+
+
+
+
+ Geometric multi-point type kind
+
+
+
+
+ Geometric multi-linestring type kind
+
+
+
+
+ Geometric multi-polygon type kind
+
+
+
+
+ Geometric collection type kind
+
+
+
+
+ Geographic point type kind
+
+
+
+
+ Geographic linestring type kind
+
+
+
+
+ Geographic polygon type kind
+
+
+
+
+ Geographic multi-point type kind
+
+
+
+
+ Geographic multi-linestring type kind
+
+
+
+
+ Geographic multi-polygon type kind
+
+
+
+
+ Geographic collection type kind
+
+
+
+
+ Allows the construction and modification of a primitive- or complex-valued property of an Entity Data Model (EDM) entity or complex type.
+
+
+
+
+ Gets or sets an value that indicates which collection semantics - if any - apply to the property.
+
+
+
+
+ Gets or sets a value that indicates whether the property is used for concurrency validation.
+
+
+
+
+ Gets or sets on optional value that indicates an initial default value for the property.
+
+
+
+
+ Gets or sets an that specifies the result type of the property.
+
+
+
+
+ Enumerates all s declared or inherited by an .
+
+
+
+
+ Allows the construction and modification of a specific use of a type in an Entity Data Model (EDM) item. See for examples.
+
+
+
+
+ Gets or sets a value indicating the collection rank of the type reference. A collection rank greater than zero indicates that the type reference represents a collection of its referenced .
+
+
+
+
+ Gets or sets a value indicating the referenced by this type reference.
+
+
+
+
+ Gets or sets an optional value indicating whether the referenced type should be considered nullable.
+
+
+
+
+ Gets or sets an optional instance that applies additional constraints to a referenced primitive type.
+
+
+ Accessing this property forces the creation of an EdmPrimitiveTypeFacets value if no value has previously been set. Use to determine whether or not this property currently has a value.
+
+
+
+
+ Gets a value indicating whether the property of this type reference has been assigned an value with at least one facet value specified.
+
+
+
+
+ Indicates whether this type reference represents a collection of its referenced (when is greater than zero) or not.
+
+
+
+
+ Indicates whether the property of this type reference currently refers to an , is not a collection type, and does not have primitive facet values specified.
+
+
+
+
+ Gets the currently referred to by this type reference, or null if the type reference is a collection type or does not refer to a complex type.
+
+
+
+
+ Indicates whether the property of this type reference currently refers to an and is not a collection type.
+
+
+
+
+ Gets the currently referred to by this type reference, or null if the type reference is a collection type or does not refer to a primitive type.
+
+
+
+
+ Contains constant values that apply to the EDM model, regardless of source (for CSDL specific constants see ).
+
+
+
+
+ Parsing code taken from System.dll's System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string) method to avoid LinkDemand needed to call this method
+
+
+
+
+
+
+
+
+
+
+ Constants for CSDL XML.
+
+
+
+
+ Constants for C-S MSL XML.
+
+
+
+
+ Constants for SSDL XML.
+
+
+
+
+ The acceptable range for this enum is 0000 - 0999; the range 10,000-15,000 is reserved for tools.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Precision out of range
+
+
+
+
+ Scale out of range
+
+
+
+
+
+
+
+
+
+
+
+
+ One of the required facets is missing
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The facet isn't allow by the property type.
+
+
+
+
+ This facet value is constant and is specified in the schema
+
+
+
+
+
+
+
+
+
+
+
+
+ Multiplicity value was malformed
+
+
+
+
+ The value for the Action attribute is invalid or not allowed in the current context
+
+
+
+
+ An error occurred processing the On<Operation> elements
+
+
+
+
+ Ends were given for the Property element of a EntityContainer that is not a RelationshipSet
+
+
+
+
+ The extent name used in the EntittyContainerType End does not match the name of any of the EntityContainerProperties in the containing EntityContainer
+
+
+
+
+ An end element was not given, and cannot be inferred because too many EntityContainerEntitySet elements that are good possibilities.
+
+
+
+
+ An end element was not given, and cannot be inferred because there is no EntityContainerEntitySets that are the correct type to be used as an EntitySet.
+
+
+
+
+ Not a valid parameter direction for the parameter in a function
+
+
+
+
+ Unable to infer an optional schema part, to resolve this; be more explicit
+
+
+
+
+ Invalid facet attribute(s) specified in provider manifest
+
+
+
+
+ Invalid role value in the relationship constraint
+
+
+
+
+ Invalid Property in relationship constraint
+
+
+
+
+ Type mismatch between ToProperty and FromProperty in the relationship constraint
+
+
+
+
+ Invalid multiplicity in FromRole in the relationship constraint
+
+
+
+
+ The number of properties in the FromProperty and ToProperty in the relationship constraint must be identical
+
+
+
+
+ No Properties defined in either FromProperty or ToProperty in the relationship constraint
+
+
+
+
+ Missing constraint in relationship type in ssdl
+
+
+
+
+ Same role referred in the ToRole and FromRole of a referential constraint
+
+
+
+
+ Invalid value for attribute ParameterTypeSemantics
+
+
+
+
+ Invalid type used for a Relationship End Type
+
+
+
+
+ Invalid PrimitiveTypeKind
+
+
+
+
+ Invalid TypeConversion DestinationType
+
+
+
+
+ Expected a integer value between 0 - 255
+
+
+
+
+ Invalid Type specified in function
+
+
+
+
+ Precision must not be greater than 28
+
+
+
+
+ Properties that are part of entity key must be of scalar type
+
+
+
+
+ Binary type properties which are part of entity key are currently not supported
+
+
+
+
+ The primitive type kind does not have a preferred mapping
+
+
+
+
+ More than one PreferredMapping for a PrimitiveTypeKind
+
+
+
+
+ End with * multiplicity cannot have operations specified
+
+
+
+
+ EntitySet type has no keys
+
+
+
+
+ InvalidNumberOfParametersForAggregateFunction
+
+
+
+
+ InvalidParameterTypeForAggregateFunction
+
+
+
+
+ Composable functions must declare a return type.
+
+
+
+
+ Non-composable functions must not declare a return type.
+
+
+
+
+ Non-composable functions do not permit the aggregate; niladic; or built-in attributes.
+
+
+
+
+ Composable functions can not include command text attribute.
+
+
+
+
+ Functions should not declare both a store name and command text (only one or the other can be used).
+
+
+
+
+ SystemNamespace
+
+
+
+
+ Empty DefiningQuery text
+
+
+
+
+ Schema, Table and DefiningQuery are all specified, and are mutually exclusive
+
+
+
+
+ ConcurrencyMode value was malformed
+
+
+
+
+ Concurrency can't change for any sub types of an EntitySet type.
+
+
+
+
+ Function import return type must be either empty, a collection of entities, or a singleton scalar.
+
+
+
+
+ Function import specifies a non-existent entity set.
+
+
+
+
+ Function import specifies entity type return but no entity set.
+
+
+
+
+ Function import specifies entity type that does not derive from element type of entity set.
+
+
+
+
+ Function import specifies a binding to an entity set but does not return entities.
+
+
+
+
+ InternalError
+
+
+
+
+ Same Entity Set Taking part in the same role of the relationship set in two different relationship sets
+
+
+
+
+ Entity key refers to the same property twice
+
+
+
+
+ Function declares a ReturnType attribute and element
+
+
+
+
+ Nullable Complex Type not supported in Edm V1
+
+
+
+
+ Only Complex Collections supported in Edm V1.1
+
+
+
+
+ No Key defined on Entity Type
+
+
+
+
+ Invalid namespace specified in using element
+
+
+
+
+ Need not specify system namespace in using
+
+
+
+
+ Cannot use a reserved/system namespace as alias
+
+
+
+
+ Invalid qualification specified for type
+
+
+
+
+ Invalid Entity Container Name in extends attribute
+
+
+
+
+ Invalid CollectionKind value in property CollectionKind attribute
+
+
+
+
+ Must specify namespace or alias of the schema in which this type is defined
+
+
+
+
+ Entity Container cannot extend itself
+
+
+
+
+ Failed to retrieve provider manifest
+
+
+
+
+ Mismatched Provider Manifest token values in SSDL artifacts
+
+
+
+
+ Missing Provider Manifest token value in SSDL artifact(s)
+
+
+
+
+ Empty CommandText element
+
+
+
+
+ Inconsistent Provider values in SSDL artifacts
+
+
+
+
+ Inconsistent Provider Manifest token values in SSDL artifacts
+
+
+
+
+ Duplicated Function overloads
+
+
+
+
+ InvalidProvider
+
+
+
+
+ FunctionWithNonEdmTypeNotSupported
+
+
+
+
+ ComplexTypeAsReturnTypeAndDefinedEntitySet
+
+
+
+
+ ComplexTypeAsReturnTypeAndDefinedEntitySet
+
+
+
+ unused 179,
+ unused 180,
+ unused 181,
+
+ In model functions facet attribute is allowed only on ScalarTypes
+
+
+
+
+ Captures several conditions where facets are placed on element where it should not exist.
+
+
+
+
+ Return type has not been declared
+
+
+
+
+ Invalid value in the EnumTypeOption
+
+
+
+
+ The structural annotation cannot use codegen namespaces
+
+
+
+
+ Function and type cannot have the same fully qualified name
+
+
+
+
+ Cannot load different version of schema in the same ItemCollection
+
+
+
+
+ Expected bool value
+
+
+
+
+ End without Multiplicity specified
+
+
+
+
+ In SSDL, if composable function returns a collection of rows (TVF), all row properties must be of scalar types.
+
+
+
+
+ The name of NamedEdmItem must not be empty or white space only
+
+
+
+
+ EdmTypeReference is empty
+
+ Unused 199;
+
+
+
+ Serializes an that conforms to the restrictions of a single CSDL schema file to an XML writer. The model to be serialized must contain a single and a single .
+
+
+
+
+ Serialize the to the XmlWriter.
+
+ The EdmModel to serialize, mut have only one and one
+ The XmlWriter to serialize to
+
+
+
+ Serialize the to the XmlWriter
+
+ The DbModel to serialize
+ The XmlWriter to serialize to
+
+
+
+ Serialize the to the
+
+ The DbDatabaseMetadata to serialize
+ Provider information on the Schema element
+ ProviderManifestToken information on the Schema element
+ The XmlWriter to serialize to
+
+
+
+
+ author/email
+
+
+
+
+ author/name
+
+
+
+
+ author/uri
+
+
+
+
+ published
+
+
+
+
+ rights
+
+
+
+
+ summary
+
+
+
+
+ title
+
+
+
+
+ contributor/email
+
+
+
+
+ contributor/name
+
+
+
+
+ contributor/uri
+
+
+
+
+ category/@label
+
+
+
+
+ Plaintext
+
+
+
+
+ HTML
+
+
+
+
+ XHTML
+
+
+
+
+ updated
+
+
+
+
+ link/@href
+
+
+
+
+ link/@rel
+
+
+
+
+ link/@type
+
+
+
+
+ link/@hreflang
+
+
+
+
+ link/@title
+
+
+
+
+ link/@length
+
+
+
+
+ category/@term
+
+
+
+
+ category/@scheme
+
+
+
+
+ Return role name pair
+
+
+
+
+
+
+
+ The context for DataModel Validation
+
+
+
+
+ Returns true if the given two ends are similar - the relationship type that this ends belongs to is the same and the entity set refered by the ends are same and they are from the same role
+
+
+
+
+
+
+
+ Return true if the Referential Constraint on the association is ready for further validation, otherwise return false.
+
+
+
+
+
+
+ Resolves the given property names to the property in the item Also checks whether the properties form the key for the given type and whether all the properties are nullable or not
+
+
+
+
+
+
+
+
+
+
+ Return true if the namespaceName is a Edm System Namespace
+
+
+
+
+
+
+ Return true if the entityType is a subtype of any entity type in the dictionary keys, and return the corresponding entry EntitySet value. Otherwise return false.
+
+
+
+
+
+
+
+
+ Return true if any of the properties in the EdmEntityType defines ConcurrencyMode. Otherwise return false.
+
+
+
+
+
+
+ Add member name to the Hash set, raise an error if the name exists already.
+
+
+
+
+
+
+
+
+ If the string is null, empty, or only whitespace, return false, otherwise return true
+
+
+
+
+
+
+ Determine if a cycle exists in the type hierarchy: use two pointers to walk the chain, if one catches up with the other, we have a cycle.
+
+ true if a cycle exists in the type hierarchy, false otherwise
+
+
+
+ RuleSet for DataModel Validation
+
+
+
+
+ Get the related rules given certain DataModelItem
+
+ The to validate
+ A collection of
+
+
+
+ Data Model Validator
+
+
+
+
+ Validate the and all of its properties given certain version.
+
+ The root of the model to be validated
+ True to validate the syntax, otherwise false
+
+
+
+ The RuleSet for EdmModel
+
+
+
+
+ Get based on version
+
+ a double value of version
+
+
+
+
+ The context for EdmModel Validation
+
+
+
+
+ Visitor for EdmModel Validation
+
+
+
+
+ Edm Model Validator
+
+
+
+
+ validate the from the root with the context
+
+ The root to validate from
+ The validation context
+
+
+
+ An implementation of IDatabaseInitializer that will recreate and optionally re-seed the
+ database only if the database does not exist.
+ To seed the database, create a derived class and override the Seed method.
+
+ The type of the context.
+
+
+
+ Executes the strategy to initialize the database for the given context.
+
+ The context.
+
+
+
+ A that should be overridden to actually add data to the context for seeding.
+ The default implementation does nothing.
+
+ The context to seed.
+
+
+
+ An instances of this class is obtained from an object and can be used
+ to manage the actual database backing a DbContext or connection.
+ This includes creating, deleting, and checking for the existence of a database.
+ Note that deletion and checking for existence of a database can be performed using just a
+ connection (i.e. without a full context) by using the static methods of this class.
+
+
+
+
+ Creates a Database backed by the given context. This object can be used to create a database,
+ check for database existence, and delete a database.
+
+ The context that defines the database connection and model.
+
+
+
+ Gets or sets the database initialization strategy. The database initialization strategy is called when instance
+ is initialized from a . The strategy can optionally check for database existence, create a new database, and
+ seed the database with data.
+ The default strategy is an instance of .
+
+ The type of the context.
+ The strategy.
+ The database creation strategy.
+
+
+
+ Internal version of SetInitializer that allows the strategy to be locked such that it cannot be replaced
+ by another call to SetInitializer. This allows strategies set in the app.config to win over strategies set
+ in code.
+
+ The type of the context.
+ The strategy.
+ if set to true then the strategy is locked.
+
+
+
+ Runs the the registered on this context.
+
+ If "force" is set to true, then the initializer is run regardless of whether or not it
+ has been run before. This can be useful if a database is deleted while an app is running
+ and needs to be reinitialized.
+
+ If "force" is set to false, then the initializer is only run if it has not already been
+ run for this context, model, and connection in this app domain. This method is typically
+ used when it is necessary to ensure that the database has been created and seeded
+ before starting some operation where doing so lazily will cause issues, such as when the
+ operation is part of a transaction.
+
+ if set to true the initializer is run even if it has already been run.
+
+
+
+ Checks whether or not the database is compatible with the the current Code First model.
+
+
+ Model compatibility currently uses the following rules.
+
+ If the context was created using either the Model First or Database First approach then the
+ model is assumed to be compatible with the database and this method returns true.
+
+ For Code First the model is considered compatible if the model is stored in the database
+ in the Migrations history table and that model has no differences from the current model as
+ determined by Migrations model differ.
+
+ If the model is not stored in the database but an EF 4.1/4.2 model hash is found instead,
+ then this is used to check for compatibility.
+
+
+ If set to true then an exception will be thrown if no model metadata is found in
+ the database. If set to false then this method will return true if metadata
+ is not found.
+
+ True if the model hash in the context and the database match; false otherwise.
+
+
+
+
+ Creates a new database on the database server for the model defined in the backing context.
+ Note that calling this method before the database initialization strategy has run will disable
+ executing that strategy.
+
+
+
+
+ Creates a new database on the database server for the model defined in the backing context, but only
+ if a database with the same name does not already exist on the server.
+
+ True if the database did not exist and was created; false otherwise.
+
+
+
+ Checks whether or not the database exists on the server.
+
+ True if the database exists; false otherwise.
+
+
+
+ Deletes the database on the database server if it exists, otherwise does nothing.
+ Calling this method from outside of an initializer will mark the database as having
+ not been initialized. This means that if an attempt is made to use the database again
+ after it has been deleted, then any initializer set will run again and, usually, will
+ try to create the database again automatically.
+
+ True if the database did exist and was deleted; false otherwise.
+
+
+
+ Checks whether or not the database exists on the server.
+ The connection to the database is created using the given database name or connection string
+ in the same way as is described in the documentation for the class.
+
+ The database name or a connection string to the database.
+ True if the database exists; false otherwise.
+
+
+
+ Deletes the database on the database server if it exists, otherwise does nothing.
+ The connection to the database is created using the given database name or connection string
+ in the same way as is described in the documentation for the class.
+
+ The database name or a connection string to the database.
+ True if the database did exist and was deleted; false otherwise.
+
+
+
+ Checks whether or not the database exists on the server.
+
+ An existing connection to the database.
+ True if the database exists; false otherwise.
+
+
+
+ Deletes the database on the database server if it exists, otherwise does nothing.
+
+ An existing connection to the database.
+ True if the database did exist and was deleted; false otherwise.
+
+
+
+ Resets the DefaultConnectionFactory to its initial value.
+ Currently, this method is only used by test code.
+
+
+
+
+ Performs the operation defined by the given delegate using the given lazy connection, ensuring
+ that the lazy connection is disposed after use.
+
+ Information used to create a DbConnection.
+ The operation to perform.
+ The return value of the operation.
+
+
+
+ Performs the operation defined by the given delegate against a connection. The connection
+ is either the connection accessed from the context backing this object, or is obtained from
+ the connection information passed to one of the static methods.
+
+ The connection to use.
+ The operation to perform.
+ The return value of the operation.
+
+
+
+ Returns an empty ObjectContext that can be used to perform delete/exists operations.
+
+ The connection for which to create an ObjectContext
+ The empty context.
+
+
+
+ Creates a raw SQL query that will return elements of the given generic type.
+ The type can be any type that has properties that match the names of the columns returned
+ from the query, or can be a simple primitive type. The type does not have to be an
+ entity type. The results of this query are never tracked by the context even if the
+ type of object returned is an entity type. Use the
+ method to return entities that are tracked by the context.
+
+ The type of object returned by the query.
+ The SQL query string.
+ The parameters to apply to the SQL query string.
+ A object that will execute the query when it is enumerated.
+
+
+
+ Creates a raw SQL query that will return elements of the given type.
+ The type can be any type that has properties that match the names of the columns returned
+ from the query, or can be a simple primitive type. The type does not have to be an
+ entity type. The results of this query are never tracked by the context even if the
+ type of object returned is an entity type. Use the
+ method to return entities that are tracked by the context.
+
+ The type of object returned by the query.
+ The SQL query string.
+ The parameters to apply to the SQL query string.
+ A object that will execute the query when it is enumerated.
+
+
+
+ Executes the given DDL/DML command against the database.
+
+ The command string.
+ The parameters to apply to the command string.
+ The result returned by the database after executing the command.
+
+
+
+ Returns the connection being used by this context. This may cause the
+ connection to be created if it does not already exist.
+
+ Thrown if the context has been disposed.
+
+
+
+ Returns the as a delegate that can be called with
+ an instance of the that owns this Database object, or returns null if
+ there is no initializer set for this context type.
+
+ The initializer delegate or null.
+
+
+
+ The connection factory to use when creating a from just
+ a database name or a connection string.
+
+
+ This is used when just a database name or connection string is given to or when
+ the no database name or connection is given to DbContext in which case the name of
+ the context class is passed to this factory in order to generate a DbConnection.
+ By default, the instance to use is read from the applications .config
+ file from the "EntityFramework DefaultConnectionFactory" entry in appSettings. If no entry is found in
+ the config file then is used. Setting this property in code
+ always overrides whatever value is found in the config file.
+
+
+
+
+ Checks wether or not the DefaultConnectionFactory has been set to something other than its default value.
+
+
+
+
+
+
+ Common code for generic and non-generic string Include.
+
+
+
+
+
+ Returns a new query where the entities returned will not be cached in the
+ or . This method works by calling the AsNoTracking method of the
+ underlying query object. If the underlying query object does not have a AsNoTracking method,
+ then calling this method will have no affect.
+
+ The element type.
+ The source query.
+ A new query with NoTracking applied, or the source query if NoTracking is not supported.
+
+
+
+ Returns a new query where the entities returned will not be cached in the
+ or . This method works by calling the AsNoTracking method of the
+ underlying query object. If the underlying query object does not have a AsNoTracking method,
+ then calling this method will have no affect.
+
+ The source query.
+ A new query with NoTracking applied, or the source query if NoTracking is not supported.
+
+
+
+ Common code for generic and non-generic AsNoTracking.
+
+
+
+
+ Enumerates the query such that for server queries such as those of , ,
+ , and others the results of the query will be loaded into the associated ,
+ or other cache on the client.
+ This is equivalent to calling ToList and then throwing away the list without the overhead of actually creating the list.
+
+ The source query.
+
+
+
+ Returns an implementation that stays in sync with the given .
+
+ The element type.
+ The collection that the binding list will stay in sync with.
+ The binding list.
+
+
+
+ DbModelBuilder is used to map CLR classes to a database schema.
+ This code centric approach to building an Entity Data Model (EDM) model is known as 'Code First'.
+
+
+ DbModelBuilder is typically used to configure a model by overriding .
+ You can also use DbModelBuilder independently of DbContext to build a model and then construct a
+ or .
+ The recommended approach, however, is to use OnModelCreating in as
+ the workflow is more intuitive and takes care of common tasks, such as caching the created model.
+
+ Types that form your model are registered with DbModelBuilder and optional configuration can be
+ performed by applying data annotations to your classes and/or using the fluent style DbModelBuilder
+ API.
+
+ When the Build method is called a set of conventions are run to discover the initial model.
+ These conventions will automatically discover aspects of the model, such as primary keys, and
+ will also process any data annotations that were specified on your classes. Finally
+ any configuration that was performed using the DbModelBuilder API is applied.
+
+ Configuration done via the DbModelBuilder API takes precedence over data annotations which
+ in turn take precedence over the default conventions.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The process of discovering the initial model will use the set of conventions included
+ in the most recent version of the Entity Framework installed on your machine.
+
+
+ Upgrading to newer versions of the Entity Framework may cause breaking changes
+ in your application because new conventions may cause the initial model to be
+ configured differently. There is an alternate constructor that allows a specific
+ version of conventions to be specified.
+
+
+
+
+ Initializes a new instance of the class that will use
+ a specific set of conventions to discover the initial model.
+
+ The version of conventions to be used.
+
+
+
+ Excludes a type from the model. This is used to remove types from the model that were added
+ by convention during initial model discovery.
+
+ The type to be excluded.
+ The same DbModelBuilder instance so that multiple calls can be chained.
+
+
+
+ Excludes a type(s) from the model. This is used to remove types from the model that were added
+ by convention during initial model discovery.
+
+ The types to be excluded from the model.
+ The same DbModelBuilder instance so that multiple calls can be chained.
+
+
+
+ Registers an entity type as part of the model and returns an object that can be used to
+ configure the entity. This method can be called multiple times for the same entity to
+ perform multiple lines of configuration.
+
+ The type to be registered or configured.
+ The configuration object for the specified entity type.
+
+
+
+ Registers a type as an entity in the model and returns an object that can be used to
+ configure the entity. This method can be called multiple times for the same type to
+ perform multiple lines of configuration.
+
+ The type to be registered or configured.
+ The configuration object for the specified entity type.
+
+
+
+ Registers a type as a complex type in the model and returns an object that can be used to
+ configure the complex type. This method can be called multiple times for the same type to
+ perform multiple lines of configuration.
+
+ The type to be registered or configured.
+ The configuration object for the specified complex type.
+
+
+
+ Creates a based on the configuration performed using this builder.
+ The connection is used to determine the database provider being used as this
+ affects the database layer of the generated model.
+
+ Connection to use to determine provider information.
+ The model that was built.
+
+
+
+ Creates a based on the configuration performed using this builder.
+ Provider information must be specified because this affects the database layer of the generated model.
+ For SqlClient the invariant name is 'System.Data.SqlClient' and the manifest token is the version year (i.e. '2005', '2008' etc.)
+
+ The database provider that the model will be used with.
+ The model that was built.
+
+
+
+ Provides access to the settings of this DbModelBuilder that deal with conventions.
+
+
+
+
+ Gets the for this DbModelBuilder.
+ The registrar allows derived entity and complex type configurations to be registered with this builder.
+
+
+
+
+ A value from this enumeration can be provided directly to the
+ class or can be used in the applied to
+ a class derived from . The value used defines which version of
+ the DbContext and DbModelBuilder conventions should be used when building a model from
+ code--also know as "Code First".
+
+
+ Using DbModelBuilderVersion.Latest ensures that all the latest functionality is available
+ when upgrading to a new release of the Entity Framework. However, it may result in an
+ application behaving differently with the new release than it did with a previous release.
+ This can be avoided by using a specific version of the conventions, but if a version
+ other than the latest is set then not all the latest functionality will be available.
+
+
+
+
+ Indicates that the latest version of the and
+ conventions should be used.
+
+
+
+
+ Indicates that the version of the and
+ conventions shipped with Entity Framework 4.1
+ through 4.3 should be used.
+
+
+
+
+ Indicates that the version of the and
+ conventions shipped with Entity Framework 5.0
+ when targeting .NET 4 should be used.
+
+
+
+
+ Indicates that the version of the and
+ conventions shipped with Entity Framework 5.0
+ when targeting .NET 4.5 should be used.
+
+
+
+
+ This attribute can be applied to a class derived from to set which
+ version of the DbContext and conventions should be used when building
+ a model from code--also know as "Code First". See the
+ enumeration for details about DbModelBuilder versions.
+
+
+ If the attribute is missing from DbContextthen DbContext will always use the latest
+ version of the conventions. This is equivalent to using DbModelBuilderVersion.Latest.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The conventions version to use.
+
+
+
+ Gets the conventions version.
+
+ The conventions version.
+
+
+
+ A non-generic version of which can be used when the type of entity
+ is not known at build time.
+
+
+
+
+ Represents a non-generic LINQ to Entities query against a DbContext.
+
+
+
+
+ An internal interface implemented by and that allows access to
+ the internal query without using reflection.
+
+
+
+
+ The underlying internal set.
+
+
+
+
+ Internal constructor prevents external classes deriving from DbQuery.
+
+
+
+
+ Throws an exception indicating that binding directly to a store query is not supported.
+ Instead populate a DbSet with data, for example by using the Load extension method, and
+ then bind to local data. For WPF bind to DbSet.Local. For Windows Forms bind to
+ DbSet.Local.ToBindingList().
+
+
+ Never returns; always throws.
+
+
+
+
+ Gets the enumeration of this query causing it to be executed against the store.
+
+ An enumerator for the query
+
+
+
+
+ Returns a new query where the entities returned will not be cached in the .
+
+ A new query with NoTracking applied.
+
+
+
+ Returns the equivalent generic object.
+
+ The type of element for which the query was created.
+ The generic set object.
+
+
+
+ Returns a representation of the underlying query.
+
+
+ The query string.
+
+
+
+
+ Returns false .
+
+ false .
+
+
+
+ The IQueryable element type.
+
+
+
+
+ The IQueryable LINQ Expression.
+
+
+
+
+ The IQueryable provider.
+
+
+
+
+ Gets the underlying internal query object.
+
+ The internal query.
+
+
+
+ The internal query object that is backing this DbQuery
+
+
+
+
+ An internal interface implemented by and that allows access to
+ the internal set without using reflection.
+
+
+
+
+ The underlying internal set.
+
+
+
+
+ Internal constructor prevents external classes deriving from DbSet.
+
+
+
+
+ Finds an entity with the given primary key values.
+ If an entity with the given primary key values exists in the context, then it is
+ returned immediately without making a request to the store. Otherwise, a request
+ is made to the store for an entity with the given primary key values and this entity,
+ if found, is attached to the context and returned. If no entity is found in the
+ context or the store, then null is returned.
+
+
+ The ordering of composite key values is as defined in the EDM, which is in turn as defined in
+ the designer, by the Code First fluent API, or by the DataMember attribute.
+
+ The values of the primary key for the entity to be found.
+ The entity found, or null.
+ Thrown if multiple entities exist in the context with the primary key values given.
+ Thrown if the type of entity is not part of the data model for this context.
+ Thrown if the types of the key values do not match the types of the key values for the entity type to be found.
+ Thrown if the context has been disposed.
+
+
+
+ Attaches the given entity to the context underlying the set. That is, the entity is placed
+ into the context in the Unchanged state, just as if it had been read from the database.
+
+ The entity to attach.
+ The entity.
+
+ Attach is used to repopulate a context with an entity that is known to already exist in the database.
+ SaveChanges will therefore not attempt to insert an attached entity into the database because
+ it is assumed to already be there.
+ Note that entities that are already in the context in some other state will have their state set
+ to Unchanged. Attach is a no-op if the entity is already in the context in the Unchanged state.
+
+
+
+
+ Adds the given entity to the context underlying the set in the Added state such that it will
+ be inserted into the database when SaveChanges is called.
+
+ The entity to add.
+ The entity.
+
+ Note that entities that are already in the context in some other state will have their state set
+ to Added. Add is a no-op if the entity is already in the context in the Added state.
+
+
+
+
+ Marks the given entity as Deleted such that it will be deleted from the database when SaveChanges
+ is called. Note that the entity must exist in the context in some other state before this method
+ is called.
+
+ The entity to remove.
+ The entity.
+
+ Note that if the entity exists in the context in the Added state, then this method
+ will cause it to be detached from the context. This is because an Added entity is assumed not to
+ exist in the database such that trying to delete it does not make sense.
+
+
+
+
+ Creates a new instance of an entity for the type of this set.
+ Note that this instance is NOT added or attached to the set.
+ The instance returned will be a proxy if the underlying context is configured to create
+ proxies and the entity type meets the requirements for creating a proxy.
+
+ The entity instance, which may be a proxy.
+
+
+
+ Creates a new instance of an entity for the type of this set or for a type derived
+ from the type of this set.
+ Note that this instance is NOT added or attached to the set.
+ The instance returned will be a proxy if the underlying context is configured to create
+ proxies and the entity type meets the requirements for creating a proxy.
+
+ The entity instance, which may be a proxy.
+
+
+
+ Returns the equivalent generic object.
+
+ The type of entity for which the set was created.
+ The generic set object.
+
+
+
+ Creates a raw SQL query that will return entities in this set. By default, the
+ entities returned are tracked by the context; this can be changed by calling
+ AsNoTracking on the returned.
+ Note that the entities returned are always of the type for this set and never of
+ a derived type. If the table or tables queried may contain data for other entity
+ types, then the SQL query must be written appropriately to ensure that only entities of
+ the correct type are returned.
+
+ The SQL query string.
+ The parameters to apply to the SQL query string.
+ A object that will execute the query when it is enumerated.
+
+
+
+ Gets an that represents a local view of all Added, Unchanged,
+ and Modified entities in this set. This local view will stay in sync as entities are added or
+ removed from the context. Likewise, entities added to or removed from the local view will automatically
+ be added to or removed from the context.
+
+
+ This property can be used for data binding by populating the set with data, for example by using the Load
+ extension method, and then binding to the local data through this property. For WPF bind to this property
+ directly. For Windows Forms bind to the result of calling ToBindingList on this property
+
+ The local view.
+
+
+
+ The internal IQueryable that is backing this DbQuery
+
+
+
+
+ Gets the underlying internal set.
+
+ The internal set.
+
+
+
+ A DbSet represents the collection of all entities in the context, or that can be queried from the
+ database, of a given type. DbSet objects are created from a DbContext using the DbContext.Set method.
+
+
+ Note that DbSet does not support MEST (Multiple Entity Sets per Type) meaning that there is always a
+ one-to-one correlation between a type and a set.
+
+ The type that defines the set.
+
+
+
+ Represents a LINQ to Entities query against a DbContext.
+
+ The type of entity to query for.
+
+
+
+ Creates a new query that will be backed by the given internal query object.
+
+ The backing query.
+
+
+
+
+ Returns a new query where the entities returned will not be cached in the .
+
+ A new query with NoTracking applied.
+
+
+
+ Throws an exception indicating that binding directly to a store query is not supported.
+ Instead populate a DbSet with data, for example by using the Load extension method, and
+ then bind to local data. For WPF bind to DbSet.Local. For Windows Forms bind to
+ DbSet.Local.ToBindingList().
+
+
+ Never returns; always throws.
+
+
+
+
+ Gets the enumeration of this query causing it to be executed against the store.
+
+ An enumerator for the query
+
+
+
+ Gets the enumeration of this query causing it to be executed against the store.
+
+ An enumerator for the query
+
+
+
+ Returns a representation of the underlying query.
+
+
+ The query string.
+
+
+
+
+ Returns a new instance of the non-generic class for this query.
+
+ A non-generic version.
+
+
+
+ Returns false .
+
+ false .
+
+
+
+ The IQueryable element type.
+
+
+
+
+ The IQueryable LINQ Expression.
+
+
+
+
+ The IQueryable provider.
+
+
+
+
+ The internal query object that is backing this DbQuery
+
+
+
+
+ The internal query object that is backing this DbQuery
+
+
+
+
+ An IDbSet represents the collection of all entities in the context, or that can be queried from the
+ database, of a given type. DbSet is a concrete implementation of IDbSet.
+
+ The type that defines the set.
+
+
+
+ Finds an entity with the given primary key values.
+ If an entity with the given primary key values exists in the context, then it is
+ returned immediately without making a request to the store. Otherwise, a request
+ is made to the store for an entity with the given primary key values and this entity,
+ if found, is attached to the context and returned. If no entity is found in the
+ context or the store, then null is returned.
+
+
+ The ordering of composite key values is as defined in the EDM, which is in turn as defined in
+ the designer, by the Code First fluent API, or by the DataMember attribute.
+
+ The values of the primary key for the entity to be found.
+ The entity found, or null.
+
+
+
+ Adds the given entity to the context underlying the set in the Added state such that it will
+ be inserted into the database when SaveChanges is called.
+
+ The entity to add.
+ The entity.
+
+ Note that entities that are already in the context in some other state will have their state set
+ to Added. Add is a no-op if the entity is already in the context in the Added state.
+
+
+
+
+ Marks the given entity as Deleted such that it will be deleted from the database when SaveChanges
+ is called. Note that the entity must exist in the context in some other state before this method
+ is called.
+
+ The entity to remove.
+ The entity.
+
+ Note that if the entity exists in the context in the Added state, then this method
+ will cause it to be detached from the context. This is because an Added entity is assumed not to
+ exist in the database such that trying to delete it does not make sense.
+
+
+
+
+ Attaches the given entity to the context underlying the set. That is, the entity is placed
+ into the context in the Unchanged state, just as if it had been read from the database.
+
+ The entity to attach.
+ The entity.
+
+ Attach is used to repopulate a context with an entity that is known to already exist in the database.
+ SaveChanges will therefore not attempt to insert an attached entity into the database because
+ it is assumed to already be there.
+ Note that entities that are already in the context in some other state will have their state set
+ to Unchanged. Attach is a no-op if the entity is already in the context in the Unchanged state.
+
+
+
+
+ Creates a new instance of an entity for the type of this set.
+ Note that this instance is NOT added or attached to the set.
+ The instance returned will be a proxy if the underlying context is configured to create
+ proxies and the entity type meets the requirements for creating a proxy.
+
+ The entity instance, which may be a proxy.
+
+
+
+ Creates a new instance of an entity for the type of this set or for a type derived
+ from the type of this set.
+ Note that this instance is NOT added or attached to the set.
+ The instance returned will be a proxy if the underlying context is configured to create
+ proxies and the entity type meets the requirements for creating a proxy.
+
+ The type of entity to create.
+ The entity instance, which may be a proxy.
+
+
+
+ Gets an that represents a local view of all Added, Unchanged,
+ and Modified entities in this set. This local view will stay in sync as entities are added or
+ removed from the context. Likewise, entities added to or removed from the local view will automatically
+ be added to or removed from the context.
+
+
+ This property can be used for data binding by populating the set with data, for example by using the Load
+ extension method, and then binding to the local data through this property. For WPF bind to this property
+ directly. For Windows Forms bind to the result of calling ToBindingList on this property
+
+ The local view.
+
+
+
+ Creates a new set that will be backed by the given .
+
+ The internal set.
+
+
+
+ Finds an entity with the given primary key values.
+ If an entity with the given primary key values exists in the context, then it is
+ returned immediately without making a request to the store. Otherwise, a request
+ is made to the store for an entity with the given primary key values and this entity,
+ if found, is attached to the context and returned. If no entity is found in the
+ context or the store, then null is returned.
+
+
+ The ordering of composite key values is as defined in the EDM, which is in turn as defined in
+ the designer, by the Code First fluent API, or by the DataMember attribute.
+
+ The values of the primary key for the entity to be found.
+ The entity found, or null.
+ Thrown if multiple entities exist in the context with the primary key values given.
+ Thrown if the type of entity is not part of the data model for this context.
+ Thrown if the types of the key values do not match the types of the key values for the entity type to be found.
+ Thrown if the context has been disposed.
+
+
+
+ Attaches the given entity to the context underlying the set. That is, the entity is placed
+ into the context in the Unchanged state, just as if it had been read from the database.
+
+ The entity to attach.
+ The entity.
+
+ Attach is used to repopulate a context with an entity that is known to already exist in the database.
+ SaveChanges will therefore not attempt to insert an attached entity into the database because
+ it is assumed to already be there.
+ Note that entities that are already in the context in some other state will have their state set
+ to Unchanged. Attach is a no-op if the entity is already in the context in the Unchanged state.
+
+
+
+
+ Adds the given entity to the context underlying the set in the Added state such that it will
+ be inserted into the database when SaveChanges is called.
+
+ The entity to add.
+ The entity.
+
+ Note that entities that are already in the context in some other state will have their state set
+ to Added. Add is a no-op if the entity is already in the context in the Added state.
+
+
+
+
+ Marks the given entity as Deleted such that it will be deleted from the database when SaveChanges
+ is called. Note that the entity must exist in the context in some other state before this method
+ is called.
+
+ The entity to remove.
+ The entity.
+
+ Note that if the entity exists in the context in the Added state, then this method
+ will cause it to be detached from the context. This is because an Added entity is assumed not to
+ exist in the database such that trying to delete it does not make sense.
+
+
+
+
+ Creates a new instance of an entity for the type of this set.
+ Note that this instance is NOT added or attached to the set.
+ The instance returned will be a proxy if the underlying context is configured to create
+ proxies and the entity type meets the requirements for creating a proxy.
+
+ The entity instance, which may be a proxy.
+
+
+
+ Creates a new instance of an entity for the type of this set or for a type derived
+ from the type of this set.
+ Note that this instance is NOT added or attached to the set.
+ The instance returned will be a proxy if the underlying context is configured to create
+ proxies and the entity type meets the requirements for creating a proxy.
+
+ The type of entity to create.
+ The entity instance, which may be a proxy.
+
+
+
+ Returns the equivalent non-generic object.
+
+ The non-generic set object.
+
+
+
+ Creates a raw SQL query that will return entities in this set. By default, the
+ entities returned are tracked by the context; this can be changed by calling
+ AsNoTracking on the returned.
+ Note that the entities returned are always of the type for this set and never of
+ a derived type. If the table or tables queried may contain data for other entity
+ types, then the SQL query must be written appropriately to ensure that only entities of
+ the correct type are returned.
+
+ The SQL query string.
+ The parameters to apply to the SQL query string.
+ A object that will execute the query when it is enumerated.
+
+
+
+ Gets an that represents a local view of all Added, Unchanged,
+ and Modified entities in this set. This local view will stay in sync as entities are added or
+ removed from the context. Likewise, entities added to or removed from the local view will automatically
+ be added to or removed from the context.
+
+
+ This property can be used for data binding by populating the set with data, for example by using the Load
+ extension method, and then binding to the local data through this property. For WPF bind to this property
+ directly. For Windows Forms bind to the result of calling ToBindingList on this property
+
+ The local view.
+
+
+
+ The internal IQueryable that is backing this DbQuery
+
+
+
+
+ An implementation of IDatabaseInitializer that will always recreate and optionally re-seed the
+ database the first time that a context is used in the app domain.
+ To seed the database, create a derived class and override the Seed method.
+
+ The type of the context.
+
+
+
+ Executes the strategy to initialize the database for the given context.
+
+ The context.
+
+
+
+ A that should be overridden to actually add data to the context for seeding.
+ The default implementation does nothing.
+
+ The context to seed.
+
+
+
+ An implementation of IDatabaseInitializer that will DELETE , recreate, and optionally re-seed the
+ database only if the model has changed since the database was created.
+
+
+ Whether or not the model has changed is determined by the
+ method.
+ To seed the database create a derived class and override the Seed method.
+
+
+
+
+ Executes the strategy to initialize the database for the given context.
+
+ The context.
+
+
+
+ A that should be overridden to actually add data to the context for seeding.
+ The default implementation does nothing.
+
+ The context to seed.
+
+
+
+ Returned by the ChangeTracker method of to provide access to features of
+ the context that are related to change tracking of entities.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal context.
+
+
+
+ Gets objects for all the entities tracked by this context.
+
+ The entries.
+
+
+
+ Gets objects for all the entities of the given type
+ tracked by this context.
+
+ The type of the entity.
+ The entries.
+
+
+
+ Detects changes made to the properties and relationships of POCO entities. Note that some types of
+ entity (such as change tracking proxies and entities that derive from )
+ report changes automatically and a call to DetectChanges is not normally needed for these types of entities.
+ Also note that normally DetectChanges is called automatically by many of the methods of
+ and its related classes such that it is rare that this method will need to be called explicitly.
+ However, it may be desirable, usually for performance reasons, to turn off this automatic calling of
+ DetectChanges using the AutoDetectChangesEnabled flag from .
+
+
+
+
+ A non-generic version of the class.
+
+
+
+
+ This is an abstract base class use to represent a scalar or complex property, or a navigation property
+ of an entity. Scalar and complex properties use the derived class ,
+ reference navigation properties use the derived class , and collection
+ navigation properties use the derived class .
+
+
+
+
+ Creates a from information in the given .
+ This method will create an instance of the appropriate subclass depending on the metadata contained
+ in the InternalMemberEntry instance.
+
+ The internal member entry.
+ The new entry.
+
+
+
+ Validates this property.
+
+
+ Collection of objects. Never null. If the entity is valid the collection will be empty.
+
+
+
+
+ Returns the equivalent generic object.
+
+ The type of entity on which the member is declared.
+ The type of the property.
+ The equivalent generic object.
+
+
+
+ Gets the name of the property.
+
+ The property name.
+
+
+
+ Gets or sets the current value of this property.
+
+ The current value.
+
+
+
+ The to which this member belongs.
+
+ An entry for the entity that owns this member.
+
+
+
+ Gets the backing this object.
+
+ The internal member entry.
+
+
+
+ Creates a from information in the given .
+ Use this method in preference to the constructor since it may potentially create a subclass depending on
+ the type of member represented by the InternalCollectionEntry instance.
+
+ The internal collection entry.
+ The new entry.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+
+
+
+ Loads the collection of entities from the database.
+ Note that entities that already exist in the context are not overwritten with values from the database.
+
+
+
+
+ Returns the query that would be used to load this collection from the database.
+ The returned query can be modified using LINQ to perform filtering or operations in the database, such
+ as counting the number of entities in the collection in the database without actually loading them.
+
+ A query for the collection.
+
+
+
+ Returns the equivalent generic object.
+
+ The type of entity on which the member is declared.
+ The type of the collection element.
+ The equivalent generic object.
+
+
+
+ Gets the property name.
+
+ The property name.
+
+
+
+ Gets or sets the current value of the navigation property. The current value is
+ the entity that the navigation property references.
+
+ The current value.
+
+
+
+ Gets a value indicating whether the collection of entities has been loaded from the database.
+
+ true if the collection is loaded; otherwise, false .
+
+
+
+ The to which this navigation property belongs.
+
+ An entry for the entity that owns this navigation property.
+
+
+
+ Gets the backing this object as an .
+
+ The internal member entry.
+
+
+
+ Instances of this class are returned from the Collection method of
+ and allow operations such as loading to
+ be performed on the an entity's collection navigation properties.
+
+ The type of the entity to which this property belongs.
+ The type of the element in the collection of entities.
+
+
+
+ This is an abstract base class use to represent a scalar or complex property, or a navigation property
+ of an entity. Scalar and complex properties use the derived class ,
+ reference navigation properties use the derived class , and collection
+ navigation properties use the derived class .
+
+ The type of the entity to which this property belongs.
+ The type of the property.
+
+
+
+ Creates a from information in the given .
+ This method will create an instance of the appropriate subclass depending on the metadata contained
+ in the InternalMemberEntry instance.
+
+ The internal member entry.
+ The new entry.
+
+
+
+ Returns a new instance of the non-generic class for
+ the property represented by this object.
+
+ A non-generic version.
+
+
+
+ Validates this property.
+
+
+ Collection of objects. Never null. If the entity is valid the collection will be empty.
+
+
+
+
+ Gets or sets the current value of this property.
+
+ The current value.
+
+
+
+ Gets the underlying .
+
+ The internal member entry.
+
+
+
+ The to which this member belongs.
+
+ An entry for the entity that owns this member.
+
+
+
+ Creates a from information in the given .
+ Use this method in preference to the constructor since it may potentially create a subclass depending on
+ the type of member represented by the InternalCollectionEntry instance.
+
+ The internal collection entry.
+ The new entry.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+
+
+
+ Loads the collection of entities from the database.
+ Note that entities that already exist in the context are not overwritten with values from the database.
+
+
+
+
+ Returns the query that would be used to load this collection from the database.
+ The returned query can be modified using LINQ to perform filtering or operations in the database, such
+ as counting the number of entities in the collection in the database without actually loading them.
+
+ A query for the collection.
+
+
+
+ Returns a new instance of the non-generic class for
+ the navigation property represented by this object.
+
+ A non-generic version.
+
+
+
+ Gets the property name.
+
+ The property name.
+
+
+
+ Gets or sets the current value of the navigation property. The current value is
+ the entity that the navigation property references.
+
+ The current value.
+
+
+
+ Gets a value indicating whether the collection of entities has been loaded from the database.
+
+ true if the collection is loaded; otherwise, false .
+
+
+
+ Gets the underlying as an .
+
+ The internal member entry.
+
+
+
+ The to which this navigation property belongs.
+
+ An entry for the entity that owns this navigation property.
+
+
+
+ An immutable representation of an Entity Data Model (EDM) model that can be used to create an
+ or can be passed to the constructor of a .
+ For increased performance, instances of this type should be cached and re-used to construct contexts.
+
+
+
+
+ For mocking.
+
+
+
+
+ Creates a model for the given EDM metadata model.
+
+ The EDM metadata model.
+
+
+
+ Creates an instance of ObjectContext or class derived from ObjectContext. Note that an instance
+ of DbContext can be created instead by using the appropriate DbContext constructor.
+ If a derived ObjectContext is used, then it must have a public constructor with a single
+ EntityConnection parameter.
+ The connection passed is used by the ObjectContext created, but is not owned by the context. The caller
+ must dispose of the connection once the context has been disposed.
+
+ The type of context to create.
+ An existing connection to a database for use by the context.
+
+
+
+
+ Gets a cached delegate (or creates a new one) used to call the constructor for the given derived ObjectContext type.
+
+
+
+
+ A snapshot of the that was used to create this compiled model.
+
+
+
+
+ The provider info (provider name and manifest token) that was used to create this model.
+
+
+
+
+ A non-generic version of the class.
+
+
+
+
+ A non-generic version of the class.
+
+
+
+
+ Creates a from information in the given .
+ Use this method in preference to the constructor since it may potentially create a subclass depending on
+ the type of member represented by the InternalCollectionEntry instance.
+
+ The internal property entry.
+ The new entry.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+
+
+
+ Returns the equivalent generic object.
+
+ The type of entity on which the member is declared.
+ The type of the property.
+ The equivalent generic object.
+
+
+
+ Gets the property name.
+
+ The property name.
+
+
+
+ Gets or sets the original value of this property.
+
+ The original value.
+
+
+
+ Gets or sets the current value of this property.
+
+ The current value.
+
+
+
+ Gets or sets a value indicating whether the value of this property has been modified since
+ it was loaded from the database.
+
+
+ Setting this value to false for a modified property will revert the change by setting the
+ current value to the original value. If the result is that no properties of the entity are
+ marked as modified, then the entity will be marked as Unchanged.
+ Setting this value to false for properties of Added, Unchanged, or Deleted entities
+ is a no-op.
+
+
+ true if this instance is modified; otherwise, false .
+
+
+
+
+ The to which this property belongs.
+
+ An entry for the entity that owns this property.
+
+
+
+ The of the property for which this is a nested property.
+ This method will only return a non-null entry for properties of complex objects; it will
+ return null for properties of the entity itself.
+
+ An entry for the parent complex property, or null if this is an entity property.
+
+
+
+ Gets the backing this object.
+
+ The internal member entry.
+
+
+
+ Creates a from information in the given .
+ Use this method in preference to the constructor since it may potentially create a subclass depending on
+ the type of member represented by the InternalCollectionEntry instance.
+
+ The internal property entry.
+ The new entry.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+
+
+
+ Gets an object that represents a nested property of this property.
+ This method can be used for both scalar or complex properties.
+
+ The name of the nested property.
+ An object representing the nested property.
+
+
+
+ Gets an object that represents a nested complex property of this property.
+
+ The name of the nested property.
+ An object representing the nested property.
+
+
+
+ Returns the equivalent generic object.
+
+ The type of entity on which the member is declared.
+ The type of the complex property.
+ The equivalent generic object.
+
+
+
+ Instances of this class are returned from the ComplexProperty method of
+ and allow access to the state of a complex property.
+
+ The type of the entity to which this property belongs.
+ The type of the property.
+
+
+
+ Instances of this class are returned from the Property method of
+ and allow access to the state of the scalar
+ or complex property.
+
+ The type of the entity to which this property belongs.
+ The type of the property.
+
+
+
+ Creates a from information in the given .
+ Use this method in preference to the constructor since it may potentially create a subclass depending on
+ the type of member represented by the InternalCollectionEntry instance.
+
+ The internal property entry.
+ The new entry.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+
+
+
+ Returns a new instance of the non-generic class for
+ the property represented by this object.
+
+ A non-generic version.
+
+
+
+ Gets the property name.
+
+ The property name.
+
+
+
+ Gets or sets the original value of this property.
+
+ The original value.
+
+
+
+ Gets or sets the current value of this property.
+
+ The current value.
+
+
+
+ Gets or sets a value indicating whether the value of this property has been modified since
+ it was loaded from the database.
+
+
+ true if this instance is modified; otherwise, false .
+
+
+
+
+ The to which this property belongs.
+
+ An entry for the entity that owns this property.
+
+
+
+ The of the property for which this is a nested property.
+ This method will only return a non-null entry for properties of complex objects; it will
+ return null for properties of the entity itself.
+
+ An entry for the parent complex property, or null if this is an entity property.
+
+
+
+ Gets the underlying as an .
+
+ The internal member entry.
+
+
+
+ Creates a from information in the given .
+ Use this method in preference to the constructor since it may potentially create a subclass depending on
+ the type of member represented by the InternalCollectionEntry instance.
+
+ The internal property entry.
+ The new entry.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+
+
+
+ Returns a new instance of the non-generic class for
+ the property represented by this object.
+
+ A non-generic version.
+
+
+
+ Gets an object that represents a nested property of this property.
+ This method can be used for both scalar or complex properties.
+
+ The name of the nested property.
+ An object representing the nested property.
+
+
+
+ Gets an object that represents a nested property of this property.
+ This method can be used for both scalar or complex properties.
+
+ The type of the nested property.
+ The name of the nested property.
+ An object representing the nested property.
+
+
+
+ Gets an object that represents a nested property of this property.
+ This method can be used for both scalar or complex properties.
+
+ The type of the nested property.
+ An expression representing the nested property.
+ An object representing the nested property.
+
+
+
+ Gets an object that represents a nested complex property of this property.
+
+ The name of the nested property.
+ An object representing the nested property.
+
+
+
+ Gets an object that represents a nested complex property of this property.
+
+ The type of the nested property.
+ The name of the nested property.
+ An object representing the nested property.
+
+
+
+ Gets an object that represents a nested complex property of this property.
+
+ The type of the nested property.
+ An expression representing the nested property.
+ An object representing the nested property.
+
+
+
+ Describes the origin of the database connection string associated with a .
+
+
+
+
+ The connection string was created by convention.
+
+
+
+
+ The connection string was read from external configuration.
+
+
+
+
+ The connection string was explicitly specified at runtime.
+
+
+
+
+ The connection string was overriden by connection information supplied to DbContextInfo.
+
+
+
+
+ Returned by the Configuration method of to provide access to configuration
+ options for the context.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal context.
+
+
+
+ Gets or sets a value indicating whether lazy loading of relationships exposed as
+ navigation properties is enabled. Lazy loading is enabled by default.
+
+ true if lazy loading is enabled; otherwise, false .
+
+
+
+ Gets or sets a value indicating whether or not the framework will create instances of
+ dynamically generated proxy classes whenever it creates an instance of an entity type.
+ Note that even if proxy creation is enabled with this flag, proxy instances will only
+ be created for entity types that meet the requirements for being proxied.
+ Proxy creation is enabled by default.
+
+ true if proxy creation is enabled; otherwise, false .
+
+
+
+
+ Gets or sets a value indicating whether tracked entities should be validated automatically when
+ is invoked.
+ The default value is true.
+
+
+
+
+ Provides runtime information about a given type.
+
+
+
+
+ Creates a new instance representing a given type.
+
+ The type deriving from .
+
+
+
+ Creates a new instance representing a given targeting a specific database.
+
+ The type deriving from .
+ Connection information for the database to be used.
+
+
+
+ Creates a new instance representing a given type. An external list of
+ connection strings can be supplied and will be used during connection string resolution in place
+ of any connection strings specified in external configuration files.
+
+
+ It is preferable to use the constructor that accepts the entire config document instead of using this
+ constructor. Providing the entire config document allows DefaultConnectionFactroy entries in the config
+ to be found in addition to explicitly specified connection strings.
+
+ The type deriving from .
+ A collection of connection strings.
+
+
+
+ Creates a new instance representing a given type. An external config
+ object (e.g. app.config or web.config) can be supplied and will be used during connection string
+ resolution. This includes looking for connection strings and DefaultConnectionFactory entries.
+
+ The type deriving from .
+ An object representing the config file.
+
+
+
+ Creates a new instance representing a given , targeting a specific database.
+ An external config object (e.g. app.config or web.config) can be supplied and will be used during connection string
+ resolution. This includes looking for connection strings and DefaultConnectionFactory entries.
+
+ The type deriving from .
+ An object representing the config file.
+ Connection information for the database to be used.
+
+
+
+ Creates a new instance representing a given type. A
+ can be supplied in order to override the default determined provider used when constructing
+ the underlying EDM model.
+
+ The type deriving from .
+ A specifying the underlying ADO.NET provider to target.
+
+
+
+ Creates a new instance representing a given type. An external config
+ object (e.g. app.config or web.config) can be supplied and will be used during connection string
+ resolution. This includes looking for connection strings and DefaultConnectionFactory entries.
+ A can be supplied in order to override the default determined
+ provider used when constructing the underlying EDM model. This can be useful to prevent EF from
+ connecting to discover a manifest token.
+
+ The type deriving from .
+ An object representing the config file.
+ A specifying the underlying ADO.NET provider to target.
+
+
+
+ Called internally when a context info is needed for an existing context, which may not be constructable.
+
+ The context instance to get info from.
+
+
+
+ If instances of the underlying type can be created, returns
+ a new instance; otherwise returns null.
+
+ A instance.
+
+
+
+ The concrete type.
+
+
+
+
+ Whether or not instances of the underlying type can be created.
+
+
+
+
+ The connection string used by the underlying type.
+
+
+
+
+ The connection string name used by the underlying type.
+
+
+
+
+ The ADO.NET provider name of the connection used by the underlying type.
+
+
+
+
+ The origin of the connection string used by the underlying type.
+
+
+
+
+ An action to be run on the DbModelBuilder after OnModelCreating has been run on the context.
+
+
+
+
+ A non-generic version of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+
+
+
+ Queries the database for copies of the values of the tracked entity as they currently exist in the database.
+ Note that changing the values in the returned dictionary will not update the values in the database.
+ If the entity is not found in the database then null is returned.
+
+ The store values.
+
+
+
+ Reloads the entity from the database overwriting any property values with values from the database.
+ The entity will be in the Unchanged state after calling this method.
+
+
+
+
+ Gets an object that represents the reference (i.e. non-collection) navigation property from this
+ entity to another entity.
+
+ The name of the navigation property.
+ An object representing the navigation property.
+
+
+
+ Gets an object that represents the collection navigation property from this
+ entity to a collection of related entities.
+
+ The name of the navigation property.
+ An object representing the navigation property.
+
+
+
+ Gets an object that represents a scalar or complex property of this entity.
+
+ The name of the property.
+ An object representing the property.
+
+
+
+ Gets an object that represents a complex property of this entity.
+
+ The name of the complex property.
+ An object representing the complex property.
+
+
+
+ Gets an object that represents a member of the entity. The runtime type of the returned object will
+ vary depending on what kind of member is asked for. The currently supported member types and their return
+ types are:
+ Reference navigation property: .
+ Collection navigation property: .
+ Primitive/scalar property: .
+ Complex property: .
+
+ The name of the member.
+ An object representing the member.
+
+
+
+ Returns a new instance of the generic class for the given
+ generic type for the tracked entity represented by this object.
+ Note that the type of the tracked entity must be compatible with the generic type or
+ an exception will be thrown.
+
+ The type of the entity.
+ A generic version.
+
+
+
+ Validates this instance and returns validation result.
+
+
+ Entity validation result. Possibly null if
+ method is overridden.
+
+
+
+
+ Determines whether the specified is equal to this instance.
+ Two instances are considered equal if they are both entries for
+ the same entity on the same .
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false .
+
+
+
+
+ Determines whether the specified is equal to this instance.
+ Two instances are considered equal if they are both entries for
+ the same entity on the same .
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false .
+
+
+
+
+ Returns a hash code for this instance.
+
+
+ A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
+
+
+
+
+ Gets the entity.
+
+ The entity.
+
+
+
+ Gets or sets the state of the entity.
+
+ The state.
+
+
+
+ Gets the current property values for the tracked entity represented by this object.
+
+ The current values.
+
+
+
+ Gets the original property values for the tracked entity represented by this object.
+ The original values are usually the entity's property values as they were when last queried from
+ the database.
+
+ The original values.
+
+
+
+ Gets InternalEntityEntry object for this DbEntityEntry instance.
+
+
+
+
+ Instances of this class provide access to information about and control of entities that
+ are being tracked by the . Use the Entity or Entities methods of
+ the context to obtain objects of this type.
+
+ The type of the entity.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+
+
+
+ Queries the database for copies of the values of the tracked entity as they currently exist in the database.
+ Note that changing the values in the returned dictionary will not update the values in the database.
+ If the entity is not found in the database then null is returned.
+
+ The store values.
+
+
+
+ Reloads the entity from the database overwriting any property values with values from the database.
+ The entity will be in the Unchanged state after calling this method.
+
+
+
+
+ Gets an object that represents the reference (i.e. non-collection) navigation property from this
+ entity to another entity.
+
+ The name of the navigation property.
+ An object representing the navigation property.
+
+
+
+ Gets an object that represents the reference (i.e. non-collection) navigation property from this
+ entity to another entity.
+
+ The type of the property.
+ The name of the navigation property.
+ An object representing the navigation property.
+
+
+
+ Gets an object that represents the reference (i.e. non-collection) navigation property from this
+ entity to another entity.
+
+ The type of the property.
+ An expression representing the navigation property.
+ An object representing the navigation property.
+
+
+
+ Gets an object that represents the collection navigation property from this
+ entity to a collection of related entities.
+
+ The name of the navigation property.
+ An object representing the navigation property.
+
+
+
+ Gets an object that represents the collection navigation property from this
+ entity to a collection of related entities.
+
+ The type of elements in the collection.
+ The name of the navigation property.
+ An object representing the navigation property.
+
+
+
+ Gets an object that represents the collection navigation property from this
+ entity to a collection of related entities.
+
+ The type of elements in the collection.
+ An expression representing the navigation property.
+ An object representing the navigation property.
+
+
+
+ Gets an object that represents a scalar or complex property of this entity.
+
+ The name of the property.
+ An object representing the property.
+
+
+
+ Gets an object that represents a scalar or complex property of this entity.
+
+ The type of the property.
+ The name of the property.
+ An object representing the property.
+
+
+
+ Gets an object that represents a scalar or complex property of this entity.
+
+ The type of the property.
+ An expression representing the property.
+ An object representing the property.
+
+
+
+ Gets an object that represents a complex property of this entity.
+
+ The name of the complex property.
+ An object representing the complex property.
+
+
+
+ Gets an object that represents a complex property of this entity.
+
+ The type of the complex property.
+ The name of the complex property.
+ An object representing the complex property.
+
+
+
+ Gets an object that represents a complex property of this entity.
+
+ The type of the complex property.
+ An expression representing the complex property.
+ An object representing the complex property.
+
+
+
+ Gets an object that represents a member of the entity. The runtime type of the returned object will
+ vary depending on what kind of member is asked for. The currently supported member types and their return
+ types are:
+ Reference navigation property: .
+ Collection navigation property: .
+ Primitive/scalar property: .
+ Complex property: .
+
+ The name of the member.
+ An object representing the member.
+
+
+
+ Gets an object that represents a member of the entity. The runtime type of the returned object will
+ vary depending on what kind of member is asked for. The currently supported member types and their return
+ types are:
+ Reference navigation property: .
+ Collection navigation property: .
+ Primitive/scalar property: .
+ Complex property: .
+
+ The type of the member.
+ The name of the member.
+ An object representing the member.
+
+
+
+ Returns a new instance of the non-generic class for
+ the tracked entity represented by this object.
+
+ A non-generic version.
+
+
+
+ Validates this instance and returns validation result.
+
+
+ Entity validation result. Possibly null if
+ method is overridden.
+
+
+
+
+ Determines whether the specified is equal to this instance.
+ Two instances are considered equal if they are both entries for
+ the same entity on the same .
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false .
+
+
+
+
+ Determines whether the specified is equal to this instance.
+ Two instances are considered equal if they are both entries for
+ the same entity on the same .
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false .
+
+
+
+
+ Returns a hash code for this instance.
+
+
+ A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
+
+
+
+
+ Gets the entity.
+
+ The entity.
+
+
+
+ Gets or sets the state of the entity.
+
+ The state.
+
+
+
+ Gets the current property values for the tracked entity represented by this object.
+
+ The current values.
+
+
+
+ Gets the original property values for the tracked entity represented by this object.
+ The original values are usually the entity's property values as they were when last queried from
+ the database.
+
+ The original values.
+
+
+
+ Represents an Entity Data Model (EDM) created by the .
+ The Compile method can be used to go from this EDM representation to a
+ which is a compiled snapshot of the model suitable for caching and creation of
+ or instances.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Creates a for this mode which is a compiled snapshot
+ suitable for caching and creation of instances.
+
+ The compiled model.
+
+
+
+ A snapshot of the that was used to create this compiled model.
+
+
+
+
+ A collection of all the properties for an underlying entity or complex object.
+
+
+ An instance of this class can be converted to an instance of the generic class
+ using the Cast method.
+ Complex properties in the underlying entity or complex object are represented in
+ the property values as nested instances of this class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal dictionary.
+
+
+
+ Creates an object of the underlying type for this dictionary and hydrates it with property
+ values from this dictionary.
+
+ The properties of this dictionary copied into a new object.
+
+
+
+ Sets the values of this dictionary by reading values out of the given object.
+ The given object can be of any type. Any property on the object with a name that
+ matches a property name in the dictionary and can be read will be read. Other
+ properties will be ignored. This allows, for example, copying of properties from
+ simple Data Transfer Objects (DTOs).
+
+ The object to read values from.
+
+
+
+ Creates a new dictionary containing copies of all the properties in this dictionary.
+ Changes made to the new dictionary will not be reflected in this dictionary and vice versa.
+
+ A clone of this dictionary.
+
+
+
+ Sets the values of this dictionary by reading values from another dictionary.
+ The other dictionary must be based on the same type as this dictionary, or a type derived
+ from the type for this dictionary.
+
+ The dictionary to read values from.
+
+
+
+ Gets the value of the property just like using the indexed property getter but
+ typed to the type of the generic parameter. This is useful especially with
+ nested dictionaries to avoid writing expressions with lots of casts.
+
+ The type of the property.
+ Name of the property.
+ The value of the property.
+
+
+
+ Gets the set of names of all properties in this dictionary as a read-only set.
+
+ The property names.
+
+
+
+ Gets or sets the value of the property with the specified property name.
+ The value may be a nested instance of this class.
+
+ The property name.
+ The value of the property.
+
+
+
+ Gets the internal dictionary.
+
+ The internal dictionary.
+
+
+
+ A non-generic version of the class.
+
+
+
+
+ Creates a from information in the given .
+ Use this method in preference to the constructor since it may potentially create a subclass depending on
+ the type of member represented by the InternalCollectionEntry instance.
+
+ The internal reference entry.
+ The new entry.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+
+
+
+ Loads the entity from the database.
+ Note that if the entity already exists in the context, then it will not overwritten with values from the database.
+
+
+
+
+ Returns the query that would be used to load this entity from the database.
+ The returned query can be modified using LINQ to perform filtering or operations in the database.
+
+ A query for the entity.
+
+
+
+ Returns the equivalent generic object.
+
+ The type of entity on which the member is declared.
+ The type of the property.
+ The equivalent generic object.
+
+
+
+ Gets the property name.
+
+ The property name.
+
+
+
+ Gets or sets the current value of the navigation property. The current value is
+ the entity that the navigation property references.
+
+ The current value.
+
+
+
+ Gets a value indicating whether the entity has been loaded from the database.
+
+ true if the entity is loaded; otherwise, false .
+
+
+
+ The to which this navigation property belongs.
+
+ An entry for the entity that owns this navigation property.
+
+
+
+ Gets the backing this object as an .
+
+ The internal member entry.
+
+
+
+ Instances of this class are returned from the Reference method of
+ and allow operations such as loading to
+ be performed on the an entity's reference navigation properties.
+
+ The type of the entity to which this property belongs.
+ The type of the property.
+
+
+
+ Creates a from information in the given .
+ Use this method in preference to the constructor since it may potentially create a subclass depending on
+ the type of member represented by the InternalCollectionEntry instance.
+
+ The internal reference entry.
+ The new entry.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+
+
+
+ Loads the entity from the database.
+ Note that if the entity already exists in the context, then it will not overwritten with values from the database.
+
+
+
+
+ Returns the query that would be used to load this entity from the database.
+ The returned query can be modified using LINQ to perform filtering or operations in the database.
+
+ A query for the entity.
+
+
+
+ Returns a new instance of the non-generic class for
+ the navigation property represented by this object.
+
+ A non-generic version.
+
+
+
+ Gets the property name.
+
+ The property name.
+
+
+
+ Gets or sets the current value of the navigation property. The current value is
+ the entity that the navigation property references.
+
+ The current value.
+
+
+
+ Gets a value indicating whether the entity has been loaded from the database.
+
+ true if the entity is loaded; otherwise, false .
+
+
+
+ Gets the underlying as an .
+
+ The internal member entry.
+
+
+
+ The to which this navigation property belongs.
+
+ An entry for the entity that owns this navigation property.
+
+
+
+ Represents a SQL query for entities that is created from a
+ and is executed using the connection from that context.
+ Instances of this class are obtained from the instance for the
+ entity type. The query is not executed when this object is created; it is executed
+ each time it is enumerated, for example by using foreach.
+ SQL queries for non-entities are created using the .
+ See for a generic version of this class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal query.
+
+
+
+ Executes the query and returns an enumerator for the elements.
+
+
+ An object that can be used to iterate through the elements.
+
+
+
+
+ Returns a new query where the results of the query will not be tracked by the associated
+ .
+
+ A new query with no-tracking applied.
+
+
+
+ Returns a that contains the SQL string that was set
+ when the query was created. The parameters are not included.
+
+
+ A that represents this instance.
+
+
+
+
+ Throws an exception indicating that binding directly to a store query is not supported.
+
+
+ Never returns; always throws.
+
+
+
+
+ Gets the internal query.
+
+ The internal query.
+
+
+
+ Returns false .
+
+ false .
+
+
+
+ Represents a SQL query for entities that is created from a
+ and is executed using the connection from that context.
+ Instances of this class are obtained from the instance for the
+ entity type. The query is not executed when this object is created; it is executed
+ each time it is enumerated, for example by using foreach.
+ SQL queries for non-entities are created using the .
+ See for a non-generic version of this class.
+
+
+
+
+ Executes the query and returns an enumerator for the elements.
+
+ An
+
+ object that can be used to iterate through the elements.
+
+
+
+ Executes the query and returns an enumerator for the elements.
+
+
+ An object that can be used to iterate through the elements.
+
+
+
+
+ Returns a new query where the results of the query will not be tracked by the associated
+ .
+
+ A new query with no-tracking applied.
+
+
+
+ Returns a that contains the SQL string that was set
+ when the query was created. The parameters are not included.
+
+
+ A that represents this instance.
+
+
+
+
+ Throws an exception indicating that binding directly to a store query is not supported.
+
+
+ Never returns; always throws.
+
+
+
+
+ Gets the internal query.
+
+ The internal query.
+
+
+
+ Returns false .
+
+ false .
+
+
+
+ Exception thrown by when it was expected that SaveChanges for an entity would
+ result in a database update but in fact no rows in the database were affected. This usually indicates
+ that the database has been concurrently updated such that a concurrency token that was expected to match
+ did not actually match.
+ Note that state entries referenced by this exception are not serialized due to security and accesses to
+ the state entries after serialization will return null.
+
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal context.
+ The inner exception.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The message.
+
+
+
+ Initializes a new instance of the class.
+
+ The message.
+ The inner exception.
+
+
+
+ Subscribes the SerializeObjectState event.
+
+
+
+
+ Gets objects that represents the entities that could not
+ be saved to the database.
+
+ The entries representing the entities that could not be saved.
+
+
+
+ Holds exception state that will be serialized when the exception is serialized.
+
+
+
+
+ Completes the deserialization.
+
+ The deserialized object.
+
+
+
+ Gets or sets a value indicating whether the exception involved independent associations.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The context.
+ The inner exception.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The message.
+
+
+
+ Initializes a new instance of the class.
+
+ The message.
+ The inner exception.
+
+
+
+ Represents an entity used to store metadata about an EDM in the database.
+
+
+
+
+ Attempts to get the model hash calculated by Code First for the given context.
+ This method will return null if the context is not being used in Code First mode.
+
+ The context.
+ The hash string.
+
+
+
+ Gets or sets the ID of the metadata entity, which is currently always 1.
+
+ The id.
+
+
+
+ Gets or sets the model hash which is used to check whether the model has
+ changed since the database was created from it.
+
+ The model hash.
+
+
+
+ Contains methods used to access the Entity Data Model created by Code First in the EDMX form.
+ These methods are typically used for debugging when there is a need to look at the model that
+ Code First creates internally.
+
+
+
+
+ Uses Code First with the given context and writes the resulting Entity Data Model to the given
+ writer in EDMX form. This method can only be used with context instances that use Code First
+ and create the model internally. The method cannot be used for contexts created using Database
+ First or Model First, for contexts created using a pre-existing , or
+ for contexts created using a pre-existing .
+
+ The context.
+ The writer.
+
+
+
+ Writes the Entity Data Model represented by the given to the
+ given writer in EDMX form.
+
+ An object representing the EDM.
+ The writer.
+
+
+
+ A factory for creating derived instances. Implement this
+ interface to enable design-time services for context types that do not have a
+ public default constructor.
+
+ At design-time, derived instances can be created in order to enable specific
+ design-time experiences such as model rendering, DDL generation etc. To enable design-time instantiation
+ for derived types that do not have a public, default constructor, implement
+ this interface. Design-time services will auto-discover implementations of this interface that are in the
+ same assembly as the derived type.
+
+
+
+
+
+ Creates a new instance of a derived type.
+
+ An instance of TContext
+
+
+
+ This convention causes DbModelBuilder to include metadata about the model
+ when it builds the model. When creates a model by convention it will
+ add this convention to the list of those used by the DbModelBuilder. This will then result in
+ model metadata being written to the database if the DbContext is used to create the database.
+ This can then be used as a quick check to see if the model has changed since the last time it was
+ used against the database.
+ This convention can be removed from the conventions by overriding
+ the OnModelCreating method on a derived DbContext class.
+
+
+
+
+ Adds metadata to the given model configuration.
+
+ The model configuration.
+
+
+
+ This convention uses the name of the derived
+ class as the container for the conceptual model built by
+ Code First.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The model container name.
+
+
+
+ Applies the convention to the given model.
+
+ The model.
+
+
+
+ This convention uses the namespace of the derived
+ class as the namespace of the conceptual model built by
+ Code First.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The model namespace.
+
+
+
+ Applies the convention to the given model.
+
+ The model.
+
+
+
+ Instances of this class are used internally to create constant expressions for
+ that are inserted into the expression tree to replace references to
+ and .
+
+ The type of the element.
+
+
+
+ Private constructor called by the Create factory method.
+
+ The query.
+
+
+
+ Factory method called by CreateDelegate to create an instance of this class.
+
+ The query, which must be a generic object of the expected type.
+ A new instance.
+
+
+
+ The public property expected in the LINQ expression tree.
+
+ The query.
+
+
+
+ Instances of this class are used to create DbConnection objects for
+ SQL Server Compact Edition based on a given database name or connection string.
+
+
+ It is necessary to provide the provider invariant name of the SQL Server Compact
+ Edition to use when creating an instance of this class. This is because different
+ versions of SQL Server Compact Editions use different invariant names.
+ An instance of this class can be set on the class to
+ cause all DbContexts created with no connection information or just a database
+ name or connection string to use SQL Server Compact Edition by default.
+ This class is immutable since multiple threads may access instances simultaneously
+ when creating connections.
+
+
+
+
+ Creates a new connection factory with empty (default) DatabaseDirectory and BaseConnectionString
+ properties.
+
+ The provider invariant name that specifies the version of SQL Server Compact Edition that should be used.
+
+
+
+ Creates a new connection factory with the given DatabaseDirectory and BaseConnectionString properties.
+
+
+ The provider invariant name that specifies the version of SQL Server Compact Edition that should be used.
+
+
+ The path to prepend to the database name that will form the file name used by SQL Server Compact Edition
+ when it creates or reads the database file. An empty string means that SQL Server Compact Edition will use
+ its default for the database file location.
+
+
+ The connection string to use for options to the database other than the 'Data Source'. The Data Source will
+ be prepended to this string based on the database name when CreateConnection is called.
+
+
+
+
+ Creates a connection for SQL Server Compact Edition based on the given database name or connection string.
+ If the given string contains an '=' character then it is treated as a full connection string,
+ otherwise it is treated as a database name only.
+
+ The database name or connection string.
+ An initialized DbConnection.
+
+
+
+ The path to prepend to the database name that will form the file name used by
+ SQL Server Compact Edition when it creates or reads the database file.
+ The default value is "|DataDirectory|", which means the file will be placed
+ in the designated data directory.
+
+
+
+
+ The connection string to use for options to the database other than the 'Data Source'.
+ The Data Source will be prepended to this string based on the database name when
+ CreateConnection is called.
+ The default is the empty string, which means no other options will be used.
+
+
+
+
+ The provider invariant name that specifies the version of SQL Server Compact Edition
+ that should be used.
+
+
+
+
+ Instances of this class are used to create DbConnection objects for
+ SQL Server based on a given database name or connection string. By default, the connection is
+ made to '.\SQLEXPRESS'. This can be changed by changing the base connection
+ string when constructing a factory instance.
+
+
+ An instance of this class can be set on the class to
+ cause all DbContexts created with no connection information or just a database
+ name or connection string to use SQL Server by default.
+ This class is immutable since multiple threads may access instances simultaneously
+ when creating connections.
+
+
+
+
+ Creates a new connection factory with a default BaseConnectionString property of
+ 'Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True'.
+
+
+
+
+ Creates a new connection factory with the given BaseConnectionString property.
+
+
+ The connection string to use for options to the database other than the 'Initial Catalog'. The 'Initial Catalog' will
+ be prepended to this string based on the database name when CreateConnection is called.
+
+
+
+
+ Creates a connection for SQL Server based on the given database name or connection string.
+ If the given string contains an '=' character then it is treated as a full connection string,
+ otherwise it is treated as a database name only.
+
+ The database name or connection string.
+ An initialized DbConnection.
+
+
+
+ Remove hard dependency on DbProviderFactories.
+
+
+
+
+ The connection string to use for options to the database other than the 'Initial Catalog'.
+ The 'Initial Catalog' will be prepended to this string based on the database name when
+ CreateConnection is called.
+ The default is 'Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True'.
+
+
+
+
+ This attribute can be applied to either an entire derived class or to
+ individual or properties on that class. When applied
+ any discovered or properties will still be included
+ in the model but will not be automatically initialized.
+
+
+
+
+ Thrown when a context is generated from the templates in Database First or Model
+ First mode and is then used in Code First mode.
+
+
+ Code generated using the T4 templates provided for Database First and Model First use may not work
+ correctly if used in Code First mode. To use these classes with Code First please add any additional
+ configuration using attributes or the DbModelBuilder API and then remove the code that throws this
+ exception.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The object that holds the serialized object data.
+ The contextual information about the source or destination.
+
+
+
+ Initializes a new instance of the class.
+
+ The message.
+
+
+
+ Initializes a new instance of the class.
+
+ The message.
+ The inner exception.
+
+
+
+ Implements ICachedMetadataWorkspace for a Code First model.
+
+
+
+
+ Represents an object that holds a cached copy of a MetadataWorkspace and optionally the
+ assemblies containing entity types to use with that workspace.
+
+
+
+
+ Gets the MetadataWorkspace, potentially lazily creating it if it does not already exist.
+ If the workspace is not compatible with the provider manifest obtained from the given
+ connection then an exception is thrown.
+
+ The connection to use to create or check SSDL provider info.
+ The workspace.
+
+
+
+ The list of assemblies that contain entity types for this workspace, which may be empty, but
+ will never be null.
+
+
+
+
+ The default container name for code first is the container name that is set from the DbModelBuilder
+
+
+
+
+ The provider info used to construct the workspace.
+
+
+
+
+ Builds and stores the workspace based on the given code first configuration.
+
+ The code first EDM model.
+
+
+
+ Gets the .
+ If the workspace is not compatible with the provider manifest obtained from the given
+ connection then an exception is thrown.
+
+ The connection to use to create or check SSDL provider info.
+ The workspace.
+
+
+
+ The default container name for code first is the container name that is set from the DbModelBuilder
+
+
+
+
+ The list of assemblies that contain entity types for this workspace, which may be empty, but
+ will never be null.
+
+
+
+
+ The provider info used to construct the workspace.
+
+
+
+
+ The methods here are called from multiple places with an ObjectContext that may have
+ been created in a variety of ways and ensure that the same code is run regardless of
+ how the context was created.
+
+
+
+
+ Used a delegate to do the actual creation once an ObjectContext has been obtained.
+ This is factored in this way so that we do the same thing regardless of how we get to
+ having an ObjectContext.
+ Note however that a context obtained from only a connection will have no model and so
+ will result in an empty database.
+
+
+
+
+ Used a delegate to do the actual existence check once an ObjectContext has been obtained.
+ This is factored in this way so that we do the same thing regardless of how we get to
+ having an ObjectContext.
+
+
+
+
+ Used a delegate to do the actual check/delete once an ObjectContext has been obtained.
+ This is factored in this way so that we do the same thing regardless of how we get to
+ having an ObjectContext.
+
+
+
+
+ Helper class that extends Tuple to give the Item1 and Item2 properties more meaningful names.
+
+
+
+
+ Creates a new pair of the given set of entity types and DbSet initializer delegate.
+
+
+
+
+ The entity types part of the pair.
+
+
+
+
+ The DbSet properties initializer part of the pair.
+
+
+
+
+ Static helper methods only.
+
+
+
+
+ Checks whether the given value is null and throws ArgumentNullException if it is.
+ This method should only be used in places where Code Contracts are compiled out in the
+ release build but we still need public surface null-checking, such as where a public
+ abstract class is implemented by an internal concrete class.
+
+
+
+
+ Checks whether the given string is null, empty, or just whitespace, and throws appropriately
+ if the check fails.
+ This method should only be used in places where Code Contracts are compiled out in the
+ release build but we still need public surface checking, such as where a public
+ abstract class is implemented by an internal concrete class.
+
+
+
+
+ Given two key values that may or may not be byte arrays, this method determines
+ whether or not they are equal. For non-binary key values, this is equivalent
+ to Object.Equals. For binary keys, it is by comparison of every byte in the
+ arrays.
+
+
+
+
+ Provides a standard helper method for quoting identifiers
+
+ Identifier to be quoted. Does not validate that this identifier is valid.
+ Quoted string
+
+
+
+ Checks the given string which might be a database name or a connection string and determines
+ whether it should be treated as a name or connection string. Currently, the test is simply
+ whether or not the string contains an '=' character--if it does, then it should be treated
+ as a connection string.
+
+ The name or connection string.
+ true if the string should be treated as a connection string; false if it should be treated as a name.
+
+
+
+ Determines whether the given string should be treated as a database name directly (it contains no '='),
+ is in the form name=foo, or is some other connection string. If it is a direct name or has name=, then
+ the name is extracted and the method returns true.
+
+ The name or connection string.
+ The name.
+ True if a name is found; false otherwise.
+
+
+
+ Determines whether the given string is a full EF connection string with provider, provider connection string,
+ and metadata parts, or is is instead some other form of connection string.
+
+ The name or connection string.
+ true if the given string is an EF connection string; otherwise, false .
+
+
+
+
+ Parses a property selector expression used for the expression-based versions of the Property, Collection, Reference,
+ etc methods on and
+ classes.
+
+ The type of the entity.
+ The type of the property.
+ The property.
+ Name of the method.
+ Name of the param.
+ The property name.
+
+
+
+ Called recursively to parse an expression tree representing a property path such
+ as can be passed to Include or the Reference/Collection/Property methods of .
+ This involves parsing simple property accesses like o => o.Products as well as calls to Select like
+ o => o.Products.Select(p => p.OrderLines).
+
+ The expression to parse.
+ The expression parsed into an include path, or null if the expression did not match.
+ True if matching succeeded; false if the expression could not be parsed.
+
+
+
+ Gets a cached dictionary mapping property names to property types for all the properties
+ in the given type.
+
+
+
+
+ Gets a dictionary of compiled property setter delegates for the underlying types.
+ The dictionary is cached for the type in the app domain.
+
+
+
+
+ Used by the property setter delegates to throw for attempts to set null onto
+ non-nullable properties or otherwise go ahead and set the property.
+
+
+
+
+ Gets a dictionary of compiled property getter delegates for the underlying types.
+ The dictionary is cached for the type in the app domain.
+
+
+
+
+ Creates a new with the NoTracking merge option applied.
+ The query object passed in is not changed.
+
+ The query.
+ A new query with NoTracking applied.
+
+
+
+ Converts to
+
+
+ Name of the property being validated with ValidationAttributes. Null for type-level validation.
+
+
+ ValidationResults instances to be converted to instances.
+
+
+ An created based on the
+ .
+
+
+ class contains a property with names of properties the error applies to.
+ On the other hand each applies at most to a single property. As a result for
+ each name in ValidationResult.MemberNames one will be created (with some
+ exceptions for special cases like null or empty .MemberNames or null names in the .MemberNames).
+
+
+
+
+ Calculates a "path" to a property. For primitive properties on an entity type it is just the
+ name of the property. Otherwise it is a dot separated list of names of the property and all
+ its ancestor properties starting from the entity.
+
+ Property for which to calculate the path.
+ Dot separated path to the property.
+
+
+
+ Gets names of the property and its ancestor properties as enumerable walking "bottom-up".
+
+ Property for which to get the segments.
+ Names of the property and its ancestor properties.
+
+
+
+ Gets an type for the given element type.
+
+ Type of the element.
+ The collection type.
+
+
+
+ Creates a database name given a type derived from DbContext. This handles nested and
+ generic classes. No attempt is made to ensure that the name is not too long since this
+ is provider specific. If a too long name is generated then the provider will throw and
+ the user must correct by specifying their own name in the DbContext constructor.
+
+ Type of the context.
+ The database name to use.
+
+
+
+ A local (in-memory) view of the entities in a DbSet.
+ This view contains Added entities and does not contain Deleted entities. The view extends
+ from and hooks up events between the collection and the
+ state manager to keep the view in sync.
+
+ The type of the entity.
+
+
+
+ Initializes a new instance of the class for entities
+ of the given generic type in the given internal context.
+
+ The internal context.
+
+
+
+ Called by the base class when the collection changes.
+ This method looks at the change made to the collection and reflects those changes in the
+ state manager.
+
+ The instance containing the event data.
+
+
+
+ Handles events from the state manager for entities entering, leaving, or being marked as deleted.
+ The local view is kept in sync with these changes.
+
+ The sender.
+ The instance containing the event data.
+
+
+
+ Clears the items by calling remove on each item such that we get Remove events that
+ can be tracked back to the state manager, rather than a single Reset event that we
+ cannot deal with.
+
+
+
+
+ Adds a contains check to the base implementation of InsertItem since we can't support
+ duplicate entities in the set.
+
+ The index at which to insert.
+ The item to insert.
+
+
+
+ Returns a cached binding list implementation backed by this ObservableCollection.
+
+ The binding list.
+
+
+
+ Service used to search for instance properties on a DbContext class that can
+ be assigned a DbSet instance. Also, if the the property has a public setter,
+ then a delegate is compiled to set the property to a new instance of DbSet.
+ All of this information is cached per app domain.
+
+
+
+
+ Creates a set discovery service for the given derived context.
+
+
+
+
+ Processes the given context type to determine the DbSet or IDbSet
+ properties and collect root entity types from those properties. Also, delegates are
+ created to initialize any of these properties that have public setters.
+ If the type has been processed previously in the app domain, then all this information
+ is returned from a cache.
+
+ A dictionary of potential entity type to the list of the names of the properties that used the type.
+
+
+
+ Calls the public setter on any property found to initialize it to a new instance of DbSet.
+
+
+
+
+ Registers the entities and their entity set name hints with the given .
+
+ The model builder.
+
+
+
+ Returns false if SuppressDbSetInitializationAttribute is found on the property or the class, otherwise
+ returns true.
+
+
+
+
+ Determines whether or not an instance of DbSet/ObjectSet can be assigned to a property of the given type.
+
+ The type to check.
+ The entity type of the DbSet/ObjectSet that can be assigned, or null if no set type can be assigned.
+
+
+
+
+ A EagerInternalConnection object wraps an already existing DbConnection object.
+
+
+
+
+ InternalConnection objects manage DbConnections.
+ Two concrete base classes of this abstract interface exist:
+ and .
+
+
+
+
+ IInternalConnection objects manage DbConnections.
+ Two concrete implementations of this interface exist--LazyInternalConnection and EagerInternalConnection.
+
+
+
+
+ Creates an from metadata in the connection. This method must
+ only be called if ConnectionHasModel returns true.
+
+ The newly created context.
+
+
+
+ Returns the underlying DbConnection.
+
+
+
+
+ Returns a key consisting of the connection type and connection string.
+ If this is an EntityConnection then the metadata path is included in the key returned.
+
+
+
+
+ Gets a value indicating whether the connection is an EF connection which therefore contains
+ metadata specifying the model, or instead is a store connection, in which case it contains no
+ model info.
+
+ true if the connection contains model info; otherwise, false .
+
+
+
+ Returns the origin of the underlying connection string.
+
+
+
+
+ Gets or sets an object representing a config file used for looking for DefaultConnectionFactory entries
+ and connection strins.
+
+
+
+
+ Gets or sets the provider to be used when creating the underlying connection.
+
+
+
+
+ Gets the name of the underlying connection string.
+
+
+
+
+ Gets the original connection string.
+
+
+
+
+ Creates an from metadata in the connection. This method must
+ only be called if ConnectionHasModel returns true.
+
+ The newly created context.
+
+
+
+ Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+
+
+
+
+ Called after the connection is initialized for the first time.
+
+
+
+
+ Adds a tracking cookie to the connection string for SqlConnections. Returns the
+ possibly modified store connection string.
+
+
+
+
+ Returns the underlying DbConnection.
+
+
+
+
+ Returns a key consisting of the connection type and connection string.
+ If this is an EntityConnection then the metadata path is included in the key returned.
+
+
+
+
+
+ Gets a value indicating whether the connection is an EF connection which therefore contains
+ metadata specifying the model, or instead is a store connection, in which case it contains no
+ model info.
+
+ true if the connection contains model info; otherwise, false .
+
+
+
+ Returns the origin of the underlying connection string.
+
+
+
+
+ Gets or sets an object representing a config file used for looking for DefaultConnectionFactory entries
+ and connection strins.
+
+
+
+
+ Gets or sets the provider to be used when creating the underlying connection.
+
+
+
+
+ Gets the name of the underlying connection string.
+
+
+
+
+ Gets the original connection string.
+
+
+
+
+ Gets or sets the underlying object. No initialization is done when the
+ connection is obtained, and it can also be set to null.
+
+ The underlying connection.
+
+
+
+ Creates a new EagerInternalConnection that wraps an existing DbConnection.
+
+ An existing connection.
+ If set to true then the underlying connection should be disposed when this object is disposed.
+
+
+
+ Dispose the existing connection is the original caller has specified that it should be disposed
+ by the framework.
+
+
+
+
+ Returns the origin of the underlying connection string.
+
+
+
+
+ An is an where the
+ instance that it wraps is set immediately at construction time rather than being created lazily. In this case
+ the internal context may or may not own the instance but will only dispose it
+ if it does own it.
+
+
+
+
+ An underlies every instance of and wraps an
+ instance.
+ The also acts to expose necessary information to other parts of the design in a
+ controlled manner without adding a lot of internal methods and properties to the
+ class itself.
+ Two concrete classes derive from this abstract class - and
+ .
+
+
+
+
+ Initializes the object with its owner.
+
+ The owner .
+
+
+
+ Returns the underlying without causing the underlying database to be created
+ or the database initialization strategy to be executed.
+ This is used to get a context that can then be used for database creation/initialization.
+
+
+
+
+ Returns the underlying without causing the underlying database to be created
+ or the database initialization strategy to be executed.
+ This is used to get a context that can then be used for database creation/initialization.
+
+
+
+
+ Creates a new temporary based on the same metadata and connection as the real
+ and sets it as the context to use DisposeTempObjectContext is called.
+ This allows this internal context and its DbContext to be used for transient operations
+ such as initializing and seeding the database, after which it can be thrown away.
+ This isolates the real from any changes made and and saves performed.
+
+
+
+
+ If a temporary ObjectContext was set with UseTempObjectContext, then this method disposes that context
+ and returns this internal context and its DbContext to using the real ObjectContext.
+
+
+
+
+ Called by methods of to create a database either using the Migrations pipeline
+ if possible and the core provider otherwise.
+
+ The context to use for core provider calls.
+
+
+
+ Internal implementation of .
+
+ True if the model hash in the context and the database match; false otherwise.
+
+
+
+ Checks whether the given model (an EDMX document) matches the current model.
+
+
+
+
+ Queries the database for a model hash and returns it if found or returns null if the table
+ or the row doesn't exist in the database.
+
+ The model hash, or null if not found.
+
+
+
+ Queries the database for a model stored in the MigrationHistory table and returns it as an EDMX, or returns
+ null if the database does not contain a model.
+
+
+
+
+ Saves the model hash from the context to the database.
+
+
+
+
+ Performs the initialization action that may result in a and
+ handle the exception to provide more meaning to the user.
+
+ The action.
+
+
+
+ Registers for the ObjectStateManagerChanged event on the underlying ObjectStateManager.
+ This is a virtual method on this class so that it can be mocked.
+
+ The event handler.
+
+
+
+ Checks whether or not the given object is in the context in any state other than Deleted.
+ This is a virtual method on this class so that it can be mocked.
+
+ The entity.
+ true if the entity is in the context and not deleted; otherwise false .
+
+
+
+ Saves all changes made in this context to the underlying database.
+
+ The number of objects written to the underlying database.
+
+
+
+ Initializes this instance, which means both the context is initialized and the underlying
+ database is initialized.
+
+
+
+
+ Initializes the underlying ObjectContext but does not cause the database to be initialized.
+
+
+
+
+ Marks the database as having not been initialized. This is called when the app calls Database.Delete so
+ that the database if the app attempts to then use the database again it will be re-initialized automatically.
+
+
+
+
+ Runs the unless it has already been run or there
+ is no initializer for this context type in which case this method does nothing.
+
+
+
+
+ Marks the database as having been initialized without actually running the .
+
+
+
+
+ Runs the if one has been set for this context type.
+ Calling this method will always cause the initializer to run even if the database is marked
+ as initialized.
+
+
+
+
+ Disposes the context. Override the DisposeContext method to perform
+ additional work when disposing.
+
+
+
+
+ Performs additional work to dispose a context.
+
+
+
+
+ Calls DetectChanges on the underlying if AutoDetectChangesEnabled is
+ true or if force is set to true.
+
+ if set to true then DetectChanges is called regardless of the value of AutoDetectChangesEnabled.
+
+
+
+ Returns the DbSet instance for the given entity type.
+ This property is virtual and returns to that it can be mocked.
+
+ The entity type for which a set should be returned.
+ A set for the given entity type.
+
+
+
+ Returns the non-generic instance for the given entity type.
+ This property is virtual and returns to that it can be mocked.
+
+ The entity type for which a set should be returned.
+ A set for the given entity type.
+
+
+
+ Creates an internal set using an app domain cached delegate.
+
+ Type of the entity.
+ The set.
+
+
+
+ Returns the entity set and the base type for that entity set for the given type.
+ This method does o-space loading if required and throws if the type is not in the model.
+
+ The entity type to lookup.
+ The entity set and base type pair.
+
+
+
+ Returns the entity set and the base type for that entity set for the given type if that
+ type is mapped in the model, otherwise returns null.
+ This method does o-space loading if required.
+
+ The entity type to lookup.
+ The entity set and base type pair, or null if not found.
+
+
+
+ Checks whether or not the given entity type is mapped in the model.
+
+ The entity type to lookup.
+ True if the type is mapped as an entity; false otherwise.
+
+
+
+ Gets the local entities of the type specified from the state manager. That is, all
+ Added, Modified, and Unchanged entities of the given type.
+
+ The type of entity to get.
+ The entities.
+
+
+
+ Executes the given SQL query against the database backing this context. The results are not materialized as
+ entities or tracked.
+
+ The type of the element.
+ The SQL.
+ The parameters.
+ The query results.
+
+
+
+ Executes the given SQL query against the database backing this context. The results are not materialized as
+ entities or tracked.
+
+ Type of the element.
+ The SQL.
+ The parameters.
+ The query results.
+
+
+
+ Calls the generic ExecuteSqlQuery but with a non-generic return type so that it
+ has the correct signature to be used with CreateDelegate above.
+
+
+
+
+ Executes the given SQL command against the database backing this context.
+
+ The SQL.
+ The parameters.
+ The return value from the database.
+
+
+
+ Gets the underlying for the given entity, or returns null if the entity isn't tracked by this context.
+ This method is virtual so that it can be mocked.
+
+ The entity.
+ The state entry or null.
+
+
+
+ Gets the underlying objects for all entities tracked by
+ this context.
+ This method is virtual so that it can be mocked.
+
+ State entries for all tracked entities.
+
+
+
+ Gets the underlying objects for all entities of the given
+ type tracked by this context.
+ This method is virtual so that it can be mocked.
+
+ The type of the entity.
+ State entries for all tracked entities of the given type.
+
+
+
+ Helper method that gets the underlying objects for all entities that
+ match the given predicate.
+
+
+
+
+ Wraps the given in either a or
+ a depending on the actual exception type and the state
+ entries involved.
+
+ The update exception.
+ A new exception wrapping the given exception.
+
+
+
+ Uses the underlying context to create an entity such that if the context is configured
+ to create proxies and the entity is suitable then a proxy instance will be returned.
+ This method is virtual so that it can be mocked.
+
+ The type of the entity.
+ The new entity instance.
+
+
+
+ Uses the underlying context to create an entity such that if the context is configured
+ to create proxies and the entity is suitable then a proxy instance will be returned.
+ This method is virtual so that it can be mocked.
+
+ The type of entity to create.
+ The new entity instance.
+
+
+
+ This method is used by CreateDelegate to transform the CreateObject method with return type TEntity
+ into a method with return type object which matches the required type of the delegate.
+
+
+
+
+ Replaces the connection that will be used by this context.
+ The connection can only be changed before the context is initialized.
+
+ The new connection.
+
+
+
+ Throws if the context has been disposed.
+
+
+
+
+ Checks whether or not the internal cache of types to entity sets has been initialized,
+ and initializes it if necessary.
+
+
+
+
+ Forces all DbSets to be initialized, which in turn causes o-space loading to happen
+ for any entity type for which we have a DbSet. This includes all DbSets that were
+ discovered on the user's DbContext type.
+
+
+
+
+ Performs o-space loading for the type and returns false if the type is not in the model.
+
+
+
+
+ Performs o-space loading for the type and throws if the type is not in the model.
+
+ Type of the entity.
+
+
+
+ Returns true if the given entity type does not have EdmEntityTypeAttribute but is in
+ an assembly that has EdmSchemaAttribute. This indicates mixing of POCO and EOCO in the
+ same assembly, which is something that we don't support.
+
+
+
+
+ Determines whether or not the given clrType is mapped to a complex type. Assumes o-space loading has happened.
+
+
+
+
+ Updates the cache of types to entity sets either for the first time or after potentially
+ doing some o-space loading.
+
+
+
+
+ The public context instance that owns this internal context.
+
+
+
+
+ Returns the underlying .
+
+
+
+
+ Gets the temp object context, or null if none has been set.
+
+ The temp object context.
+
+
+
+ The compiled model created from the Code First pipeline, or null if Code First was
+ not used to create this context.
+ Causes the Code First pipeline to be run to create the model if it has not already been
+ created.
+
+
+
+
+ Set to true when a database initializer is performing some actions, such as creating or deleting
+ a database, or seeding the database.
+
+
+
+
+ Gets the default database initializer to use for this context if no other has been registered.
+ For code first this property returns a instance.
+ For database/model first, this property returns null.
+
+ The default initializer.
+
+
+
+ Gets or sets a value indicating whether lazy loading is enabled.
+
+
+
+
+ Gets or sets a value indicating whether proxy creation is enabled.
+
+
+
+
+ Gets or sets a value indicating whether DetectChanges is called automatically in the API.
+
+
+
+
+ Gets or sets a value indicating whether to validate entities when is called.
+
+
+
+
+ True if the context has been disposed.
+
+
+
+
+ The connection underlying this context. Accessing this property does not cause the context
+ to be initialized, only its connection.
+
+
+
+
+ The connection string as originally applied to the context. This is used to perform operations
+ that need the connection string in a non-mutated form, such as with security info still intact.
+
+
+
+
+ Returns the origin of the underlying connection string.
+
+
+
+
+ Gets or sets an object representing a config file used for looking for DefaultConnectionFactory entries,
+ database intializers and connection strings.
+
+
+
+
+ Gets or sets the provider details to be used when building the EDM model.
+
+
+
+
+ Gets the name of the underlying connection string.
+
+
+
+
+ Gets the provider name bsing used either using a cached value or getting it from
+ the DbConnection in use.
+
+
+
+
+ Gets or sets a custom OnModelCreating action.
+
+
+
+
+ Gets the DatabaseOperations instance to use to perform Create/Delete/Exists operations
+ against the database.
+ Note that this virtual property can be mocked to help with unit testing.
+
+
+
+
+ Gets instance used to create validators and validation contexts.
+ This property is virtual to allow mocking.
+
+
+
+
+ For mocking.
+
+
+
+
+ Constructs an for an already existing .
+
+ The owner .
+ The existing .
+
+
+
+ Returns the underlying without causing the underlying database to be created
+ or the database initialization strategy to be executed.
+ This is used to get a context that can then be used for database creation/initialization.
+
+
+
+
+ Does nothing, since the already exists.
+
+
+
+
+ Does nothing since the database is always considered initialized if the was created
+ from an existing .
+
+
+
+
+ Does nothing since the database is always considered initialized if the was created
+ from an existing .
+
+
+
+
+ Does nothing since the database is always considered initialized if the was created
+ from an existing .
+
+
+
+
+ Disposes the context. The underlying is also disposed if it is owned.
+
+
+
+
+
+
+
+ Returns the underlying .
+
+
+
+
+ Gets the default database initializer to use for this context if no other has been registered.
+ For code first this property returns a instance.
+ For database/model first, this property returns null.
+
+ The default initializer.
+
+
+
+ The connection underlying this context.
+
+
+
+
+ The connection string as originally applied to the context. This is used to perform operations
+ that need the connection string in a non-mutated form, such as with security info still intact.
+
+
+
+
+ Returns the origin of the underlying connection string.
+
+
+
+
+ Gets or sets a value indicating whether lazy loading is enabled. This is just a wrapper
+ over the same flag in the underlying .
+
+
+
+
+ Gets or sets a value indicating whether proxy creation is enabled. This is just a wrapper
+ over the same flag in the underlying ObjectContext.
+
+
+
+
+ An implementation of that represents a clone of another
+ dictionary. That is, all the property values have been been copied into this dictionary.
+
+
+
+
+ The internal class used to implement .
+ This internal class allows for a clean internal factoring without compromising the public API.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal context with which the entity of complex object is associated.
+ The type of the entity or complex object.
+ If set to true this is a dictionary for an entity, otherwise it is a dictionary for a complex object.
+
+
+
+ Implemented by subclasses to get the dictionary item for a given property name.
+ Checking that the name is valid should happen before this method is called such
+ that subclasses do not need to perform the check.
+
+ Name of the property.
+ An item for the given name.
+
+
+
+ Creates an object of the underlying type for this dictionary and hydrates it with property
+ values from this dictionary.
+
+ The properties of this dictionary copied into a new object.
+
+
+
+ Creates an instance of the underlying type for this dictionary, which may either be an entity type (in which
+ case CreateObject on the context is used) or a non-entity type (in which case the empty constructor is used.)
+ In either case, app domain cached compiled delegates are used to do the creation.
+
+
+
+
+ Sets the values of this dictionary by reading values out of the given object.
+ The given object must be of the type that this dictionary is based on.
+
+ The object to read values from.
+
+
+
+ Creates a new dictionary containing copies of all the properties in this dictionary.
+ Changes made to the new dictionary will not be reflected in this dictionary and vice versa.
+
+ A clone of this dictionary.
+
+
+
+ Sets the values of this dictionary by reading values from another dictionary.
+ The other dictionary must be based on the same type as this dictionary, or a type derived
+ from the type for this dictionary.
+
+ The dictionary to read values from.
+
+
+
+ Gets the dictionary item for the property with the given name.
+ This method checks that the given name is valid.
+
+ The property name.
+ The item.
+
+
+
+ Sets the value of the property only if it is different from the current value and is not
+ an invalid attempt to set a complex property.
+
+
+
+
+ Gets the set of names of all properties in this dictionary as a read-only set.
+
+ The property names.
+
+
+
+ Gets or sets the value of the property with the specified property name.
+ The value may be a nested instance of this class.
+
+ The property name.
+ The value of the property.
+
+
+
+ Gets the entity type of complex type that this dictionary is based on.
+
+ The type of the object underlying this dictionary.
+
+
+
+ Gets the internal context with which the underlying entity or complex type is associated.
+
+ The internal context.
+
+
+
+ Gets a value indicating whether the object for this dictionary is an entity or a complex object.
+
+ true if this this is a dictionary for an entity; false if it is a dictionary for a complex object.
+
+
+
+ Initializes a new instance of the class by copying
+ values from the given dictionary.
+
+ The dictionary to clone.
+ If non-null, then the values for the new dictionary are taken from this record rather than from the original dictionary.
+
+
+
+ Gets the dictionary item for a given property name.
+
+ Name of the property.
+ An item for the given name.
+
+
+
+ Gets the set of names of all properties in this dictionary as a read-only set.
+
+ The property names.
+
+
+
+ An implementation of for an item in a .
+
+
+
+
+ Represents an item in an representing a property name/value.
+
+
+
+
+ Gets or sets the value of the property represented by this item.
+
+ The value.
+
+
+
+ Gets the name of the property.
+
+ The name.
+
+
+
+ Gets a value indicating whether this item represents a complex property.
+
+ true If this instance represents a complex property; otherwise, false .
+
+
+
+ Gets the type of the underlying property.
+
+ The property type.
+
+
+
+ Initializes a new instance of the class.
+
+ The name.
+ The value.
+ The type.
+ If set to true this item represents a complex property.
+
+
+
+ Gets or sets the value of the property represented by this item.
+
+ The value.
+
+
+
+ Gets the name of the property.
+
+ The name.
+
+
+
+ Gets a value indicating whether this item represents a complex property.
+
+
+ true If this instance represents a complex property; otherwise, false .
+
+
+
+
+ Gets the type of the underlying property.
+
+ The property type.
+
+
+
+ An implementation of that is based on an existing
+ instance.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal context.
+ The type.
+ The data record.
+ If set to true this is a dictionary for an entity, otherwise it is a dictionary for a complex object.
+
+
+
+ Gets the dictionary item for a given property name.
+
+ Name of the property.
+ An item for the given name.
+
+
+
+ Gets the set of names of all properties in this dictionary as a read-only set.
+
+ The property names.
+
+
+
+ An implementation of for an item in a .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The data record.
+ The ordinal.
+ The value.
+
+
+
+ Gets or sets the value of the property represented by this item.
+
+ The value.
+
+
+
+ Gets the name of the property.
+
+ The name.
+
+
+
+ Gets a value indicating whether this item represents a complex property.
+
+
+ true If this instance represents a complex property; otherwise, false .
+
+
+
+
+ Gets the type of the underlying property.
+
+ The property type.
+
+
+
+ This is version of an internal interface that already exists in System.Data.Entity that
+ is implemented by . Using this interface allows state
+ entries to be mocked for unit testing. The plan is to remove this version of the
+ interface and use the one in System.Data.Entity once we roll into the framework.
+ Note that some members may need to be added to the interface in the framework when
+ we combine the two.
+
+
+
+
+ The internal class used to implement and
+ .
+ This internal class contains all the common implementation between the generic and non-generic
+ entry classes and also allows for a clean internal factoring without compromising the public API.
+
+
+
+
+ Base class for and
+ containing common code for collection and reference navigation property entries.
+
+
+
+
+ Base class for all internal entries that represent different kinds of properties.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entity entry.
+ The member metadata.
+
+
+
+ Validates this property.
+
+ A sequence of validation errors for this property. Empty if no errors. Never null.
+
+
+
+ Creates a new non-generic backed by this internal entry.
+ The actual subtype of the DbMemberEntry created depends on the metadata of this internal entry.
+
+ The new entry.
+
+
+
+ Creates a new generic backed by this internal entry.
+ The actual subtype of the DbMemberEntry created depends on the metadata of this internal entry.
+
+ The type of the entity.
+ The type of the property.
+ The new entry.
+
+
+
+ Gets the property name.
+ The property is virtual to allow mocking.
+
+ The property name.
+
+
+
+ Gets or sets the current value of the navigation property.
+
+ The current value.
+
+
+
+ Gets the internal entity entry property belongs to.
+ This property is virtual to allow mocking.
+
+ The internal entity entry.
+
+
+
+ Gets the entry metadata.
+
+ The entry metadata.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entity entry.
+ The navigation metadata.
+
+
+
+ Calls Load on the underlying .
+
+
+
+
+ Uses CreateSourceQuery on the underlying to create a query for this
+ navigation property.
+
+
+
+
+ Gets the navigation property value from the object.
+
+ The entity.
+ The navigation property value.
+
+
+
+ Validates that the owning entity entry is associated with an underlying and
+ is not just wrapping a non-attached entity.
+ If the entity is not detached, then the RelatedEnd for this navigation property is obtained.
+
+
+
+
+ Calls IsLoaded on the underlying .
+
+
+
+
+ Gets the related end, which will be null if the entity is not being tracked.
+
+ The related end.
+
+
+
+ Gets or sets the current value of the navigation property. The current value is
+ the entity that the navigation property references or the collection of references
+ for a collection property.
+ This property is virtual so that it can be mocked.
+
+ The current value.
+
+
+
+ Gets a delegate that can be used to get the value of the property directly from the entity.
+ Returns null if the property does not have an accessible getter.
+
+ The getter delegate, or null.
+
+
+
+ Gets a delegate that can be used to set the value of the property directly on the entity.
+ Returns null if the property does not have an accessible setter.
+
+ The setter delegate, or null.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entity entry.
+ The navigation metadata.
+
+
+
+ Gets the navigation property value from the object.
+ Since for a collection the related end is an , it means
+ that the internal representation of the navigation property is just the related end.
+
+ The entity.
+ The navigation property value.
+
+
+
+ Creates a new non-generic backed by this internal entry.
+ The runtime type of the DbMemberEntry created will be or a subtype of it.
+
+ The new entry.
+
+
+
+ Creates a new generic backed by this internal entry.
+ The runtime type of the DbMemberEntry created will be or a subtype of it.
+
+ The type of the entity.
+ The type of the property.
+ The new entry.
+
+
+
+ Creates a new generic backed by this internal entry.
+ The actual subtype of the DbCollectionEntry created depends on the metadata of this internal entry.
+
+ The type of the entity.
+ The type of the element.
+ The new entry.
+
+
+
+ Creates a object for the given entity type
+ and collection element type.
+
+ The type of the entity.
+ The type of the property.
+ Type of the element.
+ The set.
+
+
+
+ Gets or sets the current value of the navigation property. The current value is
+ the entity that the navigation property references or the collection of references
+ for a collection property.
+
+ The current value.
+
+
+
+ The internal class used to implement
+ and .
+ This internal class contains all the common implementation between the generic and non-generic
+ entry classes and also allows for a clean internal factoring without compromising the public API.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal context.
+ The state entry.
+
+
+
+ Initializes a new instance of the class for an
+ entity which may or may not be attached to the context.
+
+ The internal context.
+ The entity.
+
+
+
+ Queries the database for copies of the values of the tracked entity as they currently exist in the database.
+
+ The store values.
+
+
+
+ Appends a query for the properties in the entity to the given string builder that is being used to
+ build the eSQL query. This method may be called recursively to query for all the sub-properties of
+ a complex property.
+
+ The query builder.
+ The qualifier with which to prefix each property name.
+ The dictionary that acts as a template for the properties to query.
+
+
+
+ Validates that a dictionary can be obtained for the state of the entity represented by this entry.
+
+ The method name being used to request a dictionary.
+ The state that is invalid for the request being processed.
+
+
+
+ Calls Refresh with StoreWins on the underlying state entry.
+
+
+
+
+ Gets an internal object representing a reference navigation property.
+ This method is virtual to allow mocking.
+
+ The navigation property.
+ The type of entity requested, which may be 'object' or null if any type can be accepted.
+ The entry.
+
+
+
+ Gets an internal object representing a collection navigation property.
+ This method is virtual to allow mocking.
+
+ The navigation property.
+ The type of entity requested, which may be 'object' or null f any type can be accepted.
+ The entry.
+
+
+
+ Gets an internal object representing a navigation, scalar, or complex property.
+ This method is virtual to allow mocking.
+
+ Name of the property.
+ The type of entity requested, which may be 'object' if any type can be accepted.
+ The entry.
+
+
+
+ Gets an internal object representing a scalar or complex property.
+ This method is virtual to allow mocking.
+
+ The property.
+ The type of object requested, which may be null or 'object' if any type can be accepted.
+ if set to true then the found property must be a complex property.
+ The entry.
+
+
+
+ Gets an internal object representing a scalar or complex property.
+ The property may be a nested property on the given .
+
+ The parent property entry, or null if this is a property directly on the entity.
+ Name of the property.
+ The type of object requested, which may be null or 'object' if any type can be accepted.
+ if set to true then the found property must be a complex property.
+ The entry.
+
+
+
+ Gets an internal object representing a scalar or complex property.
+ The property may be a nested property on the given .
+
+ The parent property entry, or null if this is a property directly on the entity.
+ Name of the property.
+ The property split out into its parts.
+ The type of object requested, which may be null or 'object' if any type can be accepted.
+ if set to true then the found property must be a complex property.
+ The entry.
+
+
+
+ Checks that the given property name is a navigation property and is either a reference property or
+ collection property according to the value of requireCollection.
+
+
+
+
+ Gets metadata for the given property if that property is a navigation property or returns null
+ if it is not a navigation property.
+
+ Name of the property.
+ Navigation property metadata or null.
+
+
+
+ Gets the type of entity or entities at the target end of the given navigation property.
+
+ The navigation property.
+ The CLR type of the entity or entities at the other end.
+
+
+
+ Gets the related end for the navigation property with the given name.
+
+ The navigation property.
+
+
+
+
+ Uses EDM metadata to validate that the property name exists in the model and represents a scalar or
+ complex property or exists in the CLR type.
+ This method is public and virtual so that it can be mocked.
+
+ The property name.
+ The type on which the property is declared.
+ The type of object requested, which may be 'object' if any type can be accepted.
+ Metadata for the property.
+
+
+
+ Splits the given property name into parts delimited by dots.
+
+ Name of the property.
+ The parts of the name.
+
+
+
+ Validates that this entry is associated with an underlying and
+ is not just wrapping a non-attached entity.
+
+
+
+
+ Validates entity represented by this entity entry.
+ This method is virtual to allow mocking.
+
+ User defined dictionary containing additional info for custom validation. This parameter is optional and can be null.
+ containing validation result. Never null.
+
+
+
+ Determines whether the specified is equal to this instance.
+ Two instances are considered equal if they are both entries for
+ the same entity on the same .
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false .
+
+
+
+
+ Determines whether the specified is equal to this instance.
+ Two instances are considered equal if they are both entries for
+ the same entity on the same .
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false .
+
+
+
+
+ Returns a hash code for this instance.
+
+
+ A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
+
+
+
+
+ Gets the tracked entity.
+ This property is virtual to allow mocking.
+
+ The entity.
+
+
+
+ Gets or sets the state of the entity.
+
+ The state.
+
+
+
+ Gets the current property values for the tracked entity represented by this object.
+ This property is virtual to allow mocking.
+
+ The current values.
+
+
+
+ Gets the original property values for the tracked entity represented by this object.
+ The original values are usually the entity's property values as they were when last queried from
+ the database.
+ This property is virtual to allow mocking.
+
+ The original values.
+
+
+
+ Checks whether or not this entry is associated with an underlying or
+ is just wrapping a non-attached entity.
+
+
+
+
+ Gets the type of the entity being tracked.
+
+ The type of the entity.
+
+
+
+ Gets the c-space entity type for this entity from the EDM.
+
+
+
+
+ Gets the underlying object state entry.
+
+
+
+
+ Gets the internal context.
+
+ The internal context.
+
+
+
+ A concrete implementation of used for properties of entities.
+
+
+
+
+ The internal class used to implement and
+ .
+ This internal class contains all the common implementation between the generic and non-generic
+ entry classes and also allows for a clean internal factoring without compromising the public API.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+ The property info.
+
+
+
+ Creates a delegate that will get the value of this property.
+
+ The delegate.
+
+
+
+ Creates a delegate that will set the value of this property.
+
+ The delegate.
+
+
+
+ Returns true if the property of the entity that this property is ultimately part
+ of is set as modified. If this is a property of an entity, then this method returns
+ true if the property is modified. If this is a property of a complex object, then
+ this method returns true if the top-level complex property on the entity is modified.
+
+ True if the entity property is modified.
+
+
+
+ Sets the property of the entity that this property is ultimately part of to modified.
+ If this is a property of an entity, then this method marks it as modified.
+ If this is a property of a complex object, then this method marks the top-level
+ complex property as modified.
+
+
+
+
+ Rejects changes to this property.
+ If this is a property of a complex object, then this method rejects changes to the top-level
+ complex property.
+
+
+
+
+ Walks the tree from a property of a complex property back up to the top-level
+ complex property and then checks whether or not DetectChanges still considers
+ the complex property to be modified. If it does not, then the complex property
+ is marked as Unchanged.
+
+
+
+
+ Throws if the user attempts to set a complex property to null.
+
+ The value.
+
+
+
+ Sets the given value directly onto the underlying entity object.
+
+ The value.
+ True if the property had a setter that we could attempt to call; false if no setter was available.
+
+
+
+ Sets the property value, potentially by setting individual nested values for a complex
+ property.
+
+ The value.
+
+
+
+ Gets an internal object representing a scalar or complex property of this property,
+ which must be a mapped complex property.
+ This method is virtual to allow mocking.
+
+ The property.
+ The type of object requested, which may be null or 'object' if any type can be accepted.
+ if set to true then the found property must be a complex property.
+ The entry.
+
+
+
+ Validates that the owning entity entry is associated with an underlying and
+ is not just wrapping a non-attached entity.
+
+
+
+
+ Creates a new non-generic backed by this internal entry.
+ The runtime type of the DbMemberEntry created will be or a subtype of it.
+
+ The new entry.
+
+
+
+ Creates a new generic backed by this internal entry.
+ The runtime type of the DbMemberEntry created will be or a subtype of it.
+
+ The type of the entity.
+ The type of the property.
+ The new entry.
+
+
+
+ Returns parent property, or null if this is a property on the top-level entity.
+
+
+
+
+ Gets the current values of the parent entity or complex property.
+ That is, the current values that contains the value for this property.
+
+ The parent current values.
+
+
+
+ Gets the original values of the parent entity or complex property.
+ That is, the original values that contains the value for this property.
+
+ The parent original values.
+
+
+
+ A delegate that reads the value of this property.
+ May be null if there is no way to set the value due to missing accessors on the type.
+
+
+
+
+ A delegate that sets the value of this property.
+ May be null if there is no way to set the value due to missing accessors on the type.
+
+
+
+
+ Gets or sets the original value.
+ Note that complex properties are returned as objects, not property values.
+
+
+
+
+ Gets or sets the current value.
+ Note that complex properties are returned as objects, not property values.
+ Also, for complex properties, the object returned is the actual complex object from the entity
+ and setting the complex object causes the actual object passed to be set onto the entity.
+
+ The current value.
+
+
+
+ Gets or sets a value indicating whether this property is modified.
+
+
+
+
+ Gets the property metadata.
+
+ The property metadata.
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entry.
+ The property info.
+
+
+
+ Creates a delegate that will get the value of this property.
+
+ The delegate.
+
+
+
+ Creates a delegate that will set the value of this property.
+
+ The delegate.
+
+
+
+ Returns true if the property of the entity that this property is ultimately part
+ of is set as modified. Since this is a property of an entity this method returns
+ true if the property is modified.
+
+ True if the entity property is modified.
+
+
+
+ Sets the property of the entity that this property is ultimately part of to modified.
+ Since this is a property of an entity this method marks it as modified.
+
+
+
+
+ Rejects changes to this property.
+
+
+
+
+ Walks the tree from a property of a complex property back up to the top-level
+ complex property and then checks whether or not DetectChanges still considers
+ the complex property to be modified. If it does not, then the complex property
+ is marked as Unchanged.
+
+
+
+
+ Returns parent property, or null if this is a property on the top-level entity.
+
+
+
+
+ Gets the current values of the parent entity.
+ That is, the current values that contains the value for this property.
+
+ The parent current values.
+
+
+
+ Gets the original values of the parent entity.
+ That is, the original values that contains the value for this property.
+
+ The parent original values.
+
+
+
+ A concrete implementation of used for properties of complex objects.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The parent property entry.
+ The property metadata.
+
+
+
+ Creates a delegate that will get the value of this property.
+
+ The delegate.
+
+
+
+ Creates a delegate that will set the value of this property.
+
+ The delegate.
+
+
+
+ Returns true if the property of the entity that this property is ultimately part
+ of is set as modified. Since this is a property of a complex object
+ this method returns true if the top-level complex property on the entity is modified.
+
+ True if the entity property is modified.
+
+
+
+ Sets the property of the entity that this property is ultimately part of to modified.
+ Since this is a property of a complex object this method marks the top-level
+ complex property as modified.
+
+
+
+
+ Rejects changes to this property.
+ Since this is a property of a complex object this method rejects changes to the top-level
+ complex property.
+
+
+
+
+ Walks the tree from a property of a complex property back up to the top-level
+ complex property and then checks whether or not DetectChanges still considers
+ the complex property to be modified. If it does not, then the complex property
+ is marked as Unchanged.
+
+
+
+
+ Returns parent property, or null if this is a property on the top-level entity.
+
+
+
+
+ Gets the current values of the parent complex property.
+ That is, the current values that contains the value for this property.
+
+ The parent current values.
+
+
+
+ Gets the original values of the parent complex property.
+ That is, the original values that contains the value for this property.
+
+ The parent original values.
+
+
+
+ The internal class used to implement ,
+ and .
+ This internal class contains all the common implementation between the generic and non-generic
+ entry classes and also allows for a clean internal factoring without compromising the public API.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The internal entity entry.
+ The navigation metadata.
+
+
+
+ Gets the navigation property value from the object.
+ For reference navigation properties, this means getting the value from the
+ object.
+
+ The entity.
+ The navigation property value.
+
+
+
+ Sets the navigation property value onto the object.
+ For reference navigation properties, this means setting the value onto the
+ object.
+
+ The entity.
+ The value.
+
+
+
+ Sets the given value on the given which must be an
+ .
+ This method is setup in such a way that it can easily be used by CreateDelegate without any
+ dynamic code generation needed.
+
+ The type of the related entity.
+ The entity reference.
+ The value.
+
+
+
+ Creates a new non-generic backed by this internal entry.
+ The runtime type of the DbMemberEntry created will be or a subtype of it.
+
+ The new entry.
+
+
+
+ Creates a new generic backed by this internal entry.
+ The runtime type of the DbMemberEntry created will be or a subtype of it.
+
+ The type of the entity.
+ The type of the property.
+ The new entry.
+
+
+
+ Gets or sets the current value of the navigation property. The current value is
+ the entity that the navigation property references or the collection of references
+ for a collection property.
+
+ The current value.
+
+
+
+ Contains metadata about a member of an entity type or complex type.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The type that the property is declared on.
+ Type of the property.
+ The property name.
+
+
+
+ Creates a new the runtime type of which will be
+ determined by the metadata.
+
+ The entity entry to which the member belongs.
+ The parent property entry if the new entry is nested, otherwise null.
+ The new entry.
+
+
+
+ Gets the type of the member for which this is metadata.
+
+ The type of the member entry.
+
+
+
+ Gets the name of the property.
+
+ The name.
+
+
+
+ Gets the type of the entity or complex object that on which the member is declared.
+
+ The type that the member is declared on.
+
+
+
+ Gets the type of element for the property, which for non-collection properties
+ is the same as the MemberType and which for collection properties is the type
+ of element contained in the collection.
+
+ The type of the element.
+
+
+
+ Gets the type of the member, which for collection properties is the type
+ of the collection rather than the type in the collection.
+
+ The type of the member.
+
+
+
+ The types of member entries supported.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The type that the property is declared on.
+ Type of the property.
+ The property name.
+ if set to true this is a collection nav prop.
+
+
+
+ Creates a new the runtime type of which will be
+ determined by the metadata.
+
+ The entity entry to which the member belongs.
+ The parent property entry which will always be null for navigation entries.
+ The new entry.
+
+
+
+ Gets the type of the member for which this is metadata.
+
+ The type of the member entry.
+
+
+
+ Gets the type of the member, which for collection properties is the type
+ of the collection rather than the type in the collection.
+
+ The type of the member.
+
+
+
+ Contains metadata for a property of a complex object or entity.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The type that the property is declared on.
+ Type of the property.
+ The property name.
+ if set to true the property is mapped in the EDM.
+ if set to true the property is a complex property.
+
+
+
+ Validates that the given name is a property of the declaring type (either on the CLR type or in the EDM)
+ and that it is a complex or scalar property rather than a nav property and then returns metadata about
+ the property.
+
+ The internal context.
+ The type that the property is declared on.
+ The type of property requested, which may be 'object' if any type can be accepted.
+ Name of the property.
+ Metadata about the property, or null if the property does not exist or is a navigation property.
+
+
+
+ Creates a new the runtime type of which will be
+ determined by the metadata.
+
+ The entity entry to which the member belongs.
+ The parent property entry if the new entry is nested, otherwise null.
+ The new entry.
+
+
+
+ Gets a value indicating whether this is a complex property.
+ That is, not whether or not this is a property on a complex object, but rather if the
+ property itself is a complex property.
+
+
+ true if this instance is complex; otherwise, false .
+
+
+
+
+ Gets the type of the member for which this is metadata.
+
+ The type of the member entry.
+
+
+
+ Gets a value indicating whether this instance is mapped in the EDM.
+
+ true if this instance is mapped; otherwise, false .
+
+
+
+ Gets the type of the member, which for collection properties is the type
+ of the collection rather than the type in the collection.
+
+ The type of the member.
+
+
+
+ An implementation of that wraps an existing set but makes
+ it read-only.
+
+
+
+
+
+ Initializes a new instance of the class wrapped around
+ another existing set.
+
+ The existing set.
+
+
+
+ This is a temporary adapter class that wraps an and
+ presents it as an . This class will be removed once
+ we roll into the System.Data.Entity assembly. See
+ for more details.
+
+
+
+
+ Helper class that extends Tuple to give the Item1 and Item2 properties more meaningful names.
+
+
+
+
+ Creates a new pair of the given EntitySet and BaseType.
+
+
+
+
+ The EntitySet part of the pair.
+
+
+
+
+ The BaseType part of the pair.
+
+
+
+
+ Helper class that extends Tuple to give the Item1 and Item2 properties more meaningful names.
+
+
+
+
+ Creates a new pair of the given database initializer delegate and a flag
+ indicating whether or not it is locked.
+
+
+
+
+ The initializer delegate.
+
+
+
+
+ A flag indicating whether or not the initializer is locked and should not be changed.
+
+
+
+
+ Represents a raw SQL query against the context for any type where the results are never
+ associated with an entity set and are never tracked.
+
+
+
+
+ Represents a raw SQL query against the context that may be for entities in an entity set
+ or for some other non-entity element type.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The SQL.
+ The parameters.
+
+
+
+ If the query is would track entities, then this method returns a new query that will
+ not track entities.
+
+ A no-tracking query.
+
+
+
+ Executes the query and returns an enumerator for the results.
+
+ The query results.
+
+
+
+ Throws an exception indicating that binding directly to a store query is not supported.
+
+
+ Never returns; always throws.
+
+
+
+
+ Returns a that contains the SQL string that was set
+ when the query was created. The parameters are not included.
+
+
+ A that represents this instance.
+
+
+
+
+ Gets the SQL query string,
+
+ The SQL query.
+
+
+
+ Gets the parameters.
+
+ The parameters.
+
+
+
+ Returns false .
+
+ false .
+
+
+
+ Initializes a new instance of the class.
+
+ The internal context.
+ Type of the element.
+ The SQL.
+ The parameters.
+
+
+
+ Returns this query since it can never be a tracking query.
+
+ This instance.
+
+
+
+ Executes the query and returns an enumerator for the results.
+
+ The query results.
+
+
+
+ Generic wrapper around to allow results to be
+ returned as generic
+
+ The type of the element.
+
+
+
+ Executes the query and returns an enumerator for the elements.
+
+ An
+
+ object that can be used to iterate through the elements.
+
+
+
+ Executes the query and returns an enumerator for the elements.
+
+
+ An object that can be used to iterate through the elements.
+
+
+
+
+ Returns a that contains the SQL string that was set
+ when the query was created. The parameters are not included.
+
+
+ A that represents this instance.
+
+
+
+
+ Throws an exception indicating that binding directly to a store query is not supported.
+
+
+ Never returns; always throws.
+
+
+
+
+ Returns false .
+
+ false .
+
+
+
+ Represents a raw SQL query against the context for entities in an entity set.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The set.
+ The SQL.
+ if set to true then the entities will not be tracked.
+ The parameters.
+
+
+
+ If the query is would track entities, then this method returns a new query that will
+ not track entities.
+
+ A no-tracking query.
+
+
+
+ Executes the query and returns an enumerator for the results.
+
+ The query results.
+
+
+
+ Gets a value indicating whether this instance is set to track entities or not.
+
+
+ true if this instance is no-tracking; otherwise, false .
+
+
+
+
+ A LazyInternalConnection object manages information that can be used to create a DbConnection object and
+ is responsible for creating that object and disposing it.
+
+
+
+
+ Creates a new LazyInternalConnection using convention to calculate the connection.
+ The DbConnection object will be created lazily on demand and will be disposed when the LazyInternalConnection is disposed.
+
+ Either the database name or a connection string.
+
+
+
+ Creates a new LazyInternalConnection targeting a specific database.
+ The DbConnection object will be created lazily on demand and will be disposed when the LazyInternalConnection is disposed.
+
+ The connection to target.
+
+
+
+ Creates an from metadata in the connection. This method must
+ only be called if ConnectionHasModel returns true.
+
+ The newly created context.
+
+
+
+ Disposes the underlying DbConnection.
+ Note that dispose actually puts the LazyInternalConnection back to its initial state such that
+ it can be used again.
+
+
+
+
+
+ Searches the app.config/web.config file for a connection that matches the given name.
+ The connection might be a store connection or an EF connection.
+
+ The connection name.
+
+ True if a connection from the app.config file was found and used.
+
+
+
+ Attempts to locate a connection entry in the configuration based on the supplied context name.
+
+ The name to search for.
+ The configuration to search in.
+ Connection string if found, otherwise null.
+
+
+
+ Initializes the connection based on a connection string.
+
+ The settings to initialize from.
+
+
+
+ Returns the underlying DbConnection, creating it first if it does not already exist.
+
+
+
+
+ Returns the origin of the underlying connection string.
+
+
+
+
+ Gets the name of the underlying connection string.
+
+
+
+
+ Returns a key consisting of the connection type and connection string.
+ If this is an EntityConnection then the metadata path is included in the key returned.
+
+
+
+
+
+
+
+
+ Gets a value indicating whether the connection is an EF connection which therefore contains
+ metadata specifying the model, or instead is a store connection, in which case it contains no
+ model info.
+
+ true if connection contain model info; otherwise, false .
+
+
+
+ Gets a value indicating if the lazy connection has been initialized.
+
+
+
+
+ A is a concrete type that will lazily create the
+ underlying when needed. The created is owned by the
+ internal context and will be disposed when the internal context is disposed.
+
+
+
+
+ Constructs a for the given owner that will be initialized
+ on first use.
+
+ The owner .
+ Responsible for creating a connection lazily when the context is used for the first time.
+ The model, or null if it will be created by convention
+
+
+
+ Returns the underlying without causing the underlying database to be created
+ or the database initialization strategy to be executed.
+ This is used to get a context that can then be used for database creation/initialization.
+
+
+
+
+ Saves all changes made in this context to the underlying database, but only if the
+ context has been initialized. If the context has not been initialized, then this
+ method does nothing because there is nothing to do; in particular, it does not
+ cause the context to be initialized.
+
+ The number of objects written to the underlying database.
+
+
+
+ Disposes the context. The underlying is also disposed.
+ The connection to the database ( object) is also disposed if it was created by
+ the context, otherwise it is not disposed.
+
+
+
+
+
+
+
+ Initializes the underlying .
+
+
+
+
+ Creates an immutable, cacheable representation of the model defined by this builder.
+ This model can be used to create an or can be passed to a
+ constructor to create a for this model.
+
+
+
+
+
+ Creates and configures the instance that will be used to build the
+ .
+
+ The builder.
+
+
+
+ Marks the database as having not been initialized. This is called when the app calls Database.Delete so
+ that the database if the app attempts to then use the database again it will be re-initialized automatically.
+
+
+
+
+ Marks the database as having been initialized without actually running the .
+
+
+
+
+ Runs the unless it has already been run or there
+ is no initializer for this context type in which case this method does nothing.
+
+
+
+
+ Performs some action (which may do nothing) in such a way that it is guaranteed only to be run
+ once for the model and connection in this app domain, unless it fails by throwing an exception,
+ in which case it will be re-tried next time the context is initialized.
+
+ The action.
+
+
+
+ Returns the underlying .
+
+
+
+
+ The compiled model created from the Code First pipeline, or null if Code First was
+ not used to create this context.
+ Causes the Code First pipeline to be run to create the model if it has not already been
+ created.
+
+
+
+
+ The actually being used, which may be the
+ temp context for initialization or the real context.
+
+
+
+
+ The connection underlying this context. Accessing this property does not cause the context
+ to be initialized, only its connection.
+
+
+
+
+ The connection string as originally applied to the context. This is used to perform operations
+ that need the connection string in a non-mutated form, such as with security info still intact.
+
+
+
+
+ Returns the origin of the underlying connection string.
+
+
+
+
+ Gets or sets an object representing a config file used for looking for DefaultConnectionFactory entries
+ and connection strings.
+
+
+
+
+ Gets the name of the underlying connection string.
+
+
+
+
+ Gets or sets the provider details to be used when building the EDM model.
+
+
+
+
+
+
+
+ Gets or sets a custom OnModelCreating action.
+
+
+
+
+ Gets the default database initializer to use for this context if no other has been registered.
+ For code first this property returns a instance.
+ For database/model first, this property returns null.
+
+ The default initializer.
+
+
+
+ Gets or sets a value indicating whether lazy loading is enabled.
+ If the exists, then this property acts as a wrapper over the flag stored there.
+ If the has not been created yet, then we store the value given so we can later
+ use it when we create the . This allows the flag to be changed, for example in
+ a DbContext constructor, without it causing the to be created.
+
+
+
+
+ Gets or sets a value indicating whether proxy creation is enabled.
+ If the ObjectContext exists, then this property acts as a wrapper over the flag stored there.
+ If the ObjectContext has not been created yet, then we store the value given so we can later
+ use it when we create the ObjectContext. This allows the flag to be changed, for example in
+ a DbContext constructor, without it causing the ObjectContext to be created.
+
+
+
+
+ A wrapping query provider that performs expression transformation and then delegates
+ to the provider. The objects returned are always instances
+ of . This provider is associated with generic objects.
+
+
+
+
+ Creates a provider that wraps the given provider.
+
+ The provider to wrap.
+
+
+
+ Performs expression replacement and then delegates to the wrapped provider before wrapping
+ the returned as a .
+
+
+
+
+ Performs expression replacement and then delegates to the wrapped provider before wrapping
+ the returned as a where T is determined
+ from the element type of the ObjectQuery.
+
+
+
+
+ By default, calls the same method on the wrapped provider.
+
+
+
+
+ By default, calls the same method on the wrapped provider.
+
+
+
+
+ Creates an appropriate generic IQueryable using Reflection and the underlying ElementType of
+ the given ObjectQuery.
+
+
+
+
+ Performs expression replacement and then delegates to the wrapped provider to create an
+ .
+
+
+
+
+ Wraps the given as a where T is determined
+ from the element type of the ObjectQuery.
+
+
+
+
+ Gets the internal context.
+
+ The internal context.
+
+
+
+ A LINQ expression visitor that finds uses with equivalent
+ instances.
+
+
+
+
+ Replaces calls to DbContext.Set() with an expression for the equivalent .
+
+ The node to replace.
+ A new node, which may have had the replacement made.
+
+
+
+ Replaces a or property with a constant expression
+ for the underlying .
+
+ The node to replace.
+ A new node, which may have had the replacement made.
+
+
+
+ Processes the fields in each constant expression and replaces instances with
+ the underlying ObjectQuery instance. This handles cases where the query has a closure
+ containing values.
+
+
+
+
+ Gets a value from the given member, or returns null
+ if the member doesn't contain a DbContext instance.
+
+ The expression for the object for the member, which may be null for a static member.
+ The member.
+ The context or null.
+
+
+
+ Gets the instance from the given instance or static member, returning null
+ if the member does not contain a DbContext instance.
+
+ The member.
+ The value of the object to get the instance from, or null if the member is static.
+ The context instance or null.
+
+
+
+ Takes a or and creates an expression
+ for the underlying .
+
+
+
+
+ Takes a or and extracts the underlying .
+
+
+
+
+ A non-generic interface implemented by that allows operations on
+ any query object without knowing the type to which it applies.
+
+
+
+
+ An interface implemented by .
+
+ The type of the element.
+
+
+
+ A non-generic interface implemented by that allows operations on
+ any set object without knowing the type to which it applies.
+
+
+
+
+ An interface implemented by .
+
+
+
+
+ An instance of this internal class is created whenever an instance of the public
+ class is needed. This allows the public surface to be non-generic, while the runtime type created
+ still implements .
+
+ The type of the element.
+
+
+
+ Creates a new query that will be backed by the given internal query object.
+
+ The backing query.
+
+
+
+ See comments in .
+
+
+
+
+ See comments in .
+
+
+
+
+ Gets the enumeration of this query causing it to be executed against the store.
+
+ An enumerator for the query
+
+
+
+ Gets the underlying internal query object.
+
+ The internal query.
+
+
+
+ An instance of this internal class is created whenever an instance of the public
+ class is needed. This allows the public surface to be non-generic, while the runtime type created
+ still implements .
+
+ The type of the entity.
+
+
+
+ Creates a new set that will be backed by the given internal set.
+
+ The internal set.
+
+
+
+ Creates an instance of this class. This method is used with CreateDelegate to cache a delegate
+ that can create a generic instance without calling MakeGenericType every time.
+
+
+ The internal set to wrap, or null if a new internal set should be created.
+ The set.
+
+
+
+ See comments in .
+
+
+
+
+ See comments in .
+
+
+
+
+ See comments in .
+
+
+
+
+ See comments in .
+
+
+
+
+ See comments in .
+
+
+
+
+ Gets the enumeration of this query causing it to be executed against the store.
+
+ An enumerator for the query
+
+
+
+ Gets the underlying internal query object.
+
+ The internal query.
+
+
+
+ Gets the underlying internal set.
+
+ The internal set.
+
+
+
+ See comments in .
+
+
+
+
+ An InternalQuery underlies every instance of DbSet and DbQuery. It acts to lazily initialize a InternalContext as well
+ as an ObjectQuery and EntitySet the first time that it is used. The InternalQuery also acts to expose necessary
+ information to other parts of the design in a controlled manner without adding a lot of internal methods and
+ properties to the DbSet and DbQuery classes themselves.
+
+ The type of entity to query for.
+
+
+
+ Creates a new query that will be backed by the given InternalContext.
+
+ The backing context.
+
+
+
+ Creates a new internal query based on the information in an existing query together with
+ a new underlying ObjectQuery.
+
+
+
+
+ Resets the query to its uninitialized state so that it will be re-lazy initialized the next
+ time it is used. This allows the ObjectContext backing a DbContext to be switched out.
+
+
+
+
+ Updates the underlying ObjectQuery with the given include path.
+
+ The include path.
+ A new query containing the defined include path.
+
+
+
+ Returns a new query where the entities returned will not be cached in the .
+
+ A new query with NoTracking applied.
+
+
+
+ Performs lazy initialization of the underlying ObjectContext, ObjectQuery, and EntitySet objects
+ so that the query can be used.
+
+
+
+
+ Returns a representation of the underlying query, equivalent
+ to ToTraceString on ObjectQuery.
+
+
+ The query string.
+
+
+
+
+ Gets the enumeration of this query causing it to be executed against the store.
+
+ An enumerator for the query
+
+
+
+ Gets the enumeration of this query causing it to be executed against the store.
+
+ An enumerator for the query
+
+
+
+ The underlying InternalContext.
+
+
+
+
+ The underlying ObjectQuery.
+
+
+
+
+ The underlying ObjectQuery.
+
+
+
+
+ The LINQ query expression.
+
+
+
+
+ The LINQ query provider for the underlying .
+
+
+
+
+ The IQueryable element type.
+
+
+
+
+ Creates a new query that will be backed by the given InternalContext.
+
+ The backing context.
+
+
+
+ Resets the set to its uninitialized state so that it will be re-lazy initialized the next
+ time it is used. This allows the ObjectContext backing a DbContext to be switched out.
+
+
+
+
+ Finds an entity with the given primary key values.
+ If an entity with the given primary key values exists in the context, then it is
+ returned immediately without making a request to the store. Otherwise, a request
+ is made to the store for an entity with the given primary key values and this entity,
+ if found, is attached to the context and returned. If no entity is found in the
+ context or the store, then null is returned.
+
+
+ The ordering of composite key values is as defined in the EDM, which is in turn as defined in
+ the designer, by the Code First fluent API, or by the DataMember attribute.
+
+ The values of the primary key for the entity to be found.
+ The entity found, or null.
+ Thrown if multiple entities exist in the context with the primary key values given.
+ Thrown if the type of entity is not part of the data model for this context.
+ Thrown if the types of the key values do not match the types of the key values for the entity type to be found.
+ Thrown if the context has been disposed.
+
+
+
+ Finds an entity in the state manager with the given primary key values, or returns null
+ if no such entity can be found. This includes looking for Added entities with the given
+ key values.
+
+
+
+
+ Finds an entity in the store with the given primary key values, or returns null
+ if no such entity can be found. This code is adapted from TryGetObjectByKey to
+ include type checking in the query.
+
+
+
+
+ Attaches the given entity to the context underlying the set. That is, the entity is placed
+ into the context in the Unchanged state, just as if it had been read from the database.
+
+
+ Attach is used to repopulate a context with an entity that is known to already exist in the database.
+ SaveChanges will therefore not attempt to insert an attached entity into the database because
+ it is assumed to already be there.
+ Note that entities that are already in the context in some other state will have their state set
+ to Unchanged. Attach is a no-op if the entity is already in the context in the Unchanged state.
+ This method is virtual so that it can be mocked.
+
+ The entity to attach.
+
+
+
+ Adds the given entity to the context underlying the set in the Added state such that it will
+ be inserted into the database when SaveChanges is called.
+
+
+ Note that entities that are already in the context in some other state will have their state set
+ to Added. Add is a no-op if the entity is already in the context in the Added state.
+ This method is virtual so that it can be mocked.
+
+ The entity to add.
+
+
+
+ Marks the given entity as Deleted such that it will be deleted from the database when SaveChanges
+ is called. Note that the entity must exist in the context in some other state before this method
+ is called.
+
+
+ Note that if the entity exists in the context in the Added state, then this method
+ will cause it to be detached from the context. This is because an Added entity is assumed not to
+ exist in the database such that trying to delete it does not make sense.
+ This method is virtual so that it can be mocked.
+
+ The entity to remove.
+
+
+
+ This method checks whether an entity is already in the context. If it is, then the state
+ is changed to the new state given. If it isn't, then the action delegate is executed to
+ either Add or Attach the entity.
+
+ A delegate to Add or Attach the entity.
+ The new state to give the entity if it is already in the context.
+ The entity.
+ Name of the method.
+
+
+
+ Creates a new instance of an entity for the type of this set.
+ Note that this instance is NOT added or attached to the set.
+ The instance returned will be a proxy if the underlying context is configured to create
+ proxies and the entity type meets the requirements for creating a proxy.
+
+ The entity instance, which may be a proxy.
+
+
+
+ Creates a new instance of an entity for the type of this set or for a type derived
+ from the type of this set.
+ Note that this instance is NOT added or attached to the set.
+ The instance returned will be a proxy if the underlying context is configured to create
+ proxies and the entity type meets the requirements for creating a proxy.
+
+ The type of entity to create.
+ The entity instance, which may be a proxy.
+
+
+
+ Performs lazy initialization of the underlying ObjectContext, ObjectQuery, and EntitySet objects
+ so that the query can be used.
+ This method is virtual so that it can be mocked.
+
+
+
+
+ Attempts to perform lazy initialization of the underlying ObjectContext, ObjectQuery, and EntitySet objects
+ so that o-space loading has happened and the query can be used. This method doesn't throw if the type
+ for the set is not mapped.
+
+
+
+
+ Creates an underlying for this set.
+
+ if set to true then the query is set to be no-tracking.
+ The query.
+
+
+
+ Returns a representation of the underlying query, equivalent
+ to ToTraceString on ObjectQuery.
+
+
+ The query string.
+
+
+
+
+ Updates the underlying ObjectQuery with the given include path.
+
+ The include path.
+ A new query containing the defined include path.
+
+
+
+ Returns a new query where the entities returned will not be cached in the .
+
+ A new query with NoTracking applied.
+
+
+
+ Executes the given SQL query against the database materializing entities into the entity set that
+ backs this set.
+
+ The SQL quey.
+ if true then the entities are not tracked, otherwise they are.
+ The parameters.
+ The query results.
+
+
+
+ Gets the enumeration of this query causing it to be executed against the store.
+
+ An enumerator for the query
+
+
+
+ Gets the ObservableCollection representing the local view for the set based on this query.
+
+
+
+
+ The underlying ObjectQuery. Accessing this property will trigger lazy initialization of the query.
+
+
+
+
+ The underlying EntitySet name. Accessing this property will trigger lazy initialization of the query.
+
+
+
+
+ The underlying EntitySet name, quoted for ESQL. Accessing this property will trigger lazy initialization of the query.
+
+
+
+
+ The underlying EntitySet. Accessing this property will trigger lazy initialization of the query.
+
+
+
+
+ The base type for the underlying entity set. Accessing this property will trigger lazy initialization of the query.
+
+
+
+
+ The underlying InternalContext. Accessing this property will trigger lazy initialization of the query.
+
+
+
+
+ The LINQ query expression.
+
+
+
+
+ The LINQ query provider for the underlying .
+
+
+
+
+ A wrapping query provider that performs expression transformation and then delegates
+ to the provider. The objects returned
+ are always instances of when the generic CreateQuery method is
+ used and are instances of when the non-generic CreateQuery method
+ is used. This provider is associated with non-generic objects.
+
+
+
+
+ Creates a provider that wraps the given provider.
+
+ The provider to wrap.
+
+
+
+ Performs expression replacement and then delegates to the wrapped provider before wrapping
+ the returned as a .
+
+
+
+
+ Delegates to the wrapped provider except returns instances of .
+
+
+
+
+ Creates an appropriate generic IQueryable using Reflection and the underlying ElementType of
+ the given ObjectQuery.
+
+
+
+
+ Extends to create a sortable binding list that stays in
+ sync with an underlying . That is, when items are added
+ or removed from the binding list, they are added or removed from the ObservableCollecion, and
+ vice-versa.
+
+ The list element type.
+
+
+
+ An extended BindingList implementation that implements sorting.
+ This class was adapted from the LINQ to SQL class of the same name.
+
+ The element type.
+
+
+
+ Initializes a new instance of the class with the
+ the given underlying list. Note that sorting is dependent on having an actual
+ rather than some other ICollection implementation.
+
+ The list.
+
+
+
+ Applies sorting to the list.
+
+ The property to sort by.
+ The sort direction.
+
+
+
+ Stops sorting.
+
+
+
+
+ Gets a value indicating whether this list is sorted.
+
+
+ true if this instance is sorted; otherwise, false .
+
+
+
+
+ Gets the sort direction.
+
+ The sort direction.
+
+
+
+ Gets the sort property being used to sort.
+
+ The sort property.
+
+
+
+ Returns true indicating that this list supports sorting.
+
+ true .
+
+
+
+ Implements comparing for the implementation.
+
+
+
+
+ Initializes a new instance of the class
+ for sorting the list.
+
+ The property to sort by.
+ The sort direction.
+
+
+
+ Compares two instances of items in the list.
+
+ The left item to compare.
+ The right item to compare.
+
+
+
+
+ Determines whether this instance can sort for the specified type.
+
+ The type.
+
+ true if this instance can sort for the specified type; otherwise, false .
+
+
+
+
+ Determines whether this instance can sort for the specified type using IComparable.
+
+ The type.
+
+ true if this instance can sort for the specified type; otherwise, false .
+
+
+
+
+ Determines whether this instance can sort for the specified type using ToString.
+
+ The type.
+
+ true if this instance can sort for the specified type; otherwise, false .
+
+
+
+
+ Initializes a new instance of a binding list backed by the given
+
+ The obervable collection.
+
+
+
+ Creates a new item to be added to the binding list.
+
+ The new item.
+
+
+
+ Cancels adding of a new item that was started with AddNew.
+
+ Index of the item.
+
+
+
+ Removes all items from the binding list and underlying ObservableCollection.
+
+
+
+
+ Ends the process of adding a new item that was started with AddNew.
+
+ Index of the item.
+
+
+
+ Inserts the item into the binding list at the given index.
+
+ The index.
+ The item.
+
+
+
+ Removes the item at the specified index.
+
+ The index.
+
+
+
+ Sets the item into the list at the given position.
+
+ The index to insert at.
+ The item.
+
+
+
+ Event handler to update the binding list when the underlying observable collection changes.
+
+ The sender.
+ Data indicating how the collection has changed.
+
+
+
+ Adds the item to the underlying observable collection.
+
+ The item.
+
+
+
+ Removes the item from the underlying from observable collection.
+
+ The item.
+
+
+
+ Adapted from to allow the initializer to take an input object and
+ to do one-time initialization that only has side-effects and doesn't return a value.
+
+ The type of the input.
+
+
+
+ Initializes a new instance of the class.
+
+ The action.
+
+
+
+ Performs the action unless it has already been successfully performed before.
+
+ The input to the action; ignored if the action has already succeeded.
+
+
+
+ Adapted from to allow the initializer to take an input object and
+ to retry initialization if it has previously failed.
+
+
+ This class can only be used to initialize reference types that will not be null when
+ initialized.
+
+ The type of the input.
+ The type of the result.
+
+
+
+ Initializes a new instance of the class.
+
+ The value factory.
+
+
+
+ Gets the value, possibly by running the initializer if it has not been run before or
+ if all previous times it ran resulted in exceptions.
+
+ The input to the initializer; ignored if initialization has already succeeded.
+ The initialized object.
+
+
+
+ Validates a property of a given EDM complex type.
+
+
+ This is a composite validator for a complex property of an entity.
+
+
+
+
+ Validates a property of a given EDM property type.
+
+
+ This is a composite validator for a property of an entity or a complex type.
+
+
+
+
+ Simple validators for the corresponding property.
+
+
+
+
+ Name of the property the validator was created for.
+
+
+
+
+ Creates an instance of for a given EDM property.
+
+ The EDM property name.
+ Validators used to validate the given property.
+
+
+
+ Validates a property.
+
+ Validation context. Never null.
+ Property to validate. Never null.
+ Validation errors as . Empty if no errors. Never null.
+
+
+
+
+ Simple validators for the corresponding property.
+
+
+
+
+ Gets the name of the property the validator was created for.
+
+
+
+
+ The complex type validator.
+
+
+
+
+ Creates an instance of for a given complex property.
+
+ The complex property name.
+ Validators used to validate the given property.
+ Complex type validator.
+
+
+
+ Validates a complex property.
+
+ Validation context. Never null.
+ Property to validate. Never null.
+ Validation errors as . Empty if no errors. Never null.
+
+
+
+
+ Validator used to validate a property of a given EDM ComplexType.
+
+
+ This is a composite validator.
+
+
+
+
+ Validator used to validate an entity of a given EDM Type.
+
+
+ This is a composite validator for an EDM Type.
+
+
+
+
+ Creates an instance for a given EDM type.
+
+ Property validators.
+ Type level validators.
+
+
+
+ Validates an instance.
+
+ Entity validation context. Must not be null.
+ The entry for the complex property. Null if validating an entity.
+ instance. Never null.
+
+ Protected so it doesn't appear on EntityValidator.
+
+
+
+
+ Validates type properties. Any validation errors will be added to
+ collection.
+
+
+ Validation context. Must not be null.
+
+
+ Collection of validation errors. Any validation errors will be added to it.
+
+ The entry for the complex property. Null if validating an entity.
+
+ Note that will be modified by this method. Errors should be only added,
+ never removed or changed. Taking a collection as a modifiable parameter saves a couple of memory allocations
+ and a merge of validation error lists per entity.
+
+
+
+
+ Returns a validator for a child property.
+
+ Name of the child property for which to return a validator.
+
+ Validator for a child property. Possibly null if there are no validators for requested property.
+
+
+
+
+ Creates an instance for a given EDM complex type.
+
+ Property validators.
+ Type level validators.
+
+
+
+ Validates an instance.
+
+ Entity validation context. Must not be null.
+ The entry for the complex property. Null if validating an entity.
+ instance. Never null.
+
+
+
+ Validates type properties. Any validation errors will be added to
+ collection.
+
+
+ Validation context. Must not be null.
+
+
+ Collection of validation errors. Any validation errors will be added to it.
+
+ The entry for the complex property. Null if validating an entity.
+
+ Note that will be modified by this method. Errors should be only added,
+ never removed or changed. Taking a collection as a modifiable parameter saves a couple of memory allocations
+ and a merge of validation error lists per entity.
+
+
+
+
+ Contains information needed to validate an entity or its properties.
+
+
+
+
+ The entity being validated or the entity that owns the property being validated.
+
+
+
+
+ Initializes a new instance of EntityValidationContext class.
+
+
+ The entity being validated or the entity that owns the property being validated.
+
+
+ External contexts needed for validation.
+
+
+
+
+ External context needed for validation.
+
+
+
+
+ Gets the entity being validated or the entity that owns the property being validated.
+
+
+
+
+ Validator used to validate an entity of a given EDM EntityType.
+
+
+ This is a top level, composite validator. This is also an entry point to getting an entity
+ validated as validation of an entity is always started by calling Validate method on this type.
+
+
+
+
+ Creates an instance for a given EDM entity type.
+
+ Property validators.
+ Entity type level validators.
+
+
+
+ Validates an entity.
+
+ Entity validation context. Must not be null.
+ instance. Never null.
+
+
+
+ Validates type properties. Any validation errors will be added to
+ collection.
+
+
+ Validation context. Must not be null.
+
+
+ Collection of validation errors. Any validation errors will be added to it.
+
+ The entry for the complex property. Null if validating an entity.
+
+ Note that will be modified by this method. Errors should be only added,
+ never removed or changed. Taking a collection as a modifiable parameter saves a couple of memory allocations
+ and a merge of validation error lists per entity.
+
+
+
+
+ Builds validators based on s specified on entity CLR types and properties
+ as well as based on presence of implementation on entity and complex
+ type CLR types. It's not sealed and not static for mocking purposes.
+
+
+
+
+ Builds an for the given .
+
+ The entity entry to build the validator for.
+ Whether the currently processed type is the target type or one of the ancestor types.
+
+
+ for the given . Possibly null
+ if no validation has been specified for this entity type.
+
+
+
+
+ Builds the validator for a given and the corresponding
+ .
+
+ The CLR type that corresponds to the EDM complex type.
+ The EDM complex type that type level validation is built for.
+ A for the given complex type. May be null if no validation specified.
+
+
+
+ Extracted method from BuildEntityValidator and BuildComplexTypeValidator
+
+
+
+
+ Build validators for the and the corresponding
+ or .
+
+ Properties to build validators for.
+ Non-navigation EDM properties.
+ Navigation EDM properties.
+ A list of validators. Possibly empty, never null.
+
+
+
+ Builds a for the given and the corresponding
+ . If the property is a complex type, type level validators will be built here as
+ well.
+
+ The CLR property to build the validator for.
+ The EDM property to build the validator for.
+
+ for the given . Possibly null
+ if no validation has been specified for this property.
+
+
+
+
+ Builds a for the given transient .
+
+ The CLR property to build the validator for.
+
+ for the given . Possibly null
+ if no validation has been specified for this property.
+
+
+
+
+ Builds s for given that derive from
+ .
+
+ Attributes used to build validators.
+
+ A list of s built from .
+ Possibly empty, never null.
+
+
+
+
+ Returns all non-static non-indexed CLR properties from the .
+
+ The CLR to get the properties from.
+
+ A collection of CLR properties. Possibly empty, never null.
+
+
+
+
+ Builds validators based on the facets of :
+ * If .Nullable facet set to false adds a validator equivalent to the RequiredAttribute
+ * If the .MaxLength facet is specified adds a validator equivalent to the MaxLengthAttribute.
+ However the validator isn't added if .IsMaxLength has been set to true.
+
+ The CLR property to build the facet validators for.
+ The property for which facet validators will be created
+ A collection of validators.
+
+
+
+ Abstracts simple validators used to validate entities and properties.
+
+
+
+
+ Validates an entity or a property.
+
+ Validation context. Never null.
+ Property to validate. Can be null for type level validation.
+ Validation error as . Empty if no errors. Never null.
+
+
+
+
+ Contract for IValidator.Validate method.
+
+ Validation context.
+ Property.
+ Nothing - always throws.
+
+
+
+ Validates entities or complex types implementing IValidatableObject interface.
+
+
+
+
+ Display attribute used to specify the display name for an entity or complex property.
+
+
+
+
+ Validates an entity or a complex type implementing IValidatableObject interface.
+ This method is virtual to allow mocking.
+
+ Validation context. Never null.
+
+ Property to validate. Null if this is the entity that will be validated. Never null if this
+ is the complex type that will be validated.
+
+ Validation error as . Empty if no errors. Never null.
+
+
+ Note that is used to figure out what needs to be validated. If it not null the complex
+ type will be validated otherwise the entity will be validated.
+ Also if this is an IValidatableObject complex type but the instance (.CurrentValue) is null we won't validate
+ anything and will not return any errors. The reason for this is that Validation is supposed to validate using
+ information the user provided and not some additional implicit rules. (ObjectContext will throw for operations
+ that involve null complex properties).
+
+
+
+
+ Validates a property, complex property or an entity using validation attributes the property
+ or the complex/entity type is decorated with.
+
+
+ Note that this class is used for validating primitive properties using attributes declared on the property
+ (property level validation) and complex properties and entities using attributes declared on the type
+ (type level validation).
+
+
+
+
+ Display attribute used to specify the display name for a property or entity.
+
+
+
+
+ Validation attribute used to validate a property or an entity.
+
+
+
+
+ Creates an instance of class.
+
+
+ Validation attribute used to validate a property or an entity.
+
+
+
+
+ Validates a property or an entity.
+
+ Validation context. Never null.
+ Property to validate. Null for entity validation. Not null for property validation.
+
+
+ Validation errors as . Empty if no errors, never null.
+
+
+
+
+ Used to cache and retrieve generated validators and to create context for validating entities or properties.
+
+
+
+
+ Collection of validators keyed by the entity CLR type. Note that if there's no validation for a given type
+ it will be associated with a null validator.
+
+
+
+
+ Initializes a new instance of class.
+
+
+
+
+ Returns a validator to validate .
+
+ Entity the validator is requested for.
+
+ to validate . Possibly null if no validation
+ has been specified for the entity.
+
+
+
+
+ Returns a validator to validate .
+
+ Navigation property the validator is requested for.
+
+ Validator to validate . Possibly null if no validation
+ has been specified for the requested property.
+
+
+
+
+ Gets a validator for the .
+
+ Entity validator.
+ Property to get a validator for.
+
+ Validator to validate . Possibly null if there is no validation for the
+ .
+
+
+ For complex properties this method walks up the type hierarchy to get to the entity level and then goes down
+ and gets a validator for the child property that is an ancestor of the property to validate. If a validator
+ returned for an ancestor is null it means that there is no validation defined beneath and the method just
+ propagates (and eventually returns) null.
+
+
+
+
+ Creates for .
+
+ Entity entry for which a validation context needs to be created.
+ User defined dictionary containing additional info for custom validation. This parameter is optional and can be null.
+ An instance of class.
+
+
+
+
+ A wrapper around EntityKey that allows key/values pairs that have null values to
+ be used. This allows Added entities with null key values to be searched for in
+ the ObjectStateManager.
+
+
+
+ The key name/key value pairs, where some key values may be null
+
+
+
+ Creates a new WrappedEntityKey instance.
+
+ The entity set that the key belongs to.
+ The fully qualified name of the given entity set.
+ The key values, which may be null or contain null values.
+ The name of the parameter passed for keyValue by the user, which is used when throwing exceptions.
+
+
+
+ True if any of the key values are null, which means that the EntityKey will also be null.
+
+
+
+
+ An actual EntityKey, or null if any of the key values are null.
+
+
+
+
+ The key name/key value pairs of the key, in which some of the key values may be null.
+
+
+
+
+ Allows configuration to be performed for an complex type in a model.
+
+ A ComplexTypeConfiguration can be obtained via the ComplexType method on
+ or a custom type derived from ComplexTypeConfiguration
+ can be registered via the Configurations property on .
+
+ The complex type to be configured.
+
+
+
+ Allows configuration to be performed for a type in a model.
+
+ The type to be configured.
+
+
+
+ Configures a property that is defined on this type.
+
+ The type of the property being configured.
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+ The type of the property being configured.
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Configures a property that is defined on this type.
+
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to configure the property.
+
+
+
+ Excludes a property from the model so that it will not be mapped to the database.
+
+ The type of the property to be ignored.
+
+ A lambda expression representing the property to be configured.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+
+
+
+ Initializes a new instance of ComplexTypeConfiguration
+
+
+
+
+ Allows derived configuration classes for entities and complex types to be registered with a .
+
+
+ Derived configuration classes are created by deriving from
+ or and using a type to be included in the model as the generic
+ parameter.
+
+ Configuration can be performed without creating derived configuration classes via the Entity and ComplexType
+ methods on .
+
+
+
+
+ Adds an to the .
+ Only one can be added for each type in a model.
+
+ The entity type being configured.
+ The entity type configuration to be added.
+ The same ConfigurationRegistrar instance so that multiple calls can be chained.
+
+
+
+ Adds an to the .
+ Only one can be added for each type in a model.
+
+ The complex type being configured.
+ The complex type configuration to be added
+ The same ConfigurationRegistrar instance so that multiple calls can be chained.
+
+
+
+ Allows the conventions used by a instance to be customized.
+ Currently removal of one or more default conventions is the only supported operation.
+ The default conventions can be found in the System.Data.Entity.ModelConfiguration.Conventions namespace.
+
+
+
+
+ Disables a convention for the .
+ The default conventions that are available for removal can be found in the System.Data.Entity.ModelConfiguration.Conventions namespace.
+
+ The type of the convention to be disabled.
+
+
+
+ Configures the table and column mapping for an entity type or a sub-set of properties from an entity type.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+ The entity type to be mapped.
+
+
+
+ Configures the properties that will be included in this mapping fragment.
+ If this method is not called then all properties that have not yet been
+ included in a mapping fragment will be configured.
+
+ An anonymous type including the properties to be mapped.
+
+ A lambda expression to an anonymous type that contains the properties to be mapped.
+ C#: t => new { t.Id, t.Property1, t.Property2 }
+ VB.Net: Function(t) New With { p.Id, t.Property1, t.Property2 }
+
+
+
+
+ Re-maps all properties inherited from base types.
+
+ When configuring a derived type to be mapped to a separate table this will cause all properties to
+ be included in the table rather than just the non-inherited properties. This is known as
+ Table per Concrete Type (TPC) mapping.
+
+
+
+
+ Configures the table name to be mapped to.
+
+ Name of the table.
+
+
+
+ Configures the table name and schema to be mapped to.
+
+ Name of the table.
+ Schema of the table.
+
+
+
+ Configures the discriminator column used to differentiate between types in an inheritance hierarchy.
+
+ The name of the discriminator column.
+ A configuration object to further configure the discriminator column and values.
+
+
+
+ Configures the discriminator condition used to differentiate between types in an inheritance hierarchy.
+
+ The type of the property being used to discriminate between types.
+
+ A lambda expression representing the property being used to discriminate between types.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object to further configure the discriminator condition.
+
+
+
+ Moves a foreign key constraint from oldTable to newTable and updates column references
+
+
+
+
+ Move any FK constraints that are now completely in newTable and used to refer to oldColumn
+
+
+
+
+ Configures a condition used to discriminate between types in an inheritance hierarchy based on the values assigned to a property.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the condition to require a value in the property.
+
+ Rows that do not have a value assigned to column that this property is stored in are
+ assumed to be of the base type of this entity type.
+
+
+
+
+ Populate the table mapping structure
+
+
+
+
+ Sets nullability for association set mappings' foreign keys for 1:* and 1:0..1 associations
+ when no base types share the the association set mapping's table
+
+
+
+
+ Makes sure only the required property mappings are present
+
+
+
+
+ Determines if the table and entity type need mapping, and if not, removes the existing entity type mapping
+
+
+
+
+ Configures a database column used to store a string values.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the column to allow the maximum length supported by the database provider.
+
+ The same StringColumnConfiguration instance so that multiple calls can be chained.
+
+
+
+
+ Configures the column to be fixed length.
+ Use HasMaxLength to set the length that the property is fixed to.
+
+ The same StringColumnConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the column to be variable length.
+ Columns are variable length by default.
+
+ The same StringColumnConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the column to be optional.
+
+ The same StringColumnConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the column to be required.
+
+ The same StringColumnConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the data type of the database column.
+
+ Name of the database provider specific data type.
+ The same StringColumnConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the order of the database column.
+
+ The order that this column should appear in the database table.
+ The same StringColumnConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the column to support Unicode string content.
+
+ The same StringColumnConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures whether or not the column supports Unicode string content.
+
+
+ Value indicating if the column supports Unicode string content or not.
+ Specifying 'null' will remove the Unicode facet from the column.
+ Specifying 'null' will cause the same runtime behavior as specifying 'false'.
+
+ The same StringColumnConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures a discriminator column used to differentiate between types in an inheritance hierarchy.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the discriminator value used to identify the entity type being
+ configured from other types in the inheritance hierarchy.
+
+ Type of the discriminator value.
+ The value to be used to identify the entity type.
+ A configuration object to configure the column used to store discriminator values.
+
+
+
+ Configures the discriminator value used to identify the entity type being
+ configured from other types in the inheritance hierarchy.
+
+ Type of the discriminator value.
+ The value to be used to identify the entity type.
+ A configuration object to configure the column used to store discriminator values.
+
+
+
+ Configures the discriminator value used to identify the entity type being
+ configured from other types in the inheritance hierarchy.
+
+ The value to be used to identify the entity type.
+ A configuration object to configure the column used to store discriminator values.
+
+
+
+ Initializes configurations in the ModelConfiguration so that configuration data
+ is in a single place
+
+
+
+
+ Configures a many relationship from an entity type.
+
+ The entity type that the relationship originates from.
+ The entity type that the relationship targets.
+
+
+
+ Configures the relationship to be many:many with a navigation property on the other side of the relationship.
+
+
+ An lambda expression representing the navigation property on the other end of the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be many:many without a navigation property on the other side of the relationship.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be many:required with a navigation property on the other side of the relationship.
+
+
+ An lambda expression representing the navigation property on the other end of the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be many:required without a navigation property on the other side of the relationship.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be many:optional with a navigation property on the other side of the relationship.
+
+
+ An lambda expression representing the navigation property on the other end of the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be many:optional without a navigation property on the other side of the relationship.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures an optional relationship from an entity type.
+
+ The entity type that the relationship originates from.
+ The entity type that the relationship targets.
+
+
+
+ Configures the relationship to be optional:many with a navigation property on the other side of the relationship.
+
+
+ An lambda expression representing the navigation property on the other end of the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be optional:many without a navigation property on the other side of the relationship.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be optional:required with a navigation property on the other side of the relationship.
+
+
+ An lambda expression representing the navigation property on the other end of the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be optional:required without a navigation property on the other side of the relationship.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be optional:optional with a navigation property on the other side of the relationship.
+ The entity type being configured will be the dependent and contain a foreign key to the principal.
+ The entity type that the relationship targets will be the principal in the relationship.
+
+
+ An lambda expression representing the navigation property on the other end of the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be optional:optional without a navigation property on the other side of the relationship.
+ The entity type being configured will be the dependent and contain a foreign key to the principal.
+ The entity type that the relationship targets will be the principal in the relationship.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be optional:optional with a navigation property on the other side of the relationship.
+ The entity type being configured will be the principal in the relationship.
+ The entity type that the relationship targets will be the dependent and contain a foreign key to the principal.
+
+
+ A lambda expression representing the navigation property on the other end of the relationship.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be optional:optional without a navigation property on the other side of the relationship.
+ The entity type being configured will be the principal in the relationship.
+ The entity type that the relationship targets will be the dependent and contain a foreign key to the principal.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures an required relationship from an entity type.
+
+ The entity type that the relationship originates from.
+ The entity type that the relationship targets.
+
+
+
+ Configures the relationship to be required:many with a navigation property on the other side of the relationship.
+
+
+ An lambda expression representing the navigation property on the other end of the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be required:many without a navigation property on the other side of the relationship.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be required:optional with a navigation property on the other side of the relationship.
+
+
+ An lambda expression representing the navigation property on the other end of the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be required:optional without a navigation property on the other side of the relationship.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be required:required with a navigation property on the other side of the relationship.
+ The entity type being configured will be the dependent and contain a foreign key to the principal.
+ The entity type that the relationship targets will be the principal in the relationship.
+
+
+ An lambda expression representing the navigation property on the other end of the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be required:required without a navigation property on the other side of the relationship.
+ The entity type being configured will be the dependent and contain a foreign key to the principal.
+ The entity type that the relationship targets will be the principal in the relationship.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be required:required with a navigation property on the other side of the relationship.
+ The entity type being configured will be the principal in the relationship.
+ The entity type that the relationship targets will be the dependent and contain a foreign key to the principal.
+
+
+ An lambda expression representing the navigation property on the other end of the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the relationship to be required:required without a navigation property on the other side of the relationship.
+ The entity type being configured will be the principal in the relationship.
+ The entity type that the relationship targets will be the dependent and contain a foreign key to the principal.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Base class for configuring a property on an entity type or complex type.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ True if the NavigationProperty's declaring type is the principal end, false if it is not, null if it is not known
+
+
+
+
+ Base class for performing configuration of a relationship.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures a relationship that can support cascade on delete functionality.
+
+
+
+
+ Configures cascade delete to be on for the relationship.
+
+
+
+
+ Configures whether or not cascade delete is on for the relationship.
+
+ Value indicating if cascade delete is on or not.
+
+
+
+ Configures a relationship that can support foreign key properties that are exposed in the object model.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+ The dependent entity type.
+
+
+
+ Configures a relationship that can only support foreign key properties that are not exposed in the object model.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the relationship to use foreign key property(s) that are not exposed in the object model.
+ The column(s) and table can be customized by specifying a configuration action.
+ If an empty configuration action is specified then column name(s) will be generated by convention.
+ If foreign key properties are exposed in the object model then use the HasForeignKey method.
+ Not all relationships support exposing foreign key properties in the object model.
+
+ Action that configures the foreign key column(s) and table.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+
+ Configures the relationship to use foreign key property(s) that are exposed in the object model.
+ If the foreign key property(s) are not exposed in the object model then use the Map method.
+
+ The type of the key.
+
+ A lambda expression representing the property to be used as the foreign key.
+ If the foreign key is made up of multiple properties then specify an anonymous type including the properties.
+ When using multiple foreign key properties, the properties must be specified in the same order that the
+ the primary key properties were configured for the principal entity type.
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures the table and column mapping of a relationship that does not expose foreign key properties in the object model.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the name of the column(s) for the foreign key.
+
+
+ The foreign key column names.
+ When using multiple foreign key properties, the properties must be specified in the same order that the
+ the primary key properties were configured for the target entity type.
+
+ The same ForeignKeyAssociationMappingConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the table name that the foreign key column(s) reside in.
+ The table that is specified must already be mapped for the entity type.
+
+ If you want the foreign key(s) to reside in their own table then use the Map method
+ on to perform
+ entity splitting to create the table with just the primary key property. Foreign keys can
+ then be added to the table via this method.
+
+ Name of the table.
+ The same ForeignKeyAssociationMappingConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the table name and schema that the foreign key column(s) reside in.
+ The table that is specified must already be mapped for the entity type.
+
+ If you want the foreign key(s) to reside in their own table then use the Map method
+ on to perform
+ entity splitting to create the table with just the primary key property. Foreign keys can
+ then be added to the table via this method.
+
+ Name of the table.
+ Schema of the table.
+ The same ForeignKeyAssociationMappingConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the table and column mapping of a many:many relationship.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the join table name for the relationship.
+
+ Name of the table.
+ The same ManyToManyAssociationMappingConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the join table name and schema for the relationship.
+
+ Name of the table.
+ Schema of the table.
+ The same ManyToManyAssociationMappingConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the name of the column(s) for the left foreign key.
+ The left foreign key represents the navigation property specified in the HasMany call.
+
+
+ The foreign key column names.
+ When using multiple foreign key properties, the properties must be specified in the same order that the
+ the primary key properties were configured for the target entity type.
+
+ The same ManyToManyAssociationMappingConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the name of the column(s) for the right foreign key.
+ The right foreign key represents the navigation property specified in the WithMany call.
+
+
+ The foreign key column names.
+ When using multiple foreign key properties, the properties must be specified in the same order that the
+ the primary key properties were configured for the target entity type.
+
+ The same ManyToManyAssociationMappingConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures a many:many relationship.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the foreign key column(s) and table used to store the relationship.
+
+ Action that configures the foreign key column(s) and table.
+
+
+
+ Used to configure a property of an entity type or complex type.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Used to configure a property with length facets for an entity type or complex type.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Used to configure a primitive property of an entity type or complex type.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the property to be optional.
+ The database column used to store this property will be nullable.
+
+ The same PrimitivePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be required.
+ The database column used to store this property will be non-nullable.
+
+ The same PrimitivePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures how values for the property are generated by the database.
+
+
+ The pattern used to generate values for the property in the database.
+ Setting 'null' will remove the database generated pattern facet from the property.
+ Setting 'null' will cause the same runtime behavior as specifying 'None'.
+
+ The same PrimitivePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be used as an optimistic concurrency token.
+
+ The same PrimitivePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures whether or not the property is to be used as an optimistic concurrency token.
+
+
+ Value indicating if the property is a concurrency token or not.
+ Specifying 'null' will remove the concurrency token facet from the property.
+ Specifying 'null' will cause the same runtime behavior as specifying 'false'.
+
+ The same PrimitivePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the data type of the database column used to store the property.
+
+ Name of the database provider specific data type.
+ The same PrimitivePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the name of the database column used to store the property.
+
+ The name of the column.
+ The same PrimitivePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the order of the database column used to store the property.
+ This method is also used to specify key ordering when an entity type has a composite key.
+
+ The order that this column should appear in the database table.
+ The same PrimitivePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to allow the maximum length supported by the database provider.
+
+ The same LengthPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to have the specified maximum length.
+
+
+ The maximum length for the property.
+ Setting 'null' will remove any maximum length restriction from the property and a default length will be used for the database column.
+
+ The same LengthPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be fixed length.
+ Use HasMaxLength to set the length that the property is fixed to.
+
+ The same LengthPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be variable length.
+ Properties are variable length by default.
+
+ The same LengthPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to allow the maximum length supported by the database provider.
+
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to have the specified maximum length.
+
+
+ The maximum length for the property.
+ Setting 'null' will remove any maximum length restriction from the property.
+
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be fixed length.
+ Use HasMaxLength to set the length that the property is fixed to.
+
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be variable length.
+ properties are variable length by default.
+
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be optional.
+ The database column used to store this property will be nullable.
+ properties are optional by default.
+
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be required.
+ The database column used to store this property will be non-nullable.
+
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures how values for the property are generated by the database.
+
+
+ The pattern used to generate values for the property in the database.
+ Setting 'null' will remove the database generated pattern facet from the property.
+ Setting 'null' will cause the same runtime behavior as specifying 'None'.
+
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be used as an optimistic concurrency token.
+
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures whether or not the property is to be used as an optimistic concurrency token.
+
+
+ Value indicating if the property is a concurrency token or not.
+ Specifying 'null' will remove the concurrency token facet from the property.
+ Specifying 'null' will cause the same runtime behavior as specifying 'false'.
+
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the name of the database column used to store the property.
+
+ The name of the column.
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the data type of the database column used to store the property.
+
+ Name of the database provider specific data type.
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the order of the database column used to store the property.
+ This method is also used to specify key ordering when an entity type has a composite key.
+
+ The order that this column should appear in the database table.
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be a row version in the database.
+ The actual data type will vary depending on the database provider being used.
+ Setting the property to be a row version will automatically configure it to be an
+ optimistic concurrency token.
+
+ The same BinaryPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Used to configure a property of an entity type or complex type.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the property to be optional.
+ The database column used to store this property will be nullable.
+
+ The same DateTimePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be required.
+ The database column used to store this property will be non-nullable.
+ properties are required by default.
+
+ The same DateTimePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures how values for the property are generated by the database.
+
+
+ The pattern used to generate values for the property in the database.
+ Setting 'null' will remove the database generated pattern facet from the property.
+ Setting 'null' will cause the same runtime behavior as specifying 'None'.
+
+ The same DateTimePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be used as an optimistic concurrency token.
+
+ The same DateTimePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures whether or not the property is to be used as an optimistic concurrency token.
+
+
+ Value indicating if the property is a concurrency token or not.
+ Specifying 'null' will remove the concurrency token facet from the property.
+ Specifying 'null' will cause the same runtime behavior as specifying 'false'.
+
+ The same DateTimePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the name of the database column used to store the property.
+
+ The name of the column.
+ The same DateTimePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the data type of the database column used to store the property.
+
+ Name of the database provider specific data type.
+ The same DateTimePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the order of the database column used to store the property.
+ This method is also used to specify key ordering when an entity type has a composite key.
+
+ The order that this column should appear in the database table.
+ The same DateTimePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the precision of the property.
+ If the database provider does not support precision for the data type of the column then the value is ignored.
+
+ Precision of the property.
+ The same DateTimePropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Used to configure a property of an entity type or complex type.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the property to be optional.
+ The database column used to store this property will be nullable.
+
+ The same DecimalPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be required.
+ The database column used to store this property will be non-nullable.
+ properties are required by default.
+
+ The same DecimalPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures how values for the property are generated by the database.
+
+
+ The pattern used to generate values for the property in the database.
+ Setting 'null' will remove the database generated pattern facet from the property.
+ Setting 'null' will cause the same runtime behavior as specifying 'None'.
+
+ The same DecimalPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be used as an optimistic concurrency token.
+
+ The same DecimalPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures whether or not the property is to be used as an optimistic concurrency token.
+
+
+ Value indicating if the property is a concurrency token or not.
+ Specifying 'null' will remove the concurrency token facet from the property.
+ Specifying 'null' will cause the same runtime behavior as specifying 'false'.
+
+ The same DecimalPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the name of the database column used to store the property.
+
+ The name of the column.
+ The same DecimalPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the data type of the database column used to store the property.
+
+ Name of the database provider specific data type.
+ The same DecimalPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the order of the database column used to store the property.
+ This method is also used to specify key ordering when an entity type has a composite key.
+
+ The order that this column should appear in the database table.
+ The same DecimalPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the precision and scale of the property.
+
+ The precision of the property.
+ The scale of the property.
+ The same DecimalPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Used to configure a property of an entity type or complex type.
+ This configuration functionality is available via the Code First Fluent API, see .
+
+
+
+
+ Configures the property to allow the maximum length supported by the database provider.
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to have the specified maximum length.
+
+
+ The maximum length for the property.
+ Setting 'null' will remove any maximum length restriction from the property and a default length will be used for the database column..
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be fixed length.
+ Use HasMaxLength to set the length that the property is fixed to.
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be variable length.
+ properties are variable length by default.
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be optional.
+ The database column used to store this property will be nullable.
+ properties are optional by default.
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be required.
+ The database column used to store this property will be non-nullable.
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures how values for the property are generated by the database.
+
+
+ The pattern used to generate values for the property in the database.
+ Setting 'null' will remove the database generated pattern facet from the property.
+ Setting 'null' will cause the same runtime behavior as specifying 'None'.
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to be used as an optimistic concurrency token.
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures whether or not the property is to be used as an optimistic concurrency token.
+
+
+ Value indicating if the property is a concurrency token or not.
+ Specifying 'null' will remove the concurrency token facet from the property.
+ Specifying 'null' will cause the same runtime behavior as specifying 'false'.
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the name of the database column used to store the property.
+
+ The name of the column.
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the data type of the database column used to store the property.
+
+ Name of the database provider specific data type.
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the order of the database column used to store the property.
+ This method is also used to specify key ordering when an entity type has a composite key.
+
+ The order that this column should appear in the database table.
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the property to support Unicode string content.
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures whether or not the property supports Unicode string content.
+
+
+ Value indicating if the property supports Unicode string content or not.
+ Specifying 'null' will remove the Unicode facet from the property.
+ Specifying 'null' will cause the same runtime behavior as specifying 'false'.
+
+ The same StringPropertyConfiguration instance so that multiple calls can be chained.
+
+
+
+ Indicates what parts of a configuration are overridable.
+
+
+
+
+ Nothing in the configuration is overridable.
+
+
+
+
+ The configuration values related to C-Space are overridable.
+
+
+
+
+ The configuration values only related to S-Space are overridable.
+
+
+
+
+ True if this configuration can be replaced in the model configuration, false otherwise
+ This is only set to true for configurations that are registered automatically via the DbContext
+
+
+
+
+ Base class for conventions that process CLR attributes found in the model.
+
+ The type of member to look for.
+ The type of the configuration to look for.
+ The type of the attribute to look for.
+
+
+
+ Convention to process instances of found on properties in the model
+
+
+
+
+ Convention to process instances of found on properties in the model.
+
+
+
+
+ Convention to process instances of found on properties in the model.
+
+
+
+
+ Convention to process instances of found on foreign key properties in the model.
+
+
+
+
+ Convention to process instances of found on properties in the model.
+
+
+
+
+ Convention to process instances of found on properties in the model.
+
+
+
+
+ Convention to process instances of found on properties in the model.
+
+
+
+
+ Convention to process instances of found on properties in the model.
+
+
+
+
+ Convention to process instances of found on navigation properties in the model.
+
+
+
+
+ Convention to process instances of found on primitive properties in the model.
+
+
+
+
+ Convention to process instances of found on properties in the model.
+
+
+
+
+ Convention to process instances of found on properties in the model.
+
+
+
+
+ Convention to process instances of found on types in the model.
+
+
+
+
+ Convention to process instances of found on types in the model.
+
+
+
+
+ Convention to process instances of found on types in the model.
+
+
+
+
+ Convention to detect navigation properties to be inverses of each other when only one pair
+ of navigation properties exists between the related types.
+
+
+
+
+ Convention to configure a type as a complex type if it has no primary key, no mapped base type and no navigation properties.
+
+
+
+
+ Convention to convert any data types that were explicitly specified, via data annotations or API,
+ to be lower case. The default SqlClient provider is case sensitive and requires data types to be lower case. This convention
+ allows the and API to be case insensitive.
+
+
+
+
+ Convention to add a cascade delete to the join table from both tables involved in a many to many relationship.
+
+
+
+
+ Convention to ensure an invalid/unsupported mapping is not created when mapping inherited properties
+
+
+
+
+ Convention to set the table name to be a pluralized version of the entity type name.
+
+
+
+
+ Convention to set precision to 18 and scale to 2 for decimal properties.
+
+
+
+
+ Convention to move primary key properties to appear first.
+
+
+
+
+ Convention to distinguish between optional and required relationships based on CLR nullability of the foreign key property.
+
+
+
+
+ Convention to process instances of found on navigation properties in the model.
+
+
+
+
+ Convention to detect primary key properties.
+ Recognized naming patterns in order of precedence are:
+ 1. 'Id'
+ 2. [type name]Id
+ Primary key detection is case insensitive.
+
+
+
+
+ Convention to discover foreign key properties whose names are a combination
+ of the dependent navigation property name and the principal type primary key property name(s).
+
+
+
+
+ Convention to enable cascade delete for any required relationships.
+
+
+
+
+ Convention to configure the primary key(s) of the dependent entity type as foreign key(s) in a one:one relationship.
+
+
+
+
+ Convention to set the entity set name to be a pluralized version of the entity type name.
+
+
+
+
+ Convention to discover foreign key properties whose names match the principal type primary key property name(s).
+
+
+
+
+ Convention to set a default maximum length of 128 for properties whose type supports length facets.
+
+
+
+
+ Convention to set a default maximum length of 4000 for properties whose type supports length facets when SqlCe is the provider.
+
+
+
+
+ Convention to configure integer primary keys to be identity.
+
+
+
+
+ Checks for the PK property being an FK in a different table. A PK which is also an FK but
+ in the same table is used for table splitting and can still be an identity column because
+ the update pipeline is only inserting into one column of one table.
+
+
+
+
+ Convention to discover foreign key properties whose names are a combination
+ of the principal type name and the principal type primary key property name(s).
+
+
+
+
+ This class provide service for both the singularization and pluralization, it takes the word pairs
+ in the ctor following the rules that the first one is singular and the second one is plural.
+
+
+
+
+ Factory method for PluralizationService. Only support english pluralization.
+ Please set the PluralizationService on the System.Data.Entity.Design.EntityModelSchemaGenerator
+ to extend the service to other locales.
+
+ CultureInfo
+ PluralizationService
+
+
+
+ captalize the return word if the parameter is capitalized
+ if word is "Table", then return "Tables"
+
+
+
+
+
+
+
+ separate one combine word in to two parts, prefix word and the last word(suffix word)
+
+
+
+
+
+
+
+ return true when the word is "[\s]*" or leading or tailing with spaces
+ or contains non alphabetical characters
+
+
+
+
+
+
+ This method allow you to add word to internal PluralizationService of English.
+ If the singluar or the plural value was already added by this method, then an ArgumentException will be thrown.
+
+
+
+
+
+
+ Attempt to determine the principal and dependent ends of this association.
+
+ The following table illustrates the solution space.
+
+ Source | Target || Prin | Dep |
+ -------|--------||-------|-------|
+ 1 | 1 || - | - |
+ 1 | 0..1 || Sr | Ta |
+ 1 | * || Sr | Ta |
+ 0..1 | 1 || Ta | Sr |
+ 0..1 | 0..1 || - | - |
+ 0..1 | * || Sr | Ta |
+ * | 1 || Ta | Sr |
+ * | 0..1 || Ta | Sr |
+ * | * || - | - |
+
+
+
+
+ Allows configuration to be performed for an entity type in a model.
+
+ An EntityTypeConfiguration can be obtained via the Entity method on
+ or a custom type derived from EntityTypeConfiguration
+ can be registered via the Configurations property on .
+
+
+
+
+ Initializes a new instance of EntityTypeConfiguration
+
+
+
+
+ Configures the primary key property(s) for this entity type.
+
+ The type of the key.
+
+ A lambda expression representing the property to be used as the primary key.
+ C#: t => t.Id
+ VB.Net: Function(t) t.Id
+
+ If the primary key is made up of multiple properties then specify an anonymous type including the properties.
+ C#: t => new { t.Id1, t.Id2 }
+ VB.Net: Function(t) New With { t.Id1, t.Id2 }
+
+ The same EntityTypeConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the entity set name to be used for this entity type.
+ The entity set name can only be configured for the base type in each set.
+
+ The name of the entity set.
+ The same EntityTypeConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures the table name that this entity type is mapped to.
+
+ The name of the table.
+
+
+
+ Configures the table name that this entity type is mapped to.
+
+ The name of the table.
+ The database schema of the table.
+
+
+
+ Allows advanced configuration related to how this entity type is mapped to the database schema.
+ By default, any configuration will also apply to any type derived from this entity type.
+
+ Derived types can be configured via the overload of Map that configures a derived type or
+ by using an EntityTypeConfiguration for the derived type.
+
+ The properties of an entity can be split between multiple tables using multiple Map calls.
+
+ Calls to Map are additive, subsequent calls will not override configuration already preformed via Map.
+
+ An action that performs configuration against an .
+ The same EntityTypeConfiguration instance so that multiple calls can be chained.
+
+
+
+ Allows advanced configuration related to how a derived entity type is mapped to the database schema.
+ Calls to Map are additive, subsequent calls will not override configuration already preformed via Map.
+
+ The derived entity type to be configured.
+ An action that performs configuration against an .
+ The same EntityTypeConfiguration instance so that multiple calls can be chained.
+
+
+
+ Configures an optional relationship from this entity type.
+ Instances of the entity type will be able to be saved to the database without this relationship being specified.
+ The foreign key in the database will be nullable.
+
+ The type of the entity at the other end of the relationship.
+
+ A lambda expression representing the navigation property for the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures a required relationship from this entity type.
+ Instances of the entity type will not be able to be saved to the database unless this relationship is specified.
+ The foreign key in the database will be non-nullable.
+
+ The type of the entity at the other end of the relationship.
+
+ A lambda expression representing the navigation property for the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Configures a many relationship from this entity type.
+
+ The type of the entity at the other end of the relationship.
+
+ A lambda expression representing the navigation property for the relationship.
+ C#: t => t.MyProperty
+ VB.Net: Function(t) t.MyProperty
+
+ A configuration object that can be used to further configure the relationship.
+
+
+
+ Handles mapping from a CLR property to an EDM assocation and nav. prop.
+
+
+
+
+ Exception thrown by during model creation when an invalid model is generated.
+
+
+
+
+ Initializes a new instance of ModelValidationException
+
+
+
+
+ Initializes a new instance of ModelValidationException
+
+ The exception message.
+
+
+
+ Initializes a new instance of ModelValidationException
+
+ The exception message.
+ The inner exception.
+
+
+
+ Code Contracts hook methods - Called when contracts fail. Here we detect the most common preconditions
+ so we can throw the correct exceptions. It also means that we can write preconditions using the
+ simplest Contract.Requires() form.
+
+
+
+
+ Returns true if a variable of this type can be assigned a null value
+
+
+
+ True if a reference type or a nullable value type,
+ false otherwise
+
+
+
+
+ Exception thrown from when validating entities fails.
+
+
+
+
+ Initializes a new instance of DbEntityValidationException
+
+
+
+
+ Initializes a new instance of DbEntityValidationException
+
+ The exception message.
+
+
+
+ Initializes a new instance of DbEntityValidationException
+
+ The exception message.
+ Validation results.
+
+
+
+ Initializes a new instance of DbEntityValidationException
+
+ The exception message.
+ The inner exception.
+
+
+
+ Initializes a new instance of DbEntityValidationException
+
+ The exception message.
+ Validation results.
+ The inner exception.
+
+
+
+ Subscribes the SerializeObjectState event.
+
+
+
+
+ Validation results.
+
+
+
+
+ Holds exception state that will be serialized when the exception is serialized.
+
+
+
+
+ Validation results.
+
+
+
+
+ Completes the deserialization.
+
+ The deserialized object.
+
+
+
+ Validation results.
+
+
+
+
+ Represents validation results for single entity.
+
+
+
+
+ Entity entry the results applies to. Never null.
+
+
+
+
+ List of instances. Never null. Can be empty meaning the entity is valid.
+
+
+
+
+ Creates an instance of class.
+
+
+ Entity entry the results applies to. Never null.
+
+
+ List of instances. Never null. Can be empty meaning the entity is valid.
+
+
+
+
+ Creates an instance of class.
+
+
+ Entity entry the results applies to. Never null.
+
+
+ List of instances. Never null. Can be empty meaning the entity is valid.
+
+
+
+
+ Gets an instance of the results applies to.
+
+
+
+
+ Gets validation errors. Never null.
+
+
+
+
+ Gets an indicator if the entity is valid.
+
+
+
+
+ Exception thrown from when an exception is thrown from the validation
+ code.
+
+
+
+
+ Initializes a new instance of DbUnexpectedValidationException
+
+ The exception message.
+
+
+
+ Initializes a new instance of DbUnexpectedValidationException
+
+ The exception message.
+
+
+
+ Initializes a new instance of DbUnexpectedValidationException
+
+ The exception message.
+ The inner exception.
+
+
+
+ Initializes a new instance of DbUnexpectedValidationException with the specified serialization info and
+ context.
+
+ The serialization info.
+ The streaming context.
+
+
+
+ Validation error. Can be either entity or property level validation error.
+
+
+
+
+ Name of the invalid property. Can be null (e.g. for entity level validations)
+
+
+
+
+ Validation error message.
+
+
+
+
+ Creates an instance of .
+
+ Name of the invalid property. Can be null.
+ Validation error message. Can be null.
+
+
+
+ Gets name of the invalid property.
+
+
+
+
+ Gets validation error message.
+
+
+
+
diff --git a/MVC/bin/MVC.Web.dll b/MVC/bin/MVC.Web.dll
new file mode 100644
index 0000000..8b134bd
Binary files /dev/null and b/MVC/bin/MVC.Web.dll differ
diff --git a/MVC/bin/MVC.Web.pdb b/MVC/bin/MVC.Web.pdb
new file mode 100644
index 0000000..0014940
Binary files /dev/null and b/MVC/bin/MVC.Web.pdb differ
diff --git a/MVC/bin/Microsoft.Web.Mvc.FixedDisplayModes.dll b/MVC/bin/Microsoft.Web.Mvc.FixedDisplayModes.dll
new file mode 100644
index 0000000..d4a30b3
Binary files /dev/null and b/MVC/bin/Microsoft.Web.Mvc.FixedDisplayModes.dll differ
diff --git a/MVC/bin/Sitecore.Buckets.dll b/MVC/bin/Sitecore.Buckets.dll
new file mode 100644
index 0000000..dda69e1
Binary files /dev/null and b/MVC/bin/Sitecore.Buckets.dll differ
diff --git a/MVC/bin/Sitecore.ContentSearch.Linq.dll b/MVC/bin/Sitecore.ContentSearch.Linq.dll
new file mode 100644
index 0000000..5efa639
Binary files /dev/null and b/MVC/bin/Sitecore.ContentSearch.Linq.dll differ
diff --git a/MVC/bin/Sitecore.ContentSearch.dll b/MVC/bin/Sitecore.ContentSearch.dll
new file mode 100644
index 0000000..115f2e4
Binary files /dev/null and b/MVC/bin/Sitecore.ContentSearch.dll differ
diff --git a/MVC/bin/System.Web.Optimization.dll b/MVC/bin/System.Web.Optimization.dll
new file mode 100644
index 0000000..1caba6c
Binary files /dev/null and b/MVC/bin/System.Web.Optimization.dll differ
diff --git a/MVC/bin/System.Web.Providers.dll b/MVC/bin/System.Web.Providers.dll
new file mode 100644
index 0000000..1b40f44
Binary files /dev/null and b/MVC/bin/System.Web.Providers.dll differ
diff --git a/MVC/bin/Unicorn.dll b/MVC/bin/Unicorn.dll
index 9c5dd2a..189f7d6 100644
Binary files a/MVC/bin/Unicorn.dll and b/MVC/bin/Unicorn.dll differ
diff --git a/MVC/bin/WebGrease.dll b/MVC/bin/WebGrease.dll
new file mode 100644
index 0000000..c4bc0f8
Binary files /dev/null and b/MVC/bin/WebGrease.dll differ
diff --git a/MVC/packages.config b/MVC/packages.config
index 63b0bdf..ec1f283 100644
--- a/MVC/packages.config
+++ b/MVC/packages.config
@@ -1,17 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 064e7bc..75aed9e 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ NOTE: This project shows a variety of examples (see 'What is included?') and pro
## Installation
1. Install a blank instance of Sitecore (this project has been tested with Sitecore 7.1 rev. 140130, but you should be able to use later verisons)
2. Download the Sample Sitecore MVC project and put it in a location outside the site web root (e.g. C:\Projects)
-3. On the same level as the project folders (MVC, MVC.Data, etc), create a **Libraries** folder and copy the Sitecore.Kernel.dll and Sitecore.MVC.dll from your fresh instance of Sitecore
+3. On the same level as the project folders (MVC, MVC.Data, etc), create a **Libraries** folder and copy the Sitecore.Kernel.dll, Sitecore.MVC.dll, and Sitecore.Logging.dll from your fresh instance of Sitecore
4. Open MVC.sln and check that it builds
5. Set up a **Publish Profile** to do a File Deploy to your Sitecore web root (or write a post-build script). To create a Publish Profile:
1. Right-click on the MVC.Tutorial project and choose **Publish...*
@@ -19,15 +19,22 @@ NOTE: This project shows a variety of examples (see 'What is included?') and pro
5. Click 'Next' - if you wish to debug the solution, make sure the dropdown is set to 'Debug'
6. Click 'Publish'
6. The solution contains a **serialization** folder under App_Data - you can either move the serialization folder into the location pointed to by the SerializationFolder setting OR change the SerializationFolder setting to the App_Data/serialization location:
-
```xml
```
7. Browse to http://{yoursite}/Unicorn.aspx (for more information about Unicorn, visit https://github.com/kamsar/Unicorn)
-8. Hit the **Perform Initial Serialization of Default Configuration** button - this will turn the serialized .item files into items in the Sitecore tree
+8. Hit the **Sync Default Configuration Now** button - this will turn the serialized .item files into items in the Sitecore tree
9. Log into Sitecore - you should see items beneath /sitecore/content/Home - e.g. 'silverstone'
10. Perform a smart publish, and browse to http://{yoursite}
+##NOTES:
+- For Data Annotations to work, ensure you have the follow key's in the appSettings section of your web.config;
+```xml
+
+
+```
+- Ensure you have the correct assembly bindings within your web.config for WebGrease (v1.3)
+
## What is included?
### Renderings