`, and ``.
-$font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace !default;
-$font-family-base: $font-family-sans-serif !default;
-
-$font-size-base: 14px !default;
-$font-size-large: ceil(($font-size-base * 1.25)) !default; // ~18px
-$font-size-small: ceil(($font-size-base * 0.85)) !default; // ~12px
-
-$font-size-h1: floor(($font-size-base * 2.6)) !default; // ~36px
-$font-size-h2: floor(($font-size-base * 2.15)) !default; // ~30px
-$font-size-h3: ceil(($font-size-base * 1.7)) !default; // ~24px
-$font-size-h4: ceil(($font-size-base * 1.25)) !default; // ~18px
-$font-size-h5: $font-size-base !default;
-$font-size-h6: ceil(($font-size-base * 0.85)) !default; // ~12px
-
-//** Unit-less `line-height` for use in components like buttons.
-$line-height-base: 1.428571429 !default; // 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)) !default; // ~20px
-
-//** By default, this inherits from the ``.
-$headings-font-family: inherit !default;
-$headings-font-weight: 500 !default;
-$headings-line-height: 1.1 !default;
-$headings-color: inherit !default;
-
-
-//== Iconography
-//
-//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
-
-//** Load fonts from this directory.
-
-// [converter] Asset helpers such as Sprockets and Node.js Mincer do not resolve relative paths
-$icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/") !default;
-
-//** File name for all font files.
-$icon-font-name: "glyphicons-halflings-regular" !default;
-//** Element ID within SVG icon file.
-$icon-font-svg-id: "glyphicons_halflingsregular" !default;
-
-
-//== 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 !default;
-$padding-base-horizontal: 12px !default;
-
-$padding-large-vertical: 10px !default;
-$padding-large-horizontal: 16px !default;
-
-$padding-small-vertical: 5px !default;
-$padding-small-horizontal: 10px !default;
-
-$padding-xs-vertical: 1px !default;
-$padding-xs-horizontal: 5px !default;
-
-$line-height-large: 1.33 !default;
-$line-height-small: 1.5 !default;
-
-$border-radius-base: 4px !default;
-$border-radius-large: 6px !default;
-$border-radius-small: 3px !default;
-
-//** Global color for active items (e.g., navs or dropdowns).
-$component-active-color: #fff !default;
-//** Global background color for active items (e.g., navs or dropdowns).
-$component-active-bg: $brand-primary !default;
-
-//** Width of the `border` for generating carets that indicator dropdowns.
-$caret-width-base: 4px !default;
-//** Carets increase slightly in size for larger components.
-$caret-width-large: 5px !default;
-
-
-//== Tables
-//
-//## Customizes the `.table` component with basic values, each used across all table variations.
-
-//** Padding for ``s and ` `s.
-$table-cell-padding: 8px !default;
-//** Padding for cells in `.table-condensed`.
-$table-condensed-cell-padding: 5px !default;
-
-//** Default background color used for all tables.
-$table-bg: transparent !default;
-//** Background color used for `.table-striped`.
-$table-bg-accent: #f9f9f9 !default;
-//** Background color used for `.table-hover`.
-$table-bg-hover: #f5f5f5 !default;
-$table-bg-active: $table-bg-hover !default;
-
-//** Border color for table and cell borders.
-$table-border-color: #ddd !default;
-
-
-//== Buttons
-//
-//## For each of Bootstrap's buttons, define text, background and border color.
-
-$btn-font-weight: normal !default;
-
-$btn-default-color: #333 !default;
-$btn-default-bg: #fff !default;
-$btn-default-border: #ccc !default;
-
-$btn-primary-color: #fff !default;
-$btn-primary-bg: $brand-primary !default;
-$btn-primary-border: darken($btn-primary-bg, 5%) !default;
-
-$btn-success-color: #fff !default;
-$btn-success-bg: $brand-success !default;
-$btn-success-border: darken($btn-success-bg, 5%) !default;
-
-$btn-info-color: #fff !default;
-$btn-info-bg: $brand-info !default;
-$btn-info-border: darken($btn-info-bg, 5%) !default;
-
-$btn-warning-color: #fff !default;
-$btn-warning-bg: $brand-warning !default;
-$btn-warning-border: darken($btn-warning-bg, 5%) !default;
-
-$btn-danger-color: #fff !default;
-$btn-danger-bg: $brand-danger !default;
-$btn-danger-border: darken($btn-danger-bg, 5%) !default;
-
-$btn-link-disabled-color: $gray-light !default;
-
-
-//== Forms
-//
-//##
-
-//** ` ` background color
-$input-bg: #fff !default;
-//** ` ` background color
-$input-bg-disabled: $gray-lighter !default;
-
-//** Text color for ` `s
-$input-color: $gray !default;
-//** ` ` border color
-$input-border: #ccc !default;
-
-// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
-//** Default `.form-control` border radius
-$input-border-radius: $border-radius-base !default;
-//** Large `.form-control` border radius
-$input-border-radius-large: $border-radius-large !default;
-//** Small `.form-control` border radius
-$input-border-radius-small: $border-radius-small !default;
-
-//** Border color for inputs on focus
-$input-border-focus: #66afe9 !default;
-
-//** Placeholder text color
-$input-color-placeholder: #999 !default;
-
-//** Default `.form-control` height
-$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
-//** Large `.form-control` height
-$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
-//** Small `.form-control` height
-$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
-
-$legend-color: $gray-dark !default;
-$legend-border-color: #e5e5e5 !default;
-
-//** Background color for textual input addons
-$input-group-addon-bg: $gray-lighter !default;
-//** Border color for textual input addons
-$input-group-addon-border-color: $input-border !default;
-
-//** Disabled cursor for form controls and buttons.
-$cursor-disabled: not-allowed !default;
-
-
-//== Dropdowns
-//
-//## Dropdown menu container and contents.
-
-//** Background for the dropdown menu.
-$dropdown-bg: #fff !default;
-//** Dropdown menu `border-color`.
-$dropdown-border: rgba(0,0,0,.15) !default;
-//** Dropdown menu `border-color` **for IE8**.
-$dropdown-fallback-border: #ccc !default;
-//** Divider color for between dropdown items.
-$dropdown-divider-bg: #e5e5e5 !default;
-
-//** Dropdown link text color.
-$dropdown-link-color: $gray-dark !default;
-//** Hover color for dropdown links.
-$dropdown-link-hover-color: darken($gray-dark, 5%) !default;
-//** Hover background for dropdown links.
-$dropdown-link-hover-bg: #f5f5f5 !default;
-
-//** Active dropdown menu item text color.
-$dropdown-link-active-color: $component-active-color !default;
-//** Active dropdown menu item background color.
-$dropdown-link-active-bg: $component-active-bg !default;
-
-//** Disabled dropdown menu item background color.
-$dropdown-link-disabled-color: $gray-light !default;
-
-//** Text color for headers within dropdown menus.
-$dropdown-header-color: $gray-light !default;
-
-//** Deprecated `$dropdown-caret-color` as of v3.1.0
-$dropdown-caret-color: #000 !default;
-
-
-//-- 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 !default;
-$zindex-dropdown: 1000 !default;
-$zindex-popover: 1060 !default;
-$zindex-tooltip: 1070 !default;
-$zindex-navbar-fixed: 1030 !default;
-$zindex-modal: 1040 !default;
-
-
-//== 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 !default;
-//** Deprecated `$screen-xs-min` as of v3.2.0
-$screen-xs-min: $screen-xs !default;
-//** Deprecated `$screen-phone` as of v3.0.1
-$screen-phone: $screen-xs-min !default;
-
-// Small screen / tablet
-//** Deprecated `$screen-sm` as of v3.0.1
-$screen-sm: 768px !default;
-$screen-sm-min: $screen-sm !default;
-//** Deprecated `$screen-tablet` as of v3.0.1
-$screen-tablet: $screen-sm-min !default;
-
-// Medium screen / desktop
-//** Deprecated `$screen-md` as of v3.0.1
-$screen-md: 992px !default;
-$screen-md-min: $screen-md !default;
-//** Deprecated `$screen-desktop` as of v3.0.1
-$screen-desktop: $screen-md-min !default;
-
-// Large screen / wide desktop
-//** Deprecated `$screen-lg` as of v3.0.1
-$screen-lg: 1200px !default;
-$screen-lg-min: $screen-lg !default;
-//** Deprecated `$screen-lg-desktop` as of v3.0.1
-$screen-lg-desktop: $screen-lg-min !default;
-
-// So media queries don't overlap when required, provide a maximum
-$screen-xs-max: ($screen-sm-min - 1) !default;
-$screen-sm-max: ($screen-md-min - 1) !default;
-$screen-md-max: ($screen-lg-min - 1) !default;
-
-
-//== Grid system
-//
-//## Define your custom responsive grid.
-
-//** Number of columns in the grid.
-$grid-columns: 12 !default;
-//** Padding between columns. Gets divided in half for the left and right.
-$grid-gutter-width: 30px !default;
-// Navbar collapse
-//** Point at which the navbar becomes uncollapsed.
-$grid-float-breakpoint: $screen-sm-min !default;
-//** Point at which the navbar begins collapsing.
-$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
-
-
-//== Container sizes
-//
-//## Define the maximum width of `.container` for different screen sizes.
-
-// Small screen / tablet
-$container-tablet: (720px + $grid-gutter-width) !default;
-//** For `$screen-sm-min` and up.
-$container-sm: $container-tablet !default;
-
-// Medium screen / desktop
-$container-desktop: (940px + $grid-gutter-width) !default;
-//** For `$screen-md-min` and up.
-$container-md: $container-desktop !default;
-
-// Large screen / wide desktop
-$container-large-desktop: (1140px + $grid-gutter-width) !default;
-//** For `$screen-lg-min` and up.
-$container-lg: $container-large-desktop !default;
-
-
-//== Navbar
-//
-//##
-
-// Basics of a navbar
-$navbar-height: 50px !default;
-$navbar-margin-bottom: $line-height-computed !default;
-$navbar-border-radius: $border-radius-base !default;
-$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default;
-$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default;
-$navbar-collapse-max-height: 340px !default;
-
-$navbar-default-color: #777 !default;
-$navbar-default-bg: #f8f8f8 !default;
-$navbar-default-border: darken($navbar-default-bg, 6.5%) !default;
-
-// Navbar links
-$navbar-default-link-color: #777 !default;
-$navbar-default-link-hover-color: #333 !default;
-$navbar-default-link-hover-bg: transparent !default;
-$navbar-default-link-active-color: #555 !default;
-$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) !default;
-$navbar-default-link-disabled-color: #ccc !default;
-$navbar-default-link-disabled-bg: transparent !default;
-
-// Navbar brand label
-$navbar-default-brand-color: $navbar-default-link-color !default;
-$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default;
-$navbar-default-brand-hover-bg: transparent !default;
-
-// Navbar toggle
-$navbar-default-toggle-hover-bg: #ddd !default;
-$navbar-default-toggle-icon-bar-bg: #888 !default;
-$navbar-default-toggle-border-color: #ddd !default;
-
-
-// Inverted navbar
-// Reset inverted navbar basics
-$navbar-inverse-color: lighten($gray-light, 15%) !default;
-$navbar-inverse-bg: #222 !default;
-$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default;
-
-// Inverted navbar links
-$navbar-inverse-link-color: lighten($gray-light, 15%) !default;
-$navbar-inverse-link-hover-color: #fff !default;
-$navbar-inverse-link-hover-bg: transparent !default;
-$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default;
-$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default;
-$navbar-inverse-link-disabled-color: #444 !default;
-$navbar-inverse-link-disabled-bg: transparent !default;
-
-// Inverted navbar brand label
-$navbar-inverse-brand-color: $navbar-inverse-link-color !default;
-$navbar-inverse-brand-hover-color: #fff !default;
-$navbar-inverse-brand-hover-bg: transparent !default;
-
-// Inverted navbar toggle
-$navbar-inverse-toggle-hover-bg: #333 !default;
-$navbar-inverse-toggle-icon-bar-bg: #fff !default;
-$navbar-inverse-toggle-border-color: #333 !default;
-
-
-//== Navs
-//
-//##
-
-//=== Shared nav styles
-$nav-link-padding: 10px 15px !default;
-$nav-link-hover-bg: $gray-lighter !default;
-
-$nav-disabled-link-color: $gray-light !default;
-$nav-disabled-link-hover-color: $gray-light !default;
-
-//== Tabs
-$nav-tabs-border-color: #ddd !default;
-
-$nav-tabs-link-hover-border-color: $gray-lighter !default;
-
-$nav-tabs-active-link-hover-bg: $body-bg !default;
-$nav-tabs-active-link-hover-color: $gray !default;
-$nav-tabs-active-link-hover-border-color: #ddd !default;
-
-$nav-tabs-justified-link-border-color: #ddd !default;
-$nav-tabs-justified-active-link-border-color: $body-bg !default;
-
-//== Pills
-$nav-pills-border-radius: $border-radius-base !default;
-$nav-pills-active-link-hover-bg: $component-active-bg !default;
-$nav-pills-active-link-hover-color: $component-active-color !default;
-
-
-//== Pagination
-//
-//##
-
-$pagination-color: $link-color !default;
-$pagination-bg: #fff !default;
-$pagination-border: #ddd !default;
-
-$pagination-hover-color: $link-hover-color !default;
-$pagination-hover-bg: $gray-lighter !default;
-$pagination-hover-border: #ddd !default;
-
-$pagination-active-color: #fff !default;
-$pagination-active-bg: $brand-primary !default;
-$pagination-active-border: $brand-primary !default;
-
-$pagination-disabled-color: $gray-light !default;
-$pagination-disabled-bg: #fff !default;
-$pagination-disabled-border: #ddd !default;
-
-
-//== Pager
-//
-//##
-
-$pager-bg: $pagination-bg !default;
-$pager-border: $pagination-border !default;
-$pager-border-radius: 15px !default;
-
-$pager-hover-bg: $pagination-hover-bg !default;
-
-$pager-active-bg: $pagination-active-bg !default;
-$pager-active-color: $pagination-active-color !default;
-
-$pager-disabled-color: $pagination-disabled-color !default;
-
-
-//== Jumbotron
-//
-//##
-
-$jumbotron-padding: 30px !default;
-$jumbotron-color: inherit !default;
-$jumbotron-bg: $gray-lighter !default;
-$jumbotron-heading-color: inherit !default;
-$jumbotron-font-size: ceil(($font-size-base * 1.5)) !default;
-
-
-//== Form states and alerts
-//
-//## Define colors for form feedback states and, by default, alerts.
-
-$state-success-text: #3c763d !default;
-$state-success-bg: #dff0d8 !default;
-$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default;
-
-$state-info-text: #31708f !default;
-$state-info-bg: #d9edf7 !default;
-$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default;
-
-$state-warning-text: #8a6d3b !default;
-$state-warning-bg: #fcf8e3 !default;
-$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default;
-
-$state-danger-text: #a94442 !default;
-$state-danger-bg: #f2dede !default;
-$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default;
-
-
-//== Tooltips
-//
-//##
-
-//** Tooltip max width
-$tooltip-max-width: 200px !default;
-//** Tooltip text color
-$tooltip-color: #fff !default;
-//** Tooltip background color
-$tooltip-bg: #000 !default;
-$tooltip-opacity: .9 !default;
-
-//** Tooltip arrow width
-$tooltip-arrow-width: 5px !default;
-//** Tooltip arrow color
-$tooltip-arrow-color: $tooltip-bg !default;
-
-
-//== Popovers
-//
-//##
-
-//** Popover body background color
-$popover-bg: #fff !default;
-//** Popover maximum width
-$popover-max-width: 276px !default;
-//** Popover border color
-$popover-border-color: rgba(0,0,0,.2) !default;
-//** Popover fallback border color
-$popover-fallback-border-color: #ccc !default;
-
-//** Popover title background color
-$popover-title-bg: darken($popover-bg, 3%) !default;
-
-//** Popover arrow width
-$popover-arrow-width: 10px !default;
-//** Popover arrow color
-$popover-arrow-color: $popover-bg !default;
-
-//** Popover outer arrow width
-$popover-arrow-outer-width: ($popover-arrow-width + 1) !default;
-//** Popover outer arrow color
-$popover-arrow-outer-color: fade_in($popover-border-color, 0.05) !default;
-//** Popover outer arrow fallback color
-$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default;
-
-
-//== Labels
-//
-//##
-
-//** Default label background color
-$label-default-bg: $gray-light !default;
-//** Primary label background color
-$label-primary-bg: $brand-primary !default;
-//** Success label background color
-$label-success-bg: $brand-success !default;
-//** Info label background color
-$label-info-bg: $brand-info !default;
-//** Warning label background color
-$label-warning-bg: $brand-warning !default;
-//** Danger label background color
-$label-danger-bg: $brand-danger !default;
-
-//** Default label text color
-$label-color: #fff !default;
-//** Default text color of a linked label
-$label-link-hover-color: #fff !default;
-
-
-//== Modals
-//
-//##
-
-//** Padding applied to the modal body
-$modal-inner-padding: 15px !default;
-
-//** Padding applied to the modal title
-$modal-title-padding: 15px !default;
-//** Modal title line-height
-$modal-title-line-height: $line-height-base !default;
-
-//** Background color of modal content area
-$modal-content-bg: #fff !default;
-//** Modal content border color
-$modal-content-border-color: rgba(0,0,0,.2) !default;
-//** Modal content border color **for IE8**
-$modal-content-fallback-border-color: #999 !default;
-
-//** Modal backdrop background color
-$modal-backdrop-bg: #000 !default;
-//** Modal backdrop opacity
-$modal-backdrop-opacity: .5 !default;
-//** Modal header border color
-$modal-header-border-color: #e5e5e5 !default;
-//** Modal footer border color
-$modal-footer-border-color: $modal-header-border-color !default;
-
-$modal-lg: 900px !default;
-$modal-md: 600px !default;
-$modal-sm: 300px !default;
-
-
-//== Alerts
-//
-//## Define alert colors, border radius, and padding.
-
-$alert-padding: 15px !default;
-$alert-border-radius: $border-radius-base !default;
-$alert-link-font-weight: bold !default;
-
-$alert-success-bg: $state-success-bg !default;
-$alert-success-text: $state-success-text !default;
-$alert-success-border: $state-success-border !default;
-
-$alert-info-bg: $state-info-bg !default;
-$alert-info-text: $state-info-text !default;
-$alert-info-border: $state-info-border !default;
-
-$alert-warning-bg: $state-warning-bg !default;
-$alert-warning-text: $state-warning-text !default;
-$alert-warning-border: $state-warning-border !default;
-
-$alert-danger-bg: $state-danger-bg !default;
-$alert-danger-text: $state-danger-text !default;
-$alert-danger-border: $state-danger-border !default;
-
-
-//== Progress bars
-//
-//##
-
-//** Background color of the whole progress component
-$progress-bg: #f5f5f5 !default;
-//** Progress bar text color
-$progress-bar-color: #fff !default;
-//** Variable for setting rounded corners on progress bar.
-$progress-border-radius: $border-radius-base !default;
-
-//** Default progress bar color
-$progress-bar-bg: $brand-primary !default;
-//** Success progress bar color
-$progress-bar-success-bg: $brand-success !default;
-//** Warning progress bar color
-$progress-bar-warning-bg: $brand-warning !default;
-//** Danger progress bar color
-$progress-bar-danger-bg: $brand-danger !default;
-//** Info progress bar color
-$progress-bar-info-bg: $brand-info !default;
-
-
-//== List group
-//
-//##
-
-//** Background color on `.list-group-item`
-$list-group-bg: #fff !default;
-//** `.list-group-item` border color
-$list-group-border: #ddd !default;
-//** List group border radius
-$list-group-border-radius: $border-radius-base !default;
-
-//** Background color of single list items on hover
-$list-group-hover-bg: #f5f5f5 !default;
-//** Text color of active list items
-$list-group-active-color: $component-active-color !default;
-//** Background color of active list items
-$list-group-active-bg: $component-active-bg !default;
-//** Border color of active list elements
-$list-group-active-border: $list-group-active-bg !default;
-//** Text color for content within active list items
-$list-group-active-text-color: lighten($list-group-active-bg, 40%) !default;
-
-//** Text color of disabled list items
-$list-group-disabled-color: $gray-light !default;
-//** Background color of disabled list items
-$list-group-disabled-bg: $gray-lighter !default;
-//** Text color for content within disabled list items
-$list-group-disabled-text-color: $list-group-disabled-color !default;
-
-$list-group-link-color: #555 !default;
-$list-group-link-hover-color: $list-group-link-color !default;
-$list-group-link-heading-color: #333 !default;
-
-
-//== Panels
-//
-//##
-
-$panel-bg: #fff !default;
-$panel-body-padding: 15px !default;
-$panel-heading-padding: 10px 15px !default;
-$panel-footer-padding: $panel-heading-padding !default;
-$panel-border-radius: $border-radius-base !default;
-
-//** Border color for elements within panels
-$panel-inner-border: #ddd !default;
-$panel-footer-bg: #f5f5f5 !default;
-
-$panel-default-text: $gray-dark !default;
-$panel-default-border: #ddd !default;
-$panel-default-heading-bg: #f5f5f5 !default;
-
-$panel-primary-text: #fff !default;
-$panel-primary-border: $brand-primary !default;
-$panel-primary-heading-bg: $brand-primary !default;
-
-$panel-success-text: $state-success-text !default;
-$panel-success-border: $state-success-border !default;
-$panel-success-heading-bg: $state-success-bg !default;
-
-$panel-info-text: $state-info-text !default;
-$panel-info-border: $state-info-border !default;
-$panel-info-heading-bg: $state-info-bg !default;
-
-$panel-warning-text: $state-warning-text !default;
-$panel-warning-border: $state-warning-border !default;
-$panel-warning-heading-bg: $state-warning-bg !default;
-
-$panel-danger-text: $state-danger-text !default;
-$panel-danger-border: $state-danger-border !default;
-$panel-danger-heading-bg: $state-danger-bg !default;
-
-
-//== Thumbnails
-//
-//##
-
-//** Padding around the thumbnail image
-$thumbnail-padding: 4px !default;
-//** Thumbnail background color
-$thumbnail-bg: $body-bg !default;
-//** Thumbnail border color
-$thumbnail-border: #ddd !default;
-//** Thumbnail border radius
-$thumbnail-border-radius: $border-radius-base !default;
-
-//** Custom text color for thumbnail captions
-$thumbnail-caption-color: $text-color !default;
-//** Padding around the thumbnail caption
-$thumbnail-caption-padding: 9px !default;
-
-
-//== Wells
-//
-//##
-
-$well-bg: #f5f5f5 !default;
-$well-border: darken($well-bg, 7%) !default;
-
-
-//== Badges
-//
-//##
-
-$badge-color: #fff !default;
-//** Linked badge text color on hover
-$badge-link-hover-color: #fff !default;
-$badge-bg: $gray-light !default;
-
-//** Badge text color in active nav link
-$badge-active-color: $link-color !default;
-//** Badge background color in active nav link
-$badge-active-bg: #fff !default;
-
-$badge-font-weight: bold !default;
-$badge-line-height: 1 !default;
-$badge-border-radius: 10px !default;
-
-
-//== Breadcrumbs
-//
-//##
-
-$breadcrumb-padding-vertical: 8px !default;
-$breadcrumb-padding-horizontal: 15px !default;
-//** Breadcrumb background color
-$breadcrumb-bg: #f5f5f5 !default;
-//** Breadcrumb text color
-$breadcrumb-color: #ccc !default;
-//** Text color of current page in the breadcrumb
-$breadcrumb-active-color: $gray-light !default;
-//** Textual separator for between breadcrumb elements
-$breadcrumb-separator: "/" !default;
-
-
-//== Carousel
-//
-//##
-
-$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default;
-
-$carousel-control-color: #fff !default;
-$carousel-control-width: 15% !default;
-$carousel-control-opacity: .5 !default;
-$carousel-control-font-size: 20px !default;
-
-$carousel-indicator-active-bg: #fff !default;
-$carousel-indicator-border-color: #fff !default;
-
-$carousel-caption-color: #fff !default;
-
-
-//== Close
-//
-//##
-
-$close-font-weight: bold !default;
-$close-color: #000 !default;
-$close-text-shadow: 0 1px 0 #fff !default;
-
-
-//== Code
-//
-//##
-
-$code-color: #c7254e !default;
-$code-bg: #f9f2f4 !default;
-
-$kbd-color: #fff !default;
-$kbd-bg: #333 !default;
-
-$pre-bg: #f5f5f5 !default;
-$pre-color: $gray-dark !default;
-$pre-border-color: #ccc !default;
-$pre-scrollable-max-height: 340px !default;
-
-
-//== Type
-//
-//##
-
-//** Horizontal offset for forms and lists.
-$component-offset-horizontal: 180px !default;
-//** Text muted color
-$text-muted: $gray-light !default;
-//** Abbreviations and acronyms border color
-$abbr-border-color: $gray-light !default;
-//** Headings small color
-$headings-small-color: $gray-light !default;
-//** Blockquote small color
-$blockquote-small-color: $gray-light !default;
-//** Blockquote font size
-$blockquote-font-size: ($font-size-base * 1.25) !default;
-//** Blockquote border color
-$blockquote-border-color: $gray-lighter !default;
-//** Page header border color
-$page-header-border-color: $gray-lighter !default;
-//** Width of horizontal description list titles
-$dl-horizontal-offset: $component-offset-horizontal !default;
-//** Horizontal line color.
-$hr-border: $gray-lighter !default;
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/_wells.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/_wells.scss
deleted file mode 100644
index b8657118a..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/_wells.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// 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;
- @include 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/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_alerts.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_alerts.scss
deleted file mode 100644
index 3faf0b5a5..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_alerts.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-// Alerts
-
-@mixin 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/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_background-variant.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_background-variant.scss
deleted file mode 100644
index 4993bd2b8..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_background-variant.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-// Contextual backgrounds
-
-// [converter] $parent hack
-@mixin bg-variant($parent, $color) {
- #{$parent} {
- background-color: $color;
- }
- a#{$parent}:hover {
- background-color: darken($color, 10%);
- }
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_border-radius.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_border-radius.scss
deleted file mode 100644
index ce1949987..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_border-radius.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-// Single side border-radius
-
-@mixin border-top-radius($radius) {
- border-top-right-radius: $radius;
- border-top-left-radius: $radius;
-}
-@mixin border-right-radius($radius) {
- border-bottom-right-radius: $radius;
- border-top-right-radius: $radius;
-}
-@mixin border-bottom-radius($radius) {
- border-bottom-right-radius: $radius;
- border-bottom-left-radius: $radius;
-}
-@mixin border-left-radius($radius) {
- border-bottom-left-radius: $radius;
- border-top-left-radius: $radius;
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_buttons.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_buttons.scss
deleted file mode 100644
index 74a4ffc56..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_buttons.scss
+++ /dev/null
@@ -1,52 +0,0 @@
-// Button variants
-//
-// Easily pump out default styles, as well as :hover, :focus, :active,
-// and disabled options for all buttons
-
-@mixin button-variant($color, $background, $border) {
- color: $color;
- background-color: $background;
- border-color: $border;
-
- &:hover,
- &:focus,
- &.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,
- &.focus,
- &:active,
- &.active {
- background-color: $background;
- border-color: $border;
- }
- }
-
- .badge {
- color: $background;
- background-color: $color;
- }
-}
-
-// Button sizes
-@mixin 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/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_center-block.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_center-block.scss
deleted file mode 100644
index e06fb5e27..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_center-block.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-// Center-align a block level element
-
-@mixin center-block() {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_clearfix.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_clearfix.scss
deleted file mode 100644
index dc3e2ab42..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_clearfix.scss
+++ /dev/null
@@ -1,22 +0,0 @@
-// 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/
-
-@mixin clearfix() {
- &:before,
- &:after {
- content: " "; // 1
- display: table; // 2
- }
- &:after {
- clear: both;
- }
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_forms.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_forms.scss
deleted file mode 100644
index 277aa5f8e..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_forms.scss
+++ /dev/null
@@ -1,88 +0,0 @@
-// Form validation states
-//
-// Used in forms.less to generate the form validation CSS for warnings, errors,
-// and successes.
-
-@mixin 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,
- &.radio label,
- &.checkbox label,
- &.radio-inline label,
- &.checkbox-inline label {
- color: $text-color;
- }
- // Set the border and box shadow on specific inputs to match
- .form-control {
- border-color: $border-color;
- @include 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%);
- @include 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.
-@mixin form-control-focus($color: $input-border-focus) {
- $color-rgba: rgba(red($color), green($color), blue($color), .6);
- &:focus {
- border-color: $color;
- outline: 0;
- @include 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!
-// [converter] $parent hack
-@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
- #{$parent} {
- height: $input-height;
- padding: $padding-vertical $padding-horizontal;
- font-size: $font-size;
- line-height: $line-height;
- border-radius: $border-radius;
- }
-
- select#{$parent} {
- height: $input-height;
- line-height: $input-height;
- }
-
- textarea#{$parent},
- select[multiple]#{$parent} {
- height: auto;
- }
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_gradients.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_gradients.scss
deleted file mode 100644
index a8939f5ae..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_gradients.scss
+++ /dev/null
@@ -1,58 +0,0 @@
-// Gradients
-
-
-
-// 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.
-@mixin gradient-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: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // 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.
-@mixin gradient-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: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down
-}
-
-@mixin gradient-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+
-}
-@mixin gradient-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: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback
-}
-@mixin gradient-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: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback
-}
-@mixin gradient-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;
-}
-@mixin gradient-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/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_grid-framework.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_grid-framework.scss
deleted file mode 100644
index fb28cb47d..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_grid-framework.scss
+++ /dev/null
@@ -1,81 +0,0 @@
-// Framework grid generation
-//
-// Used only by Bootstrap to generate the correct number of grid classes given
-// any value of `$grid-columns`.
-
-// [converter] This is defined recursively in LESS, but Sass supports real loops
-@mixin make-grid-columns($i: 1, $list: ".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}") {
- @for $i from (1 + 1) through $grid-columns {
- $list: "#{$list}, .col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}";
- }
- #{$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);
- }
-}
-
-
-// [converter] This is defined recursively in LESS, but Sass supports real loops
-@mixin float-grid-columns($class, $i: 1, $list: ".col-#{$class}-#{$i}") {
- @for $i from (1 + 1) through $grid-columns {
- $list: "#{$list}, .col-#{$class}-#{$i}";
- }
- #{$list} {
- float: left;
- }
-}
-
-
-@mixin calc-grid-column($index, $class, $type) {
- @if ($type == width) and ($index > 0) {
- .col-#{$class}-#{$index} {
- width: percentage(($index / $grid-columns));
- }
- }
- @if ($type == push) and ($index > 0) {
- .col-#{$class}-push-#{$index} {
- left: percentage(($index / $grid-columns));
- }
- }
- @if ($type == push) and ($index == 0) {
- .col-#{$class}-push-0 {
- left: auto;
- }
- }
- @if ($type == pull) and ($index > 0) {
- .col-#{$class}-pull-#{$index} {
- right: percentage(($index / $grid-columns));
- }
- }
- @if ($type == pull) and ($index == 0) {
- .col-#{$class}-pull-0 {
- right: auto;
- }
- }
- @if ($type == offset) {
- .col-#{$class}-offset-#{$index} {
- margin-left: percentage(($index / $grid-columns));
- }
- }
-}
-
-// [converter] This is defined recursively in LESS, but Sass supports real loops
-@mixin loop-grid-columns($columns, $class, $type) {
- @for $i from 0 through $columns {
- @include calc-grid-column($i, $class, $type);
- }
-}
-
-
-// Create grid for specific class
-@mixin make-grid($class) {
- @include float-grid-columns($class);
- @include loop-grid-columns($grid-columns, $class, width);
- @include loop-grid-columns($grid-columns, $class, pull);
- @include loop-grid-columns($grid-columns, $class, push);
- @include loop-grid-columns($grid-columns, $class, offset);
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_grid.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_grid.scss
deleted file mode 100644
index ae164338a..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_grid.scss
+++ /dev/null
@@ -1,122 +0,0 @@
-// Grid system
-//
-// Generate semantic grid columns with these mixins.
-
-// Centered container element
-@mixin container-fixed($gutter: $grid-gutter-width) {
- margin-right: auto;
- margin-left: auto;
- padding-left: ($gutter / 2);
- padding-right: ($gutter / 2);
- @include clearfix;
-}
-
-// Creates a wrapper for a series of columns
-@mixin make-row($gutter: $grid-gutter-width) {
- margin-left: ($gutter / -2);
- margin-right: ($gutter / -2);
- @include clearfix;
-}
-
-// Generate the extra small columns
-@mixin 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);
-}
-@mixin make-xs-column-offset($columns) {
- margin-left: percentage(($columns / $grid-columns));
-}
-@mixin make-xs-column-push($columns) {
- left: percentage(($columns / $grid-columns));
-}
-@mixin make-xs-column-pull($columns) {
- right: percentage(($columns / $grid-columns));
-}
-
-// Generate the small columns
-@mixin 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));
- }
-}
-@mixin make-sm-column-offset($columns) {
- @media (min-width: $screen-sm-min) {
- margin-left: percentage(($columns / $grid-columns));
- }
-}
-@mixin make-sm-column-push($columns) {
- @media (min-width: $screen-sm-min) {
- left: percentage(($columns / $grid-columns));
- }
-}
-@mixin make-sm-column-pull($columns) {
- @media (min-width: $screen-sm-min) {
- right: percentage(($columns / $grid-columns));
- }
-}
-
-// Generate the medium columns
-@mixin 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));
- }
-}
-@mixin make-md-column-offset($columns) {
- @media (min-width: $screen-md-min) {
- margin-left: percentage(($columns / $grid-columns));
- }
-}
-@mixin make-md-column-push($columns) {
- @media (min-width: $screen-md-min) {
- left: percentage(($columns / $grid-columns));
- }
-}
-@mixin make-md-column-pull($columns) {
- @media (min-width: $screen-md-min) {
- right: percentage(($columns / $grid-columns));
- }
-}
-
-// Generate the large columns
-@mixin 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));
- }
-}
-@mixin make-lg-column-offset($columns) {
- @media (min-width: $screen-lg-min) {
- margin-left: percentage(($columns / $grid-columns));
- }
-}
-@mixin make-lg-column-push($columns) {
- @media (min-width: $screen-lg-min) {
- left: percentage(($columns / $grid-columns));
- }
-}
-@mixin make-lg-column-pull($columns) {
- @media (min-width: $screen-lg-min) {
- right: percentage(($columns / $grid-columns));
- }
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_hide-text.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_hide-text.scss
deleted file mode 100644
index 45db63855..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_hide-text.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-// 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)
-@mixin 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
-@mixin text-hide() {
- @include hide-text;
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_image.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_image.scss
deleted file mode 100644
index c8dcf5e9c..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_image.scss
+++ /dev/null
@@ -1,33 +0,0 @@
-// Image Mixins
-// - Responsive image
-// - Retina image
-
-
-// Responsive image
-//
-// Keep images from scaling beyond the width of their parents.
-@mixin img-responsive($display: block) {
- display: $display;
- 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.
-@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {
- background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path("#{$file-1x}"), "#{$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(if($bootstrap-sass-asset-helper, twbs-image-path("#{$file-2x}"), "#{$file-2x}"));
- background-size: $width-1x $height-1x;
- }
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_labels.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_labels.scss
deleted file mode 100644
index eda6dfd29..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_labels.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-// Labels
-
-@mixin label-variant($color) {
- background-color: $color;
-
- &[href] {
- &:hover,
- &:focus {
- background-color: darken($color, 10%);
- }
- }
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_list-group.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_list-group.scss
deleted file mode 100644
index 5f05e7ba2..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_list-group.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-// List Groups
-
-@mixin list-group-item-variant($state, $background, $color) {
- .list-group-item-#{$state} {
- color: $color;
- background-color: $background;
-
- // [converter] extracted a& to a.list-group-item-#{$state}
- }
-
- a.list-group-item-#{$state} {
- 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/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_nav-divider.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_nav-divider.scss
deleted file mode 100644
index 2e6da02a4..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_nav-divider.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-// Horizontal dividers
-//
-// Dividers (basically an hr) within dropdowns and nav lists
-
-@mixin nav-divider($color: #e5e5e5) {
- height: 1px;
- margin: (($line-height-computed / 2) - 1) 0;
- overflow: hidden;
- background-color: $color;
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_nav-vertical-align.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_nav-vertical-align.scss
deleted file mode 100644
index c8fbf1a7d..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_nav-vertical-align.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-// 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.
-
-@mixin navbar-vertical-align($element-height) {
- margin-top: (($navbar-height - $element-height) / 2);
- margin-bottom: (($navbar-height - $element-height) / 2);
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_opacity.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_opacity.scss
deleted file mode 100644
index df088adfe..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_opacity.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-// Opacity
-
-@mixin opacity($opacity) {
- opacity: $opacity;
- // IE8 filter
- $opacity-ie: ($opacity * 100);
- filter: #{alpha(opacity=$opacity-ie)};
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_pagination.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_pagination.scss
deleted file mode 100644
index 43fff6863..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_pagination.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-// Pagination
-
-@mixin 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 {
- @include border-left-radius($border-radius);
- }
- }
- &:last-child {
- > a,
- > span {
- @include border-right-radius($border-radius);
- }
- }
- }
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_panels.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_panels.scss
deleted file mode 100644
index 3ff31ae51..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_panels.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-// Panels
-
-@mixin 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/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_progress-bar.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_progress-bar.scss
deleted file mode 100644
index 90a62afc2..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_progress-bar.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-// Progress bars
-
-@mixin progress-bar-variant($color) {
- background-color: $color;
-
- // Deprecated parent class requirement as of v3.2.0
- .progress-striped & {
- @include gradient-striped;
- }
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_reset-filter.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_reset-filter.scss
deleted file mode 100644
index bf7305120..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_reset-filter.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-// 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.
-
-@mixin reset-filter() {
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_resize.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_resize.scss
deleted file mode 100644
index 83fa63791..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_resize.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// Resize anything
-
-@mixin resizable($direction) {
- resize: $direction; // Options: horizontal, vertical, both
- overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_responsive-visibility.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_responsive-visibility.scss
deleted file mode 100644
index 9867db013..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_responsive-visibility.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-// Responsive utilities
-
-//
-// More easily include all the states for responsive-utilities.less.
-// [converter] $parent hack
-@mixin responsive-visibility($parent) {
- #{$parent} {
- display: block !important;
- }
- table#{$parent} { display: table; }
- tr#{$parent} { display: table-row !important; }
- th#{$parent},
- td#{$parent} { display: table-cell !important; }
-}
-
-// [converter] $parent hack
-@mixin responsive-invisibility($parent) {
- #{$parent} {
- display: none !important;
- }
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_size.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_size.scss
deleted file mode 100644
index abbe2463c..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_size.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-// Sizing shortcuts
-
-@mixin size($width, $height) {
- width: $width;
- height: $height;
-}
-
-@mixin square($size) {
- @include size($size, $size);
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_tab-focus.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_tab-focus.scss
deleted file mode 100644
index 7df0ae7ca..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_tab-focus.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-// WebKit-style focus
-
-@mixin tab-focus() {
- // Default
- outline: thin dotted;
- // WebKit
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_table-row.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_table-row.scss
deleted file mode 100644
index 136795081..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_table-row.scss
+++ /dev/null
@@ -1,28 +0,0 @@
-// Tables
-
-@mixin 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/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_text-emphasis.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_text-emphasis.scss
deleted file mode 100644
index 1101e0366..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_text-emphasis.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-// Typography
-
-// [converter] $parent hack
-@mixin text-emphasis-variant($parent, $color) {
- #{$parent} {
- color: $color;
- }
- a#{$parent}:hover {
- color: darken($color, 10%);
- }
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_text-overflow.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_text-overflow.scss
deleted file mode 100644
index 1593b25ea..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_text-overflow.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-// Text overflow
-// Requires inline-block or block for proper styling
-
-@mixin text-overflow() {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
diff --git a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_vendor-prefixes.scss b/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_vendor-prefixes.scss
deleted file mode 100644
index a6b9ef4e5..000000000
--- a/release/pui-v1.9.0/bootstrap-sass/bootstrap/mixins/_vendor-prefixes.scss
+++ /dev/null
@@ -1,222 +0,0 @@
-// 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
-@mixin animation($animation) {
- -webkit-animation: $animation;
- -o-animation: $animation;
- animation: $animation;
-}
-@mixin animation-name($name) {
- -webkit-animation-name: $name;
- animation-name: $name;
-}
-@mixin animation-duration($duration) {
- -webkit-animation-duration: $duration;
- animation-duration: $duration;
-}
-@mixin animation-timing-function($timing-function) {
- -webkit-animation-timing-function: $timing-function;
- animation-timing-function: $timing-function;
-}
-@mixin animation-delay($delay) {
- -webkit-animation-delay: $delay;
- animation-delay: $delay;
-}
-@mixin animation-iteration-count($iteration-count) {
- -webkit-animation-iteration-count: $iteration-count;
- animation-iteration-count: $iteration-count;
-}
-@mixin animation-direction($direction) {
- -webkit-animation-direction: $direction;
- animation-direction: $direction;
-}
-@mixin 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`
-
-@mixin 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.
-
-@mixin box-shadow($shadow...) {
- -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
- box-shadow: $shadow;
-}
-
-// Box sizing
-@mixin box-sizing($boxmodel) {
- -webkit-box-sizing: $boxmodel;
- -moz-box-sizing: $boxmodel;
- box-sizing: $boxmodel;
-}
-
-// CSS3 Content Columns
-@mixin 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
-@mixin hyphens($mode: auto) {
- word-wrap: break-word;
- -webkit-hyphens: $mode;
- -moz-hyphens: $mode;
- -ms-hyphens: $mode; // IE10+
- -o-hyphens: $mode;
- hyphens: $mode;
-}
-
-// Placeholder text
-@mixin placeholder($color: $input-color-placeholder) {
- // Firefox
- &::-moz-placeholder {
- color: $color;
- 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
-@mixin scale($ratio...) {
- -webkit-transform: scale($ratio);
- -ms-transform: scale($ratio); // IE9 only
- -o-transform: scale($ratio);
- transform: scale($ratio);
-}
-
-@mixin scaleX($ratio) {
- -webkit-transform: scaleX($ratio);
- -ms-transform: scaleX($ratio); // IE9 only
- -o-transform: scaleX($ratio);
- transform: scaleX($ratio);
-}
-@mixin scaleY($ratio) {
- -webkit-transform: scaleY($ratio);
- -ms-transform: scaleY($ratio); // IE9 only
- -o-transform: scaleY($ratio);
- transform: scaleY($ratio);
-}
-@mixin 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);
-}
-@mixin translate($x, $y) {
- -webkit-transform: translate($x, $y);
- -ms-transform: translate($x, $y); // IE9 only
- -o-transform: translate($x, $y);
- transform: translate($x, $y);
-}
-@mixin translate3d($x, $y, $z) {
- -webkit-transform: translate3d($x, $y, $z);
- transform: translate3d($x, $y, $z);
-}
-@mixin rotate($degrees) {
- -webkit-transform: rotate($degrees);
- -ms-transform: rotate($degrees); // IE9 only
- -o-transform: rotate($degrees);
- transform: rotate($degrees);
-}
-@mixin rotateX($degrees) {
- -webkit-transform: rotateX($degrees);
- -ms-transform: rotateX($degrees); // IE9 only
- -o-transform: rotateX($degrees);
- transform: rotateX($degrees);
-}
-@mixin rotateY($degrees) {
- -webkit-transform: rotateY($degrees);
- -ms-transform: rotateY($degrees); // IE9 only
- -o-transform: rotateY($degrees);
- transform: rotateY($degrees);
-}
-@mixin perspective($perspective) {
- -webkit-perspective: $perspective;
- -moz-perspective: $perspective;
- perspective: $perspective;
-}
-@mixin perspective-origin($perspective) {
- -webkit-perspective-origin: $perspective;
- -moz-perspective-origin: $perspective;
- perspective-origin: $perspective;
-}
-@mixin transform-origin($origin) {
- -webkit-transform-origin: $origin;
- -moz-transform-origin: $origin;
- -ms-transform-origin: $origin; // IE9 only
- transform-origin: $origin;
-}
-
-
-// Transitions
-
-@mixin transition($transition...) {
- -webkit-transition: $transition;
- -o-transition: $transition;
- transition: $transition;
-}
-@mixin transition-property($transition-property...) {
- -webkit-transition-property: $transition-property;
- transition-property: $transition-property;
-}
-@mixin transition-delay($transition-delay) {
- -webkit-transition-delay: $transition-delay;
- transition-delay: $transition-delay;
-}
-@mixin transition-duration($transition-duration...) {
- -webkit-transition-duration: $transition-duration;
- transition-duration: $transition-duration;
-}
-@mixin transition-timing-function($timing-function) {
- -webkit-transition-timing-function: $timing-function;
- transition-timing-function: $timing-function;
-}
-@mixin 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
-
-@mixin user-select($select) {
- -webkit-user-select: $select;
- -moz-user-select: $select;
- -ms-user-select: $select; // IE10+
- user-select: $select;
-}
diff --git a/release/pui-v1.9.0/by_product.html b/release/pui-v1.9.0/by_product.html
deleted file mode 100644
index c89b6e8a2..000000000
--- a/release/pui-v1.9.0/by_product.html
+++ /dev/null
@@ -1,1552 +0,0 @@
-
-
-
- a brand new styleguide: by Product
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Console
-
-
-
-Event List
-This is a special list-group, with styles per-event for colors and icons.
-
-
- Deprecation warning
-
-
- This component is deprecated.
- To create this component, use a list group .
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "list-group event-list" >
- <li class= "list-group-item started" >
- <div class= "media" >
- <div class= "media-left media-middle" >
- <div class= "event-icon" ></div>
- </div>
- <div class= "media-body" >
- <div class= "event-title" > started app</div>
- <span class= "event-user" > user@example.com</span>
- <span class= "event-timestamp" > 11/14/2014 at 03:05 PM UTC</span>
- </div>
- </div>
- </li>
- <li class= "list-group-item stopped" >
- <div class= "media" >
- <div class= "media-left media-middle" >
- <div class= "event-icon" ></div>
- </div>
- <div class= "media-body" >
- <div class= "event-title" > stopped app</div>
- <span class= "event-user" > user@example.com</span>
- <span class= "event-timestamp" > 11/14/2014 at 03:05 PM UTC</span>
- </div>
- </div>
- </li>
- <li class= "list-group-item updated" >
- <div class= "media" >
- <div class= "media-left media-middle" >
- <div class= "event-icon" ></div>
- </div>
- <div class= "media-body" >
- <div class= "event-title" > updated app</div>
- <span class= "event-user" > user@example.com</span>
- <span class= "event-timestamp" > 11/14/2014 at 03:05 PM UTC</span>
- </div>
- </div>
- </li>
- <li class= "list-group-item scaled" >
- <div class= "media" >
- <div class= "media-left media-middle" >
- <div class= "event-icon" ></div>
- </div>
- <div class= "media-body" >
- <div class= "event-title" > scaled app</div>
- <span class= "event-user" > user@example.com</span>
- <span class= "event-timestamp" > 11/14/2014 at 03:05 PM UTC</span>
- </div>
- </div>
- </li>
- <li class= "list-group-item crashed" >
- <div class= "media" >
- <div class= "media-left media-middle" >
- <div class= "event-icon" ></div>
- </div>
- <div class= "media-body" >
- <div class= "event-title" > app crashed</div>
- <span class= "event-user" > user@example.com</span>
- <span class= "event-timestamp" > 11/14/2014 at 03:05 PM UTC</span>
- </div>
- </div>
- </li>
- <li class= "list-group-item created" >
- <div class= "media" >
- <div class= "media-left media-middle" >
- <div class= "event-icon" ></div>
- </div>
- <div class= "media-body" >
- <div class= "event-title" > created app</div>
- <span class= "event-user" > user@example.com</span>
- <span class= "event-timestamp" > 11/14/2014 at 03:05 PM UTC</span>
- </div>
- </div>
- </li>
- <li class= "list-group-item renamed phn" >
- <div class= "media" >
- <div class= "media-left media-middle" >
- <div class= "event-icon" ></div>
- </div>
- <div class= "media-body" >
- <div class= "event-title" > renamed app</div>
- <span class= "event-user" > user@example.com</span>
- <span class= "event-timestamp" > 11/14/2014 at 03:05 PM UTC</span>
- </div>
- </div>
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Panel Tile
-Tile panels extend the behavior of flex panels. They provide an animated footer on hover, at the bottom of a fixed-height panel.
-
-
-
-
<ul class= "list-cards list-card-1 list-cards-lg" >
- <li>
- <a class= "list-card-link panel panel-flex panel-tile bg-neutral-11" href= "http://www.google.com/" >
- <div class= "panel-body list-card-wrapper" >
- Hover to see secondary state.
- </div>
- <div class= "panel-footer" >
- This is the footer
- </div>
- </a>
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Traffic Lights
-Traffic lights are used to show the status of the application. "On" is used for active applications, "off" for inactive, and "loading" for when the status is still loading.
-
-
- Deprecation warning
-
-
- This component is deprecated.
-
-
-
-
-
-
-
-
- On
-
-
-
- 5
-
-
-
- 1
-
-
-
- 8
-
-
-
-
-
-
-
<h3> On</h3>
-<ul class= "traffic-lights list-unstyled mvm" >
- <li class= "green-light" >
- <i class= "fa fa-circle" ></i>
- 5
- </li>
- <li class= "gray-light" >
- <i class= "fa fa-circle" ></i>
- 1
- </li>
- <li class= "red-light" >
- <i class= "fa fa-circle" ></i>
- 8
- </li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<h3> Off</h3>
-<ul class= "traffic-lights list-unstyled mvm" >
- <li class= "green-light off" >
- <i class= "fa fa-circle" ></i>
- </li>
- <li class= "gray-light off" >
- <i class= "fa fa-circle" ></i>
- </li>
- <li class= "red-light off" >
- <i class= "fa fa-circle" ></i>
- </li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<h3> Loading</h3>
-<ul class= "traffic-lights list-unstyled mvm" >
- <li class= "green-light off loading-green" >
- <i class= "fa fa-circle" ></i>
- </li>
- <li class= "gray-light off loading-gray" >
- <i class= "fa fa-circle" ></i>
- </li>
- <li class= "red-light off loading-red" >
- <i class= "fa fa-circle" ></i>
- </li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Marketing
-
-
-
-Instance Scale
-The instance scale widget is an svg and an associated code block. Include the SVG
-and code in your page and the javascript and css will handle all of the behaviors.
-Add the class .selected-group
to the .instance-column
you would like to be
-highlighted on page load.
-
-
- Deprecation warning
-
-
- This component is deprecated.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Instances
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
- 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $ cf scale my_app -i 1
-
-
-
-
-
-
-
<div class= "panel bg-neutral-11" >
- <div class= "row" >
- <div class= "col-md-12 col col-md-offset-6 col-sm-24 col-sm-offset-0" >
- <svg class= "scale-svg" xmlns= "http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink" version= "1.1" id= "Layer_1" x= "0px" y= "0px" viewBox= "0 0 531.415 353.659" preserveAspectRatio= "xMinYMin meet" enable-background= "new 0 0 531.415 353.659" xml:space= "preserve" >
- <polygon fill= "url(#bg-gradient)" points= "8.33,299.979 70.081,247.747 143.06,235.539 186.568,180.328 240.571,149.701 288.082,110.127 351.705,84.419 432.399,75.015 527.396,4.019 527.396, 299.979 8.33,299.979" />
- <polyline fill= "none" stroke= "#D4D9DA" stroke-width= "4.0103" stroke-miterlimit= "10" points= "8.33,299.979 70.081,247.747 143.06,235.539 186.568,180.328 240.571,149.701 288.082,110.127 351.705,84.419 432.399,75.015 527.396,4.019 " />
- <ellipse fill= "#D4D9DA" cx= "8.33" cy= "299.979" rx= "4.019" ry= "4.039" />
- <ellipse fill= "#D4D9DA" cx= "69.568" cy= "247.981" rx= "4.019" ry= "4.039" />
- <ellipse fill= "#D4D9DA" cx= "142.987" cy= "234.989" rx= "4.019" ry= "4.039" />
- <ellipse fill= "#D4D9DA" cx= "186.935" cy= "180.42" rx= "4.019" ry= "4.039" />
- <ellipse fill= "#D4D9DA" cx= "240.633" cy= "149.178" rx= "4.019" ry= "4.039" />
- <ellipse fill= "#D4D9DA" cx= "289.064" cy= "110.116" rx= "4.019" ry= "4.039" />
- <ellipse fill= "#D4D9DA" cx= "351.213" cy= "84.598" rx= "4.019" ry= "4.039" />
- <ellipse fill= "#D4D9DA" cx= "432.796" cy= "74.253" rx= "4.019" ry= "4.039" />
- <circle fill= "#D4D9DA" cx= "527.396" cy= "4.019" r= "4.019" />
-
- <text transform= "matrix(1 0 0 1 0 347.8439)" fill= "#8E8F8E" font-family= "'SourceSansPro'" font-size= "18" >
- Instances
- </text>
- <g class= "instances-column selected-group" id= "instances-1" filter= "url(#desaturate-filter)" >
- <rect x= "40" y= "0" height= "530" width= "130" opacity= "0" />
- <text transform= "matrix(1 0 0 1 105.1135 347.8439)" fill= "#00A69E" font-family= "'SourceSansPro'" font-size= "18" >
- 1
- </text>
- <path fill= "#00A69E" d= "M105.96 291.558l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L105.96 291.558z" />
- <path fill= "#3F4950" d= "M80.129 279.625v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L80.129 279.625z" />
- <path fill= "#525D64" d= "M131.001 278.331l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C132.209 278.859 131.726 278.475 131.001 278.331z" />
- </g>
-
- <g class= "instances-column" id= "instances-4" filter= "url(#desaturate-filter)" >
- <rect x= "170" y= "0" height= "530" width= "120" opacity= "0" />
- <text transform= "matrix(1 0 0 1 224.4272 347.8439)" fill= "#00A69E" font-family= "'SourceSansPro'" font-size= "18" >
- 4
- </text>
- <path fill= "#00A69E" d= "M228.811 291.558l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L228.811 291.558z" />
- <path fill= "#3F4950" d= "M202.98 279.625v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L202.98 279.625z" />
- <path fill= "#525D64" d= "M253.853 278.331l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C255.06 278.859 254.577 278.475 253.853 278.331z" />
- <path fill= "#00A69E" d= "M228.811 255.697l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L228.811 255.697z" />
- <path fill= "#3F4950" d= "M202.98 243.765v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L202.98 243.765z" />
- <path fill= "#525D64" d= "M253.853 242.47l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C255.06 242.999 254.577 242.615 253.853 242.47z" />
- <path fill= "#00A69E" d= "M228.811 219.837l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L228.811 219.837z" />
- <path fill= "#3F4950" d= "M202.98 207.905v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L202.98 207.905z" />
- <path fill= "#525D64" d= "M253.853 206.61l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C255.06 207.138 254.577 206.755 253.853 206.61z" />
- <path fill= "#00A69E" d= "M228.811 183.977l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L228.811 183.977z" />
- <path fill= "#3F4950" d= "M202.98 172.044v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L202.98 172.044z" />
- <path fill= "#525D64" d= "M253.853 170.75l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C255.06 171.278 254.577 170.894 253.853 170.75z" />
-
- </g>
- <g class= "instances-column" id= "instances-6" filter= "url(#desaturate-filter)" >
- <rect x= "290" y= "0" height= "530" width= "130" opacity= "0" />
- <text transform= "matrix(1 0 0 1 347.2788 347.8439)" fill= "#00A69E" font-family= "'SourceSansPro'" font-size= "18" >
- 6
- </text>
- <path fill= "#00A69E" d= "M351.125 291.558l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L351.125 291.558z" />
- <path fill= "#3F4950" d= "M325.294 279.625v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L325.294 279.625z" />
- <path fill= "#525D64" d= "M376.167 278.331l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C377.374 278.859 376.891 278.475 376.167 278.331z" />
- <path fill= "#00A69E" d= "M351.125 255.697l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L351.125 255.697z" />
- <path fill= "#3F4950" d= "M325.294 243.765v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L325.294 243.765z" />
- <path fill= "#525D64" d= "M376.167 242.47l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C377.374 242.999 376.891 242.615 376.167 242.47z" />
- <path fill= "#00A69E" d= "M351.125 219.837l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L351.125 219.837z" />
- <path fill= "#3F4950" d= "M325.294 207.905v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L325.294 207.905z" />
- <path fill= "#525D64" d= "M376.167 206.61l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C377.374 207.138 376.891 206.755 376.167 206.61z" />
- <path fill= "#00A69E" d= "M351.125 183.977l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L351.125 183.977z" />
- <path fill= "#3F4950" d= "M325.294 172.044v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L325.294 172.044z" />
- <path fill= "#525D64" d= "M376.167 170.75l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C377.374 171.278 376.891 170.894 376.167 170.75z" />
- <path fill= "#00A69E" d= "M351.125 148.116l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L351.125 148.116z" />
- <path fill= "#3F4950" d= "M325.294 136.184v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L325.294 136.184z" />
- <path fill= "#525D64" d= "M376.167 134.889l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C377.374 135.417 376.891 135.034 376.167 134.889z" />
- <path fill= "#00A69E" d= "M351.125 112.332l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L351.125 112.332z" />
- <path fill= "#3F4950" d= "M325.294 100.399v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L325.294 100.399z" />
- <path fill= "#525D64" d= "M376.167 99.105l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C377.374 99.633 376.891 99.249 376.167 99.105z" />
- </g>
- <g class= "instances-column another-class" id= "instances-8" filter= "url(#desaturate-filter)" >
- <rect x= "420" y= "0" height= "530" width= "130" opacity= "0" />
-
- <text transform= "matrix(1 0 0 1 470.1294 347.8439)" fill= "#00A69E" font-family= "'SourceSansPro'" font-size= "18" >
- 8
- </text>
- <path fill= "#00A69E" d= "M474.514 291.558l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L474.514 291.558z" />
- <path fill= "#3F4950" d= "M448.683 279.625v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L448.683 279.625z" />
- <path fill= "#525D64" d= "M499.555 278.331l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C500.763 278.859 500.28 278.475 499.555 278.331z" />
- <path fill= "#00A69E" d= "M474.514 255.697l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L474.514 255.697z" />
- <path fill= "#3F4950" d= "M448.683 243.765v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L448.683 243.765z" />
- <path fill= "#525D64" d= "M499.555 242.47l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C500.763 242.999 500.28 242.615 499.555 242.47z" />
- <path fill= "#00A69E" d= "M474.514 219.837l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L474.514 219.837z" />
- <path fill= "#3F4950" d= "M448.683 207.905v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L448.683 207.905z" />
- <path fill= "#525D64" d= "M499.555 206.61l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C500.763 207.138 500.28 206.755 499.555 206.61z" />
- <path fill= "#00A69E" d= "M474.514 183.977l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L474.514 183.977z" />
- <path fill= "#3F4950" d= "M448.683 172.044v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L448.683 172.044z" />
- <path fill= "#525D64" d= "M499.555 170.75l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C500.763 171.278 500.28 170.894 499.555 170.75z" />
- <path fill= "#00A69E" d= "M474.514 148.116l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L474.514 148.116z" />
- <path fill= "#3F4950" d= "M448.683 136.184v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L448.683 136.184z" />
- <path fill= "#525D64" d= "M499.555 134.889l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C500.763 135.417 500.28 135.034 499.555 134.889z" />
- <path fill= "#00A69E" d= "M474.514 112.332l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958v-10.625L474.514 112.332z" />
- <path fill= "#3F4950" d= "M448.683 100.399v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L448.683 100.399z" />
- <path fill= "#525D64" d= "M499.555 99.105l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C500.763 99.633 500.28 99.249 499.555 99.105z" />
- <path fill= "#00A69E" d= "M474.514 76.395l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958V71.196L474.514 76.395z" />
- <path fill= "#3F4950" d= "M448.683 64.463v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L448.683 64.463z" />
- <path fill= "#525D64" d= "M499.555 63.168l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C500.763 63.696 500.28 63.313 499.555 63.168z" />
- <path fill= "#00A69E" d= "M474.514 40.535l-25.831-5.199v10.625c0 0.43 0.483 0.813 1.208 0.958l24.221 4.836c0.396 0.079 0.828 0.079 1.224 0l24.221-4.836c0.724-0.145 1.208-0.528 1.208-0.958V35.336L474.514 40.535z" />
- <path fill= "#3F4950" d= "M448.683 28.603v7.354l25.454 5.123c0.249 0.05 0.505 0.05 0.754 0.001l25.872-5.124v-7.432l-25.875 5.125c-0.247 0.049-0.501 0.049-0.748 0L448.683 28.603z" />
- <path fill= "#525D64" d= "M499.555 27.308l-24.22-4.836c-0.404-0.081-0.82-0.081-1.224 0l-24.22 4.836c-0.724 0.145-1.208 0.528-1.208 0.958v0.337l25.457 5.047c0.247 0.049 0.501 0.049 0.748 0l25.875-5.125v-0.259C500.763 27.836 500.28 27.453 499.555 27.308z" />
- </g>
-
- <filter id= "desaturate-filter" >
- <feColorMatrix in= "SourceGraphic"
- type= "saturate"
- values= "0" />
- </filter>
-
- <linearGradient id= "bg-gradient" x1= "0" x2= "1" y1= "0" y2= "1" >
- <stop class= "instances-gradient-stop-1" offset= "0%" />
- <stop class= "instances-gradient-stop-2" offset= "90%" />
- </linearGradient>
- </svg>
- </div>
- </div>
-</div>
-
-<div>
-<pre class= "language-bash scale-code" >
-<code>
- $ cf scale my_app -i <span class= "instance-count" > 1</span>
-</code>
-</pre>
-</div>
-
-
- Copy
-
-
-
-
-
-
-
-
-
diff --git a/release/pui-v1.9.0/elements.html b/release/pui-v1.9.0/elements.html
deleted file mode 100644
index 83c624ea8..000000000
--- a/release/pui-v1.9.0/elements.html
+++ /dev/null
@@ -1,4205 +0,0 @@
-
-
-
- a brand new styleguide: Elements
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Avatars
-
-
-Regular avatars are expected to by 100px by 100px.
-
-
-
-
-
<img alt= "..." class= "img-circle avatar" height= "100" src= "http://placehold.it/100x100" width= "100" >
-
-
- Copy
-
-
-
-
-Small Gravatar
-Allows you to show a gravatar with the proper default 'image' (icon).
To use in a view, simply call
= render 'shared/gravatar_small', email: 'some@email.com'
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "gravatar gravatar-sm" >
- <img src= "https://secure.gravatar.com/avatar/8b7970c372aabb936ca455127e04c959?s=20&d=blank" >
- <i class= "fa fa-user" ></i>
-</div>
-<div class= "gravatar gravatar-sm" >
- <img src= "https://s.gravatar.com/avatar/c99bd3ce00444f946027741d5a5cd9e9?s=20&d=blank" >
- <i class= "fa fa-user" ></i>
-</div>
-
-
- Copy
-
-
-
-
-Small with Envelope
-Allows you to show a gravatar with an icon overlay.
To use in a view, simply call
= render 'shared/gravatar_small', email: 'some@email.com'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "gravatar gravatar-sm" >
- <img src= "https://secure.gravatar.com/avatar/8b7970c372aabb936ca455127e04c959?s=20&d=blank" >
- <i class= "fa fa-user" ></i>
- <i class= "overlay fa fa-envelope" ></i>
-</div>
-<div class= "gravatar gravatar-sm mlxl" >
- <img src= "https://s.gravatar.com/avatar/c99bd3ce00444f946027741d5a5cd9e9?s=20&d=blank" >
- <i class= "fa fa-user" ></i>
- <i class= "overlay fa fa-envelope" ></i>
-</div>
-<div class= "gravatar gravatar-sm mlxl" >
- <img src= "https://secure.gravatar.com/avatar/8b7970c372aabb936ca455127e04c959?s=20&d=blank" >
- <i class= "fa fa-user highlight" ></i>
- <i class= "overlay fa fa-check" ></i>
-</div>
-<div class= "gravatar gravatar-sm mlxl" >
- <img src= "https://s.gravatar.com/avatar/c99bd3ce00444f946027741d5a5cd9e9?s=20&d=blank" >
- <i class= "fa fa-user" ></i>
- <i class= "overlay fa fa-check" ></i>
-</div>
-
-
- Copy
-
-
-
-
-Large Gravatar
-Allows you to show a gravatar with the proper default 'image' (icon).
Large gravatar has a white background so it can be used on the edit profile form.
To use in a view, simply call
= render 'shared/gravatar_large', email: 'some@email.com'
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "gravatar gravatar-lg" >
- <img src= "https://secure.gravatar.com/avatar/8b7970c372aabb936ca455127e04c959?s=80&d=blank" >
- <i class= "fa fa-user" ></i>
-</div>
-<div class= "gravatar gravatar-lg" >
- <img src= "https://s.gravatar.com/avatar/c99bd3ce00444f946027741d5a5cd9e9?s=80&d=blank" >
- <i class= "fa fa-user" ></i>
-</div>
-
-
- Copy
-
-
-
-
-Backgrounds
-
-
-Background color classes can be applied to any element. See colors for a list of background classes.
-Full Bleed
-This example uses an about us hero image by default, but you can change it to any image you would like.
-Keep in mind, blurry, treated images will look better when stretched to fit a particular content area.
-
-
-
Full bleed background image
-
-
-
-
-
-
<div class= 'pane bg-full-bleed' >
- <div class= 'container' >
- <h1 class= 'type-neutral-11 txt-c' > Full bleed background image</h1>
- </div>
-</div>
-
-
- Copy
-
-
-
-To modify this component to use a custom image, use an inline background-image
style like so:
-
-
-
Full bleed background image
-
-
-
-
-
-
<div class= 'pane bg-full-bleed' style= "background-image: url(styleguide/such-awesome.jpg)" >
- <div class= 'container' >
- <h1 class= 'type-neutral-11 txt-c' > Full bleed background image</h1>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Overlays
-
-
-
-
-
-
-Button styles can be applied to any element. Typically you'll want to
-use either a <button>
or an <a>
element:
-
-
-
-
-
- Button
-
-
-
-
-
<button class= "btn btn-primary" > Button</button>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<a class= "btn btn-primary" href= "http://trulia.com" > Link</a>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-If your button is actually a link to another page, please use the
-<a>
element, while if your button performs an action, such as submitting
-a form or triggering some javascript event, then use a <button>
element.
-
-There is an additional modifier that will make the button take the
-full width of the container. It may be used with the any of the button
-size and style modifiers.
Create block level buttons - those that span the full width of a parent - by adding .btn-block
.
-
Full width button
-
-
-
-
<button class= "btn btn-primary btn-block" > Full width button</button>
-
-
- Copy
-
-
-
-
-
-There are two sizes for buttons: Large and default. Simply apply the
-size modifier class for the desired size.
-
-
-
-
-
- Large
-
-
-
-
-
<button class= "btn btn-primary btn-lg" > Large</button>
-
-
-
- Copy
-
-
-
-
-
-
- Default
-
-
-
-
-
-
<button class= "btn btn-primary" > Default</button>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-Button
-Disabled
-Class
-Description
-
-
-Default
-Default
-btn btn-default
-This is what buttons look like, this is the go to button style.
-
-
-Default alternate
-Default alternate
-btn btn-default-alt
-This is what buttons look like, this is the go to button style (on white backgrounds).
-
-
-Primary
-Primary
-btn btn-primary
-Use this button as the primary call to action
-
-
-Lowlight
-Lowlight
-btn btn-lowlight
-Use this button for other actions, like cancel/dismiss
-
-
-Delete
-Delete
-btn btn-danger
-This button is for delete actions, these actions should also have a confirmation dialog
-
-
-Highlight
-Highlight
-btn btn-highlight
-Use this button for other important actions, e.g. restarting apps
-
-
-Highlight alternate
-Highlight alternate
-btn btn-highlight-alt
-Use this button for other important actions, e.g. marketing call to actions
-
-
-Colors
-
-
-Our color pallet is composed of several different colors. At any given point in captures the current
-evolution of our design and likely includes old and new colors. Whenever possible, evolve the old
-colors rather than adding new ones.
-
-
- Sass variables should only be used in variables.css.scss.
-
-
- They should never be used directly when building components, because it makes
- it very hard to change the values later if you can't tell how they might have been used.
- You should define your own variables that use these colors in variables.css.scss.
-
-
-This example shows proper use of Sass variables.
-
-
$tabs-active-bg-color: $gray-2;
-
-
-
-
-
-
-
-
- $gray-1
- .bg-neutral-1
- .type-neutral-1
-
-
-
-
-
-
-
-
-
-
- $gray-2
- .bg-neutral-2
- .type-neutral-2
-
-
-
-
-
-
-
-
-
- $gray-3
- .bg-neutral-3
- .type-neutral-3
-
-
-
-
-
-
-
-
-
- $gray-4
- .bg-neutral-4
- .type-neutral-4
-
-
-
-
-
-
-
-
-
- $gray-5
- .bg-neutral-5
- .type-neutral-5
-
-
-
-
-
-
-
-
-
- $gray-6
- .bg-neutral-6
- .type-neutral-6
-
-
-
-
-
-
-
-
-
- $gray-7
- .bg-neutral-7
- .type-neutral-7
-
-
-
-
-
-
-
-
-
- $gray-8
- .bg-neutral-8
- .type-neutral-8
-
-
-
-
-
-
-
-
-
- $gray-9
- .bg-neutral-9
- .type-neutral-9
-
-
-
-
-
-
-
-
-
- $gray-10
- .bg-neutral-10
- .type-neutral-10
-
-
-
-
-
-
-
-
-
- $gray-11
- .bg-neutral-11
- .type-neutral-11
-
-
-
-
-
-
-
-
-
-
-
-
- $dark-1
- .bg-dark-1
- .type-dark-1
-
-
-
-
-
-
-
-
-
- $dark-2
- .bg-dark-2
- .type-dark-2
-
-
-
-
-
-
-
-
-
- $dark-3
- .bg-dark-3
- .type-dark-3
-
-
-
-
-
-
-
-
-
-
-
-
- $brand-1
- .bg-brand-1
- .type-brand-1
-
-
-
-
-
-
-
-
-
- $brand-2
- .bg-brand-2
- .type-brand-2
-
-
-
-
-
-
-
-
-
- $brand-3
- .bg-brand-3
- .type-brand-3
-
-
-
-
-
-
-
-
-
- $brand-4
- .bg-brand-4
- .type-brand-4
-
-
-
-
-
-
-
-
-
- $brand-5
- .bg-brand-5
- .type-brand-5
-
-
-
-
-
-
-
-
-
-
-
-
- $accent-5
- .bg-accent-5
- .type-accent-5
-
-
-
-
-
-
-
-
-
- $accent-2
- .bg-accent-2
- .type-accent-2
-
-
-
-
-
-
-
-
-
- $accent-3
- .bg-accent-3
- .type-accent-3
-
-
-
-
-
-
-
-
-
- $accent-4
- .bg-accent-4
- .type-accent-4
-
-
-
-
-
-
-
-
-
- $accent-5
- .bg-accent-5
- .type-accent-5
-
-
-
-
-
-
-
-
-
-
-
-
- $error-1
- .bg-error-1
- .type-error-1
-
-
-
-
-
-
-
-
-
- $error-2
- .bg-error-2
- .type-error-2
-
-
-
-
-
-
-
-
-
- $error-3
- .bg-error-3
- .type-error-3
-
-
-
-
-
-
-
-
-
- $error-4
- .bg-error-4
- .type-error-4
-
-
-
-
-
-
-
-
-
-
-
-
- $warn-1
- .bg-warn-1
- .type-warn-1
-
-
-
-
-
-
-
-
-
- $warn-2
- .bg-warn-2
- .type-warn-2
-
-
-
-
-
-
-
-
-
- $warn-3
- .bg-warn-3
- .type-warn-3
-
-
-
-
-
-
-
-
-
-
-
-
- $success-1
- .bg-success-1
- .type-success-1
-
-
-
-
-
-
-
-
-
- $success-2
- .bg-success-2
- .type-success-2
-
-
-
-
-
-
-Shadows & Glows
-
-
-Dividers
-Dividers draw horizontal lines between different content groupings.
-
-
-
-
<hr class= "divider-alternate-1" />
-<hr class= "divider-alternate-2" />
-<div class= "contrast-bar" >
- <hr class= "divider-1" />
- <hr class= "divider-2" />
-</div>
-
-
- Copy
-
-
-
-
-Embeds
-
-
-
-Responsive
-Allow browsers to determine video or slideshow dimensions based on the width of their containing block by creating an intrinsic ratio that will properly scale on any device.
Rules are directly applied to <iframe>
, <embed>
, and <object>
elements; optionally use an explicit descendant class .embed-responsive-item when you want to match the styling for other attributes.
Pro-Tip! You don't need to include frameborder="0"
in your <iframe>
s as we override that for you.
-
-
-
-
<h1 class= "h2" > 16-by-9</h1>
-<div class= "row" >
- <div class= "col-md-5" >
- <div class= "embed-responsive embed-responsive-16by9" >
- <iframe class= "embed-responsive-item" src= "//www.youtube.com/embed/JOCtdw9FG-s" ></iframe>
- </div>
- </div>
- <div class= "col-md-7" >
- <div class= "embed-responsive embed-responsive-16by9" >
- <iframe class= "embed-responsive-item" src= "//www.youtube.com/embed/JOCtdw9FG-s" ></iframe>
- </div>
- </div>
- <div class= "col-md-12" >
- <div class= "embed-responsive embed-responsive-16by9" >
- <iframe class= "embed-responsive-item" src= "//www.youtube.com/embed/JOCtdw9FG-s" ></iframe>
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-
-
-
-
<h1 class= "h2" > 4-by-3</h1>
-<div class= "row" >
- <div class= "col-md-5" >
- <div class= "embed-responsive embed-responsive-4by3" >
- <iframe class= "embed-responsive-item" src= "//www.youtube.com/embed/Awf45u6zrP0" ></iframe>
- </div>
- </div>
- <div class= "col-md-7" >
- <div class= "embed-responsive embed-responsive-4by3" >
- <iframe class= "embed-responsive-item" src= "//www.youtube.com/embed/Awf45u6zrP0" ></iframe>
- </div>
- </div>
- <div class= "col-md-12" >
- <div class= "embed-responsive embed-responsive-4by3" >
- <iframe class= "embed-responsive-item" src= "//www.youtube.com/embed/Awf45u6zrP0" ></iframe>
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Iconography
-
-
-We use Font Awesome for scalable vector icons that can be customized - size, color, drop shadow,
-and anything that can be done with CSS. These icons will always match the font color.
Here are some commonly used icons:
-Button
-Class
-Description
-
-
-
-.fa.fa-plus
-Renders our plus icon
-
-
-
-.fa.fa-user
-Renders our person icon
-
-
-
-.fa.fa-sort-down
-Renders our triangle icon
-
-
-
-.fa.fa-cog
-Renders our gear icon
-
-
-
-.fa.fa-times
-Renders our 'x' icon
-
-
-
-.fa.fa-check
-Renders our check icon
-
-
-
-.fa.fa-chevron-right
-Renders our right chevron icon
-
-
-
-.fa.fa-chevron-up
-Renders our down chevron icon
-
-
-
-.fa.fa-chevron-down
-Renders our down chevron icon
-
-
-
-.fa.fa-windows
-Renders our Windows icon
-
-
-
-.fa.fa-apple
-Renders our Apple icon
-
-
-
-.fa.fa-linux
-Renders our Linux icon
-
-
-
-.fa.fa-pencil
-Renders our edit icon
-
-
-
-.fa.fa-plus-circle
-Renders our second add icon
-
-
-
-.fa.fa-trash-o
-Renders our delete icon
-
-
-
-.fa.fa-square
-Renders our square icon
-
-
-
-.fa.fa-repeat
-Renders our refresh/restart icon
-
-
-
-.fa.fa-play
-Renders our start icon
-
-
-
-.fa.fa-download
-Renders our download icon
-
-
-
-
-
-
-
<i class= "fa fa-download type-brand-3 title" ></i>
-
-
- Copy
-
-
-
-
-Spinners
-Spinners are used to show that some action is in progress. Spinners come in two sizes: large and small.
-
-
-
-
-
-
-
-
-
-
-
<div class= "spinner-lg bkg-default-5 out" >
- <i class= "fa fa-spin fa-cog mtxl" ></i>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "spinner-sm bkg-default-5 out" >
- <i class= "fa fa-spin fa-cog mtxl" ></i>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Images
-
-
-
-Responsive
-Images can be made responsive-friendly via the addition of the .img-responsive
class. This applies max-width: 100%;
and height: auto;
to the image so that it scales nicely to the parent element. See bootstrap 3 for further documentation of this feature.
-
-
-
-
<div class= "row" >
- <div class= "col-md-5" >
- <img alt= "Responsive image" class= "img-responsive" src= "styleguide/such-awesome.jpg" />
- </div>
- <div class= "col-md-7" >
- <img alt= "Responsive image" class= "img-responsive" src= "styleguide/such-awesome.jpg" />
- </div>
- <div class= "col-md-12" >
- <img alt= "Responsive image" class= "img-responsive" src= "styleguide/such-awesome.jpg" />
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Responsive SVG
-SVG can be made responsive-friendly via the addition of the .svg-responsive
class on a
-wrapper div and the .svg-content
class on the svg itself. You'll also need to to define
-the height to width ratio as an inline padding bottom style on the .svg-responsive
element like so:
-
-
<div class="svg-responsive" style="padding-bottom: 78.31%">
- <svg class="svg-content" viewBox="38 45 125 120" preserveAspectRatio="xMinYMin meet">
- ...
- </svg>
-</div>
-
-
The padding-bottom
should equal the height divided by the width of your specific svg.
For more information about setting up your svg, read this article about svg coordinates systems by Sara Soueidan .
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Labels
-
-
-Labels are based on Bootstrap's labels.
-Here's an example of a label on its own.
-
-
-
-
-
- new
-
-
-
-
-
-
<span class= "label label-primary" > new</span>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-You can also place labels within HTML elements.
-It will be sized based on the element's font size and its font modifiers.
-
-
-
-
-
-
-
-
-
-
-
<p> I am a P.
- <span class= "label label-primary" > new</span>
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
I am an H3.
- new
-
-
-
-
-
-
<h3> I am an H3.
- <span class= "label label-primary" > new</span>
-</h3>
-
-
-
- Copy
-
-
-
-
-
-
-
I am an H3 with an H5 modifier.
- new
-
-
-
-
-
-
-
<h3 class= "h5" > I am an H3 with an H5 modifier.
- <span class= "label label-primary" > new</span>
-</h3>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Removable Labels
-Removable labels are used as tags in an editable list. The user will either enter text or select content (i.e.: a dropdown item), and it will be styled as a removable label (most likely in a list). Developers who use these labels must implement the close functionality for when the user clicks the close button.
-
-
-
-
<span class= "label-removable" > Removable
- <a class= "close-btn fa fa-close" ></a>
-</span>
-
-
- Copy
-
-
-
-
-Links
-Add the class link-text
on any text links.
-This will make the link underlined on hover (except lowlight links).
-
-
-
-
<a class= "link-text" href= "http://bitly.com/11vCzUx" >
- <i class= "fa fa-plus" ></i> Click me!
-</a>
-
-
- Copy
-
-
-
-There are four different kinds of links you can use to connect related content.
-In most cases (unless the designer specifically asks for another type of link)
-you should choose the default link.
-
-
-
-
Here's a <a class= "link-text link-lowlight" href= "http://bit.ly/1wO7Nhv" > less important link</a>
-
-
- Copy
-
-
-
-
-Lists
-
-
-This section contains different list styles.
-Breadcrumb
-The .list-breadcrumb
can be used to provide additional page navigation.
Breadcrumbs use their own monospace font-family.
-
-
-
-
<ul class= "list-breadcrumb" >
- <li>
- <a href= "http://google.com" > Parent</a>
- </li>
- <li>
- <a href= "http://google.com" > Child</a>
- </li>
- <li class= "current" >
- <span> Current Page</span>
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Cards
-As the browser width changes, list-cards fill in one after another. There are two card types, type-card-1
and
-type-card-2
. For this example, we've set both of them to stack on mobile sized screens.
-
-
-
-
-
-
-
-
-
-
-
<ul class= "list-cards list-card-1 list-cards-xs" >
- <li class= "bg-neutral-7" >
- <p> list-card-1</p>
- </li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "list-cards list-card-2 list-cards-xs" >
- <li class= "bg-neutral-7" >
- <p> list-card-2</p>
- </li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-You can specify the breakpoint in which the cards stack by using the list-card-*
classes. If the breakpoint is not
-specified, the cards fill 100% of the list-cards
width.
-List Card Breakpoints
-Class Names
-
-
-extra-small
-.list-card-xs
-
-
-small
-.list-card-sm
-
-
-medium
-.list-card-md
-
-
-large
-.list-card-lg
-
-
-extra-large
-.list-card-xl
-
-
-
-
The cards list should only be used in fully liquid layouts, otherwise grids are a better choice.
-
-This is an example of a card list with the list-cards-xs
stack point applied.
-Resize the browser to see how cards stack on desktop sizes and expand on mobile sizes.
-
-
- lorem ipsum 1
-
-
- lorem ipsum 2
-
-
- lorem ipsum 3
-
-
- lorem ipsum 4
-
-
- lorem ipsum 5
-
-
- lorem ipsum 6
-
-
- lorem ipsum 7
-
-
- lorem ipsum 8
-
-
-
-
-
-
<ul class= "list-cards list-card-2 list-cards-xs" >
- <li class= "bg-neutral-7" >
- <p> lorem ipsum 1</p>
- </li>
- <li class= "bg-neutral-7" >
- <p> lorem ipsum 2</p>
- </li>
- <li class= "bg-neutral-7" >
- <p> lorem ipsum 3</p>
- </li>
- <li class= "bg-neutral-7" >
- <p> lorem ipsum 4</p>
- </li>
- <li class= "bg-neutral-7" >
- <p> lorem ipsum 5</p>
- </li>
- <li class= "bg-neutral-7" >
- <p> lorem ipsum 6</p>
- </li>
- <li class= "bg-neutral-7" >
- <p> lorem ipsum 7</p>
- </li>
- <li class= "bg-neutral-7" >
- <p> lorem ipsum 8</p>
- </li>
-</ul>
-
-
- Copy
-
-
-
-If you would like custom card dimensions, in your sass include the makeCard mixin, like so: @include makeCard(height, width, name);
-You can then access the class via .list-card-#{name}
.
-Clickable List Cards
-If you want your list cards to function as links (i.e. be clickable),
-wrap all the inner content in a
with class list-card-link
.
-
-
-
-
<ul class= "list-cards list-card-1 list-cards-xs" >
- <li class= "bg-neutral-7" >
- <a class= "list-card-link" href= "http://bit.ly/1sEyvH5" >
- <p> This entire list card is clickable!</p>
- </a>
- </li>
- <li class= "bg-neutral-7" >
- <a class= "list-card-link" href= "http://bit.ly/1sFaArX" >
- <p> This entire list card is clickable as well!</p>
- </a>
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Checked
-Replaces the default bullet image with the font awesome checkmark.
-
-
- feep
-
-
- fop
-
-
- meep
-
-
-
-
-
-
<ul class= "list-checked" >
- <li>
- feep
- </li>
- <li>
- fop
- </li>
- <li>
- meep
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Group
-Use this list when you need simple gray borders between items
-
-
- item 1
-
-
- item 2
-
-
- item 3
-
-
-
-
-
-
<ul class= "list-group" >
- <li class= "list-group-item" >
- item 1
- </li>
- <li class= "list-group-item" >
- item 2
- </li>
- <li class= "list-group-item" >
- item 3
- </li>
-</ul>
-
-
- Copy
-
-
-
-Group lists are great for displaying lists of events
-Here's an example from Console:
-
-
-
-
<ul class= "list-group" >
- <li class= "list-group-item pln" >
- <div class= "media" >
- <div class= "media-left media-middle phxxl" >
- <i class= "fa-exclamation-circle type-error-3 fa h2 man" ></i>
- </div>
- <div class= "media-body pbn" >
- <div class= "type-neutral-2 mbs" >
- app crashed
- </div>
- <div class= "type-neutral-4 small" >
- <span> user@example.com</span>
- <span> 11/14/2014 at 4:00 PM UTC</span>
- </div>
- </div>
- </div>
- </li>
-
- <li class= "list-group-item pln" >
- <div class= "media" >
- <div class= "media-left media-middle phxxl" >
- <i class= "fa-stop type-neutral-5 fa h2 man" ></i>
- </div>
- <div class= "media-body pbn" >
- <div class= "type-neutral-2 mbs" >
- stopped app
- </div>
- <div class= "type-neutral-4 small" >
- <span> user@example.com</span>
- <span> 11/14/2014 at 3:00 PM UTC</span>
- </div>
- </div>
- </div>
- </li>
-
- <li class= "list-group-item pln" >
- <div class= "media" >
- <div class= "media-left media-middle phxxl" >
- <i class= "fa-play type-brand-3 fa h2 man" ></i>
- </div>
- <div class= "media-body pbn" >
- <div class= "type-neutral-2 mbs" >
- started app
- </div>
- <div class= "type-neutral-4 small" >
- <span> user@example.com</span>
- <span> 11/14/2014 at 2:00 PM UTC</span>
- </div>
- </div>
- </div>
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Group Inverse
-Use this list when you need simple gray borders between items on a dark background. It is very subtle.
-html_example
-<ul class="list-group-inverse">
- <li class="list-group-item">
- item 1
- </li>
- <li class="list-group-item">
- item 2
- </li>
- <li class="list-group-item">
- item 3
- </li>
-</ul>
-
-Inline
-An inline list is one of the three methods for laying out content (including grids and the media block).
-
-
- feep
-
-
- fop
-
-
- meep
-
-
-
-
-
-
<ul class= "list-inline" >
- <li>
- feep
- </li>
- <li>
- fop
- </li>
- <li>
- meep
- </li>
-</ul>
-
-
- Copy
-
-
-
-You can use inline lists to lay out elements. Here's an example of a header next to a button:
-
-
-
-
<ul class= "list-inline lhxl" >
- <li class= "txt-m" >
- <h5 class= "em-alt em-max" > Bound Services</h5>
- </li>
- <li class= "txt-m" >
- <a class= "btn btn-default" target= "_blank" > Add from Marketplace</a>
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Inline Divider
-Places all list items on a single line with display: inline-block;
and some light padding. The .list-inline-divider
-also adds a simple gray border (add .list-inline-divider-light
to make the border white).
-
-
-
-
<ul class= "list-inline-divider" >
- <li><a class= "type-em-1" href= "http://google.com" > Edit</a></li>
- <li><a class= "type-em-1" href= "http://google.com" > Invite</a></li>
-</ul>
-
-
- Copy
-
-
-
-Here's the same example on a dark background:
-
-
-
-
<div class= "contrast-bar" >
- <ul class= "list-inline-divider list-inline-divider-light" >
- <li><a class= "type-em-1" href= "http://google.com" > Edit</a></li>
- <li><a class= "type-em-1" href= "http://google.com" > Invite</a></li>
- </ul>
-</div>
-
-
- Copy
-
-
-
-
-Ordered
-
-
-
- feep
-
-
- fop
-
-
- meep
-
-
-
-
-
-
<ol>
- <li>
- feep
- </li>
- <li>
- fop
- </li>
- <li>
- meep
- </li>
-</ol>
-
-
- Copy
-
-
-
-
-Steps
-Use this list when you need to show the steps in a flow.
-
-
- Sign up Account
-
-
- Create Organization
-
-
- Do other things
-
-
- And more things
-
-
-
-
-
-
<ol class= "list-steps" >
- <li>
- Sign up Account
- </li>
- <li class= "current" >
- Create Organization
- </li>
- <li>
- Do other things
- </li>
- <li>
- And more things
- </li>
-</ol>
-
-
- Copy
-
-
-
-
-Unordered
-
-
-
- feep
-
-
- fop
-
-
- meep
-
-
-
-
-
-
<ul class= "list-unordered" >
- <li>
- feep
- </li>
- <li>
- fop
- </li>
- <li>
- meep
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Unstyled
-Places all list items on a single line with display: inline-block;
and some light padding. The .list-unstyled
class can be applied to either a <ul>
or and <ol>
.
-
-
- feep
-
-
- fop
-
-
- meep
-
-
-
-
-
-
<ul class= "list-unstyled" >
- <li>
- feep
- </li>
- <li>
- fop
- </li>
- <li>
- meep
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Vertical Divider
-Use this list when you need larger gray borders between
-items. It should be used in concert with grid column
-sizes when you want the items to take a particular width.
We achieve equal height columns using the padding/margin hack,
-so we need an additional .height-enforcer
element to get the
-right min-height.
-
-
-
-
<ul class= "list-vertical-divider" >
- <li class= "col-md-8" >
- <div class= "height-enforcer" >
- item 1
- </div>
- </li>
- <li class= "col-md-8" >
- <div class= "height-enforcer" >
- item 2
- </div>
- </li>
- <li class= "col-md-8" >
- <div class= "height-enforcer" style= "height: 200px" >
- item 3, which is taller
- </div>
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-
-
-
-
<ul class= "list-vertical-divider-2" >
- <li class= "col-md-8" >
- <div class= "height-enforcer" >
- item 1
- </div>
- </li>
- <li class= "col-md-8" >
- <div class= "height-enforcer" >
- item 2
- </div>
- </li>
- <li class= "col-md-8" >
- <div class= "height-enforcer" style= "height: 200px" >
- item 3, which is taller
- </div>
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-List Spacing
-Most lists come with built in default spacing that should work for you. However, if you find yourself needing to modify the spacing, you should do that with list spacing classes rather than whitespace classes. A single class can be applied to the list and all direct children will be modified.
-The classes are constructed by specifying <type><location><size>
.
-
-
-
- Type:
-
-
- l
- list
- Space on the inside of each of the li direct children of the element
-
-
- Location:
-
-
- h
- horizontal
- Adds spacing to the left and right of the li
.
-
-
- v
- vertical
- Adds spacing to the top and bottom of the li
.
-
-
- Size:
-
-
- xl
- extra large
- Adds 21 pixels of space
-
-
- l
- large
- Adds 10 pixels of space
-
-
- m
- medium
- Adds 7 pixels of space
-
-
- s
- small
- Adds 5 pixels of space
-
-
- n
- none
- Sets any existing space to 0
-
-
-
-
-Vertical Spacing Options (n
-> xl
)
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "lvn" >
- <li> feep</li>
- <li> fop</li>
- <li> meep</li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "lvs" >
- <li> feep</li>
- <li> fop</li>
- <li> meep</li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "lvm" >
- <li> feep</li>
- <li> fop</li>
- <li> meep</li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "lvl" >
- <li> feep</li>
- <li> fop</li>
- <li> meep</li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "lvxl" >
- <li> feep</li>
- <li> fop</li>
- <li> meep</li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Horizontal Spacing Options (n
-> xl
)
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "list-inline lhn" >
- <li> feep</li>
- <li> fop</li>
- <li> meep</li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "list-inline lhs" >
- <li> feep</li>
- <li> fop</li>
- <li> meep</li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "list-inline lhm" >
- <li> feep</li>
- <li> fop</li>
- <li> meep</li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "list-inline lhl" >
- <li> feep</li>
- <li> fop</li>
- <li> meep</li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "list-inline lhxl" >
- <li> feep</li>
- <li> fop</li>
- <li> meep</li>
-</ul>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Timeline
-A Timeline is a graphical representation of sequenced events. The Timeline list components are used to order list items by timestamp.
We achieve equal width columns for the time stamp by using a display table hack, so we need an additional inline style on the first list-timeline-date
to specify the desired width.
-
-
- 1 day ago
-
- java buildpack (offline) (2.5)
- a minor release
-
-
-
- 1 day ago
-
- java buildpack (offline) (2.5)
- a minor release
-
-
-
- 1 day ago
-
- java buildpack (offline) (2.5)
- a minor release
-
-
-
-
-
-
-
<ol class= "list-timeline" >
- <li class= "list-timeline-item" >
- <time datetime= "2014-07-04" class= "list-timeline-date" style= "width: 150px;" > 1 day ago</time>
- <span class= "list-timeline-title" >
- java buildpack (offline) (2.5)
- <span class= "list-timeline-subtitle" > a minor release</span>
- </span>
- </li>
- <li class= "list-timeline-item" >
- <time datetime= "2014-07-04" class= "list-timeline-date" > 1 day ago</time>
- <span class= "list-timeline-title" >
- java buildpack (offline) (2.5)
- <span class= "list-timeline-subtitle" > a minor release</span>
- </span>
- </li>
- <li class= "list-timeline-item" >
- <time datetime= "2014-07-04" class= "list-timeline-date" > 1 day ago</time>
- <span class= "list-timeline-title" >
- java buildpack (offline) (2.5)
- <span class= "list-timeline-subtitle" > a minor release</span>
- </span>
- </li>
-</ol>
-
-
- Copy
-
-
-
-
-Ribbons
-
-
-Ribbons should be used to call out access, status, environment, etc.
-Banner
-You can use a banner ribbon to let the team know which environment they're
-working on.
-
-
-
-
<div class= "ribbon-banner" >
- Acceptance
-</div>
-
-
- Copy
-
-
-
-
-Ribbon
-
-
-
-
-
-
- British
-
For British eyes only
-
-
-
-
-
<div class= "inline-ribbon" > British</div>
-<span class= "mlm" > For British eyes only</span>
-
-
-
- Copy
-
-
-
-
-
-
- Pivotal
-
Wow this ribbon is so inline
-
-
-
-
-
-
<div class= "inline-ribbon ribbon-primary" > Pivotal</div>
-<span class= "mlm" > Wow this ribbon is so inline</span>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Typography
-
-
-Source Sans Pro is our font family.
-It can be used with the following modifiers to achieve a variety of effects.
-Sizes
-Set font sizes using headings and modifier classes.
-
-
-
-
-
-
h1.title 42px
-
-
-
-
-
<h1 class= "title" > h1.title 42px</h1>
-
-
-
- Copy
-
-
-
-
-
-
-
h1 31px
-
-
-
-
- Copy
-
-
-
-
-
-
-
h2 25px
-
-
-
-
- Copy
-
-
-
-
-
-
-
h3 20px
-
-
-
-
- Copy
-
-
-
-
-
-
-
h4 18px
-
-
-
-
- Copy
-
-
-
-
-
-
-
h5 16px
-
-
-
-
- Copy
-
-
-
-
-
-
-
h6 13px
-
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<p> base font size 16px</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<p class= "type-sm" > small text 14px</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<p class= "type-xs" > extra small text 12px</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
- Separating code and visual semantics
-
-
- Sometimes you may need to use a heading which has different visual and code semantics.
- You can accomplish this by combining classes with elements
- (classes take visual precedence over elements in this case).
-
-
-
-
-
-
-
-
-
I am a h1!
-
-
-
-
-
<h1 class= "h2" > I am a h1!</h1>
-
-
-
- Copy
-
-
-
-
-
-
-
I am a h2!
-
-
-
-
-
-
<h2 class= "h1" > I am a h2!</h2>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-If it's not a heading but you need similar visual treatment you can add just the class to any element.
-
-
- Use headings when possible since they add semantic value.
-
-
-
-
-
-
-
-
- Heading level 2 on a div
-
-
-
-
-
-
<div class= "h2" > Heading level 2 on a div</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Alignment
-See the alignment component for classes to use for text alignment.
-Colors
-You can apply color to any text with the color classes.
-
-
-
-
-
-
-
-
-
-
-
<p class= "type-brand-3" > I'm a brand color!</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-Here's a table of all the color classes.
-
-
- Type inverse
- Type inverse
- .type-inverse
-
-
- Type neutral 1
- Type neutral 1
- .type-neutral-1
-
-
- Type neutral 1
- Type neutral 1
- .type-neutral-1
-
-
- Type neutral 2
- Type neutral 2
- .type-neutral-2
-
-
- Type neutral 3
- Type neutral 3
- .type-neutral-3
-
-
- Type neutral 4
- Type neutral 4
- .type-neutral-4
-
-
- Type neutral 5
- Type neutral 5
- .type-neutral-5
-
-
- Type neutral 6
- Type neutral 6
- .type-neutral-6
-
-
- Type neutral 7
- Type neutral 7
- .type-neutral-7
-
-
- Type neutral 8
- Type neutral 8
- .type-neutral-8
-
-
- Type neutral 9
- Type neutral 9
- .type-neutral-9
-
-
- Type neutral 10
- Type neutral 10
- .type-neutral-10
-
-
- Type neutral 11
- Type neutral 11
- .type-neutral-11
-
-
- Type dark 1
- Type dark 1
- .type-dark-1
-
-
- Type dark 2
- Type dark 2
- .type-dark-2
-
-
- Type dark 3
- Type dark 3
- .type-dark-3
-
-
- Type accent 1
- Type accent 1
- .type-accent-1
-
-
- Type accent 2
- Type accent 2
- .type-accent-2
-
-
- Type accent 3
- Type accent 3
- .type-accent-3
-
-
- Type accent 4
- Type accent 4
- .type-accent-4
-
-
- Type accent 5
- Type accent 5
- .type-accent-5
-
-
- Type brand 1
- Type brand 1
- .type-brand-1
-
-
- Type brand 2
- Type brand 2
- .type-brand-2
-
-
- Type brand 3
- Type brand 3
- .type-brand-3
-
-
- Type brand 4
- Type brand 4
- .type-brand-4
-
-
- Type brand 5
- Type brand 5
- .type-brand-5
-
-
- Type error 1
- Type error 1
- .type-error-1
-
-
- Type error 2
- Type error 2
- .type-error-2
-
-
- Type error 3
- Type error 3
- .type-error-3
-
-
- Type error 4
- Type error 4
- .type-error-4
-
-
- Type success 1
- Type success 1
- .type-success-1
-
-
- Type success 2
- Type success 2
- .type-success-2
-
-
- Type warn 1
- Type warn 1
- .type-warn-1
-
-
- Type warn 2
- Type warn 2
- .type-warn-2
-
-
- Type warn 3
- Type warn 3
- .type-warn-3
-
-
-
-Emphasis Modifiers
-Type emphasis modifiers can be used on any type element.
-
-
-
-
-
- Really Important
-
- I mean reeeeeeeeeeeally
-
-
-
-
-
-
-
<h1 class= "em-high" > Really Important</h1>
-<p>
- I mean <span class= "em-max" > reeeeeeeeeeeally</span>
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-Here's a table of all the emphasis modifier classes.
-
-
-
-
-
-
Low emphasis
-
-
-
-
-
<h1 class= "em-low" > Low emphasis</h1>
-
-
-
- Copy
-
-
-
-
-
-
-
Default emphasis
-
-
-
-
-
<h1 class= "em-default" > Default emphasis</h1>
-
-
-
- Copy
-
-
-
-
-
-
-
High emphasis
-
-
-
-
-
<h1 class= "em-high" > High emphasis</h1>
-
-
-
- Copy
-
-
-
-
-
-
-
Maximum emphasis
-
-
-
-
-
<h1 class= "em-max" > Maximum emphasis</h1>
-
-
-
- Copy
-
-
-
-
-
-
-
Emphasis alternate
-
-
-
-
-
-
<h1 class= "em-alt" > Emphasis alternate</h1>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/release/pui-v1.9.0/fonts/FontAwesome.otf b/release/pui-v1.9.0/fonts/FontAwesome.otf
deleted file mode 100644
index f7936cc1e..000000000
Binary files a/release/pui-v1.9.0/fonts/FontAwesome.otf and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/fontawesome-webfont.eot b/release/pui-v1.9.0/fonts/fontawesome-webfont.eot
deleted file mode 100644
index 33b2bb800..000000000
Binary files a/release/pui-v1.9.0/fonts/fontawesome-webfont.eot and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/fontawesome-webfont.svg b/release/pui-v1.9.0/fonts/fontawesome-webfont.svg
deleted file mode 100644
index 1ee89d436..000000000
--- a/release/pui-v1.9.0/fonts/fontawesome-webfont.svg
+++ /dev/null
@@ -1,565 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/release/pui-v1.9.0/fonts/fontawesome-webfont.ttf b/release/pui-v1.9.0/fonts/fontawesome-webfont.ttf
deleted file mode 100644
index ed9372f8e..000000000
Binary files a/release/pui-v1.9.0/fonts/fontawesome-webfont.ttf and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/fontawesome-webfont.woff b/release/pui-v1.9.0/fonts/fontawesome-webfont.woff
deleted file mode 100644
index 8b280b98f..000000000
Binary files a/release/pui-v1.9.0/fonts/fontawesome-webfont.woff and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/fontawesome-webfont.woff2 b/release/pui-v1.9.0/fonts/fontawesome-webfont.woff2
deleted file mode 100644
index 3311d5851..000000000
Binary files a/release/pui-v1.9.0/fonts/fontawesome-webfont.woff2 and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.eot b/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.eot
deleted file mode 100755
index 4f93a618f..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.eot and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.svg b/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.svg
deleted file mode 100755
index 8f9713e13..000000000
--- a/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.svg
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.ttf b/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.ttf
deleted file mode 100755
index 55f6c3e2c..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.ttf and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.woff b/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.woff
deleted file mode 100755
index 1b9c7b13f..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-black-webfont.woff and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.eot b/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.eot
deleted file mode 100755
index 965facdc1..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.eot and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.svg b/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.svg
deleted file mode 100755
index d72afc7af..000000000
--- a/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.svg
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.ttf b/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.ttf
deleted file mode 100755
index 9e2c21a70..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.ttf and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.woff b/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.woff
deleted file mode 100755
index 11a950cbc..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-bold-webfont.woff and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.eot b/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.eot
deleted file mode 100755
index e735e7feb..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.eot and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.svg b/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.svg
deleted file mode 100755
index c46992f94..000000000
--- a/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.svg
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.ttf b/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.ttf
deleted file mode 100755
index dc7cde4cc..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.ttf and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.woff b/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.woff
deleted file mode 100755
index 10e23ecaf..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-extralight-webfont.woff and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.eot b/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.eot
deleted file mode 100755
index a0f216693..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.eot and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.svg b/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.svg
deleted file mode 100755
index e19c73c75..000000000
--- a/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.svg
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.ttf b/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.ttf
deleted file mode 100755
index cbe995fef..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.ttf and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.woff b/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.woff
deleted file mode 100755
index 58372bfab..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-it-webfont.woff and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.eot b/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.eot
deleted file mode 100755
index 3b605b7a9..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.eot and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.svg b/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.svg
deleted file mode 100755
index 3285644ca..000000000
--- a/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.svg
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.ttf b/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.ttf
deleted file mode 100755
index 4747dae4b..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.ttf and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.woff b/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.woff
deleted file mode 100755
index 17b2a4693..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-light-webfont.woff and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.eot b/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.eot
deleted file mode 100755
index aa04e6cdb..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.eot and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.svg b/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.svg
deleted file mode 100755
index 9d79def7b..000000000
--- a/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.svg
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.ttf b/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.ttf
deleted file mode 100755
index 8c69e50fd..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.ttf and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.woff b/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.woff
deleted file mode 100755
index 0afce6cfb..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-regular-webfont.woff and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.eot b/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.eot
deleted file mode 100755
index f9df2a1f9..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.eot and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.svg b/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.svg
deleted file mode 100755
index d41d2e621..000000000
--- a/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.svg
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.ttf b/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.ttf
deleted file mode 100755
index 806046072..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.ttf and /dev/null differ
diff --git a/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.woff b/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.woff
deleted file mode 100755
index d6b35fb6b..000000000
Binary files a/release/pui-v1.9.0/fonts/sourcesanspro-semibold-webfont.woff and /dev/null differ
diff --git a/release/pui-v1.9.0/forms.html b/release/pui-v1.9.0/forms.html
deleted file mode 100644
index d3c2c17ba..000000000
--- a/release/pui-v1.9.0/forms.html
+++ /dev/null
@@ -1,2173 +0,0 @@
-
-
-
- a brand new styleguide: Forms
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Individual form controls automatically receive some global styling.
-All textual <input>
, <textarea>
, and <select>
elements with
-.form-control
are set to width: 100
%; by default.
-
-
- Wrap labels and controls in .form-group
for optimum spacing.
-
-
-
-
-
-
-
-
-
<form role= "form" >
- <div class= "form-group" >
- <label for= "exampleInputEmail1" > Email address</label>
- <input type= "email" class= "form-control" id= "exampleInputEmail1" placeholder= "Enter email" >
- </div>
- <div class= "form-group" >
- <label for= "exampleInputPassword1" > Password</label>
- <input type= "password" class= "form-control" id= "exampleInputPassword1" placeholder= "Password" >
- </div>
- <div class= "checkbox" >
- <label>
- <input type= "checkbox" > Check me out
- </label>
- </div>
- <button type= "submit" class= "btn btn-default" > Submit</button>
-</form>
-
-
- Copy
-
-
-
-
-Autoselect Text Inputs
-This form is used to show information that a user may wish to copy and paste somewhere.
-
-
-
-
-
<input class= "auto-select form-control" data-behavior= "AutoSelect" readonly= "readonly" value= "This should auto highlight" ></input>
-
-
- Copy
-
-
-
-
-
-
-
-Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.
-Default (stacked)
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <div class= "checkbox" >
- <label>
- <input type= "checkbox" >
- Option one is this and that— be sure to include why it's great
- </input>
- </label>
- </div>
- <div class= "radio" >
- <label>
- <input id= "optionsRadios1" name= "optionsRadios" type= "radio" value= "option1" checked >
- Option one is this and that— be sure to include why it's great
- </input>
- </label>
- </div>
- <div class= "radio" >
- <label>
- <input id= "optionsRadios2" name= "optionsRadios" type= "radio" value= "option2" >
- Option two can be something else and selecting it will deselect option one
- </input>
- </label>
- </div>
-</form>
-
-
- Copy
-
-
-
-
-
-Use .checkbox-inline
or .radio-inline
class to a series of checkboxes or radios for controls appear on the same line.
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <div class= "form-group" >
- <label class= "checkbox-inline" >
- <input id= "inlineCheckbox1" type= "checkbox" value= "option1" >
- 1
- </input>
- </label>
- <label class= "checkbox-inline" >
- <input id= "inlineCheckbox2" type= "checkbox" value= "option2" >
- 2
- </input>
- </label>
- <label class= "checkbox-inline" >
- <input id= "inlineCheckbox3" type= "checkbox" value= "option3" >
- 3
- </input>
- </label>
- </div>
- <div class= "form-group" >
- <label class= "radio-inline" >
- <input id= "inlineradio1" type= "radio" value= "option1" >
- 1
- </input>
- </label>
- <label class= "radio-inline" >
- <input id= "inlineradio2" type= "radio" value= "option2" >
- 2
- </input>
- </label>
- <label class= "radio-inline" >
- <input id= "inlineradio3" type= "radio" value= "option3" >
- 3
- </input>
- </label>
- </div>
-</form>
-
-
- Copy
-
-
-
-
-
-Controls will occasionally need to be disabled.
-You can do that by adding the disabled
attribute.
-Inputs, selects, checkboxes, fieldsets, buttons, and other form controls can all be disabled.
-
-
-
-
-
-
-
-
-
-
-
<input class= "form-control" type= "text" placeholder= "Disabled input here" disabled >
-
-
-
- Copy
-
-
-
-
-
-
-
- Option 1
- Option 2
-
-
-
-
-
-
<select class= "form-control" disabled >
- <option> Option 1</option>
- <option> Option 2</option>
-</select>
-
-
-
- Copy
-
-
-
-
-
-
-
-
- I'm disabled!
-
-
-
-
-
-
<label>
- <input type= "checkbox" disabled >
- I'm disabled!
-</label>
-
-
-
- Copy
-
-
-
-
-
-
-
- Hi
-
-
-
-
-
-
-
<button class= "btn" disabled >
- Hi
-</button>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Help Text
-Help text
-Block level help text for form controls.
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <input class= "form-control" type= "text" ></input>
- <span class= "help-block" > A block of help text that breaks onto a new line and may extend beyond one line.</span>
-</form>
-
-
- Copy
-
-
-
-
-
-
-
-Add .form-inline
to your <form>
for left-aligned and inline-block controls.
-This only applies to forms within viewports that are at least 768px wide.
-
-
- Always add labels to every input.
-
-
- Screen readers will have trouble with your forms if you don't.
- You can always hide the labels using the .sr-only
class.
-
-
-
-
-
-
-
<form class= "styleguide-form form-inline" role= "form" >
- <div class= "form-group" >
- <label class= "sr-only" for= "exampleInputEmail2" > Email address</label>
- <input class= "form-control" id= "exampleInputEmail2" placeholder= "Enter email" type= "email" ></input>
- </div>
- <div class= "form-group" >
- <label class= "sr-only" for= "exampleInputPassword2" > Password</label>
- <input class= "form-control" id= "exampleInputPassword2" placeholder= "Password" type= "password" ></input>
- </div>
- <div class= "checkbox" >
- <label>
- <input type= "checkbox" ></input>
- Remember me
- </label>
- </div>
- <button class= "btn btn-primary" type= "submit" > Sign in</button>
-</form>
-
-
- Copy
-
-
-
-
-
-Add .form-inline.inline-labels
to your <form>
for left-aligned and inline-block controls with labels inline with inputs.
-
-
-
-
<form class= "styleguide-form form-inline inline-labels" role= "form" >
- <div class= "form-group" >
- <label for= "exampleInputEmail2" > Write a thing</label>
- <input class= "form-control" id= "exampleInputEmail2" placeholder= "Write a thing" type= "email" ></input>
- </div>
- <div class= "form-group" >
- <label for= "exampleSelect" > Choose a thing</label>
- <select class= "form-control" id= "exampleSelect" >
- <option> thing</option>
- </select>
- </div>
- <div class= "checkbox" >
- <label>
- <input type= "checkbox" ></input>
- Remember me
- </label>
- </div>
- <button class= "btn btn-primary" type= "submit" > Sign in</button>
-</form>
-
-
- Copy
-
-
-
-
-
-
-
-An input with the label top aligned (this is the default layout).
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <div class= "form-group" >
- <label for= "exampleInputEmail1" >
- <abbr title= "required" > *</abbr>
- Email address
- </label>
- <input aria-required= "true" class= "form-control" id= "exampleInputEmail1" placeholder= "Enter email" required= "required" type= "email" ></input>
- </div>
-</form>
-
-
- Copy
-
-
-
-Use Bootstrap's predefined grid classes to align labels and groups of form controls in a horizontal
-layout by adding .form-horizontal
to the form. Doing so changes .form-groups
to behave as grid rows, so no need for .row
.
An input with the label left aligned
-
-
-
-
<form class= "styleguide-form form-horizontal" role= "form" >
- <div class= "form-group" >
- <div class= "col-md-6" >
- <label class= "control-label" for= "exampleInputEmail1" >
- <abbr title= "required" > *</abbr>
- Email address
- </label>
- </div>
- <div class= "col-md-18" >
- <input aria-required= "true" class= "form-control" id= "exampleInputEmail1" placeholder= "Enter email" required= "required" type= "email" ></input>
- </div>
- </div>
-</form>
-
-
- Copy
-
-
-
-An input with the label right aligned (N.B., control-label class provides the right alignment):
-
-
-
-
<form class= "styleguide-form form-horizontal" role= "form" >
- <div class= "form-group" >
- <label class= "col-md-6 control-label" for= "exampleInputEmail1" >
- <abbr title= "required" > *</abbr>
- Email address
- </label>
- <div class= "col-md-18" >
- <input aria-required= "true" class= "form-control" id= "exampleInputEmail1" placeholder= "Enter email" required= "required" type= "email" ></input>
- </div>
- </div>
-</form>
-
-
- Copy
-
-
-
-An unstyled inputs that doesn't have any of the default input styles
-
-
-
-
-
<form role= "form" >
- <input class= "unstyled" placeholder= "This is a text input" ></input>
-</form>
-
-
- Copy
-
-
-
-
-
-Examples of standard form controls supported in an example form layout.
Inputs
-Most common form control, text-based input fields. Includes support for
-all HTML5 types: text
, password
, datetime
, datetime-local
,
-date
, month
, time
, week
, number
, email
, url
, search
,
-tel
, and color
.
-
-
- Inputs will only be fully styled if their type is properly declared.
-
-
-
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <input class= "form-control" placeholder= "Text input" type= "text" ></input>
-</form>
-
-
- Copy
-
-
-
-Password field
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <input class= "form-control" placeholder= "Password" type= "password" ></input>
-</form>
-
-
- Copy
-
-
-
-Date
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <input class= "form-control" placeholder= "Date" type= "date" ></input>
-</form>
-
-
- Copy
-
-
-
-Number
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <input class= "form-control" placeholder= "Number" type= "number" ></input>
-</form>
-
-
- Copy
-
-
-
-With a min/max and default starting value
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <input class= "form-control" placeholder= "Number" type= "number" min= 0 max= 2 value= 1 ></input>
-</form>
-
-
- Copy
-
-
-
-With a different increment value
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <input class= "form-control" placeholder= "Number" type= "number" step= 5 ></input>
-</form>
-
-
- Copy
-
-
-
-Email
Use this with fields that require email addresses to pop up the correct keyboard on mobile
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <input class= "form-control" placeholder= "Email" type= "email" ></input>
-</form>
-
-
- Copy
-
-
-
-URL
Use this with fields that require urls to pop up the correct keyboard on mobile
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <input class= "form-control" placeholder= "URL" type= "url" ></input>
-</form>
-
-
- Copy
-
-
-
-Telephone
Use this with fields that require telephone numbers to pop up the dialpad on mobile
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <input class= "form-control" placeholder= "Telephone" type= "tel" ></input>
-</form>
-
-
- Copy
-
-
-
-
-
-Set heights using the form control classes .input-lg
and .input-sm
.
-Create larger or smaller form controls that match button sizes.
-
-
-
-
-
-
-
-
-
-
-
<input class= "form-control input-lg" placeholder= ".input-lg" type= "text" >
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<input class= "form-control" placeholder= "Default Input" type= "text" >
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
<input class= "form-control input-sm" placeholder= ".input-sm" type= "text" >
-
-
-
- Copy
-
-
-
-
-
-
-
-
-Set widths using grid column classes like .col-lg-*
.
-Wrap selects in grid columns, or any custom parent element, to easily enforce desired widths.
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <div class= "row" >
- <div class= "col-md-4" >
- <input class= "form-control" placeholder= ".col-xs-2" type= "text" ></input>
- </div>
- <div class= "col-md-6" >
- <input class= "form-control" placeholder= ".col-xs-3" type= "text" ></input>
- </div>
- <div class= "col-md-8" >
- <input class= "form-control" placeholder= ".col-xs-4" type= "text" ></input>
- </div>
- </div>
-</form>
-
-
- Copy
-
-
-
-
-
-Use this input when creating a search component.
-
-
-
-
<div class= "form-group form-group-search" >
- <input class= "form-control" placeholder= "This is a searchbox" >
- <i class= "fa fa-search" ></i>
-</div>
-
-
- Copy
-
-
-
-
-
-Add the readonly
boolean attribute on an input to prevent user input and style the input as disabled.
-
-
-
-
-
<input class= "form-control" type= "text" placeholder= "Readonly input here..." readonly >
-
-
- Copy
-
-
-
-
-
-
-
-Selects are excellent to use because they will automatically
-behave as expected cross browser on different devices. Prefer
-them over a custom dropdown whenever possible.
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <select class= "form-control" >
- <option> default option</option>
- <option> an option</option>
- <option> another option</option>
- </select>
-</form>
-
-
- Copy
-
-
-
-
-
-Set heights using the form control classes .input-lg
and .input-sm
.
-Create larger or smaller form controls that match button sizes.
-
-
-
-
-
-
- Option 1
- Option 2
-
-
-
-
-
-
<select class= "form-control input-lg" >
- <option> Option 1</option>
- <option> Option 2</option>
-</select>
-
-
-
- Copy
-
-
-
-
-
-
-
- Option 1
- Option 2
-
-
-
-
-
-
<select class= "form-control" Input " >
- <option> Option 1</option>
- <option> Option 2</option>
-</select>
-
-
-
- Copy
-
-
-
-
-
-
-
- Option 1
- Option 2
-
-
-
-
-
-
-
<select class= "form-control input-sm" >
- <option> Option 1</option>
- <option> Option 2</option>
-</select>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-Set widths using grid column classes like .col-lg-*
.
-Wrap inputs in grid columns, or any custom parent element, to easily enforce desired widths.
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <div class= "row" >
- <div class= "col-md-4" >
- <input class= "form-control" placeholder= ".col-xs-2" type= "text" ></input>
- </div>
- <div class= "col-md-6" >
- <input class= "form-control" placeholder= ".col-xs-3" type= "text" ></input>
- </div>
- <div class= "col-md-8" >
- <input class= "form-control" placeholder= ".col-xs-4" type= "text" ></input>
- </div>
- </div>
-</form>
-
-
- Copy
-
-
-
-
-
-This is a fancy select!
-
-
-
-
<form class= "styleguide-form" role= "form" style= "width: 200px" >
- <label for= "fancy-select" > Description</label>
- <div class= "select-fancy" >
- <select class= "form-control" >
- <option> Fancy Option 1</option>
- <option> Fancy Option 2</option>
- </select>
- </div>
-</form>
-
-
- Copy
-
-
-
-
-
-When you need to place plain text next to a form label within a form,
-use the .form-control-static
class on a <p>
.
Here's an example in a horizontal form:
-
-
-
-
<form class= "form-horizontal styleguide-form" role= "form" >
- <div class= "form-group" >
- <label class= "col-md-4 control-label" > Email</label>
- <div class= "col-sm-10" >
- <p class= "form-control-static" > email@example.com</p>
- </div>
- </div>
- <div class= "form-group" >
- <label class= "col-md-4 control-label" for= "inputPassword" > Password</label>
- <div class= "col-sm-10" >
- <input class= "form-control" id= "inputPassword" placeholder= "Password" type= "password" ></input>
- </div>
- </div>
-</form>
-
-
- Copy
-
-
-
-Here's an example in a vertical form:
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <div class= "form-group" >
- <label class= "control-label" > Email</label>
- <p class= "form-control-static" > someguy@test.com</p>
- </div>
- <div class= "form-group" >
- <label class= "control-label" for= "name" > Name</label>
- <input class= "form-control" id= "name" placeholder= "name" ></input>
- </div>
-</form>
-
-
- Copy
-
-
-
-
-Text Areas
-Text areas are used for larger amounts of input.
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <div class= "form-group" >
- <label for= "exampleTextAreaId" > Description</label>
- <textarea class= "form-control" id= "exampleTextAreaId" rows= "3" ></textarea>
- </div>
-</form>
-
-
- Copy
-
-
-
-
-
-A toggle switch is a horizontally styled checkbox which represents true with blue and false with gray.
-
-
-
-
<div class= "form-group" >
- <input id= "toggleSwitch" class= "toggle-switch toggle-switch-lg" type= "checkbox" >
- <label for= "toggleSwitch" > Toggle Switch</label>
-</div>
-
-
- Copy
-
-
-
-
-
-To show validation errors on a field, add .has-error
to the field's form group.
-This class can be used for all types of inputs.
Error messages should use the classes .help-block.has-error
.
-
-
-
-
-
-
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <div class= "form-group has-error" >
- <label class= "control-label" for= "inputError" >
- Input with error
- </label>
- <input id= "inputError" class= "form-control" type= "text" >
- <span class= "help-block has-error" >
- Error help text
- </span>
- </div>
-</form>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <div class= "form-group has-error" >
- <div class= "checkbox" >
- <label class= "control-label" >
- <input type= "checkbox" value= "" >
- Checkbox which needs to be checked
- </label>
- <span class= "help-block has-error" >
- Error help text
- </span>
- </div>
- </div>
-</form>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-If you're doing client-side validation and want to show successful validation of a field,
-add .has-success
to the field's form group.
-
-
- The .has-success
class can only be used on inputs that have a text-box.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<form class= "styleguide-form" role= "form" >
- <div class= "form-group has-success" >
- <label class= "control-label" for= "inputSuccess" >
- Input with success
- </label>
- <input id= "inputSuccess" class= "form-control" type= "text" >
- </div>
-</form>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/release/pui-v1.9.0/images/aboutus-hero.jpg b/release/pui-v1.9.0/images/aboutus-hero.jpg
deleted file mode 100644
index 6c647b276..000000000
Binary files a/release/pui-v1.9.0/images/aboutus-hero.jpg and /dev/null differ
diff --git a/release/pui-v1.9.0/images/console-laptop.png b/release/pui-v1.9.0/images/console-laptop.png
deleted file mode 100644
index 84ba20643..000000000
Binary files a/release/pui-v1.9.0/images/console-laptop.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/favicon.ico b/release/pui-v1.9.0/images/favicon.ico
deleted file mode 100644
index aa9da6a12..000000000
Binary files a/release/pui-v1.9.0/images/favicon.ico and /dev/null differ
diff --git a/release/pui-v1.9.0/images/gray-cloud.png b/release/pui-v1.9.0/images/gray-cloud.png
deleted file mode 100644
index 30e1838fc..000000000
Binary files a/release/pui-v1.9.0/images/gray-cloud.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/img--examplesDebra.png b/release/pui-v1.9.0/images/img--examplesDebra.png
deleted file mode 100644
index 9e2799e11..000000000
Binary files a/release/pui-v1.9.0/images/img--examplesDebra.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/img--examplesGary.png b/release/pui-v1.9.0/images/img--examplesGary.png
deleted file mode 100644
index 37f41d616..000000000
Binary files a/release/pui-v1.9.0/images/img--examplesGary.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/img--examplesKelly.png b/release/pui-v1.9.0/images/img--examplesKelly.png
deleted file mode 100644
index aceb3c793..000000000
Binary files a/release/pui-v1.9.0/images/img--examplesKelly.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/img--examplesTodd.png b/release/pui-v1.9.0/images/img--examplesTodd.png
deleted file mode 100644
index 91e875618..000000000
Binary files a/release/pui-v1.9.0/images/img--examplesTodd.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/logo-pcf.png b/release/pui-v1.9.0/images/logo-pcf.png
deleted file mode 100644
index 8aa4c77c0..000000000
Binary files a/release/pui-v1.9.0/images/logo-pcf.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/logo-pws.png b/release/pui-v1.9.0/images/logo-pws.png
deleted file mode 100644
index 7bcec0855..000000000
Binary files a/release/pui-v1.9.0/images/logo-pws.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/logo.png b/release/pui-v1.9.0/images/logo.png
deleted file mode 100644
index 7ed5a8952..000000000
Binary files a/release/pui-v1.9.0/images/logo.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/open-source-icon.png b/release/pui-v1.9.0/images/open-source-icon.png
deleted file mode 100644
index cbdaf485a..000000000
Binary files a/release/pui-v1.9.0/images/open-source-icon.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/p-logo.png b/release/pui-v1.9.0/images/p-logo.png
deleted file mode 100644
index 22e8d84eb..000000000
Binary files a/release/pui-v1.9.0/images/p-logo.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/pivotal_footer_logo.png b/release/pui-v1.9.0/images/pivotal_footer_logo.png
deleted file mode 100644
index c25e309e8..000000000
Binary files a/release/pui-v1.9.0/images/pivotal_footer_logo.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/pivotal_footer_logo@2x.png b/release/pui-v1.9.0/images/pivotal_footer_logo@2x.png
deleted file mode 100644
index 57ae7233b..000000000
Binary files a/release/pui-v1.9.0/images/pivotal_footer_logo@2x.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/pui-logo@2x.png b/release/pui-v1.9.0/images/pui-logo@2x.png
deleted file mode 100644
index 37c3e54e5..000000000
Binary files a/release/pui-v1.9.0/images/pui-logo@2x.png and /dev/null differ
diff --git a/release/pui-v1.9.0/images/such-awesome.jpg b/release/pui-v1.9.0/images/such-awesome.jpg
deleted file mode 100644
index b034f775e..000000000
Binary files a/release/pui-v1.9.0/images/such-awesome.jpg and /dev/null differ
diff --git a/release/pui-v1.9.0/images/we-care-sprites.png b/release/pui-v1.9.0/images/we-care-sprites.png
deleted file mode 100644
index dbcabaae9..000000000
Binary files a/release/pui-v1.9.0/images/we-care-sprites.png and /dev/null differ
diff --git a/release/pui-v1.9.0/index.html b/release/pui-v1.9.0/index.html
deleted file mode 100644
index c43218ca6..000000000
--- a/release/pui-v1.9.0/index.html
+++ /dev/null
@@ -1,1045 +0,0 @@
-
-
-
- a brand new styleguide: Intro
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Pivotal UI
-
This is everything you need to get started building UI at Pivotal. Pivotal UI includes Pivotal styles as well as Bootstrap CSS, OOCSS, the FontAwesome icon font, and the Source Sans Pro Google Font in your project.
-
-
-
-
-
-
Download
-
Download the latest version of Pivotal UI and begin building!
-
Get Pivotal UI
-
You will need to be part of the Pivotal CF Github organization to download Pivotal UI. If you do not have access, email ask+cf@pivotal.io .
-
-
-
What's included
-
Pivotal UI comes with everything you need from grids, to fonts, and even JavaScript!
-
- jQuery v2.1.1 (will not be included in the next major release)
- LoDash v2.4.1 (will not be included in the next major release)
- modernizr v2.8.3 (will not be included in the next major release)
- Bootstrap v3.2 (javascript will not be included in the next major release)
- Prism.js
- Font Awesome v4.10
- Normalize CSS v1.0.2
- OOCSS
- Source Sans Pro
-
-
-
-
-
-
-
Add it to your app
-
- Unzip the release archive and move the resulting directory into your project.
- Link to the css file in your html template to include the styles.
- Add a script tag to your html template to use the javascript.
-
-
-
-
<html>
- <head>
- <title>...</title>
- <link rel="stylesheet" href="/path/to/release/pivotal-ui.css">
- <script src="/path/to/release/pivotal-ui.js"></script>
- </head>
- <body>
- <p class="type-brand-1">Hello, world!</p>
- </body>
-</html>
-
-
-
-
-
-
-
Best practices
-
There are a few things you should know before working with Pivotal UI.
-
- Dont modify Pivotal UI stylesheets unless you are a contributer. See the contribution docs for more info.
- You won't have to write your own CSS. We provide everything for you, even down to special classes for padding, margins, type alignment, etc.
- If there is something you need and Pivotal UI doesn't have it, you can submit a feature request. To do so, please open an issue on Github . Screenshots are very helpful! We'll then have a conversation about what you are trying to achieve in your project and the best way to do that.
- Have Fun!
-
-
-
-
-
-
How to use this styleguide
-
We have organized Pivotal UI styleguide into a few useful sections.
-
- Layout - Here you will find all of the styles needed for page layout and organization. Some layout elements you can find here are grids, media blocks, and panes.
- Elements - A single node component. They typically map to HTML elements are building blocks for large objects. Some elements you can find here are buttons, icons, lists, and typography.
- Objects - A multi node component. These are ususally made of multiple elements that function together to create a more complex component. Some objects you can find here are alerts, modals, tables, and maps.
- Utilities - Mixins that can modify many different components. Some utilities you can find here are whitespace, color, and type modifiers.
- Forms - You can find all sorts of form objects here.
- Beta - These are experimental components with unstable APIs. Don't use them on production apps.
- See our README for details on how to use these components.
- by Product - Some components are built with a specific product in mind. You can find Console's app health indicators, and PWS Marketing graphics here.
-
-
By pulling components from each of these sections, you can quickly and easily scaffold pages for prototyping and production. Simply copy and paste applicable component code into your views and add any utility classes needed to make it perfect.
-
-
-
-
-
-
Design Resources
-
Our Component Library is available in two formats
-
-
-
-
What's included
-
- Buttons
- Typography
- Colors Palette
- Avatars
- Spacing
- Modals
- Dropdowns
- Toggles
- etc
-
-
-
-
-
-
-
Built with Pivotal UI
-
Wonder what you can make with Pivotal UI? Need some inspiration? Pivotal UI has the flexibility accommodate many different design styles.
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/release/pui-v1.9.0/intro.html b/release/pui-v1.9.0/intro.html
deleted file mode 100644
index c43218ca6..000000000
--- a/release/pui-v1.9.0/intro.html
+++ /dev/null
@@ -1,1045 +0,0 @@
-
-
-
- a brand new styleguide: Intro
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Pivotal UI
-
This is everything you need to get started building UI at Pivotal. Pivotal UI includes Pivotal styles as well as Bootstrap CSS, OOCSS, the FontAwesome icon font, and the Source Sans Pro Google Font in your project.
-
-
-
-
-
-
Download
-
Download the latest version of Pivotal UI and begin building!
-
Get Pivotal UI
-
You will need to be part of the Pivotal CF Github organization to download Pivotal UI. If you do not have access, email ask+cf@pivotal.io .
-
-
-
What's included
-
Pivotal UI comes with everything you need from grids, to fonts, and even JavaScript!
-
- jQuery v2.1.1 (will not be included in the next major release)
- LoDash v2.4.1 (will not be included in the next major release)
- modernizr v2.8.3 (will not be included in the next major release)
- Bootstrap v3.2 (javascript will not be included in the next major release)
- Prism.js
- Font Awesome v4.10
- Normalize CSS v1.0.2
- OOCSS
- Source Sans Pro
-
-
-
-
-
-
-
Add it to your app
-
- Unzip the release archive and move the resulting directory into your project.
- Link to the css file in your html template to include the styles.
- Add a script tag to your html template to use the javascript.
-
-
-
-
<html>
- <head>
- <title>...</title>
- <link rel="stylesheet" href="/path/to/release/pivotal-ui.css">
- <script src="/path/to/release/pivotal-ui.js"></script>
- </head>
- <body>
- <p class="type-brand-1">Hello, world!</p>
- </body>
-</html>
-
-
-
-
-
-
-
Best practices
-
There are a few things you should know before working with Pivotal UI.
-
- Dont modify Pivotal UI stylesheets unless you are a contributer. See the contribution docs for more info.
- You won't have to write your own CSS. We provide everything for you, even down to special classes for padding, margins, type alignment, etc.
- If there is something you need and Pivotal UI doesn't have it, you can submit a feature request. To do so, please open an issue on Github . Screenshots are very helpful! We'll then have a conversation about what you are trying to achieve in your project and the best way to do that.
- Have Fun!
-
-
-
-
-
-
How to use this styleguide
-
We have organized Pivotal UI styleguide into a few useful sections.
-
- Layout - Here you will find all of the styles needed for page layout and organization. Some layout elements you can find here are grids, media blocks, and panes.
- Elements - A single node component. They typically map to HTML elements are building blocks for large objects. Some elements you can find here are buttons, icons, lists, and typography.
- Objects - A multi node component. These are ususally made of multiple elements that function together to create a more complex component. Some objects you can find here are alerts, modals, tables, and maps.
- Utilities - Mixins that can modify many different components. Some utilities you can find here are whitespace, color, and type modifiers.
- Forms - You can find all sorts of form objects here.
- Beta - These are experimental components with unstable APIs. Don't use them on production apps.
- See our README for details on how to use these components.
- by Product - Some components are built with a specific product in mind. You can find Console's app health indicators, and PWS Marketing graphics here.
-
-
By pulling components from each of these sections, you can quickly and easily scaffold pages for prototyping and production. Simply copy and paste applicable component code into your views and add any utility classes needed to make it perfect.
-
-
-
-
-
-
Design Resources
-
Our Component Library is available in two formats
-
-
-
-
What's included
-
- Buttons
- Typography
- Colors Palette
- Avatars
- Spacing
- Modals
- Dropdowns
- Toggles
- etc
-
-
-
-
-
-
-
Built with Pivotal UI
-
Wonder what you can make with Pivotal UI? Need some inspiration? Pivotal UI has the flexibility accommodate many different design styles.
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/release/pui-v1.9.0/layout.html b/release/pui-v1.9.0/layout.html
deleted file mode 100644
index e80361916..000000000
--- a/release/pui-v1.9.0/layout.html
+++ /dev/null
@@ -1,1879 +0,0 @@
-
-
-
- a brand new styleguide: Layout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Grids
-
-
-
-
- Pivotal ui (via bootstrap) includes a responsive, mobile first fluid grid system that
- appropriately scales up to 24 columns as the device or viewport size increases.
- To work with the system, you need to treat mobile as your default
- and build more complex layouts up from there.
-
-
-Introduction
-Grid systems are used for creating page layouts through a series of rows and columns that house your content.
-Here's how the bootstrap grid system works:
Rows must be placed within a .container
for proper alignment and padding.
-Use .row
to create horizontal groups of columns.
-Content should be placed within columns (e.g. .col-sm-11
, .col-lg-6
, etc.).
-Only columns may be immediate children of rows.
-Columns are defined by two properties:
-the breakpoint at which they start acting like columns,
-and their relative width (on a scale of 24) beginning at this breakpoint.
-For example:
A column with the class .col-sm-11
will take up 100% of the container
-for devices with screen-width < 768px (the extra small breakpoint),
-and 11/24ths for devices ≥ 768px.
-A column with the class .col-lg-6
will take up 100% of the container
-for devices with < 1200px,
-and 1/4th (6/24ths) for devices ≥ 1200px.
-3 .col-md-8
columns would fill a row for devices ≥ 992px.
-They would each take up their own row on devices < 992px.
-Use the .col-xs-*
classes to use a grid on mobile.
-Look to the examples for applying these principles to your code.
-
-We use the following media queries in our sass files to create the key breakpoints in our grid system.
-Name
-Size
-Variable Name
-
-
-mobile
-
-no media query since this is the default in bootstrap
-
-
-x-small
-480px
-$screen-xs-min
-
-
-small
-768px
-$screen-sm-min
-
-
-medium
-992px
-$screen-md-min
-
-
-large
-1200px
-$screen-lg-min
-
-
-x-large
-1800px
-$screen-xl-min
-
-
-Grid Sizes
-See how aspects of the bootstrap grid system work across multiple devices with a handy table.
-
-
-
-
-
- extra small devices
- phones (≤768px)
-
-
- small devices
- tablets (>768px)
-
-
- medium devices
- laptops (>992px)
-
-
- large devices
- desktops (>1200px)
-
-
-
-
-
- grid behavior
- horizontal at all times
- collapsed to start, horizontal above breakpoints
-
-
- container width
- none (auto)
- 750px
- 970px
- 1170px
-
-
- class prefix
- .col-xs-
- .col-sm-
- .col-md-
- .col-lg-
-
-
- # of columns
- 24
-
-
- column width
- auto
- ~62px
- ~81px
- ~97px
-
-
- gutter width
- 30px (15px on each side of a column)
-
-
- nestable
- yes
-
-
- offsets
- yes
-
-
- column ordering
- yes
-
-
-
-
-Examples
-Using a single set of .col-md-*
grid classes,
-you can create a basic grid system that starts out stacked on mobile devices and tablet devices
-(the extra small to small range) before becoming horizontal on desktop (medium) devices.
-Place grid columns in any .row
.
-
-
The .grid-show
class in the examples is for demo purposes. Don't use it IRL.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "row grid-show" >
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
- <div class= "col-md-2" ></div>
-</div>
-
-<div class= "row grid-show" >
- <div class= "col-md-16" ></div>
- <div class= "col-md-8" ></div>
-</div>
-
-<div class= "row grid-show" >
- <div class= "col-md-8" ></div>
- <div class= "col-md-8" ></div>
- <div class= "col-md-8" ></div>
-</div>
-
-<div class= "row grid-show" >
- <div class= "col-md-12" ></div>
- <div class= "col-md-12" ></div>
-</div>
-
-
- Copy
-
-
-
-
-Example: Mobile and Desktop
-Don't want your columns to simply stack in smaller devices?
-Use the extra small and medium device grid classes by adding .col-xs-*
.col-md-*
to your columns.
-See the example below for a better idea of how it all works.
-
-
-
-
<!-- stack the columns on mobile by making one full-width and the other half-width -->
-<div class= "row grid-show" >
- <div class= "col-xs-24 col-md-16" ></div>
- <div class= "col-xs-12 col-md-8" ></div>
-</div>
-
-<!-- columns start at 50% wide on mobile and bump up to 33.3% wide on desktop -->
-<div class= "row grid-show" >
- <div class= "col-xs-12 col-md-8" ></div>
- <div class= "col-xs-12 col-md-8" ></div>
- <div class= "col-xs-12 col-md-8" ></div>
-</div>
-
-<!-- columns are always 50% wide, on mobile and desktop -->
-<div class= "row grid-show" >
- <div class= "col-xs-12" ></div>
- <div class= "col-xs-12" ></div>
-</div>
-
-
- Copy
-
-
-
-
-Example: Mobile, Tablet, Desktops
-Build on the previous example by creating even more dynamic and powerful layouts
-with tablet .col-sm-*
classes.
-
-
-
-
<div class= "row grid-show" >
- <div class= "col-xs-24 col-sm-12 col-md-16" ></div>
- <div class= "col-xs-12 col-md-8" ></div>
-</div>
-<div class= "row grid-show" >
- <div class= "col-xs-12 col-sm-8" ></div>
- <div class= "col-xs-12 col-sm-8" ></div>
- <!-- optional: clear the xs cols if their content doesn't match in height -->
- <div class= "clearfix visible-xs-block" ></div>
- <div class= "col-xs-12 col-sm-8" ></div>
-</div>
-
-
- Copy
-
-
-
-
-Example: Column Wrapping
-If more than 24 columns are placed within a single row, each group of extra columns will,
-as one unit, wrap onto a new line.
-
-
-
-
<div class= "row grid-show" >
- <div class= "col-xs-12" ></div>
- <div class= "col-xs-12" ></div>
- <div class= "col-xs-10" ></div>
- <div class= "col-xs-10" ></div>
- <div class= "col-xs-5" ></div>
- <div class= "col-xs-6" ></div>
-</div>
-
-
- Copy
-
-
-
-note In the second row, since 10 + 10 + 5 > 24,
-the 5-column-wide div gets wrapped onto a new line as one contiguous unit.
-Subsequent columns continue along the new line.
-Gutter Sizes
-You can change the size of a row's gutters with these classes.
-Class
-Padding between columns
-
-
-default
-20px
-
-
-.row-gutter-md
-10px
-
-
-.row-gutter-sm
-5px
-
-
Here's what the gutters look like in action.
-
-
-
-
-
-
-
-
-
-
-
<div class= "row grid-show" >
- <div class= "col-md-12" grid-content= "Default gutter" ></div>
- <div class= "col-md-12" grid-content= "Default gutter" ></div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "row row-gutter-md grid-show" >
- <div class= "col-md-12" grid-content= "Medium gutter" ></div>
- <div class= "col-md-12" grid-content= "Medium gutter" ></div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "row row-gutter-sm grid-show" >
- <div class= "col-md-12" grid-content= "Small gutter" ></div>
- <div class= "col-md-12" grid-content= "Small gutter" ></div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Responsive Column Resets
-With the four tiers of grids available you're bound to run into issues where,
-at certain breakpoints, your columns don't clear quite right as one is taller than the other.
-To fix that, use a combination of a .clearfix
-and our responsive utility classes .
-
-
-
-
<div class= "row grid-show" >
- <div class= "col-xs-12 col-sm-6" grid-content= "this is a tall column" ></div>
- <div class= "col-xs-12 col-sm-6" ></div>
-
- <!-- add the extra clearfix for only the required viewport -->
- <div class= "clearfix visible-xs-block" ></div>
-
- <div class= "col-xs-12 col-sm-6" ></div>
- <div class= "col-xs-12 col-sm-6" ></div>
-</div>
-
-
- Copy
-
-
-
-
-Offsetting Columns
-Move columns to the right using .col-md-offset-*
classes.
-These classes increase the left margin of a column by *
columns.
-For example, .col-md-offset-4
moves .col-md-4
over four columns.
-
-
-
-
<div class= "row grid-show" >
- <div class= "col-md-8" ></div>
- <div class= "col-md-8 col-md-offset-8" ></div>
-</div>
-<div class= "row grid-show" >
- <div class= "col-md-6 col-md-offset-6" ></div>
- <div class= "col-md-6 col-md-offset-6" ></div>
-</div>
-<div class= "row grid-show" >
- <div class= "col-md-12 col-md-offset-6" ></div>
-</div>
-
-
- Copy
-
-
-
-
-Column Ordering
-Easily change the order of our built-in grid columns
-with .col-md-push-*
and .col-md-pull-*
modifier classes.
-This is useful if you want to change the order of columns at different screen sizes.
-
-
-
-
<div class= "row grid-show" >
- <div class= "col-md-18 col-md-push-6" ></div>
- <div class= "col-md-6 col-md-pull-18" ></div>
-</div>
-
-
- Copy
-
-
-
-
-Layout Lists
-Sometimes you might want to use lists to lay out elements on the page.
Inline lists and vertical divider lists
-are particularly useful when you don't know the width of the element you want to layout,
-or you want to vertically align it.
Use Card lists if you'd like to make a grid of vertically and horizontally aligned cards.
-
-
-
-The default media displays a media object (images, video, audio) to the left or right of a content block.
-
-
-
-
<div class= "media" >
- <a class= "media-left" href= "#" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/64x64" />
- </a>
- <div class= "media-body" >
- <h4 class= "media-heading" > Media heading</h4>
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
- </div>
-</div>
-
-<div class= "media" >
- <div class= "media-body" >
- <h4 class= "media-heading" > Media heading</h4>
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.
- </div>
- <a class= "media-right" href= "#" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/64x64" />
- </a>
-</div>
-
-
- Copy
-
-
-
-Wrap the image in a fixed-size .image-container
to make sure the image isn't
-larger than the container
-
-
-
-
<div class= "media" >
- <a class= "media-left" href= "#" >
- <div class= "image-container" style= "width: 100px; height: 50px;" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/64x64" />
- </div>
- </a>
- <div class= "media-body" >
- <h4 class= "media-heading" > Media heading</h4>
- <p>
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
- </p>
- </div>
-</div>
-
-
- Copy
-
-
-
-You can also nest media objects inside of each other (useful for comment threads or articles lists).
-
-
-
-
<div class= "media" >
- <a class= "media-left" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/64x64" >
- </a>
- <div class= "media-body" >
- <h4 class= "media-heading" > Media heading</h4>
- <p> Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.</p>
-
- <!-- Nested media object -->
- <div class= "media" >
- <a class= "media-left" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/64x64" >
- </a>
- <div class= "media-body" >
- <h4 class= "media-heading" > Nested media heading</h4>
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.
-
- <!-- Nested media object -->
- <div class= "media" >
- <a class= "media-left" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/64x64" >
- </a>
- <div class= "media-body" >
- <h4 class= "media-heading" > Nested media heading</h4>
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.
- </div>
- </div>
- </div>
- </div>
-
- <!-- Nested media object -->
- <div class= "media" >
- <a class= "media-left" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/64x64" >
- </a>
- <div class= "media-body" >
- <h4 class= "media-heading" > Nested media heading</h4>
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.
- </div>
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-
-The images or other media can be aligned top, middle, or bottom. The default is top aligned.
-
-
-
-
<div class= "media" >
- <a class= "media-left" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/40x40" >
- </a>
- <div class= "media-body" >
- <h4 class= "media-heading" > Top aligned media</h4>
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
- </div>
-</div>
-
-<div class= "media" >
- <a class= "media-left media-middle" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/40x40" >
- </a>
- <div class= "media-body" >
- <h4 class= "media-heading" > Middle aligned media</h4>
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
- </div>
-</div>
-
-<div class= "media" >
- <a class= "media-left media-bottom" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/40x40" >
- </a>
- <div class= "media-body" >
- <h4 class= "media-heading" > Bottom aligned media</h4>
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
- </div>
-</div>
-
-
- Copy
-
-
-
-
-
-You can also make the media block stack with grid columns.
-Media objects switch from being stacked on top to being floated left of the media body as the screen size gets larger.
-For example, .media-stackable-xs
is stacked on screen sizes from 0-480px and then left floated on larger screens.
-
-
-
-
<div class= "media media-stackable-xs" >
- <a class= "media-left" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/100x100" >
- </a>
- <div class= "media-body" >
- <p> Extra-small stackable</p>
- </div>
-</div>
-
-<div class= "media media-stackable-sm" >
- <a class= "media-left" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/100x100" >
- </a>
- <div class= "media-body" >
- <p> Small stackable</p>
- </div>
-</div>
-
-<div class= "media media-stackable-md" >
- <a class= "media-left" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/100x100" >
- </a>
- <div class= "media-body" >
- <p> Medium stackable</p>
- </div>
-</div>
-
-<div class= "media media-stackable-lg" >
- <a class= "media-left" href= "#" target= "_blank" >
- <img alt= "..." class= "media-object" src= "http://placehold.it/100x100" >
- </a>
- <div class= "media-body" >
- <p> Large stackable</p>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Panes
-Panes are horizontal groupings of content that are usually used to
-span the full browser window width. It's going to look funny here,
-a better way to view it is on the panes page .
You can combine up to two background classes on the pane component.
-The one on the .pane
element will span the full browser width. The
-one on the .container
element will be constrained to the content width.
-
-
-
-
<div class= "pane bg-dark-1" >
- <div class= "container bg-glow" >
- <h1 class= "type-neutral-11" > This is a pane</h1>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-
-
-
This is a pane
-
-
-
-
-
-
-
-
This is another pane
-
-
-
-
-
-
-
<div class= "pane pane-offset bg-dark-1" >
- <div class= "container bg-glow" >
- <h1 class= "type-neutral-11" > This is a pane</h1>
- <div class= "pane-image" >
- <img class= "img-responsive" src= "styleguide/console-laptop.png" alt= "A laptop showing Pivotal Web Services dashboard." />
- </div>
- </div>
-</div>
-<div class= "pane bg-cloud" >
- <div class= "container" >
- <h1> This is another pane</h1>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Vertical Align
-The Aligner allows you to vertically align children to the top, center, or bottom.
-Its height is set by default to 230px.
This component doesn't do any horizontal alignment.
-You can use grids, or the text-alignment classes
-.txt-l
, .txt-r
, and .txt-c
with this component.
-
-
- This component is not supported in IE10 and below.
- While the content will appear, it will not be vertically aligned.
-
-
-
-
-
-
-
<div class= "aligner txt-c" >
- <a class= "aligner-item" href= "http://bitly.com/ZTHUDU" > Centered content</a>
-</div>
-
-
- Copy
-
-
-
-Override the default height by setting an inline style like so:
-
-
-
-
<div class= "aligner" style= "height: 200px;" >
- <a class= "aligner-item aligner-item-top" href= "http://bit.ly/1wCDWdC" > On Top</a>
- <a class= "aligner-item" href= "http://bitly.com/ZTHUDU" > Center</a>
- <a class= "aligner-item aligner-item-bottom" href= "http://bit.ly/12TqYiL" > Bottom</a>
-</div>
-
-
- Copy
-
-
-
-Note: the background colors in the example are just for display in the styleguide.
-
-
-
-
-
diff --git a/release/pui-v1.9.0/nginx.conf b/release/pui-v1.9.0/nginx.conf
deleted file mode 100644
index c3113f8ff..000000000
--- a/release/pui-v1.9.0/nginx.conf
+++ /dev/null
@@ -1,34 +0,0 @@
-worker_processes 1;
-daemon off;
-
-error_log <%= ENV["APP_ROOT"] %>/nginx/logs/error.log;
-events { worker_connections 1024; }
-
-http {
- charset UTF-8;
- log_format cloudfoundry '$http_x_forwarded_for - $http_referer - [$time_local] "$request" $status $body_bytes_sent';
- access_log <%= ENV["APP_ROOT"] %>/nginx/logs/access.log cloudfoundry;
- default_type application/octet-stream;
- include mime.types;
- sendfile on;
- gzip on;
- tcp_nopush on;
- keepalive_timeout 30;
-
- server {
- listen <%= ENV["PORT"] %>;
- server_name localhost;
-
- location / {
- root <%= ENV["APP_ROOT"] %>/public;
- index index.html index.htm Default.htm;
- <% if File.exists?(File.join(ENV["APP_ROOT"], "nginx/conf/.enable_directory_index")) %>
- autoindex on;
- <% end %>
- <% if File.exists?(auth_file = File.join(ENV["APP_ROOT"], "nginx/conf/.htpasswd")) %>
- auth_basic "Restricted"; #For Basic Auth
- auth_basic_user_file <%= auth_file %>; #For Basic Auth
- <% end %>
- }
- }
-}
diff --git a/release/pui-v1.9.0/objects.html b/release/pui-v1.9.0/objects.html
deleted file mode 100644
index 2dc1ed36c..000000000
--- a/release/pui-v1.9.0/objects.html
+++ /dev/null
@@ -1,4369 +0,0 @@
-
-
-
- a brand new styleguide: Objects
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Accordions
-
-
-These are frequently used in combination with our panel components. They have a header and body.
Accordions can be used with any background color class, add them to the header and body.
NOTE: The 'alligators' (the > in the HAML below) are structural --
-without them, the browser renders the whitespace on the anchor tags,
-and the images jump around by a few pixels when they're toggled.
Also see the select tabs for a toggle triggered by a select group.
-Basic
-Use this to expand and collapse content.
-
-
-
-
<a class= "collapsed" data-toggle= "collapse" href= "#simple-collapse-example" >
- <div class= "when-collapsed" >
- Expand me
- </div>
- <div class= "when-expanded" >
- Collapse me
- </div>
-</a>
-<div class= "collapse" id= "simple-collapse-example" >
- Look at this content.
-</div>
-
-
- Copy
-
-
-
-
-Sizes
-
-
-
- Deprecation warning
-
-
- The large accordion is deprecated. All accordions should be the default size.
-
-
-Default accordion size:
-
-
-
-
-
My fancy application
-
-
-
-
-
- This content should hide and show when the trigger is clicked.
-
-
-
-
-
-
-
-
<div class= "panel" id= "accordion-1" >
- <div class= "panel-heading-accordion bg-neutral-11 collapse-trigger collapsed" data-toggle= "collapse" data-parent= "#accordion-2" href= "#myCollapse-1" >
- <div class= "row" >
- <div class= "col-md-23" >
- <h3 class= "h5 collapse-title type-em-1 type-primary-2" > My fancy application</h3>
- </div>
- </div>
- </div>
- <div class= "panel-collapse collapse" id= "myCollapse-1" >
- <div class= "panel-body-accordion bg-neutral-11" >
- This content should hide and show when the trigger is clicked.
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-Large accordion size:
-
-
-
-
-
My fancy application
-
-
-
-
-
- This content should hide and show when the trigger is clicked.
-
-
-
-
-
-
-
<div class= "panel" id= "accordion-2" >
- <div class= "panel-heading-accordion-large bg-neutral-11 collapse-trigger collapsed" data-parent= "#accordion-2" data-toggle= "collapse" href= "#myCollapse-2" >
- <div class= "row" >
- <div class= "col-md-23" >
- <h3 class= "h5 collapse-title type-em-1 type-primary-2" > My fancy application</h3>
- </div>
- </div>
- </div>
- <div class= "panel-collapse collapse" id= "myCollapse-2" >
- <div class= "panel-body-accordion bg-neutral-11" >
- This content should hide and show when the trigger is clicked.
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Styles
-Accordion with Divider:
This adds a divider between the accordion header and accordion body.
-
-
-
-
- This content should hide and show when the trigger is clicked.
-
-
-
-
-
-
-
<div class= "panel" id= "accordion-5" >
- <div class= "panel-heading-accordion bg-neutral-11 collapse-trigger collapsed" data-parent= "#accordion-3" data-toggle= "collapse" href= "#myCollapse-5" >
- <div class= "row" >
- <div class= "col-md-23" >
- <a>
- <div class= "when-collapsed-inline" >
- <i class= "fa fa-caret-right collapse-icon" ></i>
- </div>
- <div class= "when-expanded-inline" >
- <i class= "fa fa-caret-down collapse-icon" ></i>
- </div>
- </a>
- <h3 class= "h5 collapse-title type-em-1 type-primary-2" > My fancy application</h3>
- </div>
- </div>
- </div>
- <div class= "panel-collapse collapse" id= "myCollapse-5" >
- <div class= "panel-body-accordion-divider bg-neutral-11" >
- This content should hide and show when the trigger is clicked.
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-You can combine the accordion with any panel class to have a styled panel that opens and closes.
-With Icons
-Accordion with plus/minus icon:
-
-
-
-
- This content should hide and show when the trigger is clicked.
-
-
-
-
-
-
-
<div class= "panel" id= "accordion-3" >
- <div class= "panel-heading-accordion-large collapse-trigger collapsed" data-parent= "#accordion-2" data-toggle= "collapse" href= "#myCollapse-3" >
- <div class= "row" >
- <div class= "col-md-23" >
- <a>
- <div class= "when-collapsed-inline" >
- <i class= "fa fa-plus-square collapse-icon" ></i>
- </div>
- <div class= "when-expanded-inline" >
- <i class= "fa fa-minus-square collapse-icon" ></i>
- </div>
- </a>
- <h3 class= "h5 collapse-title type-em-1 type-primary-2" > My fancy application</h3>
- </div>
- </div>
- </div>
- <div class= "panel-collapse collapse" id= "myCollapse-3" >
- <div class= "panel-body-accordion bg-neutral-11" >
- This content should hide and show when the trigger is clicked.
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-Accordion with caret right/down icon:
-
-
-
-
- This content should hide and show when the trigger is clicked.
-
-
-
-
-
-
-
<div class= "panel" id= "accordion-4" >
- <div class= "panel-heading-accordion collapse-trigger collapsed" data-parent= "#accordion-3" data-toggle= "collapse" href= "#myCollapse-4" >
- <div class= "row" >
- <div class= "col-md-23" >
- <a>
- <div class= "when-collapsed-inline" >
- <i class= "fa fa-caret-right collapse-icon" ></i>
- </div>
- <div class= "when-expanded-inline" >
- <i class= "fa fa-caret-down collapse-icon" ></i>
- </div>
- </a>
- <h3 class= "h5 collapse-title type-em-1 type-primary-2" > My fancy application</h3>
- </div>
- </div>
- </div>
- <div class= "panel-collapse collapse" id= "myCollapse-4" >
- <div class= "panel-body-accordion bg-neutral-11" >
- This content should hide and show when the trigger is clicked.
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Alerts
-
-
-s
Alerts are used to display flash messages to the user. When using alerts with simple one-line text,
-wrap the text in a <p>
with .em-high
.
-
-
-
-
<div class= "alert alert-success" >
- <p class= "em-high" > Success</p>
-</div>
-
-
- Copy
-
-
-
-Alerts are also used to bring important notes to a user's attention. If the content of your alert
-is a little more complicated, we would recommend using headings coupled with the content.
-
-
You should know...
-
There are some things you should note. Just in case you didn't figure it out already.
-
-
-
-
-
-
<div class= "alert alert-info" >
- <h5 class= "em-high mtn" > You should know...</h5>
- <p> There are some things you should note. Just in case you didn't figure it out already.</p>
- <ul>
- <li> thing 1</li>
- <li> thing 2</li>
- </ul>
-</div>
-
-
- Copy
-
-
-
-If you want to include a link in your alert, use the class alert-link
.
-
-
Important Link
-
- It is very important that you
- click here
-
-
-
-
-
-
<div class= "alert alert-warning" >
- <h5 class= "em-high mtn" > Important Link</h5>
- <p>
- It is very important that you
- <a class= "alert-link" href= "http://bit.ly/1vkXaYb" > click here</a>
- </p>
-</div>
-
-
- Copy
-
-
-
-
-Alert Types
-Our 4 alert types are:
-
-
-
-
-
-
-
-
-
-
-
<div class= "alert alert-success" >
- <div class= "media" >
- <div class= "media-left" >
- <i class= "fa fa-check-circle" ></i>
- </div>
- <div class= "media-body em-high" >
- Everything is wonderful.
- <a class= "alert-link" href= "http://bit.ly/QCMZM5" > Be happy.</a>
- </div>
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "alert alert-info" >
- <div class= "media" >
- <div class= "media-left" >
- <i class= "fa fa-info-circle" ></i>
- </div>
- <div class= "media-body em-high" >
- Info for you.
- <a class= "alert-link" href= "http://bit.ly/1DFns8H" > Tell me more.</a>
- </div>
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "alert alert-warning" >
- <div class= "media" >
- <div class= "media-left" >
- <i class= "fa fa-exclamation-triangle" ></i>
- </div>
- <div class= "media-body em-high" >
- Warning: There is no parking on the dancefloor.
- <a class= "alert-link" href= "http://bit.ly/1uM05DJ" > Be alert.</a>
- </div>
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "alert alert-error" >
- <div class= "media" >
- <div class= "media-left" >
- <i class= "fa fa-exclamation-triangle" ></i>
- </div>
- <div class= "media-body em-high" >
- Something has gone horribly awry.
- <a class= "alert-link" href= "http://bit.ly/1rooFJV" > You've made a huge mistake.</a>
- </div>
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Dismissable Alerts
-By adding .alert-dismissable
and a button, you can also make alerts dismissable.
-
-
-
-
-
Click the 'X' over there------>
-
-
-
-
-
-
<div class= "alert alert-success alert-dismissable" >
- <button class= "close" data-dismiss= "alert" >
- <i class= "fa fa-times" ></i>
- </button>
- <p class= "em-high" > Click the 'X' over there------> </p>
-</div>
-
-
- Copy
-
-
-
-If a full-width dissmissable alert is desired, but the content needs to be aligned with
-other content inside a container on the page (of a width 500px for this example), you might consider doing the following:
-
-
-
-
<div class= "pane bg-accent-5" >
- <div class= "container pan" style= "width:500px" >
- <div class= "alert alert-info mtn" >
- <button class= "close" data-dismiss= "alert" >
- <i class= "fa fa-times" ></i>
- </button>
- <div class= "media mtn" >
- <div class= "media-left" >
- <i class= "fa fa-info-circle" ></i>
- </div>
- <div class= "media-body em-high" >
- 3 new files available for Pivotal CF.
- <a class= "type-sm alert-link" href= "http://bit.ly/1DFns8H" > Mark all as viewed.</a>
- </div>
- </div>
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Back to Top
-You can use this component to scroll to the top of a page.
The button will be fixed to the bottom right hand corner of the page.
You can place the link anywhere in your markup, but best practices are either towards the top or bottom of your markup.
-
-
-
-
<a class= "back-to-top" href= "#" target= "_blank" style= "display: inline;" ></a>
-
-
- Copy
-
-
-
-
-Code
-
-
-This is your basic unstyled code sample:
-
class Foo
- def bar
- puts 'hi'
- end
-end
-
-
-
-
<pre class= "pre-unstyled" ><code> class Foo
- def bar
- puts 'hi'
- end
-end</code></pre>
-
-
- Copy
-
-
-
-
-Inline
-
-
This is an example of a paragraph with an inline code snippet
within it.
-
-
-
-
<p> This is an example of a paragraph with <code> an inline code snippet</code> within it.</p>
-
-
- Copy
-
-
-
-
-Inline Dark
-
-
This is an example of a paragraph with a dark inline code snippet
within it.
-
-
-
-
<p> This is an example of a paragraph with <code class= "inline-dark" > a dark inline code snippet</code> within it.</p>
-
-
- Copy
-
-
-
-
-Styled Code
-In order to show syntax-highlighted code, you will need to apply a language specific class to the code tag. For example, .language-ruby
.
There are several languages already available (and others available from the Prismjs.com website), including:
Markup
-CSS
-C-like
-JavaScript
-Java
-PHP
-PHP
-CoffeeScript
-Sass
-Bash
-Python
-HTTP
-Ruby
-Go
-
-
class Foo
- def bar
- puts 'hi'
- end
-end
-
-
-
-
<pre><code class= "language-ruby" > class Foo
- def bar
- puts 'hi'
- end
-end</code></pre>
-
-
- Copy
-
-
-
-Make it scrollable
-
class Foo
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-end
-
-
-
-
<pre class= "pre-scrollable" ><code class= "language-ruby" > class Foo
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-
- def bar
- puts 'hi'
- end
-end</code></pre>
-
-
- Copy
-
-
-
-Scrollable with too little content:
-
class Foo
- def bar
- puts 'hi'
- end
-end
-
-
-
-
<pre class= "pre-scrollable" ><code class= "language-ruby" > class Foo
- def bar
- puts 'hi'
- end
-end</code></pre>
-
-
- Copy
-
-
-
-If you would like a set a default height, please add it manually.
-Terminal Window
-Alternate CSS
-
-
class Foo
- def bar
- puts 'hi'
- end
-end
-
-class Bar
- def bar
- puts 'hi'
- end
-end
-
-class Baz
- def bar
- puts 'hi'
- end
-end
-
-class Bop
- def bar
- puts 'hi'
- end
-end
-
-
-
-
-
-
<div class= "terminal" >
- <pre><code class= "language-ruby" > class Foo
- def bar
- puts 'hi'
- end
-end
-
-class Bar
- def bar
- puts 'hi'
- end
-end
-
-class Baz
- def bar
- puts 'hi'
- end
-end
-
-class Bop
- def bar
- puts 'hi'
- end
-end</code></pre>
-</div>
-
-
- Copy
-
-
-
-
-Dropdowns
-
-
-Dropdowns are menus that can be triggered by buttons.
This is the basic bootstrap dropdown.
-
-
- Button Dropdown
-
-
-
-
-
-
-
-
<div class= "dropdown btn-group" >
- <button id= "dropdown-button-1" class= "dropdown-toggle btn btn-primary" type= "button" data-toggle= "dropdown" aria-haspopup= "true" aria-expanded= "false" >
- Button Dropdown
- <span class= "caret" ></span>
- </button>
- <ul class= "dropdown-menu" role= "menu" aria-labelledby= "dropdown-button-1" >
- <li role= "presentation" >
- <a href= "http://www.google.com" role= "menuitem" > Google</a>
- </li>
- <li class= "divider mvn" ></li>
- <li role= "presentation" >
- <a href= "http://www.yahoo.com" role= "menuitem" > Yahoo</a>
- </li>
- <li class= "divider mvn" ></li>
- </li><li role= "presentation" >
- <a href= "http://www.aol.com" role= "menuitem" > Aol</a>
- </li>
- </ul>
-</div>
-
-
- Copy
-
-
-
-
-
-
Dropdowns with dividers
-
- If you want to add a divider between items in the dropdown,
- add a `li.divider` between list items.
-
-
-
-
-
- Link Dropdown
-
-
-
-
-
-
-
-
<div class= "dropdown btn-group" >
- <button id= "drop3" data-toggle= "dropdown" class= "dropdown-toggle btn btn-link" type= "button" >
- <span> Link Dropdown</span>
- <span class= "caret" ></span>
- </button>
- <ul class= "dropdown-menu" role= "menu" aria-labelledby= "drop3" >
- <li role= "presentation" >
- <a role= "menuitem" tabindex= "-1" href= "https://twitter.com/fat" > Action</a>
- </li>
- <li role= "presentation" >
- <a role= "menuitem" tabindex= "-1" href= "https://twitter.com/fat" > Another action</a>
- </li>
- <li role= "presentation" >
- <a role= "menuitem" tabindex= "-1" href= "https://twitter.com/fat" > Something else here</a>
- </li>
- <li role= "presentation" >
- <a role= "menuitem" tabindex= "-1" href= "https://twitter.com/fat" > Separated link</a>
- </li>
- </ul>
-</div>
-
-
- Copy
-
-
-
-
-
-
No links as dropdowns
-
- Instead of using an a
tag as a dropdown,
- use a button.btn.btn-link
.
-
-
-Here's a crazy-complex dropdown. Not for the faint of heart.
-
-
- dropdown trigger
-
-
-
-
-
-
-
-
<div class= "dropdown btn-group" >
- <button id= "dropdown-button-2" class= "dropdown-toggle btn btn-primary" type= "button" data-toggle= "dropdown" aria-haspopup= "true" aria-expanded= "false" >
- dropdown trigger
- <span class= "caret" ></span>
- </button>
- <ul class= "dropdown-menu" role= "menu" aria-labelledby= "dropdown-button-2" >
- <li role= "presentation" >
- <a href= "#" role= "menuitem" class= "pvl" >
- <div class= "media" >
- <div class= "media-left media-middle prxl" >
- <i class= "fa fa-check type-neutral-2" ></i>
- </div>
- <div class= "media-body" style= "width: 400px;" >
- <h4 class= "media-heading em-high type-neutral-3 mvn h5" > updates and alerts</h4>
- <span class= "type-neutral-4" > receive all tacos and burritos.</span>
- </div>
- </div>
- </a>
- </li>
- <li role= "presentation" >
- <a href= "#" role= "menuitem" class= "pvl" >
- <div class= "media" >
- <div class= "media-left media-middle prxl" >
- <i class= "fa fa-check type-neutral-2" style= "visibility: hidden" ></i>
- </div>
- <div class= "media-body" style= "width: 400px;" >
- <h4 class= "media-heading em-high type-neutral-3 mvn h5" > alerts only</h4>
- <span class= "type-neutral-4" > only receive tacos when burritos are issued for this product and files.</span>
- </div>
- </div>
- </a>
- </li>
- <li role= "presentation" >
- <a href= "#" role= "menuitem" class= "pvl" >
- <div class= "media" >
- <div class= "media-left media-middle prxl" >
- <i class= "fa fa-check type-neutral-2" style= "visibility: hidden" ></i>
- </div>
- <div class= "media-body" style= "width: 400px;" >
- <h4 class= "media-heading em-high type-neutral-3 mvn h5" > none</h4>
- <span class= "type-neutral-4" > do not receive any mexican food.</span>
- </div>
- </div>
- </a>
- </li>
- </ul>
-</div>
-
-
- Copy
-
-
-
-
-Notifications
-This is a notification dropdown with no notifications.
-
-
-
-
<div class= "dropdown btn-group" >
- <a data-toggle= "dropdown" class= "dropdown-toggle btn btn-link" type= "button" >
- <i class= "fa fa-bell type-neutral-6 h2 mvn mrm" ></i>
- </a>
- <ul class= "dropdown-menu" role= "menu" >
- <li role= "presentation" >
- <div class= "dropdown-notifications-none" >
- <i class= "fa fa-bell type-neutral-6" ></i>
- <p class= "type-neutral-4 em-alt mbn" > No notifications</p>
- </div>
- </li>
- </ul>
-</div>
-
-
- Copy
-
-
-
-This is a notification dropdown with notifications.
-
-
-
-
<div class= "dropdown btn-group" >
- <a data-toggle= "dropdown" class= "dropdown-toggle btn btn-link" type= "button" >
- <i class= "fa fa-bell type-neutral-6 h2 mvn" ></i>
- <span class= "dropdown-notifications-badge" > 2</span>
- </a>
- <ul class= "dropdown-menu dropdown-notifications-list" role= "menu" >
- <li role= "presentation" >
- <a role= "menuitem" href= "https://twitter.com/fat" >
- <div class= "media man pan" >
- <div class= "media-left media-middle" >
- <h3 class= "label label-primary mrm" > New</h3>
- </div>
- <div class= "media-body media-middle" >
- <h5 class= "media-heading mbn type-dark-1" > Notification</h5>
- <p class= "type-sm type-neutral-5 mvn" > News for you</p>
- </div>
- </div>
- </a>
- </li>
- <li role= "presentation" >
- <a role= "menuitem" href= "https://twitter.com/fat" >
- <div class= "media man pan" >
- <div class= "media-left media-middle" >
- <h3 class= "label label-primary mrm" > New</h3>
- </div>
- <div class= "media-body media-middle" >
- <h5 class= "media-heading mbn type-dark-1" > Pivotal-CF</h5>
- <p class= "type-sm type-neutral-5 mvn" > 1 New File Available</p>
- </div>
- </div>
- </a>
- </li>
- </ul>
-</div>
-
-
- Copy
-
-
-
-This is a notification dropdown with alerts.
-
-
-
-
<div class= "dropdown btn-group" >
- <a data-toggle= "dropdown" class= "dropdown-toggle btn btn-link" type= "button" >
- <i class= "fa fa-bell type-neutral-6 h2 mvn" ></i>
- <i class= "fa fa-exclamation-triangle h4 type-warn-2 dropdown-notifications-alert" ></i>
- </a>
- <ul class= "dropdown-menu dropdown-notifications-list" role= "menu" >
- <li role= "presentation" >
- <a role= "menuitem" href= "https://twitter.com/fat" >
- <div class= "media man pan" >
- <div class= "media-left media-middle" >
- <i class= "fa fa-exclamation-triangle type-warn-2 h4 mrm" ></i>
- </div>
- <div class= "media-body media-middle" >
- <h5 class= "media-heading mbn type-dark-1" > Product One</h5>
- <p class= "type-sm type-neutral-5 mvn" > 1 alert</p>
- </div>
- </div>
- </a>
- </li>
- <li role= "presentation" >
- <a role= "menuitem" href= "https://twitter.com/fat" >
- <div class= "media man pan" >
- <div class= "media-left media-middle" >
- <i class= "fa fa-exclamation-triangle type-warn-2 h4 mrm" ></i>
- </div>
- <div class= "media-body media-middle" >
- <h5 class= "media-heading mbn type-dark-1" > Product Two</h5>
- <p class= "type-sm type-neutral-5 mvn" > 2 alerts</p>
- </div>
- </div>
- </a>
- </li>
- </ul>
-</div>
-
-
- Copy
-
-
-
-
-Hoverable
-This component is for showing hidden actions on hover.
-If you put this on an element then hovering on that parent element will show the hidden element.
List example:
This can be used with any kind of list but the list group style seems to fit this use case best.
-
-
- List Item 1
- Edit
-
-
- List Item 2
- Edit
-
-
- List Item 3
- Edit
-
-
- Not hoverable
-
-
-
-
-
-
<ul class= "list-group" hoverable-group= "true" >
- <li class= "list-group-item" hoverable= "true" >
- List Item 1
- <a class= "hovered" href= "#" > Edit</a>
- </li>
- <li class= "list-group-item" hoverable= "true" >
- List Item 2
- <a class= "hovered" href= "#" > Edit</a>
- </li>
- <li class= "list-group-item" hoverable= "true" >
- List Item 3
- <a class= "hovered" href= "#" > Edit</a>
- </li>
- <li class= "list-group-item" >
- Not hoverable
- </li>
-</ul>
-
-
- Copy
-
-
-
-Table example:
-
-
- Name
-
-
-
- Row 1
- Delete
-
-
-
-
- Row 2
- Delete
-
-
-
-
- Row 3
- Delete
-
-
-
-
- Not hoverable
-
-
-
-
-
-
-
<table hoverable-group= "true" >
- <tr>
- <th> Name</th>
- </tr>
- <tr hoverable= "true" >
- <td>
- Row 1
- <a class= "hovered" href= "#" > Delete</a>
- </td>
- </tr>
- <tr hoverable= "<%= true %>" >
- <td>
- Row 2
- <a class= "hovered" href= "#" > Delete</a>
- </td>
- </tr>
- <tr hoverable= "true" >
- <td>
- Row 3
- <a class= "hovered" href= "#" > Delete</a>
- </td>
- </tr>
- <tr>
- <td>
- Not hoverable
- </td>
- </tr>
-</table>
-
-
- Copy
-
-
-
-
-Maps
-Full width map with marker at Pivotal Labs SF location, and an optional informational overlay.
-
-
-
-
<script src= "http://maps.googleapis.com/maps/api/js?libraries=places" ></script>
-<div class= 'map-wrapper' >
- <div class= 'pane' >
- <div class= 'container pan' >
- <div class= 'row' >
- <div class= 'col-sm-6 col-md-8 col-sm-offset-1' >
- <div class= 'map-overlay panel panel-basic bg-neutral-10 paxxl' >
- <h3 class= "h2" > Location</h3>
- <address class= 'h4 pvl' > Pivotal Software Inc.<br>
- 875 Howard Street<br>
- San Francisco, CA 94103
- </address>
- <p class= 'h4' > Support: <a href= 'mailto:support@run.pivotal.io' > support@run.pivotal.io</a></p>
- <p class= 'h4' > Twitter: <a href= 'https://twitter.com/pivotalws' > @pivotalws</a></p>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class= 'pane pane-map' >
- <div id= 'labs-map' ></div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-
-
-
var maps = ( function () {
- var self = this ;
- var map ;
-
- var mapOptions = {
- placeId : "ChIJ9w1pfYiAhYAR45k8AD-TjhA" ,
- center : new google . maps . LatLng ( 37.781787 , - 122.403911 ),
- mapElementId : 'labs-map' ,
- zoom : 18
- };
-
- var initialize = function () {
- map = new google . maps . Map ( document . getElementById ( mapOptions . mapElementId ), {
- center : mapOptions . center ,
- zoom : mapOptions . zoom ,
- disableDefaultUI : true
- });
-
- var request = {
- placeId : mapOptions . placeId
- };
-
- var service = new google . maps . places . PlacesService ( map );
- service . getDetails ( request , createMarker );
- };
-
- var createMarker = function ( place , status ) {
- if ( status == google . maps . places . PlacesServiceStatus . OK ) {
- new google . maps . Marker ({
- map : map ,
- position : place . geometry . location
- });
- }
- };
-
- self . initialize = initialize ;
- return self ;
-})();
-
-google . maps . event . addDomListener ( window , 'load' , maps . initialize );
-
-
- Copy
-
-
-
-
-Modals
-Modals bring desired content to the foreground and de-emphasize the rest of the page.
-
-
- Launch basic modal
-
-
- Launch alternate modal
-
-
-
-
-
-
-
-
-
-
-
- Deprecation warning
-
-
- The alternate modal is deprecated.
-
-
-
-Panels
-
-
-Panels are often used to group related content. They include box headers, footers, and can be combined with any backgrounds.
Panels are typically a combination of contours, backgrounds, and content including headers and footers. This section describes the contours.
-Alternate
-Alternate panels can be in a default, off, or danger state.
-
-
-
-
-
-
-
-
-
-
-
<div class= "panel panel-alt" >
- <div class= "panel-body" >
- Alternate Panel
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
- Danger alternate panel
-
-
-
-
-
-
-
<div class= "panel panel-alt panel-danger" >
- <div class= "panel-body" >
- Danger alternate panel
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
- Stopped alternate panel
-
-
-
-
-
-
-
<div class= "panel panel-alt panel-off" >
- <div class= "panel-body" >
- Stopped alternate panel
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
- Off alternate panel
-
-
-
-
-
-
-
<div class= "panel panel-alt panel-empty" >
- <div class= "panel-body" >
- Off alternate panel
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
- Editing alternate panel
-
-
-
-
-
-
-
-
<div class= "panel panel-alt panel-editing" >
- <div class= "panel-body" >
- Editing alternate panel
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Basic
-By default, all the .panel does is apply a basic shadow and padding to contain some content. You can have it with or without a title.
-
-
-
-
<div class= "panel panel-basic bg-neutral-11" >
- <div class= "panel-header" >
- <h5 class= "panel-title-alt" > Basic Title</h5>
- </div>
- <div class= "panel-body" >
- Basic Panel
- </div>
-</div>
-
-<div class= "panel panel-basic bg-neutral-11" >
- <div class= "panel-body" >
- Basic Panel
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Basic Alternate
-Basic alternate panels are panels with a border and shadow. You can have a panel-basic-alt with or without a title.
-
-
-
-
<div class= "panel panel-basic-alt" >
- <div class= "panel-header" >
- <h5 class= "panel-title-alt" > Basic Title Alt</h5>
- </div>
- <div class= "panel-body" >
- Basic Panel
- </div>
-</div>
-
-<div class= "panel panel-basic-alt" >
- <div class= "panel-body" >
- Basic Panel
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Card
-Using panels with card lists makes any .panel-body
have a minimum "card" height.
-
-
-
- Card Panel
-
-
-
-
- Card Panel
-
-
-
-
- Card Panel
-
-
-
-
-
-
-
<ul class= "list-cards list-cards-sm list-card-2" >
- <li class= "panel panel-clickable-alt bg-neutral-11" >
- <div class= "panel-body" >
- Card Panel
- </div>
- </li>
- <li class= "panel panel-clickable-alt bg-neutral-11" >
- <div class= "panel-body" >
- Card Panel
- </div>
- </li>
- <li class= "panel panel-clickable-alt bg-neutral-11" >
- <div class= "panel-body" >
- Card Panel
- </div>
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Clickable
-These panels lighten on hover to indicate that they are clickable.
-Please use them when a click on the panel triggers an action.
-
-
-
-
-
-
-
-
-
-
-
<div class= "panel panel-clickable" >
- <div class= "panel-body" >
- Panel Clickable
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
- Panel Clickable Alt
-
-
-
-
-
-
-
-
<div class= "panel panel-clickable-alt" >
- <div class= "panel-body" >
- Panel Clickable Alt
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-Sometimes you'll also want to adapt the way child elements look
-based on a hover on the parent element. There are a few
-helper classes for that.
-
-
-
-
-
-
-
-
-
-
-
<a class= "panel panel-clickable" >
- <div class= "panel-body" >
- <p class= "hover-target-1" >
- hover-target-1 - default text color => link color
- </p>
- </div>
-</a>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<a class= "panel panel-clickable" >
- <div class= "panel-body" >
- <p class= "hover-target-2" >
- hover-target-2 - light gray text => default text color
- </p>
- </div>
-</a>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<a class= "panel panel-clickable" >
- <div class= "panel-body" >
- <p class= "hover-target-3" >
- hover-target-3 - $gray-9 background => white background
- </p>
- </div>
-</a>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Flex (Panel with Footer)
-Flex panels let us put a footer at the bottom of a fixed-height panel. Any panel can flex. In browsers that don't
-support flexbox, the footer will appear where it would naturally, likely right below the panel-body content.
By default, flex panels have no height. You must use an inline style to set the height.
-
-
-
-
<div class= "panel panel-flex bg-neutral-11" style= "height:200px" >
- <div class= "panel-body" > Body Content</div>
- <div class= "panel-footer" > Footer Content</div>
-</div>
-
-
- Copy
-
-
-
-
-
-
- Flex panels and list cards
-
-
- Flex panels are often used with list cards
- as a way to give list cards footers.
- Add the class list-card-wrapper
on any flex panels inside list cards.
-
-
-
-
-
-
-
-
-
-
-
-
-
- It even works if your list-card-wrapper
is nested in a form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<ul class= "list-cards list-card-2 list-cards-sm" >
- <li class= "panel panel-flex bg-neutral-11" >
- <div class= "list-card-wrapper panel panel-flex" >
- <div class= "panel-body" > Body Content</div>
- <div class= "panel-footer" > Footer Content</div>
- </div>
- </li>
-
- <li class= "panel panel-flex bg-neutral-11" >
- <form>
- <div class= "list-card-wrapper panel panel-flex" >
- <div class= "panel-body" >
- <p>
- It even works if your <code> list-card-wrapper</code> is nested in a form
- </p>
- <div class= "form-group" >
- <input class= "form-control" placeholder= "Email" >
- </div>
- </div>
- <div class= "panel-footer" > Footer Content</div>
- </div>
- </form>
- </li>
-
- <li class= "panel panel-flex bg-neutral-11" >
- <a class= "list-card-link" href= "http://wrd.cm/1e2A8uU" >
- <div class= "list-card-wrapper panel panel-flex" >
- <div class= "panel-body" > Or in a link!</div>
- <div class= "panel-footer" > Footer Content</div>
- </div>
- </a>
- </li>
-</ul>
-
-
- Copy
-
-
-
-
-Highlight
-This panel is used to highlight more important parts of the page.
-
-
- Not Hoverable (use when the panel has no associated action, for instance if the action is disabled due to lack of permissions)
-
-
-
-
-
-
<div class= "panel panel-highlight" >
- <div class= "panel-body" >
- Not Hoverable (use when the panel has no associated action, for instance if the action is disabled due to lack of permissions)
- </div>
-</div>
-
-
- Copy
-
-
-
-
-
-The scrollable panel sets a fixed height of 183px and scrolls any content that is larger. If you want a different size, set an inline style on the .panel-scrollable
.
-
-
-
-
<div class= "panel panel-scrollable bg-neutral-11" >
- <div class= "panel-body" >
- <p> Lo-fi fixie aute irony skateboard, officia pug. VHS Kickstarter semiotics elit ad. XOXO fashion axe Neutra aesthetic nihil, before they sold out seitan photo booth bitters paleo ea. XOXO mustache consectetur jean shorts wolf banh mi, food truck aute odio Neutra polaroid artisan mlkshk. Chillwave aesthetic hashtag, 3 wolf moon Neutra umami DIY swag eu veniam. Blue Bottle fap kale chips veniam kogi, placeat yr Portland nesciunt sustainable iPhone. Single-origin coffee messenger bag locavore Schlitz, ea farm-to-table aliquip anim umami master cleanse. Delectus selfies placeat, tilde hoodie qui selvage consectetur cred master cleanse readymade pop-up assumenda nisi. Eu deep v brunch McSweeney's. Raw denim aliquip Banksy, proident cred banjo qui placeat Brooklyn fashion axe crucifix normcore aesthetic. Esse Pinterest organic anim American Apparel, wolf next level Tumblr laboris normcore pop-up dolore lo-fi put a bird on it trust fund. Laborum organic authentic Williamsburg plaid, Wes Anderson dolore sunt chia small batch synth Carles cliche tilde. Food truck ethical freegan velit, Kickstarter semiotics labore American Apparel biodiesel street art gentrify trust fund. Selfies Austin ex, organic art party authentic ullamco kitsch plaid placeat roof party cornhole deserunt aute.</p>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Shadow
-Shadow panels add a bottom shadow to the panel.
-
-
-
-
-
-
-
-
-
-
-
<div class= "panel panel-shadow-1 bg-neutral-11" >
- <div class= "panel-body" >
- Shadow Panel
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "panel panel-shadow-2 bg-neutral-11" >
- <div class= "panel-body" >
- Shadow Panel
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "panel panel-shadow-3 bg-neutral-11" >
- <div class= "panel-body" >
- Shadow Panel
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<div class= "panel panel-shadow-4 bg-neutral-11" >
- <div class= "panel-body" >
- Shadow Panel
- </div>
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Simple
-
-
-
-
-
<div class= "panel panel-simple bg-neutral-11" >
- <div class= "panel-body" >
- Simple Panel
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Progress Bars
-This section contains static progress bar styles.
-
-
-
-
-
-
-
- 0 MB of 100 MB Used
-
-
-
-
-
-
<div class= "progress" >
- <div aria-valuemax= "100" aria-valuemin= "0" aria-valuenow= "0" class= "progress-bar" role= "progressbar" style= "width: 0%;" >
- <div class= "label" >
- 0%
- </div>
- </div>
-</div>
-<p>
- 0 MB of 100 MB Used
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
- 3 MB of 100 MB Used
-
-
-
-
-
-
<div class= "progress" >
- <div aria-valuemax= "100" aria-valuemin= "0" aria-valuenow= "3" class= "progress-bar" role= "progressbar" style= "width: 3%;" >
- <div class= "label" >
- 3%
- </div>
- </div>
-</div>
-<p>
- 3 MB of 100 MB Used
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
- 9 MB of 100 MB Used
-
-
-
-
-
-
<div class= "progress" >
- <div aria-valuemax= "100" aria-valuemin= "0" aria-valuenow= "9" class= "progress-bar" role= "progressbar" style= "width: 9%;" >
- <div class= "label" >
- 9%
- </div>
- </div>
-</div>
-<p>
- 9 MB of 100 MB Used
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
- 60 MB of 100 MB Used
-
-
-
-
-
-
<div class= "progress" >
- <div aria-valuemax= "100" aria-valuemin= "0" aria-valuenow= "60" class= "progress-bar" role= "progressbar" style= "width: 60%;" >
- <div class= "label" >
- 60%
- </div>
- </div>
-</div>
-<p>
- 60 MB of 100 MB Used
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
- 90 MB of 100 MB Used
-
-
-
-
-
-
-
<div class= "progress" >
- <div aria-valuemax= "100" aria-valuemin= "0" aria-valuenow= "90" class= "progress-bar" role= "progressbar" style= "width: 90%;" >
- <div class= "label" >
- 90%
- </div>
- </div>
-</div>
-<p>
- 90 MB of 100 MB Used
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Tabs
-
-
-You can activate a tab or pill navigation without writing any JavaScript by simply specifying data-toggle="tab"
on an element.
-Highlight
-
-
-
-
-
-
Plan Features
-
-
Content 1
-
Content 2
-
Content 3
-
Content 4
-
-
-
-
-
-
-
-
<div class= "tab-highlight" >
- <div class= "row" >
- <div class= "col-md-8" >
- <h1> Service Plans</h1>
- <ul class= "nav nav-stacked" >
- <li class= "active" >
- <a data-toggle= "tab" href= "#home" >
- <div class= "row" >
- <div class= "col-md-10 tab-title" > Spark</div>
- <div class= "col-md-14" > Free</div>
- </div>
- </a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#profile" >
- <div class= "row" >
- <div class= "col-md-10 tab-title" > Boost</div>
- <div class= "col-md-14" > $10/month</div>
- </div>
- </a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#messages" >
- <div class= "row" >
- <div class= "col-md-10 tab-title" > Amp</div>
- <div class= "col-md-14" > $50/month</div>
- </div>
- </a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#settings" >
- <div class= "row" >
- <div class= "col-md-10 tab-title" >
- Shockingly long plan name is important to test
- </div>
- <div class= "col-md-14" > $1000/month</div>
- </div>
- </a>
- </li>
- </ul>
- </div>
- <div class= "col-md-16" >
- <h1> Plan Features</h1>
- <div class= "tab-content" >
- <div class= "tab-pane fade in active" id= "home" > Content 1</div>
- <div class= "tab-pane fade" id= "profile" > Content 2</div>
- <div class= "tab-pane fade" id= "messages" > Content 3</div>
- <div class= "tab-pane fade" id= "settings" > Content 4</div>
- </div>
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Image
-You can use any 130px by 130px svg for the icon in the center of the tab. Please add the class icon
to any parts of the svg which form part of the icon. You may also use an icon font for the icon.
-
-
-
-
Agility Content
-
Choice Content
-
Open Source
-
-
-
-
-
-
-
<div class= "tabs-images" >
- <ul class= "list-inline nav-tabs-images" >
- <li class= "active" >
- <a data-toggle= "tab" href= "#agility" >
- <span class= "sr-only" > Agility</span>
- <svg class= "icon-svg" x= "0px" y= "0px" height= "130" width= "130" enable-background= "new 0 0 130 130" >
- <g>
- <path class= "icon" d= "M97.283,83.157H86.452c-2.555,3.305-5.781,6.066-9.478,8.067h20.31l4.489-3.945L97.283,83.157z" />
- <path class= "icon" d= "M62.788,38.586c-14.513,0-26.319,11.807-26.319,26.319c0,5.429,1.66,10.473,4.489,14.667h11.012
- c-4.499-3.327-7.434-8.654-7.434-14.667c0-10.064,8.188-18.252,18.252-18.252S81.04,54.84,81.04,64.905
- c0,6.013-2.935,11.34-7.434,14.667c-3.032,2.242-6.766,3.585-10.818,3.585H43.853h-4.729H28.292l4.482,4.122l-4.482,3.945h20.311
- h14.185c7.43,0,14.145-3.099,18.935-8.067c1.066-1.106,2.033-2.308,2.895-3.585c2.83-4.194,4.489-9.238,4.489-14.667
- C89.107,50.393,77.301,38.586,62.788,38.586z" />
- </g>
- </svg>
- </a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#choice" >
- <span class= "sr-only" > Choice</span>
- <svg class= "icon-svg" version= "1.1" x= "0px" y= "0px"
- viewBox= "0 0 130 130" enable-background= "new 0 0 130 130" xml:space= "preserve" >
- <g>
- <g>
- <path class= "icon" d= "M59.642,57.905c0,1.65-1.35,3-3,3h-18c-1.65,0-3-1.35-3-3v-18c0-1.65,1.35-3,3-3h18c1.65,0,3,1.35,3,3V57.905z" />
- </g>
- <g>
- <path class= "icon" d= "M78.381,60.905c-1.65,0-3.675-1.169-4.5-2.598l-3.928-6.804c-0.825-1.429-0.825-3.767,0-5.196l3.928-6.804
- c0.825-1.429,2.85-2.598,4.5-2.598h7.856c1.65,0,3.675,1.169,4.5,2.598l3.928,6.804c0.825,1.429,0.825,3.767,0,5.196l-3.928,6.804
- c-0.825,1.429-2.85,2.598-4.5,2.598H78.381z" />
- </g>
- <circle class= "icon" cx= "82.309" cy= "79.905" r= "12" />
- <g>
- <path class= "icon" d= "M46.202,70.399c0.792-1.372,2.088-1.372,2.88,0l3.77,6.531c0.792,1.372,2.088,3.616,2.88,4.988l3.77,6.531
- c0.792,1.372,0.144,2.494-1.44,2.494h-7.541c-1.584,0-4.175,0-5.759,0h-7.541c-1.584,0-2.232-1.122-1.44-2.494l3.77-6.531
- c0.792-1.372,2.088-3.616,2.88-4.988L46.202,70.399z" />
- </g>
- </g>
- </svg>
- </a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#open-source" >
- <span class= "sr-only" > Open Source</span>
- <svg class= "icon-svg" version= "1.1" id= "Layer_1" x= "0px" y= "0px" viewBox= "0 0 130 130" enable-background= "new 0 0 130 130" >
- <path class= "icon" d= "M95.22,65.454c0-16.583-13.441-30.025-30.024-30.025c-16.583,0-30.026,13.442-30.026,30.025
- c0,12.68,7.861,23.525,18.973,27.926l7.596-19.192c-3.477-1.377-5.937-4.767-5.937-8.734c0-5.188,4.207-9.393,9.394-9.393
- c5.188,0,9.395,4.206,9.395,9.393c0,3.966-2.463,7.357-5.937,8.734l7.594,19.192C87.362,88.979,95.22,78.134,95.22,65.454z" />
- </svg>
- </a>
- </li>
- </ul>
- <div class= "tab-content txt-c" >
- <div class= "tab-pane fade in active" id= "agility" > Agility Content</div>
- <div class= "tab-pane fade" id= "choice" > Choice Content</div>
- <div class= "tab-pane fade" id= "open-source" > Open Source</div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Responsive
-
-
-
-
-
-
-
-
- meep
-
- Content 1
-
- foo
-
- Content 2
-
- foo
-
- Content 3
-
- foo
-
- Content 4
-
-
-
-
-
-
-
-
<div class= "tab-responsive" >
- <div class= "row" >
- <div class= "col-sm-5" >
- <ul class= "nav hidden-xs" >
- <li class= "active" >
- <a data-toggle= "tab" href= "#tab-responsive-1" > meep</a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#tab-responsive-2" > foo</a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#tab-responsive-3" > bar</a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#tab-responsive-4" > baz</a>
- </li>
- </ul>
- </div>
-
- <div class= "col-sm-19" >
- <ul class= "tab-content" >
- <li class= "active" >
- <a class= "visible-xs-block" data-toggle= "tab" href= "#tab-responsive-1" > meep</a>
- </li>
- <li class= "tab-pane active fade in" id= "tab-responsive-1" > Content 1</li>
- <li>
- <a class= "visible-xs-block" data-toggle= "tab" href= "#tab-responsive-2" > foo</a>
- </li>
- <li class= "tab-pane fade" id= "tab-responsive-2" > Content 2</li>
- <li>
- <a class= "visible-xs-block" data-toggle= "tab" href= "#tab-responsive-3" > foo</a>
- </li>
- <li class= "tab-pane fade" id= "tab-responsive-3" > Content 3</li>
- <li>
- <a class= "visible-xs-block" data-toggle= "tab" href= "#tab-responsive-4" > foo</a>
- </li>
- <li class= "tab-pane fade" id= "tab-responsive-4" > Content 4</li>
- </ul>
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Simple
-
-
-
-
-
-
Spaces Content
-
Domains Content
-
Members Content
-
-
-
-
-
-
<div class= "tab-simple" >
- <div class= "tabs-action txt-r" >
- <a> Some Action</a>
- </div>
- <ul class= "nav nav-tabs" >
- <li class= "active" >
- <a data-toggle= "tab" href= "#spaces" > Spaces</a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#domains" > Domains</a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#members" > Members</a>
- </li>
- </ul>
- <div class= "tab-content" >
- <div class= "tab-pane fade in active" id= "spaces" > Spaces Content</div>
- <div class= "tab-pane fade" id= "domains" > Domains Content</div>
- <div class= "tab-pane fade" id= "members" > Members Content</div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Simple Alt
-You do not need the .panel
to wrap around .tab-simple-alt
. We have it there to demonstrate the interaction on a neutral background.
-
-
-
-
-
Dashboard Content
-
Notifications Content
-
EULA Content
-
-
-
-
-
-
-
<div class= "panel paxl bg-neutral-9" >
- <div class= "tab-simple-alt" >
- <ul class= "nav nav-tabs" >
- <li class= "active" >
- <a data-toggle= "tab" href= "#dashboard" > Dashboard</a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#notifications" > Notifications</a>
- </li>
- <li>
- <a data-toggle= "tab" href= "#eula" > EULA</a>
- </li>
- </ul>
- <div class= "tab-content" >
- <div class= "tab-pane fade in active" id= "dashboard" > Dashboard Content</div>
- <div class= "tab-pane fade" id= "notifications" > Notifications Content</div>
- <div class= "tab-pane fade" id= "eula" > EULA Content</div>
- </div>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Tables
-
-
-
-Class
-Description
-
-
-.table
-Base table class, applies spacing and cross browser support. Unfortunately inherits some undesirable styles from bootstrap.
-
-
-.table-hover
-Adds a light blue background color to table rows when the user hovers over them (use to indicate clickability)
-
-
-.table-striped
-Applies zebra striping to a table.
-
-
-.table-light
-Lightens the table background.
-
-
-
-Table with borders where the contents of the table scroll but the header does not.
-The default height of the scrollable table is 183px. There are four other sizes provided
-which you can use by adding the following classes to the .table-scrollable
element.
-Table Scrollable sizes
-Height
-
-
-default
-183px
-
-
-.table-scrollable-sm
-300px
-
-
-.table-scrollable-md
-600px
-
-
-.table-scrollable-lg
-900px
-
-
If you would like a custom size, please add an inline style to the .table-scrollable-body
element.
Design Note: The table-scrollable
is often paired with table-data
and table-light
as in our example.
-
-
- You will need to specify the width of every column in both the thead
and
- the first row of the tbody
. You can do this with inline width attributes.
-
-
-
-
-
-
-
<div class= "table-scrollable table-scrollable-sm" >
- <div class= "table-scrollable-header" >
- <table class= "table table-data table-light" >
- <thead>
- <tr>
- <th width= "10%" > #</th>
- <th width= "16%" > Status</th>
- <th width= "12%" > CPU</th>
- <th width= "16%" > Memory</th>
- <th width= "16%" > Disk</th>
- <th width= "30%" > Uptime</th>
- </tr>
- </thead>
- </table>
- </div>
- <div class= "table-scrollable-body" >
- <table class= "table table-data table-light" >
- <tbody>
- <tr>
- <td width= "10%" > 0</td>
- <td width= "16%" > Running</td>
- <td width= "12%" > 0%</td>
- <td width= "16%" > 4.16 MB</td>
- <td width= "16%" > 6.75 MB</td>
- <td width= "30%" > 27 min</td>
- </tr>
- <tr>
- <td> 1</td>
- <td> Running</td>
- <td> 0%</td>
- <td> 4.07 MB</td>
- <td> 6.75 MB</td>
- <td> 27 min</td>
- </tr>
- <tr>
- <td> 2</td>
- <td> Running</td>
- <td> 0%</td>
- <td> 4.07 MB</td>
- <td> 6.75 MB</td>
- <td> 25 min</td>
- </tr>
- <tr>
- <td> 3</td>
- <td> Running</td>
- <td> 0%</td>
- <td> 4.14 MB</td>
- <td> 6.75 MB</td>
- <td> 25 min</td>
- </tr>
- <tr>
- <td> 4</td>
- <td> Running</td>
- <td> 0%</td>
- <td> 4.08 MB</td>
- <td> 6.75 MB</td>
- <td> 25 min</td>
- </tr>
- <tr>
- <td> 5</td>
- <td> Running</td>
- <td> 0%</td>
- <td> 4.16 MB</td>
- <td> 6.75 MB</td>
- <td> 25 min</td>
- </tr>
- <tr>
- <td> 6</td>
- <td> Running</td>
- <td> 0%</td>
- <td> 4.07 MB</td>
- <td> 6.75 MB</td>
- <td> 25 min</td>
- </tr>
- <tr>
- <td> 7</td>
- <td> Running</td>
- <td> 0%</td>
- <td> 4.07 MB</td>
- <td> 6.75 MB</td>
- <td> 25 min</td>
- </tr>
- <tr>
- <td> 8</td>
- <td> Running</td>
- <td> 0%</td>
- <td> 4.03 MB</td>
- <td> 6.75 MB</td>
- <td> 25 min</td>
- </tr>
- <tr>
- <td> 9</td>
- <td> Running</td>
- <td> 0%</td>
- <td> 4.07 MB</td>
- <td> 6.75 MB</td>
- <td> 25 min</td>
- </tr>
- </tbody>
- </table>
- </div>
-</div>
-
-
- Copy
-
-
-
-
-Alignment
-See the alignment component for classes to use for table text alignment.
-Data
-This is a table used to display many rows of data (it is pretty much the default table). You can use grid column classes on th and td elements. See key-value table for example.
Design Note: The table-data
is often paired with table-light
as in our example.
-
-
-
- Service Instance
- Service Plan
- Bound Apps
-
-
-
-
- oracle-db-sct
- Oracle DB
- 12
-
-
- oracle-db-sct
- Oracle DB
- 12
-
-
- oracle-db-sct
- Oracle DB
- 12
-
-
- oracle-db-sct
- Oracle DB
- 12
-
-
-
-
-
-
-
<table class= "table table-data table-light" >
- <thead>
- <tr>
- <th> Service Instance</th>
- <th> Service Plan</th>
- <th> Bound Apps</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td> oracle-db-sct</td>
- <td> Oracle DB</td>
- <td> 12</td>
- </tr>
- <tr>
- <td> oracle-db-sct</td>
- <td> Oracle DB</td>
- <td> 12</td>
- </tr>
- <tr>
- <td> oracle-db-sct</td>
- <td> Oracle DB</td>
- <td> 12</td>
- </tr>
- <tr>
- <td> oracle-db-sct</td>
- <td> Oracle DB</td>
- <td> 12</td>
- </tr>
- </tbody>
-</table>
-
-
- Copy
-
-
-
-
-Key-Value
-This table is used when the table headings are on the left. It looks better when you
-specify column widths for the th/tds.
-
-
-
- Email
- joe@example.com
-
-
- Current Password
- *******
-
-
- First Name
- Joe
-
-
- Last Name
- Bobs
-
-
- Phone
- 415-555-0000
-
-
-
-
-
-
-
<table class= "table table-key-value" >
- <tbody>
- <tr>
- <th class= "col-md-8" > Email</th>
- <td class= "col-md-16" > joe@example.com</td>
- </tr>
- <tr>
- <th class= "col-md-8" > Current Password</th>
- <td class= "col-md-16" > *******</td>
- </tr>
- <tr>
- <th class= "col-md-8" > First Name</th>
- <td class= "col-md-16" > Joe</td>
- </tr>
- <tr>
- <th class= "col-md-8" > Last Name</th>
- <td class= "col-md-16" > Bobs</td>
- </tr>
- <tr>
- <th class= "col-md-8" > Phone</th>
- <td class= "col-md-16" > 415-555-0000</td>
- </tr>
- </tbody>
-</table>
-
-
- Copy
-
-
-
-
-
-Tooltips are used to display extra information on hover. They can be used with any hoverable element.
The title
attribute defines the text that appears on the tooltip.
-The data-placement
attribute defines the tooltip's placement.
-If data-placement
is not specified, the tooltip is placed on top by default.
-
-
- Tooltips must be initialized with javascript: $(mySelector).tooltip();
-
-
-
-
-
-
-
<p>
- Check out this
- <a id= "link-with-tooltip-1" href= "#" data-toggle= "tooltip" data-placement= "left" title= "I should be on the left" >
- tooltip on the left!
- </a>
-</p>
-
-<p>
- Check out this
- <a id= "link-with-tooltip-2" href= "#" data-toggle= "tooltip" data-placement= "right" title= "I should be on the right" >
- tooltip on the right!
- </a>
-</p>
-
-<p>
- <button id= "button-with-tooltip-1" class= "btn btn-default" data-toggle= "tooltip" data-placement= "top" title= "I should be on the top" >
- Check out this tooltip on the top!
- </button>
-</p>
-
-<p>
- <button id= "button-with-tooltip-2" class= "btn btn-default" data-toggle= "tooltip" data-placement= "bottom" title= "I should be on the bottom" >
- Check out this tooltip on the bottom!
- </button>
-</p>
-
-
- Copy
-
-
-
-
-
-
-
$ ( '#link-with-tooltip-1' ). tooltip ();
-$ ( '#link-with-tooltip-2' ). tooltip ();
-$ ( '#button-with-tooltip-1' ). tooltip ();
-$ ( '#button-with-tooltip-2' ). tooltip ();
-
-
- Copy
-
-
-
-
-
-
- If you want to use a tooltip on a disabled element, place the tooltip in a wrapper div with the class .button-with-tooltip-wrapper
.
-
-
-
-
-
- Disabled button
-
-
-
-
-
-
<div id= "disabled-button-with-tooltip" class= "button-with-tooltip-wrapper" data-toggle= "tooltip" data-placement= "right" title= "This button is totally disabled!" >
- <button type= "button" class= "btn btn-default" disabled= true >
- Disabled button
- </button>
-</div>
-
-
- Copy
-
-
-
-
-
-
-
$ ( '#disabled-button-with-tooltip' ). tooltip ();
-
-
- Copy
-
-
-
-
-
-
-
-
-
diff --git a/release/pui-v1.9.0/oocss/_clearfix-me.scss b/release/pui-v1.9.0/oocss/_clearfix-me.scss
deleted file mode 100644
index d24884819..000000000
--- a/release/pui-v1.9.0/oocss/_clearfix-me.scss
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * clearfix used project wide to clear floats and create a new formatting context
- * usage @include clearfix-me()
- * $clearfix-method sets default method
- */
-
-// set default clearfix method to overflow
-$clearfix-method: overflow !default;
-// can be one of: overflow,facebook,micro,stubborn
-
-// create stub classes for each of the four clearfix methods
-
-@mixin clearfix-overflow {
- overflow: hidden;
- *overflow: visible;
- zoom: 1;
-}
-
-@mixin clearfix-facebook {
- display: table-cell;
- vertical-align: top;
- width: 10000px !important;
- *display: block;
- //<=IE7
- *zoom: 1;
- //<=IE7
- *width: auto !important;
- //<=IE7
-}
-
-@mixin clearfix-micro {
- zoom: 1;
- //@include has-layout;
- &:before,
- &:after {
- content: " ";
- display: table;
- }
- &:after {
- clear: both;
- }
-}
-
-@mixin clearfix-stubborn {
- display: table-cell;
- &:after {
- clear: both;
- display: block;
- visibility: hidden;
- overflow: hidden;
- height: 0 !important;
- line-height: 0;
- font-size: xx-large;
- content: "x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x";
- }
-}
-
-// extends so the output will be smaller
-
-@mixin clearfix-me($method: $clearfix-method) {
- @if $method == facebook {
- @include clearfix-facebook;
- } @else if $method == micro {
- @include clearfix-micro;
- } @else if $method == stubborn {
- @include clearfix-stubborn;
- } @else if $method == overflow {
- @include clearfix-overflow;
- } @else {
- @warn "The clearfix method #{$method} is unkown";
- @include clearfix-micro;
- }
-}
diff --git a/release/pui-v1.9.0/oocss/_listWhitespace.scss b/release/pui-v1.9.0/oocss/_listWhitespace.scss
deleted file mode 100644
index f6a430bb9..000000000
--- a/release/pui-v1.9.0/oocss/_listWhitespace.scss
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
-* @name List
-* @desc Basic list with no bullets and no margins
-* @author
-* @tested
-* @requires
-*/
-
-$list-whitespace-keys: (l margin, a '', v -top -bottom, h -left -right);
-@function list-expand-whitespace-key($k) {
- @each $pair in $list-whitespace-keys {
- $short: nth($pair, 1);
- $long: nth($pair, 2);
- // v and h need to pass in 2 parameters
- @if (length($pair) == 3) {
- $long: (nth($pair, 2) nth($pair, 3))
- }
- @if $short == $k {
- @return $long;
- }
- }
- @warn "Couldn't expand #{$k}";
- @return $k;
-}
-
-/*
- * Define your own spacing classes for lists
- *
- * @param $units - specific spacing units you want to use. Must go from small to large
- * e.g. @include ooListWhitespace((5px,10px,20px));
- *
- */
-
-@mixin ooListWhitespace($sizes: (5px, 10px, 20px)) {
-//for now assume this list is always ascending
-/* build list spacing exceptions */
- $sizes: join(0, $sizes);
- $size-names: ();
- @if (length($sizes) == 1) {
- $size-names: (n);
- @warn "One spacing class isn't usually enough. Typically you should choose at least three.";
- } @else if (length($sizes) == 2) {
- $size-names: (n, s);
- @warn "Two spacing classes isn't usually enough. Typically you should choose at least three.";
- } @else if (length($sizes) == 3) {
- $size-names: (n, s, m);
- } @else if (length($sizes) == 4) {
- $size-names: (n, s, m, l);
- } @else if (length($sizes) == 5) {
- $size-names: (n, s, m, l, xl);
- } @else if (length($sizes) < 5){
- $size-names: (n, xs, s, m, l, xl);
- @warn "No more than five spacing classes are supported, typically you want to have three.";
- }
-
- $types: (l);
- $locations: (v, h);
- @each $location in $locations {
- @each $size-name in $size-names {
- @each $type in $types {
- .#{$type}#{$location}#{$size-name} > li {
- //get returned list of locations. Can't assign to variable as it turns into 1 item in the list, not multiple items
- @each $whitespace-location in list-expand-whitespace-key($location) {
- #{list-expand-whitespace-key($type)}#{$whitespace-location}: nth($sizes, index($size-names, $size-name)) !important;
- }
- }
- }
- }
- }
- ul[class*="lh"] > li:last-child{
- margin-right: 0 !important;
- }
-
- ul[class*="lh"] > li{
- margin-left: 0 !important;
- }
-
- ul[class*="lv"] > li:last-child{
- margin-bottom: 0 !important;
- }
-
- ul[class*="lv"] > li{
- margin-top: 0 !important;
- }
-}
-
-
diff --git a/release/pui-v1.9.0/oocss/_whitespace.scss b/release/pui-v1.9.0/oocss/_whitespace.scss
deleted file mode 100644
index 3d72394be..000000000
--- a/release/pui-v1.9.0/oocss/_whitespace.scss
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
-* @desc Create spacing classes and default spacing.
-* @name Whitespace
-* @author Fiona
-* @tested Safari, Chrome, Firefox, IE7-9
-* @requires _variables.scss
-*/
-
-$debugSpacing: false;
-
-/* ==========================================================================
- Default spacing
- ========================================================================== */
-
-%baseSpacing {
- margin-top: $baseSpacing;
- margin-bottom: $baseSpacing;
-}
-
-table {
- h1, h2, h3, h4, h5, h6, p, ul, ol, dl, blockquote, .media, pre {
- margin-top: 0;
- margin-bottom: 0;
- }
-}
-
-/* *
- * debug default spacing
- * set $debug-spacing to true to visualize spacing and positioning
- */
-@if $debugSpacing {
- h1, h2, h3, h4, h5, h6, ul, ol, dl, p, blockquote, .media, pre, .data {
- outline: 1px solid aqua;
- }
- .media {
- outline: 1px solid magenta;
- }
- :first-child {
- outline: 1px solid yellow;
- }
- :last-child {
- outline: 1px solid green;
- }
-}
-
-/* ==========================================================================
- Spacing helpers
- ========================================================================== */
-
-/**
- * Spacing helpers
- * Should be used to modify the default spacing between objects (not between nodes of the same object)
- * Please use judiciously. You want to be using defaults most of the time, these are exceptions!
- *
- *
- * p,m padding,margin
- * a,t,r,b,l,h,v all,top,right,bottom,left,horizontal,vertical
- * s,m,l,n small(5px),medium(10px),large(20px),none(0px)
- */
-
-$whitespace-keys: (p padding, m margin, a '', v -top -bottom, h -left -right, t -top, r -right, b -bottom, l -left);
-@function expand-whitespace-key($k) {
- @each $pair in $whitespace-keys {
- $short: nth($pair, 1);
- $long: nth($pair, 2);
- // v and h need to pass in 2 parameters
- @if (length($pair) == 3) {
- $long: (nth($pair, 2) nth($pair, 3))
- }
- @if $short == $k {
- @return $long;
- }
- }
- @warn "Couldn't expand #{$k}";
- @return $k;
-}
-
-/*
- * Can define your own spacing units, or calculate the units based on how many spacing sizes you want
- *
- * @param $units - specific spacing units you want to use. Must go from small to large
- * e.g. @include whitespace((5px,10px,20px));
- *
- * @param $sizes - how many sizes you want. Calculate sizes based on line-height
- * e.g. @include whitespace((), 4);
- *
- */
-@mixin whitespace($units: (), $sizes: 4) {
- $tShirtSizes: (n,s,m,l,xl,xxl,xxxl,xxxxl);
- $types: (p,m);
- $locations: (a, v, h, t, r, b, l);
- $fontHeight: ($baseFontSize/1px) * $baseLineHeight;
-//calculate font height
-
-//if user didn't define their own spacing units
- @if length($units) == 0 {
- @for $i from 1 through $sizes {
- $unit: (round($fontHeight/$i))+px;
- //calculate unit base on fraction of font height
- $units: join($unit, $units);
- }
- }
- $units: join(0, $units);
-
-// @debug $units;
-
- @for $i from 1 through length($units) {
-
- $tShirtSize: nth($tShirtSizes, $i);
-
- @each $location in $locations {
- @each $type in $types {
- .#{$type}#{$location}#{$tShirtSize} {
- @each $whitespace-location in expand-whitespace-key($location) {
- #{expand-whitespace-key($type)}#{$whitespace-location}: nth($units, $i) !important;
- }
- }
- }
- }
- }
-}
-
diff --git a/release/pui-v1.9.0/pane.html b/release/pui-v1.9.0/pane.html
deleted file mode 100644
index 79b5e7e89..000000000
--- a/release/pui-v1.9.0/pane.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- a brand new styleguide: <%= title %>
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/release/pui-v1.9.0/pivotal-ui-rails.css b/release/pui-v1.9.0/pivotal-ui-rails.css
deleted file mode 100644
index 298a009a0..000000000
--- a/release/pui-v1.9.0/pivotal-ui-rails.css
+++ /dev/null
@@ -1,41 +0,0 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{box-sizing:border-box}*:before,*:after{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:'Source Sans Pro','SourceSansPro',sans-serif;font-size:16px;line-height:1.5;color:#686868;background-color:transparent}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2185c5;text-decoration:none}a:hover,a:focus{color:#243640;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.5;background-color:transparent;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:24px;margin-bottom:24px;border:0;border-top:1px solid #eeeeee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-weight:400;line-height:1.5}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#999999}h1,.h1,h2,.h2,h3,.h3{margin-top:24px;margin-bottom:12px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:12px;margin-bottom:12px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:31px}h2,.h2{font-size:25px}h3,.h3{font-size:20px}h4,.h4{font-size:18px}h5,.h5{font-size:16px}h6,.h6{font-size:13px}p{margin:0 0 12px}.lead{margin-bottom:24px;font-size:18px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:24px;}}small,.small{font-size:87%}mark,.mark{background-color:#F9F3C3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#ecefef !important}.text-primary{color:#1b92cb}a.text-primary:hover{color:#15729e}.text-success{color:#d4d9d9}a.text-success:hover{color:#b9c1c1}.text-info{color:#8e8837}a.text-info:hover{color:#696529}.text-warning{color:#B59033}a.text-warning:hover{color:#8d7028}.text-danger{color:#ff434c}a.text-danger:hover{color:#ff101b}.bg-primary{color:#fff}.bg-primary{background-color:#1b92cb}a.bg-primary:hover{background-color:#15729e}.bg-success{background-color:#686868}a.bg-success:hover{background-color:#4e4e4e}.bg-info{background-color:#e2df80}a.bg-info:hover{background-color:#d9d556}.bg-warning{background-color:#F9F3C3}a.bg-warning:hover{background-color:#f4ea95}.bg-danger{background-color:#febfc1}a.bg-danger:hover{background-color:#fd8d90}.page-header{padding-bottom:11px;margin:48px 0 24px;border-bottom:1px solid #eeeeee}ul,ol{margin-top:0;margin-bottom:12px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:24px}dt,dd{line-height:1.5}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:12px 24px;margin:0 0 24px;font-size:20px;border-left:5px solid #eeeeee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.5;color:#999999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:24px;font-style:normal;line-height:1.5}code,kbd,pre,samp{font-family:Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;background-color:#F8F8F8;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:11.5px;margin:0 0 12px;font-size:15px;line-height:1.5;word-break:break-all;word-wrap:break-word;color:#333333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:10px;padding-right:10px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 768px){.container{width:740px;}}@media (min-width: 992px){.container{width:960px;}}@media (min-width: 1200px){.container{width:1160px;}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:10px;padding-right:10px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-10px;margin-right:-10px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12,.col-xs-13,.col-sm-13,.col-md-13,.col-lg-13,.col-xs-14,.col-sm-14,.col-md-14,.col-lg-14,.col-xs-15,.col-sm-15,.col-md-15,.col-lg-15,.col-xs-16,.col-sm-16,.col-md-16,.col-lg-16,.col-xs-17,.col-sm-17,.col-md-17,.col-lg-17,.col-xs-18,.col-sm-18,.col-md-18,.col-lg-18,.col-xs-19,.col-sm-19,.col-md-19,.col-lg-19,.col-xs-20,.col-sm-20,.col-md-20,.col-lg-20,.col-xs-21,.col-sm-21,.col-md-21,.col-lg-21,.col-xs-22,.col-sm-22,.col-md-22,.col-lg-22,.col-xs-23,.col-sm-23,.col-md-23,.col-lg-23,.col-xs-24,.col-sm-24,.col-md-24,.col-lg-24{position:relative;min-height:1px;padding-left:10px;padding-right:10px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-13,.col-xs-14,.col-xs-15,.col-xs-16,.col-xs-17,.col-xs-18,.col-xs-19,.col-xs-20,.col-xs-21,.col-xs-22,.col-xs-23,.col-xs-24{float:left}.col-xs-1{width:4.16667%}.col-xs-2{width:8.33333%}.col-xs-3{width:12.5%}.col-xs-4{width:16.66667%}.col-xs-5{width:20.83333%}.col-xs-6{width:25%}.col-xs-7{width:29.16667%}.col-xs-8{width:33.33333%}.col-xs-9{width:37.5%}.col-xs-10{width:41.66667%}.col-xs-11{width:45.83333%}.col-xs-12{width:50%}.col-xs-13{width:54.16667%}.col-xs-14{width:58.33333%}.col-xs-15{width:62.5%}.col-xs-16{width:66.66667%}.col-xs-17{width:70.83333%}.col-xs-18{width:75%}.col-xs-19{width:79.16667%}.col-xs-20{width:83.33333%}.col-xs-21{width:87.5%}.col-xs-22{width:91.66667%}.col-xs-23{width:95.83333%}.col-xs-24{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:4.16667%}.col-xs-pull-2{right:8.33333%}.col-xs-pull-3{right:12.5%}.col-xs-pull-4{right:16.66667%}.col-xs-pull-5{right:20.83333%}.col-xs-pull-6{right:25%}.col-xs-pull-7{right:29.16667%}.col-xs-pull-8{right:33.33333%}.col-xs-pull-9{right:37.5%}.col-xs-pull-10{right:41.66667%}.col-xs-pull-11{right:45.83333%}.col-xs-pull-12{right:50%}.col-xs-pull-13{right:54.16667%}.col-xs-pull-14{right:58.33333%}.col-xs-pull-15{right:62.5%}.col-xs-pull-16{right:66.66667%}.col-xs-pull-17{right:70.83333%}.col-xs-pull-18{right:75%}.col-xs-pull-19{right:79.16667%}.col-xs-pull-20{right:83.33333%}.col-xs-pull-21{right:87.5%}.col-xs-pull-22{right:91.66667%}.col-xs-pull-23{right:95.83333%}.col-xs-pull-24{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:4.16667%}.col-xs-push-2{left:8.33333%}.col-xs-push-3{left:12.5%}.col-xs-push-4{left:16.66667%}.col-xs-push-5{left:20.83333%}.col-xs-push-6{left:25%}.col-xs-push-7{left:29.16667%}.col-xs-push-8{left:33.33333%}.col-xs-push-9{left:37.5%}.col-xs-push-10{left:41.66667%}.col-xs-push-11{left:45.83333%}.col-xs-push-12{left:50%}.col-xs-push-13{left:54.16667%}.col-xs-push-14{left:58.33333%}.col-xs-push-15{left:62.5%}.col-xs-push-16{left:66.66667%}.col-xs-push-17{left:70.83333%}.col-xs-push-18{left:75%}.col-xs-push-19{left:79.16667%}.col-xs-push-20{left:83.33333%}.col-xs-push-21{left:87.5%}.col-xs-push-22{left:91.66667%}.col-xs-push-23{left:95.83333%}.col-xs-push-24{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:4.16667%}.col-xs-offset-2{margin-left:8.33333%}.col-xs-offset-3{margin-left:12.5%}.col-xs-offset-4{margin-left:16.66667%}.col-xs-offset-5{margin-left:20.83333%}.col-xs-offset-6{margin-left:25%}.col-xs-offset-7{margin-left:29.16667%}.col-xs-offset-8{margin-left:33.33333%}.col-xs-offset-9{margin-left:37.5%}.col-xs-offset-10{margin-left:41.66667%}.col-xs-offset-11{margin-left:45.83333%}.col-xs-offset-12{margin-left:50%}.col-xs-offset-13{margin-left:54.16667%}.col-xs-offset-14{margin-left:58.33333%}.col-xs-offset-15{margin-left:62.5%}.col-xs-offset-16{margin-left:66.66667%}.col-xs-offset-17{margin-left:70.83333%}.col-xs-offset-18{margin-left:75%}.col-xs-offset-19{margin-left:79.16667%}.col-xs-offset-20{margin-left:83.33333%}.col-xs-offset-21{margin-left:87.5%}.col-xs-offset-22{margin-left:91.66667%}.col-xs-offset-23{margin-left:95.83333%}.col-xs-offset-24{margin-left:100%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-13,.col-sm-14,.col-sm-15,.col-sm-16,.col-sm-17,.col-sm-18,.col-sm-19,.col-sm-20,.col-sm-21,.col-sm-22,.col-sm-23,.col-sm-24{float:left}.col-sm-1{width:4.16667%}.col-sm-2{width:8.33333%}.col-sm-3{width:12.5%}.col-sm-4{width:16.66667%}.col-sm-5{width:20.83333%}.col-sm-6{width:25%}.col-sm-7{width:29.16667%}.col-sm-8{width:33.33333%}.col-sm-9{width:37.5%}.col-sm-10{width:41.66667%}.col-sm-11{width:45.83333%}.col-sm-12{width:50%}.col-sm-13{width:54.16667%}.col-sm-14{width:58.33333%}.col-sm-15{width:62.5%}.col-sm-16{width:66.66667%}.col-sm-17{width:70.83333%}.col-sm-18{width:75%}.col-sm-19{width:79.16667%}.col-sm-20{width:83.33333%}.col-sm-21{width:87.5%}.col-sm-22{width:91.66667%}.col-sm-23{width:95.83333%}.col-sm-24{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:4.16667%}.col-sm-pull-2{right:8.33333%}.col-sm-pull-3{right:12.5%}.col-sm-pull-4{right:16.66667%}.col-sm-pull-5{right:20.83333%}.col-sm-pull-6{right:25%}.col-sm-pull-7{right:29.16667%}.col-sm-pull-8{right:33.33333%}.col-sm-pull-9{right:37.5%}.col-sm-pull-10{right:41.66667%}.col-sm-pull-11{right:45.83333%}.col-sm-pull-12{right:50%}.col-sm-pull-13{right:54.16667%}.col-sm-pull-14{right:58.33333%}.col-sm-pull-15{right:62.5%}.col-sm-pull-16{right:66.66667%}.col-sm-pull-17{right:70.83333%}.col-sm-pull-18{right:75%}.col-sm-pull-19{right:79.16667%}.col-sm-pull-20{right:83.33333%}.col-sm-pull-21{right:87.5%}.col-sm-pull-22{right:91.66667%}.col-sm-pull-23{right:95.83333%}.col-sm-pull-24{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:4.16667%}.col-sm-push-2{left:8.33333%}.col-sm-push-3{left:12.5%}.col-sm-push-4{left:16.66667%}.col-sm-push-5{left:20.83333%}.col-sm-push-6{left:25%}.col-sm-push-7{left:29.16667%}.col-sm-push-8{left:33.33333%}.col-sm-push-9{left:37.5%}.col-sm-push-10{left:41.66667%}.col-sm-push-11{left:45.83333%}.col-sm-push-12{left:50%}.col-sm-push-13{left:54.16667%}.col-sm-push-14{left:58.33333%}.col-sm-push-15{left:62.5%}.col-sm-push-16{left:66.66667%}.col-sm-push-17{left:70.83333%}.col-sm-push-18{left:75%}.col-sm-push-19{left:79.16667%}.col-sm-push-20{left:83.33333%}.col-sm-push-21{left:87.5%}.col-sm-push-22{left:91.66667%}.col-sm-push-23{left:95.83333%}.col-sm-push-24{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:4.16667%}.col-sm-offset-2{margin-left:8.33333%}.col-sm-offset-3{margin-left:12.5%}.col-sm-offset-4{margin-left:16.66667%}.col-sm-offset-5{margin-left:20.83333%}.col-sm-offset-6{margin-left:25%}.col-sm-offset-7{margin-left:29.16667%}.col-sm-offset-8{margin-left:33.33333%}.col-sm-offset-9{margin-left:37.5%}.col-sm-offset-10{margin-left:41.66667%}.col-sm-offset-11{margin-left:45.83333%}.col-sm-offset-12{margin-left:50%}.col-sm-offset-13{margin-left:54.16667%}.col-sm-offset-14{margin-left:58.33333%}.col-sm-offset-15{margin-left:62.5%}.col-sm-offset-16{margin-left:66.66667%}.col-sm-offset-17{margin-left:70.83333%}.col-sm-offset-18{margin-left:75%}.col-sm-offset-19{margin-left:79.16667%}.col-sm-offset-20{margin-left:83.33333%}.col-sm-offset-21{margin-left:87.5%}.col-sm-offset-22{margin-left:91.66667%}.col-sm-offset-23{margin-left:95.83333%}.col-sm-offset-24{margin-left:100%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-13,.col-md-14,.col-md-15,.col-md-16,.col-md-17,.col-md-18,.col-md-19,.col-md-20,.col-md-21,.col-md-22,.col-md-23,.col-md-24{float:left}.col-md-1{width:4.16667%}.col-md-2{width:8.33333%}.col-md-3{width:12.5%}.col-md-4{width:16.66667%}.col-md-5{width:20.83333%}.col-md-6{width:25%}.col-md-7{width:29.16667%}.col-md-8{width:33.33333%}.col-md-9{width:37.5%}.col-md-10{width:41.66667%}.col-md-11{width:45.83333%}.col-md-12{width:50%}.col-md-13{width:54.16667%}.col-md-14{width:58.33333%}.col-md-15{width:62.5%}.col-md-16{width:66.66667%}.col-md-17{width:70.83333%}.col-md-18{width:75%}.col-md-19{width:79.16667%}.col-md-20{width:83.33333%}.col-md-21{width:87.5%}.col-md-22{width:91.66667%}.col-md-23{width:95.83333%}.col-md-24{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:4.16667%}.col-md-pull-2{right:8.33333%}.col-md-pull-3{right:12.5%}.col-md-pull-4{right:16.66667%}.col-md-pull-5{right:20.83333%}.col-md-pull-6{right:25%}.col-md-pull-7{right:29.16667%}.col-md-pull-8{right:33.33333%}.col-md-pull-9{right:37.5%}.col-md-pull-10{right:41.66667%}.col-md-pull-11{right:45.83333%}.col-md-pull-12{right:50%}.col-md-pull-13{right:54.16667%}.col-md-pull-14{right:58.33333%}.col-md-pull-15{right:62.5%}.col-md-pull-16{right:66.66667%}.col-md-pull-17{right:70.83333%}.col-md-pull-18{right:75%}.col-md-pull-19{right:79.16667%}.col-md-pull-20{right:83.33333%}.col-md-pull-21{right:87.5%}.col-md-pull-22{right:91.66667%}.col-md-pull-23{right:95.83333%}.col-md-pull-24{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:4.16667%}.col-md-push-2{left:8.33333%}.col-md-push-3{left:12.5%}.col-md-push-4{left:16.66667%}.col-md-push-5{left:20.83333%}.col-md-push-6{left:25%}.col-md-push-7{left:29.16667%}.col-md-push-8{left:33.33333%}.col-md-push-9{left:37.5%}.col-md-push-10{left:41.66667%}.col-md-push-11{left:45.83333%}.col-md-push-12{left:50%}.col-md-push-13{left:54.16667%}.col-md-push-14{left:58.33333%}.col-md-push-15{left:62.5%}.col-md-push-16{left:66.66667%}.col-md-push-17{left:70.83333%}.col-md-push-18{left:75%}.col-md-push-19{left:79.16667%}.col-md-push-20{left:83.33333%}.col-md-push-21{left:87.5%}.col-md-push-22{left:91.66667%}.col-md-push-23{left:95.83333%}.col-md-push-24{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:4.16667%}.col-md-offset-2{margin-left:8.33333%}.col-md-offset-3{margin-left:12.5%}.col-md-offset-4{margin-left:16.66667%}.col-md-offset-5{margin-left:20.83333%}.col-md-offset-6{margin-left:25%}.col-md-offset-7{margin-left:29.16667%}.col-md-offset-8{margin-left:33.33333%}.col-md-offset-9{margin-left:37.5%}.col-md-offset-10{margin-left:41.66667%}.col-md-offset-11{margin-left:45.83333%}.col-md-offset-12{margin-left:50%}.col-md-offset-13{margin-left:54.16667%}.col-md-offset-14{margin-left:58.33333%}.col-md-offset-15{margin-left:62.5%}.col-md-offset-16{margin-left:66.66667%}.col-md-offset-17{margin-left:70.83333%}.col-md-offset-18{margin-left:75%}.col-md-offset-19{margin-left:79.16667%}.col-md-offset-20{margin-left:83.33333%}.col-md-offset-21{margin-left:87.5%}.col-md-offset-22{margin-left:91.66667%}.col-md-offset-23{margin-left:95.83333%}.col-md-offset-24{margin-left:100%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-13,.col-lg-14,.col-lg-15,.col-lg-16,.col-lg-17,.col-lg-18,.col-lg-19,.col-lg-20,.col-lg-21,.col-lg-22,.col-lg-23,.col-lg-24{float:left}.col-lg-1{width:4.16667%}.col-lg-2{width:8.33333%}.col-lg-3{width:12.5%}.col-lg-4{width:16.66667%}.col-lg-5{width:20.83333%}.col-lg-6{width:25%}.col-lg-7{width:29.16667%}.col-lg-8{width:33.33333%}.col-lg-9{width:37.5%}.col-lg-10{width:41.66667%}.col-lg-11{width:45.83333%}.col-lg-12{width:50%}.col-lg-13{width:54.16667%}.col-lg-14{width:58.33333%}.col-lg-15{width:62.5%}.col-lg-16{width:66.66667%}.col-lg-17{width:70.83333%}.col-lg-18{width:75%}.col-lg-19{width:79.16667%}.col-lg-20{width:83.33333%}.col-lg-21{width:87.5%}.col-lg-22{width:91.66667%}.col-lg-23{width:95.83333%}.col-lg-24{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:4.16667%}.col-lg-pull-2{right:8.33333%}.col-lg-pull-3{right:12.5%}.col-lg-pull-4{right:16.66667%}.col-lg-pull-5{right:20.83333%}.col-lg-pull-6{right:25%}.col-lg-pull-7{right:29.16667%}.col-lg-pull-8{right:33.33333%}.col-lg-pull-9{right:37.5%}.col-lg-pull-10{right:41.66667%}.col-lg-pull-11{right:45.83333%}.col-lg-pull-12{right:50%}.col-lg-pull-13{right:54.16667%}.col-lg-pull-14{right:58.33333%}.col-lg-pull-15{right:62.5%}.col-lg-pull-16{right:66.66667%}.col-lg-pull-17{right:70.83333%}.col-lg-pull-18{right:75%}.col-lg-pull-19{right:79.16667%}.col-lg-pull-20{right:83.33333%}.col-lg-pull-21{right:87.5%}.col-lg-pull-22{right:91.66667%}.col-lg-pull-23{right:95.83333%}.col-lg-pull-24{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:4.16667%}.col-lg-push-2{left:8.33333%}.col-lg-push-3{left:12.5%}.col-lg-push-4{left:16.66667%}.col-lg-push-5{left:20.83333%}.col-lg-push-6{left:25%}.col-lg-push-7{left:29.16667%}.col-lg-push-8{left:33.33333%}.col-lg-push-9{left:37.5%}.col-lg-push-10{left:41.66667%}.col-lg-push-11{left:45.83333%}.col-lg-push-12{left:50%}.col-lg-push-13{left:54.16667%}.col-lg-push-14{left:58.33333%}.col-lg-push-15{left:62.5%}.col-lg-push-16{left:66.66667%}.col-lg-push-17{left:70.83333%}.col-lg-push-18{left:75%}.col-lg-push-19{left:79.16667%}.col-lg-push-20{left:83.33333%}.col-lg-push-21{left:87.5%}.col-lg-push-22{left:91.66667%}.col-lg-push-23{left:95.83333%}.col-lg-push-24{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:4.16667%}.col-lg-offset-2{margin-left:8.33333%}.col-lg-offset-3{margin-left:12.5%}.col-lg-offset-4{margin-left:16.66667%}.col-lg-offset-5{margin-left:20.83333%}.col-lg-offset-6{margin-left:25%}.col-lg-offset-7{margin-left:29.16667%}.col-lg-offset-8{margin-left:33.33333%}.col-lg-offset-9{margin-left:37.5%}.col-lg-offset-10{margin-left:41.66667%}.col-lg-offset-11{margin-left:45.83333%}.col-lg-offset-12{margin-left:50%}.col-lg-offset-13{margin-left:54.16667%}.col-lg-offset-14{margin-left:58.33333%}.col-lg-offset-15{margin-left:62.5%}.col-lg-offset-16{margin-left:66.66667%}.col-lg-offset-17{margin-left:70.83333%}.col-lg-offset-18{margin-left:75%}.col-lg-offset-19{margin-left:79.16667%}.col-lg-offset-20{margin-left:83.33333%}.col-lg-offset-21{margin-left:87.5%}.col-lg-offset-22{margin-left:91.66667%}.col-lg-offset-23{margin-left:95.83333%}.col-lg-offset-24{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px 14px;padding-bottom:8px 14px;color:#ecefef !important;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:24px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px 14px;line-height:1.5;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:transparent}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#F8F8F8}.table-hover>tbody>tr:hover{background-color:transparent}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:transparent}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:transparent}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#686868}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#5b5b5b}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#e2df80}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#ddda6b}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#F9F3C3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#f7eeac}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#febfc1}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#fea6a9}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:18px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:24px;font-size:24px;line-height:inherit;color:#333333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:9px;font-size:16px;line-height:1.5;color:#555555}.form-control{display:block;width:100%;height:42px;padding:8px 20px;font-size:16px;line-height:1.5;color:#555555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:3px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#49a8d5;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(73,168,213,0.6)}.form-control::-moz-placeholder{color:#b4b4b4;opacity:1}.form-control:-ms-input-placeholder{color:#b4b4b4}.form-control::-webkit-input-placeholder{color:#b4b4b4}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:false;background-color:#eeeeee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:42px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm{line-height:27px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg{line-height:48px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:24px;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}.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}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:false}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:false}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:false}.form-control-static{padding-top:9px;padding-bottom:9px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm,.form-group-sm .form-control{height:27px;padding:2px 10px;font-size:14px;line-height:1.5;border-radius:3px}select.input-sm,.form-group-sm .form-control{height:27px;line-height:27px}textarea.input-sm,.form-group-sm .form-control,select[multiple].input-sm,.form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:48px;padding:10px 26px;font-size:20px;line-height:1.33;border-radius:6px}select.input-lg,.form-group-lg .form-control{height:48px;line-height:48px}textarea.input-lg,.form-group-lg .form-control,select[multiple].input-lg,.form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:52.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:42px;height:42px;line-height:42px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:48px;height:48px;line-height:48px}.input-sm+.form-control-feedback{width:27px;height:27px;line-height:27px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#d4d9d9}.has-success .form-control{border-color:#d4d9d9;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#b9c1c1;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px white}.has-success .input-group-addon{color:#d4d9d9;border-color:#d4d9d9;background-color:#686868}.has-success .form-control-feedback{color:#d4d9d9}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#B59033}.has-warning .form-control{border-color:#B59033;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#8d7028;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d8bc76}.has-warning .input-group-addon{color:#B59033;border-color:#B59033;background-color:#F9F3C3}.has-warning .form-control-feedback{color:#B59033}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#ff434c}.has-error .form-control{border-color:#ff434c;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#ff101b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffa9ad}.has-error .input-group-addon{color:#ff434c;border-color:#ff434c;background-color:#febfc1}.has-error .form-control-feedback{color:#ff434c}.has-feedback label ~ .form-control-feedback{top:29px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#a8a8a8}@media (min-width: 768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:9px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:33px}.form-horizontal .form-group{margin-left:-10px;margin-right:-10px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:9px}}.form-horizontal .has-feedback .form-control-feedback{right:10px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:3px}}.btn{display:inline-block;margin-bottom:0;font-weight:600;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:8px 20px;font-size:16px;line-height:1.5;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#2185c5;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:false;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);box-shadow:none}.btn-default{color:#2185c5;background-color:rgba(255,255,255,0.4);border-color:transparent}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#2185c5;background-color:rgba(230,230,230,0.4);border-color:transparent}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled,.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled.active,.btn-default[disabled],.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled].active,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default.active{background-color:rgba(255,255,255,0.4);border-color:transparent}.btn-default .badge{color:rgba(255,255,255,0.4);background-color:#2185c5}.btn-primary{color:#2185c5;background-color:white;border-color:#49A8D5}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#2185c5;background-color:#e6e6e6;border-color:#2a89b7}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled.active,.btn-primary[disabled],.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary.active{background-color:white;border-color:#49A8D5}.btn-primary .badge{color:white;background-color:#2185c5}.btn-success{color:transparent;background-color:transparent;border-color:transparent}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:transparent;background-color:transparent;border-color:transparent}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled,.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled.active,.btn-success[disabled],.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled].active,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success.active{background-color:transparent;border-color:transparent}.btn-success .badge{color:transparent;background-color:transparent}.btn-info{color:transparent;background-color:transparent;border-color:transparent}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:transparent;background-color:transparent;border-color:transparent}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled,.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled.active,.btn-info[disabled],.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled].active,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info.active{background-color:transparent;border-color:transparent}.btn-info .badge{color:transparent;background-color:transparent}.btn-warning{color:transparent;background-color:transparent;border-color:transparent}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:transparent;background-color:transparent;border-color:transparent}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled,.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled.active,.btn-warning[disabled],.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning.active{background-color:transparent;border-color:transparent}.btn-warning .badge{color:transparent;background-color:transparent}.btn-danger{color:white;background-color:#ff434c;border-color:#CA7070}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:white;background-color:#ff101b;border-color:#b84444}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled.active,.btn-danger[disabled],.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger.active{background-color:#ff434c;border-color:#CA7070}.btn-danger .badge{color:#ff434c;background-color:white}.btn-link{color:#2185c5;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#243640;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#999999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 26px;font-size:20px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:2px 10px;font-size:14px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:14px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:16px;text-align:left;background-color:#F8F8F8;border:1px solid transparent;border:1px solid transparent;border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:11px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5;color:#333333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#1b92cb}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:false}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:14px;line-height:1.5;color:#999999;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-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,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:5px 10px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:transparent}.nav>li.disabled>a{color:#999999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999999;text-decoration:none;background-color:transparent;cursor:false}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:transparent;border-color:#2185c5}.nav .nav-divider{height:1px;margin:11px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.5;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#00776d;background-color:#ecefef;border:1px solid #00776d;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li+li{margin-left:2px}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:transparent}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:white;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:white;text-decoration:none;cursor:pointer}.label-default{background-color:#999999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#00a79d}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#00746d}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#CA7070}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#bc4b4b}.alert{padding:15px;margin-bottom:24px;border:1px solid transparent;border-radius:0px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#AFD79B;border-color:#165450;color:#165450}.alert-success hr{border-top-color:#11403d}.alert-success .alert-link{color:#0b2c2a}.alert-info{background-color:#c3f4ff;border-color:#8AC0C4;color:#1a739e}.alert-info hr{border-top-color:#79b7bb}.alert-info .alert-link{color:#135372}.alert-warning{background-color:#F9F3C3;border-color:#B59033;color:#B59033}.alert-warning hr{border-top-color:#a1802d}.alert-warning .alert-link{color:#8d7028}.alert-danger{background-color:#febfc1;border-color:#febfc1;color:#b31612}.alert-danger hr{border-top-color:#fea6a9}.alert-danger .alert-link{color:#85100d}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:24px;margin-bottom:24px;background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:14px;line-height:24px;color:#fff;text-align:center;background-color:#1b92cb;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#CA7070}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.panel{margin-bottom:24px;border:1px solid transparent;border-radius:0;box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:-1;border-top-left-radius:-1}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:18px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:transparent;border-top:1px solid transparent;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:-1;border-top-left-radius:-1}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:-1;border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:-1;border-top-right-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:-1}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:-1;border-bottom-right-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:-1}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:24px}.panel-group .panel{margin-bottom:0;border-radius:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid transparent}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid transparent}.panel-default{border-color:transparent}.panel-default>.panel-heading{color:#686868;background-color:none;border-color:transparent}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:transparent}.panel-default>.panel-heading .badge{color:none;background-color:#686868}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:transparent}.panel-primary{border-color:#1b92cb}.panel-primary>.panel-heading{color:#fff;background-color:#1b92cb;border-color:#1b92cb}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#1b92cb}.panel-primary>.panel-heading .badge{color:#1b92cb;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#1b92cb}.panel-success{border-color:#d4d9d9}.panel-success>.panel-heading{color:#d4d9d9;background-color:#686868;border-color:#d4d9d9}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d4d9d9}.panel-success>.panel-heading .badge{color:#686868;background-color:#d4d9d9}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d4d9d9}.panel-info{border-color:#c0b84d}.panel-info>.panel-heading{color:#8e8837;background-color:#e2df80;border-color:#c0b84d}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#c0b84d}.panel-info>.panel-heading .badge{color:#e2df80;background-color:#8e8837}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#c0b84d}.panel-warning{border-color:#B59033}.panel-warning>.panel-heading{color:#B59033;background-color:#F9F3C3;border-color:#B59033}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#B59033}.panel-warning>.panel-heading .badge{color:#F9F3C3;background-color:#B59033}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#B59033}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.close{float:right;font-size:24px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width;}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width: 767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width: 767px){.visible-xs-block{display:block !important;}}@media (max-width: 767px){.visible-xs-inline{display:inline !important;}}@media (max-width: 767px){.visible-xs-inline-block{display:inline-block !important;}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display:block !important;}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display:inline !important;}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display:inline-block !important;}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display:block !important;}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display:inline !important;}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display:inline-block !important;}}@media (min-width: 1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display:block !important;}}@media (min-width: 1200px){.visible-lg-inline{display:inline !important;}}@media (min-width: 1200px){.visible-lg-inline-block{display:inline-block !important;}}@media (max-width: 767px){.hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none !important}}@media (min-width: 1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important;}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important;}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important;}}@media print{.hidden-print{display:none !important}}
-@font-face{font-family:'SourceSansPro';src:asset-url('pui-css-typography/sourcesanspro-light-webfont.eot');src:asset-url('pui-css-typography/sourcesanspro-light-webfont.eot?#iefix') format("embedded-opentype"),asset-url('pui-css-typography/sourcesanspro-light-webfont.woff') format("woff"),asset-url('pui-css-typography/sourcesanspro-light-webfont.ttf') format("truetype"),asset-url('pui-css-typography/sourcesanspro-light-webfont.svg#sourcesanspro-light-webfont') format("svg");font-weight:200;font-style:normal;}@font-face{font-family:'SourceSansPro';src:asset-url('pui-css-typography/sourcesanspro-regular-webfont.eot');src:asset-url('pui-css-typography/sourcesanspro-regular-webfont.eot?#iefix') format("embedded-opentype"),asset-url('pui-css-typography/sourcesanspro-regular-webfont.woff') format("woff"),asset-url('pui-css-typography/sourcesanspro-regular-webfont.ttf') format("truetype"),asset-url('pui-css-typography/sourcesanspro-regular-webfont.svg#sourcesanspro-regular-webfont') format("svg");font-weight:400;font-style:normal;}@font-face{font-family:'SourceSansPro';src:asset-url('pui-css-typography/sourcesanspro-it-webfont.eot');src:asset-url('pui-css-typography/sourcesanspro-it-webfont.eot?#iefix') format("embedded-opentype"),asset-url('pui-css-typography/sourcesanspro-it-webfont.woff') format("woff"),asset-url('pui-css-typography/sourcesanspro-it-webfont.ttf') format("truetype"),asset-url('pui-css-typography/sourcesanspro-it-webfont.svg#sourcesanspro-it-webfont') format("svg");font-weight:400;font-style:italic;}@font-face{font-family:'SourceSansPro';src:asset-url('pui-css-typography/sourcesanspro-bold-webfont.eot');src:asset-url('pui-css-typography/sourcesanspro-bold-webfont.eot?#iefix') format("embedded-opentype"),asset-url('pui-css-typography/sourcesanspro-bold-webfont.woff') format("woff"),asset-url('pui-css-typography/sourcesanspro-bold-webfont.ttf') format("truetype"),asset-url('pui-css-typography/sourcesanspro-bold-webfont.svg#sourcesanspro-bold-webfont') format("svg");font-weight:600;font-style:normal;}@font-face{font-family:'SourceSansPro';src:asset-url('pui-css-typography/sourcesanspro-black-webfont.eot');src:asset-url('pui-css-typography/sourcesanspro-black-webfont.eot?#iefix') format("embedded-opentype"),asset-url('pui-css-typography/sourcesanspro-black-webfont.woff') format("woff"),asset-url('pui-css-typography/sourcesanspro-black-webfont.ttf') format("truetype"),asset-url('pui-css-typography/sourcesanspro-black-webfont.svg#sourcesanspro-black-webfont') format("svg");font-weight:900;font-style:normal;}*{-webkit-font-smoothing:antialiased}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}@media all and (max-width: 768px){h1,.h1,h2,.h2,h3,.h3{margin-top:15px;margin-bottom:10px}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}}h1,.h1{font-weight:400}h2,.h2{font-weight:400}h3,.h3{font-weight:400}h4,.h4{font-weight:400}h5,.h5{font-weight:400}h6,.h6{font-weight:400}small,.type-sm{font-size:14px}.type-xs,.type-terms{font-size:12px}.title{font-size:42px}.em-low{font-weight:200 !important}.em-default{font-weight:400 !important}.em-high{font-weight:600 !important}.em-max{font-weight:900 !important}.em-alt{text-transform:uppercase !important}.type-neutral-1{color:#282828 !important}.type-neutral-2{color:#424242 !important}.type-neutral-3{color:#686868 !important}.type-neutral-4{color:#8d8e8e !important}.type-neutral-5{color:#b4b4b4 !important}.type-neutral-6{color:#c3c5c7 !important}.type-neutral-7{color:#d4d9d9 !important}.type-neutral-8{color:#e0e4e5 !important}.type-neutral-9{color:#ecefef !important}.type-neutral-10{color:#F8F8F8 !important}.type-neutral-11{color:white !important}.type-dark-1{color:#243640 !important}.type-dark-2{color:#3f484f !important}.type-dark-3{color:#525c63 !important}.type-brand-1{color:#025a53 !important}.type-brand-2{color:#00776d !important}.type-brand-3{color:#00a79d !important}.type-brand-4{color:#92d0c0 !important}.type-brand-5{color:#71ffda !important}.type-accent-1{color:#1a739e !important}.type-accent-2{color:#2185c5 !important}.type-accent-3{color:#49a8d5 !important}.type-accent-4{color:#a7c9e0 !important}.type-accent-5{color:#c3f4ff !important}.type-error-1{color:#b31612 !important}.type-error-2{color:#eb3d46 !important}.type-error-3{color:#ff434c !important}.type-error-4{color:#febfc1 !important}.type-warn-1{color:#B59033 !important}.type-warn-2{color:#F1C148 !important}.type-warn-3{color:#F9F3C3 !important}.type-success-1{color:#165450 !important}.type-success-2{color:#AFD79B !important}.type-inverse{color:#e0e4e5 !important}a:hover.type-inverse{color:#025a53 !important}.error-color{color:#ff434c !important}
-.alert{border:none;margin:1.5em 0 0}.alert a.alert-link{color:inherit;text-decoration:underline}.alert .close{text-decoration:none;line-height:.7;text-shadow:none}.alert-success .alert-link:hover{color:#0b2c2a}.alert-info .alert-link:hover{color:#135372}.alert-warning .alert-link:hover{color:#8d7028}.alert-danger,.alert-error{background-color:#febfc1;border-color:#febfc1;color:#b31612}.alert-danger hr,.alert-error hr{border-top-color:#fea6a9}.alert-danger .alert-link,.alert-error .alert-link{color:#85100d}.alert-error .alert-link:hover{color:#85100d}
-.txt-c,table .txt-c,table tr .txt-c,table tr td.txt-c{text-align:center !important}.txt-l,table .txt-l,table tr .txt-l,table tr td.txt-l{text-align:left !important}.txt-r,table .txt-r,table tr .txt-r,table tr td.txt-r{text-align:right !important}.txt-t,table .txt-t,table tr .txt-t,table tr td.txt-t,table tr th.txt-t{vertical-align:top !important}.txt-b,table .txt-b,table tr .txt-b,table tr td.txt-b,table tr th.txt-b{vertical-align:bottom !important}.txt-m,table .txt-m,table tr .txt-m,table tr td.txt-m,table tr th.txt-m{vertical-align:middle !important}
-.avatar{border:4px solid #243640;box-sizing:border-box}.gravatar{display:inline-block;position:relative}.gravatar img{z-index:2;position:absolute;top:0;left:0;right:0;bottom:0}.gravatar i{text-align:center;z-index:1}.gravatar i.overlay{background-color:transparent;z-index:3;position:absolute}.gravatar-sm i{color:#b4b4b4;font-size:20px;line-height:20px;width:20px;height:20px}.gravatar-sm i.highlight{color:#00a79d}.gravatar-sm i.overlay{font-size:10px;color:#fff;right:-30%;bottom:-25%}.gravatar-sm .fa-envelope{text-shadow:1px 0px 1px #b4b4b4,-1px 0px 1px #b4b4b4,0px 1px 1px #b4b4b4,0px 0px 1px #b4b4b4}.gravatar-sm .fa-check{text-shadow:1px 0px 0px #00a79d,-1px 0px 0px #00a79d,0px 1px 0px #00a79d,0px 0px 0px #00a79d}.gravatar-lg{border:3px solid #F8F8F8}.gravatar-lg i{background-color:#fff;color:#F8F8F8;font-size:62px;line-height:80px;width:80px;height:80px}
-a{-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out}a:hover,a:focus{cursor:pointer;text-decoration:none}a.link-text:not(.link-lowlight):hover{text-decoration:underline}.link-lowlight{font-weight:700;color:#a7c9e0}.link-lowlight:hover{color:#2185c5}.link-lowlight-alt{color:#8d8e8e}.link-lowlight-alt:hover{color:#1a739e}.link-inverse{color:#49a8d5}.link-inverse:hover{color:#a7c9e0}
-/*!
- * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:'FontAwesome';src:asset-url('pui-css-iconography/fontawesome-webfont.eot?v=4.3.0');src:asset-url('pui-css-iconography/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'),asset-url('pui-css-iconography/fontawesome-webfont.woff2?v=4.3.0') format('woff2'),asset-url('pui-css-iconography/fontawesome-webfont.woff?v=4.3.0') format('woff'),asset-url('pui-css-iconography/fontawesome-webfont.ttf?v=4.3.0') format('truetype'),asset-url('pui-css-iconography/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal;}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.icon-control{font-size:22px}
-.back-to-top{font:normal normal normal 14px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0);color:white;text-align:center;font-size:20px;bottom:100px;position:fixed;right:100px;display:none;padding-top:13px;height:50px;width:50px;z-index:1000;border:0;border-radius:50%;background:#00a79d;box-shadow:0 0 9px rgba(153,153,153,0.8)}.back-to-top:before{content:"\f062"}.back-to-top:hover{background:#00776d;color:white}
-.bg-cloud{background:#F8F8F8 asset-url('pui-css-backgrounds/gray-cloud.png') no-repeat 50% 50%}.bg-glow{background:-webkit-radial-gradient(ellipse at 50% bottom, #4b6475 0%, #243640 60%);background:radial-gradient(ellipse at 50% bottom, #4b6475 0%, #243640 60%)}.bg-full-bleed{background-image:asset-url('pui-css-backgrounds/aboutus-hero.jpg');background-repeat:no-repeat;background-position:center center;background-size:cover}
-.btn{font-weight:900;padding:5px 15px}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;box-shadow:0 3px 0 rgba(0,0,0,0.14)}.btn-default{color:#2185c5;background-color:rgba(255,255,255,0.4);border:none;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active{color:#2185c5;background-color:white;outline:none;border-color:none}.open .btn-default.dropdown-toggle{color:#2185c5;background-color:white}.btn-default:active,.btn-default.active{background-image:none}.open .btn-default.dropdown-toggle{background-image:none}.btn-default.disabled,.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled:active,.btn-default.disabled.active,.btn-default[disabled],.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled]:active,.btn-default[disabled].active,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default.active{background-color:#ecefef;color:#b4b4b4;border-color:none}.btn-default-alt{color:#2185c5;background-color:white;border:1px solid rgba(0,0,0,0.15);-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out;box-shadow:0 3px 0 rgba(0,0,0,0.07)}.btn-default-alt:hover,.btn-default-alt:focus,.btn-default-alt:active,.btn-default-alt.active{color:#2185c5;background-color:white;outline:none;border-color:1px solid rgba(0,0,0,0.15)}.open .btn-default-alt.dropdown-toggle{color:#2185c5;background-color:white}.btn-default-alt:active,.btn-default-alt.active{background-image:none}.open .btn-default-alt.dropdown-toggle{background-image:none}.btn-default-alt.disabled,.btn-default-alt.disabled:hover,.btn-default-alt.disabled:focus,.btn-default-alt.disabled:active,.btn-default-alt.disabled.active,.btn-default-alt[disabled],.btn-default-alt[disabled]:hover,.btn-default-alt[disabled]:focus,.btn-default-alt[disabled]:active,.btn-default-alt[disabled].active,fieldset[disabled] .btn-default-alt,fieldset[disabled] .btn-default-alt:hover,fieldset[disabled] .btn-default-alt:focus,fieldset[disabled] .btn-default-alt:active,fieldset[disabled] .btn-default-alt.active{background-color:#ecefef;color:#b4b4b4;border-color:1px solid rgba(0,0,0,0.15)}.btn-default-alt:hover,.btn-default-alt:focus,.btn-default-alt:active,.btn-default-alt.active{box-shadow:0 3px 0 rgba(0,0,0,0.14)}.btn-primary{color:#2185c5;background-color:white;border:none;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out;box-shadow:0 3px 0 rgba(0,0,0,0.07)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active{color:#2185c5;background-color:white;outline:none;border-color:none}.open .btn-primary.dropdown-toggle{color:#2185c5;background-color:white}.btn-primary:active,.btn-primary.active{background-image:none}.open .btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active,.btn-primary[disabled],.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled]:active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary.active{background-color:#ecefef;color:#b4b4b4;border-color:none}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active{box-shadow:0 3px 0 rgba(0,0,0,0.14)}.btn-highlight{color:white;background-color:#2185c5;border:none;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out;box-shadow:0 3px 0 rgba(0,0,0,0.07)}.btn-highlight:hover,.btn-highlight:focus,.btn-highlight:active,.btn-highlight.active{color:white;background-color:#1a739e;outline:none;border-color:none}.open .btn-highlight.dropdown-toggle{color:white;background-color:#1a739e}.btn-highlight:active,.btn-highlight.active{background-image:none}.open .btn-highlight.dropdown-toggle{background-image:none}.btn-highlight.disabled,.btn-highlight.disabled:hover,.btn-highlight.disabled:focus,.btn-highlight.disabled:active,.btn-highlight.disabled.active,.btn-highlight[disabled],.btn-highlight[disabled]:hover,.btn-highlight[disabled]:focus,.btn-highlight[disabled]:active,.btn-highlight[disabled].active,fieldset[disabled] .btn-highlight,fieldset[disabled] .btn-highlight:hover,fieldset[disabled] .btn-highlight:focus,fieldset[disabled] .btn-highlight:active,fieldset[disabled] .btn-highlight.active{background-color:#ecefef;color:#b4b4b4;border-color:none}.btn-highlight:hover,.btn-highlight:focus,.btn-highlight:active,.btn-highlight.active{box-shadow:0 3px 0 rgba(0,0,0,0.14)}.btn-highlight-alt{color:white;background-color:#00a79d;border:none;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out;box-shadow:0 3px 0 rgba(0,0,0,0.07)}.btn-highlight-alt:hover,.btn-highlight-alt:focus,.btn-highlight-alt:active,.btn-highlight-alt.active{color:white;background-color:#00776d;outline:none;border-color:none}.open .btn-highlight-alt.dropdown-toggle{color:white;background-color:#00776d}.btn-highlight-alt:active,.btn-highlight-alt.active{background-image:none}.open .btn-highlight-alt.dropdown-toggle{background-image:none}.btn-highlight-alt.disabled,.btn-highlight-alt.disabled:hover,.btn-highlight-alt.disabled:focus,.btn-highlight-alt.disabled:active,.btn-highlight-alt.disabled.active,.btn-highlight-alt[disabled],.btn-highlight-alt[disabled]:hover,.btn-highlight-alt[disabled]:focus,.btn-highlight-alt[disabled]:active,.btn-highlight-alt[disabled].active,fieldset[disabled] .btn-highlight-alt,fieldset[disabled] .btn-highlight-alt:hover,fieldset[disabled] .btn-highlight-alt:focus,fieldset[disabled] .btn-highlight-alt:active,fieldset[disabled] .btn-highlight-alt.active{background-color:#ecefef;color:#b4b4b4;border-color:none}.btn-highlight-alt:hover,.btn-highlight-alt:focus,.btn-highlight-alt:active,.btn-highlight-alt.active{box-shadow:0 3px 0 rgba(0,0,0,0.14)}.btn-lowlight{color:#686868;background-color:transparent;border:none;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out}.btn-lowlight:hover,.btn-lowlight:focus,.btn-lowlight:active,.btn-lowlight.active{color:#686868;background-color:rgba(255,255,255,0.6);outline:none;border-color:none}.open .btn-lowlight.dropdown-toggle{color:#686868;background-color:rgba(255,255,255,0.6)}.btn-lowlight:active,.btn-lowlight.active{background-image:none}.open .btn-lowlight.dropdown-toggle{background-image:none}.btn-lowlight.disabled,.btn-lowlight.disabled:hover,.btn-lowlight.disabled:focus,.btn-lowlight.disabled:active,.btn-lowlight.disabled.active,.btn-lowlight[disabled],.btn-lowlight[disabled]:hover,.btn-lowlight[disabled]:focus,.btn-lowlight[disabled]:active,.btn-lowlight[disabled].active,fieldset[disabled] .btn-lowlight,fieldset[disabled] .btn-lowlight:hover,fieldset[disabled] .btn-lowlight:focus,fieldset[disabled] .btn-lowlight:active,fieldset[disabled] .btn-lowlight.active{background-color:#ecefef;color:#b4b4b4;border-color:none}.btn-danger{color:white;background-color:#ff434c;border:none;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out;box-shadow:0 3px 0 rgba(0,0,0,0.07)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active{color:white;background-color:#eb3d46;outline:none;border-color:none}.open .btn-danger.dropdown-toggle{color:white;background-color:#eb3d46}.btn-danger:active,.btn-danger.active{background-image:none}.open .btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled:active,.btn-danger.disabled.active,.btn-danger[disabled],.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled]:active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger.active{background-color:#ecefef;color:#b4b4b4;border-color:none}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active{box-shadow:0 3px 0 rgba(0,0,0,0.14)}.btn-lg{padding:10px 26px;font-size:19px;line-height:1.33;border-radius:3px}
-.pre-unstyled{background-color:transparent;border:none;border-radius:0;margin:0;padding:0;color:inherit}.pre-scrollable{overflow-y:auto}.inline-dark{background-color:#243640;border-radius:3px;color:#F1C148}.terminal{background-color:#d4d9d9;padding:6px 10px 12px 10px;border-radius:6px;box-shadow:0 2px 0 rgba(0,0,0,0.3)}.terminal::before{content:'\F111 \0000a0 \0000a0 \0000a0 \0000a0 \F111 \0000a0 \0000a0 \0000a0 \0000a0 \F111';color:#8d8e8e;font-size:13px;font-family:FontAwesome}.terminal pre[class*="language-"]{margin:2px 0 0 0;border-radius:3px;height:320px;overflow-y:auto}
-.when-collapsed{display:none}.when-expanded{display:block}.when-collapsed-inline{display:none}.when-expanded-inline{display:inline}.collapsed .when-collapsed{display:block}.collapsed .when-expanded{display:none}.collapsed .when-collapsed-inline{display:inline}.collapsed .when-expanded-inline{display:none}.collapse-trigger{cursor:pointer}.collapse-trigger .collapse-title{display:inline-block}.collapse-trigger .collapse-icon{display:inline-block;width:15px;color:#686868;margin-right:5px}.panel-heading-accordion,.panel-heading-accordion-large{position:relative;padding:10px 20px;margin-bottom:0px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.panel-body-accordion,.panel-body-accordion-divider,.panel-divider>.panel-heading+.panel-collapse>.panel-body{margin:0px;padding:30px 20px}.panel-heading-accordion-large{padding:25px 20px 25px 20px}.panel-body-accordion-divider,.panel-divider>.panel-heading+.panel-collapse>.panel-body{border-top:2px solid rgba(0,0,0,0.07)}.panel-title a{display:block}
-.bg-neutral-1{background-color:#282828 !important}.bg-neutral-2{background-color:#424242 !important}.bg-neutral-3{background-color:#686868 !important}.bg-neutral-4{background-color:#8d8e8e !important}.bg-neutral-5{background-color:#b4b4b4 !important}.bg-neutral-6{background-color:#c3c5c7 !important}.bg-neutral-7{background-color:#d4d9d9 !important}.bg-neutral-8{background-color:#e0e4e5 !important}.bg-neutral-9{background-color:#ecefef !important}.bg-neutral-10{background-color:#F8F8F8 !important}.bg-neutral-11{background-color:white !important}.bg-brand-1{background-color:#025a53 !important}.bg-brand-2{background-color:#00776d !important}.bg-brand-3{background-color:#00a79d !important}.bg-brand-4{background-color:#92d0c0 !important}.bg-brand-5{background-color:#71ffda !important}.bg-accent-1{background-color:#1a739e !important}.bg-accent-2{background-color:#2185c5 !important}.bg-accent-3{background-color:#49a8d5 !important}.bg-accent-4{background-color:#a7c9e0 !important}.bg-accent-5{background-color:#c3f4ff !important}.bg-dark-1{background-color:#243640 !important}.bg-dark-2{background-color:#3f484f !important}.bg-dark-3{background-color:#525c63 !important}.bg-error-1{background-color:#b31612 !important}.bg-error-2{background-color:#eb3d46 !important}.bg-error-3{background-color:#ff434c !important}.bg-error-4{background-color:#febfc1 !important}.bg-warn-1{background-color:#B59033 !important}.bg-warn-2{background-color:#F1C148 !important}.bg-warn-3{background-color:#F9F3C3 !important}.bg-success-1{background-color:#165450 !important}.bg-success-2{background-color:#AFD79B !important}.bg-glow-1{background-color:rgba(255,255,255,0.1) !important}.bg-glow-2{background-color:rgba(255,255,255,0.2) !important}.bg-glow-3{background-color:rgba(255,255,255,0.4) !important}.bg-glow-4{background-color:rgba(255,255,255,0.6) !important}.bg-glow-5{background-color:white !important}.bg-shadow-1{background-color:rgba(0,0,0,0.3) !important}.bg-shadow-2{background-color:rgba(0,0,0,0.14) !important}.bg-shadow-3{background-color:rgba(0,0,0,0.07) !important}.bg-shadow-4{background-color:rgba(0,0,0,0.035) !important}
-@-webkit-keyframes loadingPulse{0%{opacity:0}50%{opacity:1}100%{opacity:0}}@keyframes loadingPulse{0%{opacity:0}50%{opacity:1}100%{opacity:0}}#app_status{position:relative}#app_status #svg{border-radius:50%;box-shadow:0px 4px 0px rgba(0,0,0,0.08);background-color:#F8F8F8}#app_status #svg circle{fill:#F8F8F8;stroke:#F8F8F8;stroke-dashoffset:0;-webkit-transition:stroke-dashoffset 1s cubic-bezier(0.55, 0.085, 0.68, 0.53);transition:stroke-dashoffset 1s cubic-bezier(0.55, 0.085, 0.68, 0.53);stroke-width:10px}#app_status .content{position:absolute;top:116px;left:13px;width:325px}#app_status .content .name{text-align:center}#app_status .content .started-controls{margin-top:20px;width:150px;position:absolute;left:87px;opacity:1;visibility:visible;-webkit-transition:opacity 0.5s ease-out;transition:opacity 0.5s ease-out}#app_status .content .stopped-controls{margin-top:20px;width:58px;opacity:1;visibility:visible;position:absolute;left:134px;-webkit-transition:opacity 0.5s ease-out;transition:opacity 0.5s ease-out}#app_status .content .stopping-message,#app_status .content .starting-message,#app_status .content .scaling-message{position:absolute;opacity:0;visibility:hidden;left:120px;margin-top:20px}#app_status .content .just-stopped-message,#app_status .content .just-started-message{position:absolute;opacity:0;visibility:hidden;left:130px;margin-top:-5px;color:#b4b4b4}#app_status.stopped .started-controls{opacity:0;visibility:hidden}#app_status.stopped #svg circle{stroke:#b4b4b4;stroke-dashoffset:0}#app_status.started .stopped-controls{opacity:0;visibility:hidden}#app_status.started #svg circle{stroke:#00a79d;stroke-dashoffset:0}#app_status.crashing .stopped-controls{opacity:0;visibility:hidden}#app_status.crashing #svg circle{stroke:#ff434c;stroke-dashoffset:0}#app_status.transitioning .started-controls,#app_status.transitioning .stopped-controls{opacity:0;visibility:hidden}#app_status.begin-transitioning #svg circle{stroke-dashoffset:-1070}#app_status.starting .starting-message{opacity:1;visibility:visible}#app_status.starting.begin-transitioning .starting-message{-webkit-transition:opacity 1000ms ease-out 600ms;transition:opacity 1000ms ease-out 600ms;-webkit-animation:loadingPulse 1.4s ease-in-out 600ms infinite;animation:loadingPulse 1.4s ease-in-out 600ms infinite}#app_status.stopping .stopping-message{opacity:1;visibility:visible}#app_status.stopping.begin-transitioning .stopping-message{-webkit-transition:opacity 1000ms ease-out 600ms;transition:opacity 1000ms ease-out 600ms;-webkit-animation:loadingPulse 1.4s ease-in-out 600ms infinite;animation:loadingPulse 1.4s ease-in-out 600ms infinite}#app_status.restarting .starting-message{opacity:1;visibility:visible}#app_status.restarting.begin-transitioning .starting-message{-webkit-transition:opacity 1000ms ease-out 600ms;transition:opacity 1000ms ease-out 600ms;-webkit-animation:loadingPulse 1.4s ease-in-out 600ms infinite;animation:loadingPulse 1.4s ease-in-out 600ms infinite}#app_status.scaling .scaling-message{opacity:1;visibility:visible}#app_status.scaling.scaling-with-restage.begin-transitioning .scaling-message{-webkit-transition:opacity 1000ms ease-out 600ms;transition:opacity 1000ms ease-out 600ms;-webkit-animation:loadingPulse 1.4s ease-in-out 600ms infinite;animation:loadingPulse 1.4s ease-in-out 600ms infinite}#app_status.scaling.scaling-without-restage .scaling-message{-webkit-transition:opacity 1000ms ease-out 600ms;transition:opacity 1000ms ease-out 600ms;-webkit-animation:loadingPulse 1.4s ease-in-out 600ms infinite;animation:loadingPulse 1.4s ease-in-out 600ms infinite}#app_status.scaling.scaling-without-restage #svg circle{stroke-dashoffset:0}#app_status.just-started .just-started-message{-webkit-transition:opacity 0.5s ease-out;transition:opacity 0.5s ease-out;opacity:1;visibility:visible}#app_status.just-stopped .just-stopped-message{-webkit-transition:opacity 0.5s ease-out;transition:opacity 0.5s ease-out;opacity:1;visibility:visible}.health{width:40px;position:relative}.health form{margin:0}.health input:focus{outline:none}.health .value{position:absolute;top:0px;left:0px;line-height:40px;width:40px;font-size:10px;text-align:center;text-transform:uppercase;letter-spacing:-1px;z-index:2}.health .indicator{background-position:center;background-repeat:no-repeat;background-color:transparent;border:none;width:40px;height:40px;box-shadow:none;margin:0;display:inline-block;vertical-align:middle;position:relative;z-index:1}.health.editable:hover:before{content:"\f04d";font-family:FontAwesome;color:#2185c5;position:absolute;top:50%;left:50%;cursor:pointer;z-index:0;font-size:12px;margin-top:-8px;margin-left:-5px}.health form{position:relative}.health form:before{content:"";height:100%;width:100%;position:absolute;border-radius:300px;border:7px solid #d4d9d9;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.health.health-indicator-large form:before{border-width:12px}.health.running form:before{border-color:#00a79d}.health.stopped form:before{border-color:#d4d9d9}.health.stopped.editable:hover:before{content:"\f04b";font-family:FontAwesome;font-size:15px;margin-top:-11px;margin-left:-4px}.health.warning_0 form:before{border-color:#b31612}.health.warning_25 form:before{border-top-color:#b31612}.health.warning_50 form:before{border-top-color:#b31612;border-right-color:#b31612}.health.warning_75 form:before{border-color:#b31612 #b31612 #b31612 #d4d9d9}.health.editable:hover .value{display:none}.health-indicator-large{width:64px;height:64px;margin:auto;font-size:14px;width:64px}.health-indicator-large.editable:hover:before{font-size:20px;margin-top:-14px;margin-left:-8px}.health-indicator-large.stopped.editable:hover:before{font-size:20px;margin-top:-14px;margin-left:-6px}.health-indicator-large .value{line-height:64px;width:64px;font-size:14px}.health-indicator-large .indicator{width:64px;height:64px}.scale-svg .instances-column:hover,.scale-svg .selected-group{-webkit-filter:none;filter:none}.scale-svg .instances-gradient-stop-1{stop-color:#ecefef}.scale-svg .instances-gradient-stop-2{stop-color:rgba(255,255,255,0)}.toggle .toggle-show{display:block}.toggle .toggle-edit{display:none}.toggle.edit .toggle-show{display:none}.toggle.edit .toggle-edit{display:block}.state-toggle .state-content-default{display:block}.state-toggle .state-content-secondary{display:none}.state-toggle.state-secondary .state-content-default{display:none}.state-toggle.state-secondary .state-content-secondary{display:block}@-webkit-keyframes loadingFade{0%{opacity:0.2}50%{opacity:1}100%{opacity:0.2}}@keyframes loadingFade{0%{opacity:0.2}50%{opacity:1}100%{opacity:0.2}}.traffic-lights{margin:0;line-height:1.3em}.traffic-lights i{margin-right:7px}.traffic-lights .fa{font-size:12px}.traffic-lights .off i{opacity:0.4}.traffic-lights .green-light i{-webkit-transition:opacity 1500ms ease-out;transition:opacity 1500ms ease-out;color:#00a79d}.traffic-lights .gray-light i{-webkit-transition:opacity 1500ms ease-out;transition:opacity 1500ms ease-out;color:#8d8e8e}.traffic-lights .red-light i{-webkit-transition:opacity 1500ms ease-out;transition:opacity 1500ms ease-out;color:#ff434c}.traffic-lights .loading-red{-webkit-animation:loadingFade 2s ease-in-out infinite;animation:loadingFade 2s ease-in-out infinite}.traffic-lights .loading-green{-webkit-animation:loadingFade 2s ease-in-out infinite;animation:loadingFade 2s ease-in-out infinite}.traffic-lights .loading-gray{-webkit-animation:loadingFade 2s ease-in-out 1s infinite;animation:loadingFade 2s ease-in-out 1s infinite}.no-js .invisible-no-js{visibility:hidden}
-.divider-alternate-1{border:1px solid rgba(0,0,0,0.1);border-width:1px 0 0 0}.divider-alternate-2{border:3px solid rgba(0,0,0,0.1);border-width:3px 0 0 0}.divider-1{border:1px solid rgba(255,255,255,0.1);border-width:1px 0 0 0}.divider-2{border:3px solid rgba(255,255,255,0.1);border-width:3px 0 0 0}.divider-alternate-2,.divider-2{margin:4vw 0}
-.dropdown-menu{box-shadow:0 2px 2px rgba(0,0,0,0.15)}.dropdown-notifications-none{width:200px;text-align:center;padding:20px}.dropdown-notifications-none .fa{font-size:42px;padding-bottom:7px}.dropdown-notifications-badge{position:absolute;border-radius:1000em;background-color:#00a79d;text-align:center;color:white;font-size:0.75em;padding:0 4px;height:14px;line-height:14px;top:6px;right:9px}.dropdown-notifications-alert{position:absolute;top:-6px;right:6px}.dropdown-notifications .caret{display:none}.dropdown-notifications-list li a{padding-bottom:10px}.dropdown-notifications-list li:last-child a{padding-bottom:0}
-.type-ellipsis-1-line{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.type-ellipsis-2-lines,.type-ellipsis-3-lines{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.type-ellipsis-3-lines{-webkit-line-clamp:3}
-
-.form-group abbr{float:right;margin-left:5px;border-bottom:0}.form-group [class*="col"].control-label abbr{float:none;margin-right:2px}.unstyled{background-color:transparent;outline:none;border:none}label{font-weight:400;color:#686868}::-webkit-input-placeholder{font-weight:400}:-moz-placeholder{font-weight:400}::-moz-placeholder{font-weight:400}:-ms-input-placeholder{font-weight:400}.number-fancy{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-right:36px}.number-fancy .buttons{position:absolute;top:0px;right:0px;height:100%}.number-fancy .buttons li{-webkit-transition:all 150ms ease-out;transition:all 150ms ease-out;font-size:12px;background-color:white;border:none;width:30px;height:50%;color:#a7c9e0;text-align:center;line-height:20px}.number-fancy .buttons li:hover{color:#2185c5;background-color:#ecefef;cursor:pointer}.number-fancy .buttons li.btn-minus{border-bottom-right-radius:4px}.number-fancy .buttons li.btn-plus{border-top-right-radius:4px}.number-fancy input{height:32px;margin:5px;padding:0 5px;display:inline;border-radius:4px}.number-fancy input:hover{background-color:#ecefef}.form-group-search{position:relative}.form-group-search i{position:absolute;left:12px;top:12px}.form-group-search input{padding-left:34px}.form-control{box-shadow:none;padding:8px 14px}.form-control[readonly]{background-color:#eeeeee}.fancy-form-element,.number-fancy,.select-fancy{box-shadow:0 3px 0 #d4d9d9;background-color:white;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out;border-radius:4px;position:relative}.fancy-form-element:hover,.number-fancy:hover,.select-fancy:hover{box-shadow:0 3px 0 #b4b4b4;cursor:pointer}.fancy-form-element .form-control,.number-fancy .form-control,.select-fancy .form-control{border:none;box-shadow:none;background:transparent;background-image:none;-webkit-appearance:none;-webkit-transition:all 150ms ease-out;transition:all 150ms ease-out;font-size:16px;font-weight:900}.fancy-form-element .form-control.has-error,.number-fancy .form-control.has-error,.select-fancy .form-control.has-error{border-radius:3px;border:1px solid #ff434c}.fancy-form-element-disabled{font-size:16px;font-weight:900;height:30px;margin-top:7px;margin-left:7px}.select-fancy:after{z-index:2;content:"\f107";font-family:FontAwesome;position:absolute;right:10px;top:4px;font-size:22px;color:#a7c9e0;-webkit-transition:all 150ms ease-out;transition:all 150ms ease-out}.select-fancy:hover:after,.select-fancy:hover select{color:#2185c5}.select-fancy select{-moz-appearance:window;position:relative;z-index:3;padding:5px 8px;width:100%;cursor:pointer}.select-fancy select:focus{outline:none}.select-fancy input{height:32px;margin:5px;width:75%;padding:0 5px;display:inline;border-radius:4px}.select-fancy input:hover{background-color:#ecefef}input[type="radio"]{margin-top:2px}.form-inline.inline-labels .form-group input,.form-inline.inline-labels .form-group select{width:auto !important}.has-success{position:relative}.has-success:before{content:"\f00c";display:block;position:absolute;bottom:0;right:0;height:42px;width:42px;line-height:42px;border-top-right-radius:3px;border-bottom-right-radius:3px;color:#00a79d;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;text-align:center}.has-success .control-label{color:#686868}.has-error .help-block,.has-error .help-inline{font-size:14px}.radio,.checkbox{padding-left:20px}.radio label,.checkbox label{padding-left:0}.form-control:focus{box-shadow:none}.help-inline{display:block;text-align:left;color:#febfc1;padding:5px 0 0 16px;text-transform:capitalize}.input-sm{height:27px;padding:2px 10px;font-size:14px;line-height:1.5;border-radius:3px}select.input-sm{height:27px;line-height:27px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:48px;padding:10px 26px;font-size:19px;line-height:1.33;border-radius:3px}select.input-lg{height:48px;line-height:48px}textarea.input-lg,select[multiple].input-lg{height:auto}p.form-control-static{color:#686868}.form-control.auto-select{cursor:pointer}.form-contenteditable{position:relative}.form-contenteditable .form-contenteditable-hint{display:none}.form-contenteditable label{padding:5px;cursor:pointer;margin-bottom:0}.form-contenteditable input.form-control{background-color:transparent;outline:none;box-shadow:none;text-align:center;margin:0;padding:0px;border:1px solid transparent;border-radius:3px;text-overflow:ellipsis;overflow:hidden;width:100%;line-height:1.2;height:auto}.form-contenteditable .showing-text{margin:0}.form-contenteditable .saving-text{display:none}.form-contenteditable.editing .form-contenteditable-hint{display:none}.form-contenteditable:hover .form-contenteditable-hint{display:block}.form-contenteditable.saving:hover .form-contenteditable-hint{display:none}.form-contenteditable:hover .showing-text{display:none}.form-contenteditable.saving .saving-text{display:block}.form-contenteditable.saving .showing-text{display:none}.toggle-switch{position:absolute;visibility:hidden}.toggle-switch+label{position:relative;display:block;background-color:#d4d9d9;-webkit-transition:background 0.4s;transition:background 0.4s;cursor:pointer;outline:none;text-indent:-99999px}.toggle-switch+label:after{position:absolute;top:4px;left:4px;bottom:4px;display:block;background-color:white;-webkit-transition:margin 0.4s,background 0.4s;transition:margin 0.4s,background 0.4s;content:""}.toggle-switch:checked+label{background-color:#2185c5}.toggle-switch[disabled]+label{opacity:0.5;filter:alpha(opacity=50)}.toggle-switch.toggle-switch-lg+label{width:80px;height:40px;border-radius:40px}.toggle-switch.toggle-switch-lg+label:after{width:30px;border-radius:15px}.toggle-switch.toggle-switch-lg:checked+label:after{margin-left:42px}
-.row-gutter-sm{margin-left:-2px;margin-right:-2px}.row-gutter-sm>[class^="col"]{padding-left:2px;padding-right:2px}.row-gutter-md{margin-left:-5px;margin-right:-5px}.row-gutter-md>[class^="col"]{padding-left:5px;padding-right:5px}@media (min-width: 1800px){.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-13,.col-xl-14,.col-xl-15,.col-xl-16,.col-xl-17,.col-xl-18,.col-xl-19,.col-xl-20,.col-xl-21,.col-xl-22,.col-xl-23,.col-xl-24{float:left}.col-xl-1{width:4.16667%}.col-xl-2{width:8.33333%}.col-xl-3{width:12.5%}.col-xl-4{width:16.66667%}.col-xl-5{width:20.83333%}.col-xl-6{width:25%}.col-xl-7{width:29.16667%}.col-xl-8{width:33.33333%}.col-xl-9{width:37.5%}.col-xl-10{width:41.66667%}.col-xl-11{width:45.83333%}.col-xl-12{width:50%}.col-xl-13{width:54.16667%}.col-xl-14{width:58.33333%}.col-xl-15{width:62.5%}.col-xl-16{width:66.66667%}.col-xl-17{width:70.83333%}.col-xl-18{width:75%}.col-xl-19{width:79.16667%}.col-xl-20{width:83.33333%}.col-xl-21{width:87.5%}.col-xl-22{width:91.66667%}.col-xl-23{width:95.83333%}.col-xl-24{width:100%}.col-xl-pull-0{right:auto}.col-xl-pull-1{right:4.16667%}.col-xl-pull-2{right:8.33333%}.col-xl-pull-3{right:12.5%}.col-xl-pull-4{right:16.66667%}.col-xl-pull-5{right:20.83333%}.col-xl-pull-6{right:25%}.col-xl-pull-7{right:29.16667%}.col-xl-pull-8{right:33.33333%}.col-xl-pull-9{right:37.5%}.col-xl-pull-10{right:41.66667%}.col-xl-pull-11{right:45.83333%}.col-xl-pull-12{right:50%}.col-xl-pull-13{right:54.16667%}.col-xl-pull-14{right:58.33333%}.col-xl-pull-15{right:62.5%}.col-xl-pull-16{right:66.66667%}.col-xl-pull-17{right:70.83333%}.col-xl-pull-18{right:75%}.col-xl-pull-19{right:79.16667%}.col-xl-pull-20{right:83.33333%}.col-xl-pull-21{right:87.5%}.col-xl-pull-22{right:91.66667%}.col-xl-pull-23{right:95.83333%}.col-xl-pull-24{right:100%}.col-xl-push-0{left:auto}.col-xl-push-1{left:4.16667%}.col-xl-push-2{left:8.33333%}.col-xl-push-3{left:12.5%}.col-xl-push-4{left:16.66667%}.col-xl-push-5{left:20.83333%}.col-xl-push-6{left:25%}.col-xl-push-7{left:29.16667%}.col-xl-push-8{left:33.33333%}.col-xl-push-9{left:37.5%}.col-xl-push-10{left:41.66667%}.col-xl-push-11{left:45.83333%}.col-xl-push-12{left:50%}.col-xl-push-13{left:54.16667%}.col-xl-push-14{left:58.33333%}.col-xl-push-15{left:62.5%}.col-xl-push-16{left:66.66667%}.col-xl-push-17{left:70.83333%}.col-xl-push-18{left:75%}.col-xl-push-19{left:79.16667%}.col-xl-push-20{left:83.33333%}.col-xl-push-21{left:87.5%}.col-xl-push-22{left:91.66667%}.col-xl-push-23{left:95.83333%}.col-xl-push-24{left:100%}.col-xl-offset-0{margin-left:0%}.col-xl-offset-1{margin-left:4.16667%}.col-xl-offset-2{margin-left:8.33333%}.col-xl-offset-3{margin-left:12.5%}.col-xl-offset-4{margin-left:16.66667%}.col-xl-offset-5{margin-left:20.83333%}.col-xl-offset-6{margin-left:25%}.col-xl-offset-7{margin-left:29.16667%}.col-xl-offset-8{margin-left:33.33333%}.col-xl-offset-9{margin-left:37.5%}.col-xl-offset-10{margin-left:41.66667%}.col-xl-offset-11{margin-left:45.83333%}.col-xl-offset-12{margin-left:50%}.col-xl-offset-13{margin-left:54.16667%}.col-xl-offset-14{margin-left:58.33333%}.col-xl-offset-15{margin-left:62.5%}.col-xl-offset-16{margin-left:66.66667%}.col-xl-offset-17{margin-left:70.83333%}.col-xl-offset-18{margin-left:75%}.col-xl-offset-19{margin-left:79.16667%}.col-xl-offset-20{margin-left:83.33333%}.col-xl-offset-21{margin-left:87.5%}.col-xl-offset-22{margin-left:91.66667%}.col-xl-offset-23{margin-left:95.83333%}.col-xl-offset-24{margin-left:100%}}
-[hoverable]:hover,[hoverable].clicked{background-color:#ecefef}[hoverable]:hover .hovered,[hoverable].clicked .hovered{visibility:visible}[hoverable] .hovered{visibility:hidden;float:right}
-.svg-responsive{display:inline-block;position:relative;width:100%;padding-bottom:100%;vertical-align:middle;overflow:hidden}.svg-content{display:inline-block;position:absolute;top:0;left:0}
-.label{padding:0.2em 0.6em;border-radius:3px;text-transform:uppercase}.label-removable{padding:4px 7px;border-radius:3px;background-color:#00a79d;color:white;font-weight:600}.label-removable .close-btn{margin-left:15px;color:rgba(255,255,255,0.6)}.label-removable .close-btn:hover{color:white;text-decoration:none}
-.list-group,.list-group-inverse{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:transparent;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eeeeee;color:#999999;cursor:false}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#999999}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#1b92cb;border-color:#1b92cb}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#bce3f6}.list-group-item-success{color:#d4d9d9;background-color:#686868}a.list-group-item-success{color:#d4d9d9}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#d4d9d9;background-color:#5b5b5b}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#d4d9d9;border-color:#d4d9d9}.list-group-item-info{color:#8e8837;background-color:#e2df80}a.list-group-item-info{color:#8e8837}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#8e8837;background-color:#ddda6b}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#8e8837;border-color:#8e8837}.list-group-item-warning{color:#B59033;background-color:#F9F3C3}a.list-group-item-warning{color:#B59033}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#B59033;background-color:#f7eeac}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#B59033;border-color:#B59033}.list-group-item-danger{color:#ff434c;background-color:#febfc1}a.list-group-item-danger{color:#ff434c}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#ff434c;background-color:#fea6a9}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#ff434c;border-color:#ff434c}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.list-unstyled,.list-cards,.list-timeline{padding-left:0;list-style:none}.list-inline,.list-inline-divider,.list-breadcrumb,.list-vertical-divider,.list-vertical-divider-2,.list-steps{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li,.list-inline-divider>li,.list-breadcrumb>li,.list-vertical-divider>li,.list-vertical-divider-2>li,.list-steps>li{display:inline-block;padding-left:5px;padding-right:5px}.list-inline,.list-inline-divider,.list-breadcrumb,.list-vertical-divider,.list-vertical-divider-2,.list-steps{font-size:0}.list-inline>li,.list-inline-divider>li,.list-breadcrumb>li,.list-vertical-divider>li,.list-vertical-divider-2>li,.list-steps>li{font-size:16px}.list-unordered{padding-left:0}.list-unordered>li{margin-left:17px}.list-inline-divider>li{line-height:1em}.list-inline-divider>li:not(:first-child){border-left:1px solid #b4b4b4}.list-inline-divider-light>li{line-height:1em}.list-inline-divider-light>li:not(:first-child){border-left:1px solid #c3c5c7}.list-breadcrumb{margin-bottom:0;font-family:"Consolas", "Menlo", "Monaco", "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, serif}.list-breadcrumb>li{font-size:0;padding-left:0;padding-right:0}.list-breadcrumb>li a,.list-breadcrumb>li.current span{font-size:14px;display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.list-breadcrumb>li.current span{color:#9faaad}.list-breadcrumb>li:before{font-size:16px;color:#9faaad;content:">";vertical-align:middle;padding-right:5px;padding-left:5px}.list-breadcrumb>li:first-child:before{content:""}.list-group-inverse>li{border-color:#282828}.list-group,.list-group-inverse,.list-group>li,.list-group-inverse>li{border-width:1px 0}.list-group-item{padding-right:5px}.list-group-item.new{-webkit-animation:new-list-group-item-grow .3s cubic-bezier(0.895, 0.03, 0.685, 0.22) forwards,new-list-group-item-fade .5s ease-in .15s forwards;-moz-animation:new-list-group-item-grow .3s cubic-bezier(0.895, 0.03, 0.685, 0.22) forwards,new-list-group-item-fade .5s ease-in .15s forwards}@-webkit-keyframes new-list-group-item-fade{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes new-list-group-item-grow{0%{max-height:0;padding-top:0px;padding-bottom:0px}100%{max-height:100px;padding-top:10px;padding-bottom:10px}}@keyframes new-list-group-item-fade{from{opacity:0}to{opacity:1}}@keyframes new-list-group-item-grow{from{max-height:0;padding:0px 15px}to{max-height:100px;padding:10px 15px}}.list-notitle li:first-child{border-top:0}.list-notitle li:last-child{border-bottom:0}.event-list .list-group-item{padding-left:0;padding-right:0}.event-list .media-left{padding-left:0;padding-right:0}.event-list .event-title{margin-bottom:2px;color:#424242}.event-list .event-user,.event-list .event-timestamp{color:#8d8e8e;font-size:13px}.event-list .event-icon{font-family:'FontAwesome';font-size:22px;width:90px;text-align:center}.event-list .started .event-icon:after{color:#00a79d;content:'\f04b'}.event-list .stopped .event-icon:after{color:#b4b4b4;content:'\f04d'}.event-list .updated .event-icon:after{color:#00a79d;content:'\f01b'}.event-list .scaled .event-icon:after{color:#00a79d;content:'\f0e4'}.event-list .crashed .event-icon:after{color:#ff434c;content:'\f06a'}.event-list .created .event-icon:after{color:#00a79d;content:'\f135'}.event-list .renamed .event-icon:after{color:#00a79d;content:'\f040'}.list-vertical-divider,.list-vertical-divider-2{zoom:1;overflow:hidden}.list-vertical-divider:before,.list-vertical-divider-2:before,.list-vertical-divider:after,.list-vertical-divider-2:after{content:" ";display:table}.list-vertical-divider:after,.list-vertical-divider-2:after{clear:both}.list-vertical-divider>li,.list-vertical-divider-2>li{border-left:2px solid #ecefef;padding-bottom:9000px;margin-bottom:-9000px}.list-vertical-divider>li:first-child,.list-vertical-divider-2>li:first-child{border-left:none}.list-vertical-divider>li .height-enforcer,.list-vertical-divider-2>li .height-enforcer{min-height:130px}.list-vertical-divider-2{margin-bottom:40px}.list-vertical-divider-2>li{border-left:1px solid #e0e4e5;padding-left:30px;padding-right:30px}.list-vertical-divider-2>li:first-child{padding-left:30px}.list-steps>li{font-size:14px;text-transform:uppercase;color:#b4b4b4;margin-right:45px;padding-left:0;margin-bottom:5px;counter-increment:list-steps;font-weight:600}.list-steps>li:before{content:counter(list-steps);display:block;padding:0px 7px;margin-right:4px;text-align:center;color:#b4b4b4;display:inline-block;border:2px solid #b4b4b4;border-radius:30px}.list-steps>li.current{color:#F8F8F8;font-weight:900}.list-steps>li.current:before{color:#F8F8F8;border-color:#F8F8F8}.list-checked{list-style:none;padding-left:20px}.list-checked>li:before{font-family:'FontAwesome';content:'\f00c';margin:0 5px 0 -15px;color:#00776d}.lvn>li{margin-top:0 !important;margin-bottom:0 !important}.lvs>li{margin-top:5px !important;margin-bottom:5px !important}.lvm>li{margin-top:7px !important;margin-bottom:7px !important}.lvl>li{margin-top:10px !important;margin-bottom:10px !important}.lvxl>li{margin-top:20px !important;margin-bottom:20px !important}.lhn>li{margin-left:0 !important;margin-right:0 !important}.lhs>li{margin-left:5px !important;margin-right:5px !important}.lhm>li{margin-left:7px !important;margin-right:7px !important}.lhl>li{margin-left:10px !important;margin-right:10px !important}.lhxl>li{margin-left:20px !important;margin-right:20px !important}ul[class*="lh"]>li:last-child{margin-right:0 !important}ul[class*="lh"]>li{margin-left:0 !important}ul[class*="lv"]>li:last-child{margin-bottom:0 !important}ul[class*="lv"]>li{margin-top:0 !important}.list-cards{zoom:1}.list-cards:before,.list-cards:after{content:" ";display:table}.list-cards:after{clear:both}.list-cards>li{margin-bottom:20px}@media (min-width: 480px){.list-card-1.list-cards-xs>li{width:435px;float:left;margin-right:20px}}@media (min-width: 768px){.list-card-1.list-cards-sm>li{width:435px;float:left;margin-right:20px}}@media (min-width: 992px){.list-card-1.list-cards-md>li{width:435px;float:left;margin-right:20px}}@media (min-width: 1200px){.list-card-1.list-cards-lg>li{width:435px;float:left;margin-right:20px}}@media (min-width: 1800px){.list-card-1.list-cards-xl>li{width:435px;float:left;margin-right:20px}}.list-card-1>li{min-height:126px}.list-card-1>li a.list-cards-link,.list-card-1>li a.list-card-link{display:block;min-height:126px}.list-card-1>li .list-card-wrapper{min-height:126px}@media (min-width: 480px){.list-card-2.list-cards-xs>li{width:284px;float:left;margin-right:20px}}@media (min-width: 768px){.list-card-2.list-cards-sm>li{width:284px;float:left;margin-right:20px}}@media (min-width: 992px){.list-card-2.list-cards-md>li{width:284px;float:left;margin-right:20px}}@media (min-width: 1200px){.list-card-2.list-cards-lg>li{width:284px;float:left;margin-right:20px}}@media (min-width: 1800px){.list-card-2.list-cards-xl>li{width:284px;float:left;margin-right:20px}}.list-card-2>li{min-height:196px}.list-card-2>li a.list-cards-link,.list-card-2>li a.list-card-link{display:block;min-height:196px}.list-card-2>li .list-card-wrapper{min-height:196px}.list-draggable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.list-draggable .draggable-grip{display:inline-block;color:#e0e4e5}.list-draggable>li{width:100%}.list-draggable>li .draggable-item-content{padding:10px 10px 10px 0;background:white}.list-draggable>li.hover{cursor:move}.list-draggable>li.hover .draggable-grip{color:#8d8e8e}.list-draggable>li.grabbed{background-color:#ecefef}.list-draggable>li.grabbed *{visibility:hidden}.list-draggable>li.grabbed .draggable-grip{visibility:hidden}.list-timeline{display:table;width:100%}.list-timeline-item{display:table-row}.list-timeline-date{font-size:14px;color:#b4b4b4;display:table-cell;vertical-align:middle;text-align:right;padding-right:26px}.list-timeline-subtitle{font-size:14px;color:#b4b4b4;font-weight:400;display:block}.list-timeline-title{font-size:14px;color:#424242;font-weight:600;display:table-cell;vertical-align:middle;position:relative;padding:10px 0 10px 26px}.list-timeline-title:before{content:"";display:block;position:absolute;width:1px;background:#e0e4e5;top:0;left:0;z-index:1;top:0;bottom:0}.list-timeline-title:after{height:20px;width:20px;display:block;content:"";border:2px solid #d4d9d9;border-radius:1000px;background:white;box-shadow:0 0 0 2px white;position:absolute;left:-9px;top:50%;z-index:2;transform:translatey(-50%);-moz-transform:translatey(-50%);-ms-transform:translatey(-50%);-o-transform:translatey(-50%);-webkit-transform:translatey(-50%)}
-.map-wrapper{position:relative}.pane-map{height:450px;position:relative}.map-overlay{position:absolute;top:70px;z-index:99}@media (max-width: 768px){.map-overlay{top:0;position:relative}}#labs-map{height:100%}
-@media (max-width: 480px){.media.media-stackable-xs>.pull-left,.media.media-stackable-xs .media-left{display:block;float:none;clear:both;margin:0 auto 10px auto !important}.media.media-stackable-xs>.pull-left .media-object,.media.media-stackable-xs .media-left .media-object{margin-left:auto;margin-right:auto}}@media (max-width: 768px){.media.media-stackable-sm>.pull-left,.media.media-stackable-sm .media-left{display:block;float:none;clear:both;margin:0 auto 10px auto !important}.media.media-stackable-sm>.pull-left .media-object,.media.media-stackable-sm .media-left .media-object{margin-left:auto;margin-right:auto}}@media (max-width: 992px){.media.media-stackable-md>.pull-left,.media.media-stackable-md .media-left{display:block;float:none;clear:both;margin:0 auto 10px auto !important}.media.media-stackable-md>.pull-left .media-object,.media.media-stackable-md .media-left .media-object{margin-left:auto;margin-right:auto}}@media (max-width: 1200px){.media.media-stackable-lg>.pull-left,.media.media-stackable-lg .media-left{display:block;float:none;clear:both;margin:0 auto 10px auto !important}.media.media-stackable-lg>.pull-left .media-object,.media.media-stackable-lg .media-left .media-object{margin-left:auto;margin-right:auto}}.media .media-body{width:1000000px}
-.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog,.modal.modal-fade-enter .modal-dialog,.modal.modal-fade-leave .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog,.modal.modal-fade-enter-active .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#ecefef;border:1px solid #999;border:1px solid #00776d;border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#243640}.modal-backdrop.fade,.modal-backdrop.modal-fade-enter,.modal-backdrop.modal-fade-leave{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in,.modal-backdrop.modal-fade-enter-active{opacity:0.8;filter:alpha(opacity=80)}.modal-header{padding:15px;border-bottom:1px solid #e0e4e5;min-height:16.5px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:30px}.modal-footer{padding:30px;text-align:right;border-top:1px solid #e0e4e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.modal-fade-enter,.modal-fade-leave{-webkit-transition:opacity .15s linear;transition:opacity .15s linear;opacity:0}.modal-fade-enter-active{opacity:1}.modal .modal-dialog{padding-top:50px}.modal .modal-content{border-radius:0;border-width:0;box-shadow:none;-webkit-box-shadow:none}.modal .modal-header{padding:15px}.modal .modal-footer{padding:15px;background-color:#ecefef;text-align:right;border-top:0px}.modal.modal-basic .modal-header{background-color:#ecefef}.modal.modal-basic .modal-header .modal-title{color:#686868;text-transform:uppercase;font-weight:900}.modal.modal-alt .modal-header{background-color:#243640}.modal.modal-alt .modal-header .modal-title{color:#F8F8F8;font-weight:900}.modal.modal-alt .modal-header .close{color:#F8F8F8}
-.panel{box-shadow:none}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6{margin:0}.panel-title{font-size:inherit}.panel-simple{border:1px solid #b4b4b4}.panel-basic{border-radius:5px;background-clip:padding-box;border-bottom:2px solid rgba(0,0,0,0.07)}.panel-title-alt{padding:15px;border-bottom:3px solid rgba(0,0,0,0.1);font-weight:600;color:#243640}.panel-basic-alt{border:1px solid rgba(0,0,0,0.1);border-radius:5px;background-clip:padding-box;border-bottom:2px solid rgba(0,0,0,0.1);background-color:white}.panel-flex{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.panel-flex .panel-body{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;-webkit-align-self:auto;-ms-flex-item-align:auto;align-self:auto}.panel-flex .panel-footer{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-align-self:auto;-ms-flex-item-align:auto;align-self:auto}.panel-tile{border-bottom:4px solid rgba(0,0,0,0.07);overflow:hidden;color:#686868;-webkit-transition:border 300ms ease-out;transition:border 300ms ease-out;background-clip:padding-box}.panel-tile .panel-body{-ms-flex:1 0 auto;padding:29px 29px 0 29px;-webkit-transition:padding-top 300ms ease-out,padding-bottom 300ms ease-out;transition:padding-top 300ms ease-out,padding-bottom 300ms ease-out}.panel-tile .panel-footer{color:#fff;opacity:0;text-transform:uppercase;text-align:center;font-size:12px;border-top:none;padding:4px 15px;background:transparent;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out}.panel-tile:hover,.panel-tile:focus{-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out;border-width:1px;box-shadow:none;background-color:#F8F8F8;color:#686868;cursor:pointer;outline:none}.panel-tile:hover .panel-body,.panel-tile:focus .panel-body{padding-top:18px;padding-bottom:11px}.panel-tile:hover .panel-footer,.panel-tile:focus .panel-footer{opacity:1;background:#2185c5;color:#F8F8F8;font-weight:900}.panel-scrollable{max-height:183px;overflow-y:overlay;overflow-x:hidden}.panel-highlight,.panel-clickable-alt{background-color:#F8F8F8;border-radius:10px;box-shadow:0 4px 0 0 rgba(0,0,0,0.07)}.panel-highlight.title-panel h1,.title-panel.panel-clickable-alt h1{overflow:hidden;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-alt.panel-editing{background-color:#ecefef}.panel-alt.panel-empty{background-color:rgba(0,0,0,0.07)}.panel-alt.panel-empty:hover{-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out;background-color:#ecefef;border-bottom:4px solid rgba(0,0,0,0.14)}.panel-alt .aligner{min-height:190px}.panel-alt .panel-basic{min-height:88px}.panel-alt.panel-danger,.panel-alt.panel-off{position:relative}.panel-alt.panel-danger:before,.panel-alt.panel-off:before{content:"";position:absolute;top:0%;right:0%;width:0px;height:0px;border-left:25px solid transparent}.panel-alt.panel-danger:before{border-top:25px solid #ff434c}.panel-alt.panel-off:before{border-top:25px solid #8d8e8e}.panel-shadow,.panel-shadow-1,.panel-shadow-2,.panel-shadow-3,.panel-shadow-4{border:none;background-clip:padding-box}.panel-shadow-1{box-shadow:0px 4px rgba(0,0,0,0.3)}.panel-shadow-2{box-shadow:0px 4px rgba(0,0,0,0.14)}.panel-shadow-3{box-shadow:0px 4px rgba(0,0,0,0.07)}.panel-shadow-4{box-shadow:0px 4px rgba(0,0,0,0.035)}.panel-clickable,.panel-clickable-alt{display:block;background-color:#ecefef;cursor:pointer;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out}.panel-clickable .hover-target-1,.panel-clickable-alt .hover-target-1,.panel-clickable .hover-target-2,.panel-clickable-alt .hover-target-2,.panel-clickable .hover-target-3,.panel-clickable-alt .hover-target-3{-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out}.panel-clickable .hover-target-1,.panel-clickable-alt .hover-target-1{color:#686868}.panel-clickable .hover-target-2,.panel-clickable-alt .hover-target-2{color:#b4b4b4}.panel-clickable .hover-target-3,.panel-clickable-alt .hover-target-3{background-color:#F8F8F8}.panel-clickable:hover,.panel-clickable-alt:hover{background-color:#F8F8F8}.panel-clickable:hover .hover-target-1,.panel-clickable-alt:hover .hover-target-1{color:#2185c5}.panel-clickable:hover .hover-target-2,.panel-clickable-alt:hover .hover-target-2{color:#686868}.panel-clickable:hover .hover-target-3,.panel-clickable-alt:hover .hover-target-3{background-color:white}.panel-clickable-alt{background-color:#F8F8F8}.panel-clickable-alt:hover{background-color:white;box-shadow:0 4px 0 0 rgba(0,0,0,0.14)}
-.pane>.container{padding-top:35px;padding-bottom:35px}.pane-offset .pane-image{text-align:center;margin-bottom:-70px}.pane-offset .pane-image>img{display:inline-block}.pane-offset+.pane .container{padding-top:70px}@media (min-width: 768px){.pane>.container{padding-top:45px;padding-bottom:45px}.pane-offset .pane-image{margin-bottom:-90px}.pane-offset+.pane .container{padding-top:90px}}@media (min-width: 992px){.pane>.container{padding-top:60px;padding-bottom:60px}.pane-offset .pane-image{margin-bottom:-120px}.pane-offset+.pane .container{padding-top:120px}}
-.progress{margin-bottom:0;border-radius:0;background-color:rgba(0,0,0,0.07);box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}.progress-bar{background:#b4b4b4;box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none;text-align:left}.progress-bar .label{margin-left:7px;font-size:14px;font-weight:900}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:3%}.progress-bar[aria-valuenow="0"]{color:#686868;min-width:3%;background:transparent;box-shadow:none}.progress-bar[aria-valuenow^="9"]:not([aria-valuenow="9"]),.progress-bar[aria-valuenow="100"]{background:#ff434c}.progress-bar-animated{-webkit-transition:width 1s ease-in-out;transition:width 2s ease-in-out}
-.new-enter{-webkit-animation:new-item-grow .3s cubic-bezier(0.895, 0.03, 0.685, 0.22) forwards,new-item-fade .5s ease-in .15s forwards;-moz-animation:new-item-grow .3s cubic-bezier(0.895, 0.03, 0.685, 0.22) forwards,new-item-fade .5s ease-in .15s forwards}.expander-enter{-webkit-transition:max-height 0.75s ease;transition:max-height 0.75s ease;max-height:0}.expander-enter-active{max-height:500px}.expander-leave{-webkit-transition:max-height 0.75s ease;transition:max-height 0.75s ease;max-height:500px}.expander-leave-active{max-height:0}@-webkit-keyframes new-item-fade{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes new-item-grow{0%{max-height:0}100%{max-height:100px}}@keyframes new-item-fade{from{opacity:0}to{opacity:1}}@keyframes new-item-grow{from{max-height:0}to{max-height:100px}}
-.inline-ribbon{position:relative;display:inline-block;padding:2px 10px;margin-left:22px;margin-right:22px;color:white;font-size:12px;font-weight:bold;text-align:center;text-transform:uppercase;background-color:#b4b4b4}.inline-ribbon:before,.inline-ribbon:after{content:"";position:absolute;display:block;top:0;border-color:#b4b4b4;border-width:11px;border-style:solid}.inline-ribbon:before{border-left-color:transparent;left:-22px}.inline-ribbon:after{border-right-color:transparent;right:-22px}.ribbon-primary{background-color:#00a79d}.ribbon-primary:before{border-color:#00a79d;border-left-color:transparent}.ribbon-primary:after{border-color:#00a79d;border-right-color:transparent}.ribbon-banner{position:fixed;top:20px;left:0;padding:4px 18px 4px 24px;margin-left:0;margin-right:32px;color:white;font-size:16px;font-weight:bold;text-align:center;text-transform:uppercase;background-color:#b31612}.ribbon-banner:after{content:"";position:absolute;display:block;top:0;right:-32px;border-style:solid;border-width:16px;border-color:#b31612;border-right-color:transparent}
-.spinner-lg{margin-top:64px;text-align:center}.spinner-lg .fa-spin{font-size:48px;opacity:0.5}.spinner-sm{text-align:center;min-height:320px}.spinner-sm .fa-spin{font-size:28px}.spinner-sm.out{opacity:0.2}
-.table-hack .thead,.table-hack .tbody{padding:0 15px}.table-hack .th{padding:8px 15px}.table-hack .td{padding:20px 15px}.table-data{border:none}.table-data tbody tr,.table-data tbody .tr,.table-data thead tr,.table-data thead .tr,.table-data .tbody tr,.table-data .tbody .tr,.table-data .thead tr,.table-data .thead .tr{border-bottom:1px solid #d4d9d9}.table-data tbody tr th,.table-data tbody tr .th,.table-data tbody .tr th,.table-data tbody .tr .th,.table-data thead tr th,.table-data thead tr .th,.table-data thead .tr th,.table-data thead .tr .th,.table-data .tbody tr th,.table-data .tbody tr .th,.table-data .tbody .tr th,.table-data .tbody .tr .th,.table-data .thead tr th,.table-data .thead tr .th,.table-data .thead .tr th,.table-data .thead .tr .th{border-bottom:none;border-color:#d4d9d9;border-right:1px solid #d4d9d9;padding:15px 10px;font-size:13px;font-weight:900;letter-spacing:0.3px;background-color:#ecefef}.table-data tbody tr th:first-child,.table-data tbody tr .th:first-child,.table-data tbody .tr th:first-child,.table-data tbody .tr .th:first-child,.table-data thead tr th:first-child,.table-data thead tr .th:first-child,.table-data thead .tr th:first-child,.table-data thead .tr .th:first-child,.table-data .tbody tr th:first-child,.table-data .tbody tr .th:first-child,.table-data .tbody .tr th:first-child,.table-data .tbody .tr .th:first-child,.table-data .thead tr th:first-child,.table-data .thead tr .th:first-child,.table-data .thead .tr th:first-child,.table-data .thead .tr .th:first-child{border-bottom:none}.table-data tbody tr th:last-child,.table-data tbody tr .th:last-child,.table-data tbody .tr th:last-child,.table-data tbody .tr .th:last-child,.table-data thead tr th:last-child,.table-data thead tr .th:last-child,.table-data thead .tr th:last-child,.table-data thead .tr .th:last-child,.table-data .tbody tr th:last-child,.table-data .tbody tr .th:last-child,.table-data .tbody .tr th:last-child,.table-data .tbody .tr .th:last-child,.table-data .thead tr th:last-child,.table-data .thead tr .th:last-child,.table-data .thead .tr th:last-child,.table-data .thead .tr .th:last-child{border:none}.table-data tbody tr td,.table-data tbody tr .td,.table-data tbody .tr td,.table-data tbody .tr .td,.table-data thead tr td,.table-data thead tr .td,.table-data thead .tr td,.table-data thead .tr .td,.table-data .tbody tr td,.table-data .tbody tr .td,.table-data .tbody .tr td,.table-data .tbody .tr .td,.table-data .thead tr td,.table-data .thead tr .td,.table-data .thead .tr td,.table-data .thead .tr .td{padding:10px 10px;border:none}.table-data tbody tr,.table-data tbody .tr,.table-data .tbody tr,.table-data .tbody .tr{background-color:#ecefef}.table-data tbody tr:hover,.table-data tbody .tr:hover,.table-data .tbody tr:hover,.table-data .tbody .tr:hover{-webkit-transition:background-color 300ms ease-out;transition:background-color 300ms ease-out;background-color:#F8F8F8}.table-data tbody tr:last-child,.table-data tbody .tr:last-child,.table-data .tbody tr:last-child,.table-data .tbody .tr:last-child{border-bottom:2px solid rgba(0,0,0,0.07)}.table-data>thead>tr,.table-data>.thead>.tr{text-transform:uppercase}.table-data>thead>tr>th,.table-data>thead>tr>.th,.table-data>.thead>.tr>th,.table-data>.thead>.tr>.th{color:#686868}.table-light tbody tr,.table-light tbody .tr,.table-light thead tr,.table-light thead .tr,.table-light .tbody tr,.table-light .tbody .tr,.table-light .thead tr,.table-light .thead .tr{background-color:#F8F8F8}.table-light tbody tr th,.table-light tbody tr .th,.table-light tbody tr td,.table-light tbody tr .td,.table-light tbody .tr th,.table-light tbody .tr .th,.table-light tbody .tr td,.table-light tbody .tr .td,.table-light thead tr th,.table-light thead tr .th,.table-light thead tr td,.table-light thead tr .td,.table-light thead .tr th,.table-light thead .tr .th,.table-light thead .tr td,.table-light thead .tr .td,.table-light .tbody tr th,.table-light .tbody tr .th,.table-light .tbody tr td,.table-light .tbody tr .td,.table-light .tbody .tr th,.table-light .tbody .tr .th,.table-light .tbody .tr td,.table-light .tbody .tr .td,.table-light .thead tr th,.table-light .thead tr .th,.table-light .thead tr td,.table-light .thead tr .td,.table-light .thead .tr th,.table-light .thead .tr .th,.table-light .thead .tr td,.table-light .thead .tr .td{background-color:#F8F8F8}.table-light tbody tr td,.table-light tbody tr .td,.table-light tbody .tr td,.table-light tbody .tr .td,.table-light thead tr td,.table-light thead tr .td,.table-light thead .tr td,.table-light thead .tr .td,.table-light .tbody tr td,.table-light .tbody tr .td,.table-light .tbody .tr td,.table-light .tbody .tr .td,.table-light .thead tr td,.table-light .thead tr .td,.table-light .thead .tr td,.table-light .thead .tr .td{border:none}.table-key-value{table-layout:fixed}.table-key-value tbody tr th,.table-key-value tbody tr .th,.table-key-value tbody .tr th,.table-key-value tbody .tr .th,.table-key-value thead tr th,.table-key-value thead tr .th,.table-key-value thead .tr th,.table-key-value thead .tr .th,.table-key-value .tbody tr th,.table-key-value .tbody tr .th,.table-key-value .tbody .tr th,.table-key-value .tbody .tr .th,.table-key-value .thead tr th,.table-key-value .thead tr .th,.table-key-value .thead .tr th,.table-key-value .thead .tr .th{border:none}.table-key-value tbody tr:last-child{border:none}.table-key-value tbody tr th,.table-key-value tbody tr td{padding:0;margin:0}.table-key-value tbody tr th{text-transform:uppercase;font-weight:800;text-align:left;color:#b4b4b4}.table-key-value tbody tr td{text-align:left}.table-key-value tbody tr td:last-child{border:none}.table-hover td{cursor:pointer}.table-sortable th.sorted-desc{color:#243640}.table-sortable th.sorted-desc:after{content:"\f0d7";color:#243640}.table-sortable .sortable,.table-sortable [sortable]{cursor:pointer}.table-sortable .sortable:after,.table-sortable [sortable]:after{margin-left:4px;content:"";font-weight:200;font-family:FontAwesome}.table-sortable .sortable:hover,.table-sortable [sortable]:hover{background-color:white;-webkit-transition:background-color 300ms ease-out;transition:background-color 300ms ease-out}.table-sortable th.sorted-none:hover:after{visibility:visible}.table-sortable th.sorted-none:after{content:"\f0dc";color:#d4d9d9;visibility:hidden}.table-sortable th.sorted-asc{color:#243640}.table-sortable th.sorted-asc:after{content:"\f0d8";color:#243640}.editing .state-adding-trigger{visibility:hidden}.editing .table-addable .thead-state-viewing,.editing .table-addable .td-state-viewing{display:none}.editing .table-addable td{display:none}.editing .table-addable td:first-child{display:table-cell}.editing .table-addable thead.state-editing-show{display:table-header-group}.editing .table-addable tr.state-editing-show{display:table-row}.table-addable{table-layout:fixed}.table-addable .state-editing-show{display:none}.table-addable .state-adding-item-show{display:none}.table-addable .inline-table-item.ng-enter.ng-enter-active{opacity:1}.table-addable .inline-table-item.ng-enter.ng-enter-active .addedConfirmation{display:table-cell}.table-addable .inline-table-item .addedConfirmation{color:forestgreen}.table-addable .fa-check-success{color:#00a79d;font-size:12px;margin-right:5px;-webkit-transition:opacity 300ms ease-out;transition:opacity 300ms ease-out;opacity:1}.table-addable .fa-check-success.ng-hide{display:inline-block !important;opacity:0}.table-addable .saveRequested{opacity:0.3}.table-addable .deleteRequested{-webkit-transition:all ease-out .2s;transition:all ease-out .2s;color:#b4b4b4}.table-addable .ng-leave{-webkit-transition:all ease-out .5s;transition:all ease-out .5s}.table-addable .ng-leave.ng-leave-active{color:#ecefef}.table-addable .saved{opacity:1;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out}.table-scrollable{border:1px solid #e0e4e5}.table-scrollable table{table-layout:fixed}.table-scrollable table tr:last-child{border-bottom:none}.table-scrollable .table{margin:0}.table-scrollable .table-scrollable-header{border-bottom:2px solid #e0e4e5}.table-scrollable .table-scrollable-body{border-top:3px solid #ecefef;max-height:183px;overflow-y:auto;overflow-x:hidden}.table-scrollable.table-scrollable-sm .table-scrollable-body{max-height:300px}.table-scrollable.table-scrollable-md .table-scrollable-body{max-height:600px}.table-scrollable.table-scrollable-lg .table-scrollable-body{max-height:900px}
-.tab-highlight .nav>li{position:relative;overflow:hidden}.tab-highlight .nav>li+li{margin-top:-2px}.tab-highlight .nav>li>a{padding:15px;color:#2185c5;background-color:#e0e4e5;-webkit-transition:background-color 150ms ease-out;transition:background-color 150ms ease-out}.tab-highlight .nav>li>a:hover{z-index:100;background-color:#ecefef}.tab-highlight .nav>li.active a{z-index:50}.tab-highlight .nav>li.active>a,.tab-highlight .nav>li.active>a:hover{color:#686868;background-color:#ecefef;border-width:0;cursor:default}.tab-highlight .nav .tab-title{font-size:16px}.tab-highlight .tab-content{border-top:2px solid #ecefef;padding:0;margin-left:-20px}.tab-simple{background-color:#e0e4e5;position:relative}.tab-simple .nav.nav-tabs{border-bottom:3px solid rgba(0,0,0,0.07);border-top:1px solid #e0e4e5;background-color:#ecefef;background-clip:padding-box}.tab-simple .nav>li{border-right:1px solid #e0e4e5}.tab-simple .nav>li>a{margin-right:0;border:0;border-radius:0;padding:10px 19px 13px 19px;color:#2185c5;font-weight:600;font-size:16px}.tab-simple .nav>li>a:hover{border:0}.tab-simple .nav>li:hover{cursor:pointer;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out}.tab-simple .nav>li:hover>a{background-color:#F8F8F8}.tab-simple .nav>li.active{margin-bottom:-3px;border-top:3px solid rgba(0,0,0,0.07);background-color:#e0e4e5;cursor:default;border-right:0;-webkit-transition:all 0ms ease-out;transition:all 0ms ease-out}.tab-simple .nav>li.active>a{border:0;margin:-3px 0 3px 0;color:#243640;background-color:transparent}.tab-simple .tabs-action{padding:14px 16px;position:absolute;right:0}.tab-content{padding:20px}.tab-simple-alt{position:relative}.tab-simple-alt .nav{border-bottom:none}.tab-simple-alt .nav>li>a{margin-right:0;border:0;border-radius:0;padding:10px 19px 13px 19px;color:#2185c5;font-weight:600;font-size:16px}.tab-simple-alt .nav>li>a:hover,.tab-simple-alt .nav>li>a:focus{border:0}.tab-simple-alt .nav>li:hover{cursor:pointer;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out}.tab-simple-alt .nav>li:hover>a{background-color:#F8F8F8}.tab-simple-alt .nav>li.active{border-top:2px solid #00a79d;background-color:white;cursor:default;border-right:0;-webkit-transition:all 0ms ease-out;transition:all 0ms ease-out}.tab-simple-alt .nav>li.active>a{color:#243640;background-color:transparent}.tab-simple-alt .tabs-action{padding:14px 16px;position:absolute;right:0}.tab-simple-alt .tab-content{background-color:white}.tab-responsive .tab-content{padding-left:0;list-style:none}.tab-responsive a[data-toggle="tab"]{padding:8px 10px;color:#8d8e8e;margin:5px 0;border-radius:6px;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out}.tab-responsive .active a[data-toggle="tab"],.tab-responsive a[data-toggle="tab"]:hover,.tab-responsive a[data-toggle="tab"]:focus{background-color:rgba(0,0,0,0.035);color:#00a79d}@media (max-width: 768px){.tab-responsive a[data-toggle="tab"]{background-color:rgba(0,0,0,0.035);color:#00a79d}.tab-responsive .tab-pane{padding:15px}}.tabs-images .nav-tabs-images{text-align:center}.tabs-images .nav-tabs-images li a[data-toggle=tab]{display:inline-block;width:130px;height:130px;margin:0 30px;box-shadow:0 3px 0 rgba(0,0,0,0.07);background-color:#e0e4e5;border-radius:130px;-webkit-transition:all 300ms ease;transition:all 300ms ease;color:#b4b4b4}.tabs-images .nav-tabs-images li a[data-toggle=tab]:hover,.tabs-images .nav-tabs-images li a[data-toggle=tab]:focus,.tabs-images .nav-tabs-images li a[data-toggle=tab]:active,.tabs-images .nav-tabs-images li a[data-toggle=tab].active{box-shadow:0 3px 0 rgba(0,0,0,0.14)}.tabs-images .nav-tabs-images li a[data-toggle=tab] .icon-svg .icon{fill:currentColor}.tabs-images .nav-tabs-images li.active a,.tabs-images .nav-tabs-images li:hover a,.tabs-images .nav-tabs-images li:focus a,.tabs-images .nav-tabs-images li:active a{background-color:#00a79d;color:white}
-.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-family:'Source Sans Pro','SourceSansPro',sans-serif;font-size:14px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#ecefef;text-align:center;text-decoration:none;background-color:#424242;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#424242}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#424242}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#424242}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#424242}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#424242}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#424242}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#424242}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#424242}.button-with-tooltip-wrapper{display:inline-block}
-.aligner{height:230px;display:-ms-flexbox;display:flex;display:-webkit-box;display:-webkit-flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-items:center}.aligner .aligner-item{-webkit-box-flex:0;-ms-flex:0 100%;flex:0 100%;-webkit-flex:0 100%}.aligner .aligner-item.aligner-item-top{-ms-flex-item-align:start;align-self:flex-start;-webkit-align-self:flex-start}.aligner .aligner-item.aligner-item-bottom{-ms-flex-item-align:end;align-self:flex-end;-webkit-align-self:flex-end}
-table h1,table h2,table h3,table h4,table h5,table h6,table p,table ul,table ol,table dl,table blockquote,table .media,table pre{margin-top:0;margin-bottom:0}.pan{padding:0 !important}.man{margin:0 !important}.pvn{padding-top:0 !important;padding-bottom:0 !important}.mvn{margin-top:0 !important;margin-bottom:0 !important}.phn{padding-left:0 !important;padding-right:0 !important}.mhn{margin-left:0 !important;margin-right:0 !important}.ptn{padding-top:0 !important}.mtn{margin-top:0 !important}.prn{padding-right:0 !important}.mrn{margin-right:0 !important}.pbn{padding-bottom:0 !important}.mbn{margin-bottom:0 !important}.pln{padding-left:0 !important}.mln{margin-left:0 !important}.pas{padding:5px !important}.mas{margin:5px !important}.pvs{padding-top:5px !important;padding-bottom:5px !important}.mvs{margin-top:5px !important;margin-bottom:5px !important}.phs{padding-left:5px !important;padding-right:5px !important}.mhs{margin-left:5px !important;margin-right:5px !important}.pts{padding-top:5px !important}.mts{margin-top:5px !important}.prs{padding-right:5px !important}.mrs{margin-right:5px !important}.pbs{padding-bottom:5px !important}.mbs{margin-bottom:5px !important}.pls{padding-left:5px !important}.mls{margin-left:5px !important}.pam{padding:7px !important}.mam{margin:7px !important}.pvm{padding-top:7px !important;padding-bottom:7px !important}.mvm{margin-top:7px !important;margin-bottom:7px !important}.phm{padding-left:7px !important;padding-right:7px !important}.mhm{margin-left:7px !important;margin-right:7px !important}.ptm{padding-top:7px !important}.mtm{margin-top:7px !important}.prm{padding-right:7px !important}.mrm{margin-right:7px !important}.pbm{padding-bottom:7px !important}.mbm{margin-bottom:7px !important}.plm{padding-left:7px !important}.mlm{margin-left:7px !important}.pal{padding:10px !important}.mal{margin:10px !important}.pvl{padding-top:10px !important;padding-bottom:10px !important}.mvl{margin-top:10px !important;margin-bottom:10px !important}.phl{padding-left:10px !important;padding-right:10px !important}.mhl{margin-left:10px !important;margin-right:10px !important}.ptl{padding-top:10px !important}.mtl{margin-top:10px !important}.prl{padding-right:10px !important}.mrl{margin-right:10px !important}.pbl{padding-bottom:10px !important}.mbl{margin-bottom:10px !important}.pll{padding-left:10px !important}.mll{margin-left:10px !important}.paxl{padding:20px !important}.maxl{margin:20px !important}.pvxl{padding-top:20px !important;padding-bottom:20px !important}.mvxl{margin-top:20px !important;margin-bottom:20px !important}.phxl{padding-left:20px !important;padding-right:20px !important}.mhxl{margin-left:20px !important;margin-right:20px !important}.ptxl{padding-top:20px !important}.mtxl{margin-top:20px !important}.prxl{padding-right:20px !important}.mrxl{margin-right:20px !important}.pbxl{padding-bottom:20px !important}.mbxl{margin-bottom:20px !important}.plxl{padding-left:20px !important}.mlxl{margin-left:20px !important}.paxxl{padding:40px !important}.maxxl{margin:40px !important}.pvxxl{padding-top:40px !important;padding-bottom:40px !important}.mvxxl{margin-top:40px !important;margin-bottom:40px !important}.phxxl{padding-left:40px !important;padding-right:40px !important}.mhxxl{margin-left:40px !important;margin-right:40px !important}.ptxxl{padding-top:40px !important}.mtxxl{margin-top:40px !important}.prxxl{padding-right:40px !important}.mrxxl{margin-right:40px !important}.pbxxl{padding-bottom:40px !important}.mbxxl{margin-bottom:40px !important}.plxxl{padding-left:40px !important}.mlxxl{margin-left:40px !important}.paxxxl{padding:120px !important}.maxxxl{margin:120px !important}.pvxxxl{padding-top:120px !important;padding-bottom:120px !important}.mvxxxl{margin-top:120px !important;margin-bottom:120px !important}.phxxxl{padding-left:120px !important;padding-right:120px !important}.mhxxxl{margin-left:120px !important;margin-right:120px !important}.ptxxxl{padding-top:120px !important}.mtxxxl{margin-top:120px !important}.prxxxl{padding-right:120px !important}.mrxxxl{margin-right:120px !important}.pbxxxl{padding-bottom:120px !important}.mbxxxl{margin-bottom:120px !important}.plxxxl{padding-left:120px !important}.mlxxxl{margin-left:120px !important}.paxxxxl{padding:140px !important}.maxxxxl{margin:140px !important}.pvxxxxl{padding-top:140px !important;padding-bottom:140px !important}.mvxxxxl{margin-top:140px !important;margin-bottom:140px !important}.phxxxxl{padding-left:140px !important;padding-right:140px !important}.mhxxxxl{margin-left:140px !important;margin-right:140px !important}.ptxxxxl{padding-top:140px !important}.mtxxxxl{margin-top:140px !important}.prxxxxl{padding-right:140px !important}.mrxxxxl{margin-right:140px !important}.pbxxxxl{padding-bottom:140px !important}.mbxxxxl{margin-bottom:140px !important}.plxxxxl{padding-left:140px !important}.mlxxxxl{margin-left:140px !important}@media all and (max-width: 768px){.pan{padding:0 !important}.man{margin:0 !important}.pvn{padding-top:0 !important;padding-bottom:0 !important}.mvn{margin-top:0 !important;margin-bottom:0 !important}.phn{padding-left:0 !important;padding-right:0 !important}.mhn{margin-left:0 !important;margin-right:0 !important}.ptn{padding-top:0 !important}.mtn{margin-top:0 !important}.prn{padding-right:0 !important}.mrn{margin-right:0 !important}.pbn{padding-bottom:0 !important}.mbn{margin-bottom:0 !important}.pln{padding-left:0 !important}.mln{margin-left:0 !important}.pas{padding:5px !important}.mas{margin:5px !important}.pvs{padding-top:5px !important;padding-bottom:5px !important}.mvs{margin-top:5px !important;margin-bottom:5px !important}.phs{padding-left:5px !important;padding-right:5px !important}.mhs{margin-left:5px !important;margin-right:5px !important}.pts{padding-top:5px !important}.mts{margin-top:5px !important}.prs{padding-right:5px !important}.mrs{margin-right:5px !important}.pbs{padding-bottom:5px !important}.mbs{margin-bottom:5px !important}.pls{padding-left:5px !important}.mls{margin-left:5px !important}.pam{padding:7px !important}.mam{margin:7px !important}.pvm{padding-top:7px !important;padding-bottom:7px !important}.mvm{margin-top:7px !important;margin-bottom:7px !important}.phm{padding-left:7px !important;padding-right:7px !important}.mhm{margin-left:7px !important;margin-right:7px !important}.ptm{padding-top:7px !important}.mtm{margin-top:7px !important}.prm{padding-right:7px !important}.mrm{margin-right:7px !important}.pbm{padding-bottom:7px !important}.mbm{margin-bottom:7px !important}.plm{padding-left:7px !important}.mlm{margin-left:7px !important}.pal{padding:10px !important}.mal{margin:10px !important}.pvl{padding-top:10px !important;padding-bottom:10px !important}.mvl{margin-top:10px !important;margin-bottom:10px !important}.phl{padding-left:10px !important;padding-right:10px !important}.mhl{margin-left:10px !important;margin-right:10px !important}.ptl{padding-top:10px !important}.mtl{margin-top:10px !important}.prl{padding-right:10px !important}.mrl{margin-right:10px !important}.pbl{padding-bottom:10px !important}.mbl{margin-bottom:10px !important}.pll{padding-left:10px !important}.mll{margin-left:10px !important}.paxl{padding:15px !important}.maxl{margin:15px !important}.pvxl{padding-top:15px !important;padding-bottom:15px !important}.mvxl{margin-top:15px !important;margin-bottom:15px !important}.phxl{padding-left:15px !important;padding-right:15px !important}.mhxl{margin-left:15px !important;margin-right:15px !important}.ptxl{padding-top:15px !important}.mtxl{margin-top:15px !important}.prxl{padding-right:15px !important}.mrxl{margin-right:15px !important}.pbxl{padding-bottom:15px !important}.mbxl{margin-bottom:15px !important}.plxl{padding-left:15px !important}.mlxl{margin-left:15px !important}.paxxl{padding:20px !important}.maxxl{margin:20px !important}.pvxxl{padding-top:20px !important;padding-bottom:20px !important}.mvxxl{margin-top:20px !important;margin-bottom:20px !important}.phxxl{padding-left:20px !important;padding-right:20px !important}.mhxxl{margin-left:20px !important;margin-right:20px !important}.ptxxl{padding-top:20px !important}.mtxxl{margin-top:20px !important}.prxxl{padding-right:20px !important}.mrxxl{margin-right:20px !important}.pbxxl{padding-bottom:20px !important}.mbxxl{margin-bottom:20px !important}.plxxl{padding-left:20px !important}.mlxxl{margin-left:20px !important}.paxxxl{padding:30px !important}.maxxxl{margin:30px !important}.pvxxxl{padding-top:30px !important;padding-bottom:30px !important}.mvxxxl{margin-top:30px !important;margin-bottom:30px !important}.phxxxl{padding-left:30px !important;padding-right:30px !important}.mhxxxl{margin-left:30px !important;margin-right:30px !important}.ptxxxl{padding-top:30px !important}.mtxxxl{margin-top:30px !important}.prxxxl{padding-right:30px !important}.mrxxxl{margin-right:30px !important}.pbxxxl{padding-bottom:30px !important}.mbxxxl{margin-bottom:30px !important}.plxxxl{padding-left:30px !important}.mlxxxl{margin-left:30px !important}.paxxxxl{padding:30px !important}.maxxxxl{margin:30px !important}.pvxxxxl{padding-top:30px !important;padding-bottom:30px !important}.mvxxxxl{margin-top:30px !important;margin-bottom:30px !important}.phxxxxl{padding-left:30px !important;padding-right:30px !important}.mhxxxxl{margin-left:30px !important;margin-right:30px !important}.ptxxxxl{padding-top:30px !important}.mtxxxxl{margin-top:30px !important}.prxxxxl{padding-right:30px !important}.mrxxxxl{margin-right:30px !important}.pbxxxxl{padding-bottom:30px !important}.mbxxxxl{margin-bottom:30px !important}.plxxxxl{padding-left:30px !important}.mlxxxxl{margin-left:30px !important}}
diff --git a/release/pui-v1.9.0/pivotal-ui-react.js b/release/pui-v1.9.0/pivotal-ui-react.js
deleted file mode 100644
index 05905cac3..000000000
--- a/release/pui-v1.9.0/pivotal-ui-react.js
+++ /dev/null
@@ -1,57380 +0,0 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= scrollHeight - offsetBottom)) return 'bottom'
-
- return false
- }
-
- Affix.prototype.getPinnedOffset = function () {
- if (this.pinnedOffset) return this.pinnedOffset
- this.$element.removeClass(Affix.RESET).addClass('affix')
- var scrollTop = this.$target.scrollTop()
- var position = this.$element.offset()
- return (this.pinnedOffset = position.top - scrollTop)
- }
-
- Affix.prototype.checkPositionWithEventLoop = function () {
- setTimeout($.proxy(this.checkPosition, this), 1)
- }
-
- Affix.prototype.checkPosition = function () {
- if (!this.$element.is(':visible')) return
-
- var height = this.$element.height()
- var offset = this.options.offset
- var offsetTop = offset.top
- var offsetBottom = offset.bottom
- var scrollHeight = $('body').height()
-
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
- if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
- if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
-
- var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
-
- if (this.affixed != affix) {
- if (this.unpin != null) this.$element.css('top', '')
-
- var affixType = 'affix' + (affix ? '-' + affix : '')
- var e = $.Event(affixType + '.bs.affix')
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- this.affixed = affix
- this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
-
- this.$element
- .removeClass(Affix.RESET)
- .addClass(affixType)
- .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
- }
-
- if (affix == 'bottom') {
- this.$element.offset({
- top: scrollHeight - height - offsetBottom
- })
- }
- }
-
-
- // AFFIX PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.affix')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.affix
-
- $.fn.affix = Plugin
- $.fn.affix.Constructor = Affix
-
-
- // AFFIX NO CONFLICT
- // =================
-
- $.fn.affix.noConflict = function () {
- $.fn.affix = old
- return this
- }
-
-
- // AFFIX DATA-API
- // ==============
-
- $(window).on('load', function () {
- $('[data-spy="affix"]').each(function () {
- var $spy = $(this)
- var data = $spy.data()
-
- data.offset = data.offset || {}
-
- if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
- if (data.offsetTop != null) data.offset.top = data.offsetTop
-
- Plugin.call($spy, data)
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: alert.js v3.3.1
- * 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.3.1'
-
- Alert.TRANSITION_DURATION = 150
-
- Alert.prototype.close = function (e) {
- var $this = $(this)
- var selector = $this.attr('data-target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- var $parent = $(selector)
-
- if (e) e.preventDefault()
-
- if (!$parent.length) {
- $parent = $this.closest('.alert')
- }
-
- $parent.trigger(e = $.Event('close.bs.alert'))
-
- if (e.isDefaultPrevented()) return
-
- $parent.removeClass('in')
-
- function removeElement() {
- // detach from parent, fire event then clean up data
- $parent.detach().trigger('closed.bs.alert').remove()
- }
-
- $.support.transition && $parent.hasClass('fade') ?
- $parent
- .one('bsTransitionEnd', removeElement)
- .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
- removeElement()
- }
-
-
- // ALERT PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.alert')
-
- if (!data) $this.data('bs.alert', (data = new Alert(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- var old = $.fn.alert
-
- $.fn.alert = Plugin
- $.fn.alert.Constructor = Alert
-
-
- // ALERT NO CONFLICT
- // =================
-
- $.fn.alert.noConflict = function () {
- $.fn.alert = old
- return this
- }
-
-
- // ALERT DATA-API
- // ==============
-
- $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: button.js v3.3.1
- * 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.3.1'
-
- 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]())
-
- // push to event loop to allow forms to submit
- setTimeout($.proxy(function () {
- $el[val](data[state] == null ? this.options[state] : data[state])
-
- if (state == 'loadingText') {
- this.isLoading = true
- $el.addClass(d).attr(d, d)
- } 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')
- } else {
- this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
- }
-
- 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()
- })
- .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
- $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: carousel.js v3.3.1
- * 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)
- this.$indicators = this.$element.find('.carousel-indicators')
- this.options = options
- this.paused =
- this.sliding =
- this.interval =
- this.$active =
- this.$items = null
-
- this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
-
- this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
- .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
- .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
- }
-
- Carousel.VERSION = '3.3.1'
-
- Carousel.TRANSITION_DURATION = 600
-
- Carousel.DEFAULTS = {
- interval: 5000,
- pause: 'hover',
- wrap: true,
- keyboard: true
- }
-
- Carousel.prototype.keydown = function (e) {
- if (/input|textarea/i.test(e.target.tagName)) return
- switch (e.which) {
- case 37: this.prev(); break
- case 39: this.next(); break
- default: return
- }
-
- e.preventDefault()
- }
-
- Carousel.prototype.cycle = function (e) {
- e || (this.paused = false)
-
- this.interval && clearInterval(this.interval)
-
- this.options.interval
- && !this.paused
- && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-
- return this
- }
-
- Carousel.prototype.getItemIndex = function (item) {
- this.$items = item.parent().children('.item')
- return this.$items.index(item || this.$active)
- }
-
- Carousel.prototype.getItemForDirection = function (direction, active) {
- var delta = direction == 'prev' ? -1 : 1
- var activeIndex = this.getItemIndex(active)
- var itemIndex = (activeIndex + delta) % this.$items.length
- return this.$items.eq(itemIndex)
- }
-
- Carousel.prototype.to = function (pos) {
- var that = this
- var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
-
- if (pos > (this.$items.length - 1) || pos < 0) return
-
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
- if (activeIndex == pos) return this.pause().cycle()
-
- return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
- }
-
- Carousel.prototype.pause = function (e) {
- e || (this.paused = true)
-
- if (this.$element.find('.next, .prev').length && $.support.transition) {
- this.$element.trigger($.support.transition.end)
- this.cycle(true)
- }
-
- this.interval = clearInterval(this.interval)
-
- return this
- }
-
- Carousel.prototype.next = function () {
- if (this.sliding) return
- return this.slide('next')
- }
-
- Carousel.prototype.prev = function () {
- if (this.sliding) return
- return this.slide('prev')
- }
-
- Carousel.prototype.slide = function (type, next) {
- var $active = this.$element.find('.item.active')
- var $next = next || this.getItemForDirection(type, $active)
- var isCycling = this.interval
- var direction = type == 'next' ? 'left' : 'right'
- var 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(Carousel.TRANSITION_DURATION)
- } else {
- $active.removeClass('active')
- $next.addClass('active')
- this.sliding = false
- this.$element.trigger(slidEvent)
- }
-
- isCycling && this.cycle()
-
- return this
- }
-
-
- // CAROUSEL PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.carousel')
- var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
- var action = typeof option == 'string' ? option : options.slide
-
- if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
- if (typeof option == 'number') data.to(option)
- else if (action) data[action]()
- else if (options.interval) data.pause().cycle()
- })
- }
-
- var old = $.fn.carousel
-
- $.fn.carousel = Plugin
- $.fn.carousel.Constructor = Carousel
-
-
- // CAROUSEL NO CONFLICT
- // ====================
-
- $.fn.carousel.noConflict = function () {
- $.fn.carousel = old
- return this
- }
-
-
- // CAROUSEL DATA-API
- // =================
-
- var clickHandler = function (e) {
- var href
- var $this = $(this)
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
- if (!$target.hasClass('carousel')) return
- var options = $.extend({}, $target.data(), $this.data())
- var slideIndex = $this.attr('data-slide-to')
- if (slideIndex) options.interval = false
-
- Plugin.call($target, options)
-
- if (slideIndex) {
- $target.data('bs.carousel').to(slideIndex)
- }
-
- e.preventDefault()
- }
-
- $(document)
- .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
- .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
-
- $(window).on('load', function () {
- $('[data-ride="carousel"]').each(function () {
- var $carousel = $(this)
- Plugin.call($carousel, $carousel.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: collapse.js v3.3.1
- * 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.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]')
- this.transitioning = null
-
- if (this.options.parent) {
- this.$parent = this.getParent()
- } else {
- this.addAriaAndCollapsedClass(this.$element, this.$trigger)
- }
-
- if (this.options.toggle) this.toggle()
- }
-
- Collapse.VERSION = '3.3.1'
-
- Collapse.TRANSITION_DURATION = 350
-
- Collapse.DEFAULTS = {
- toggle: true,
- trigger: '[data-toggle="collapse"]'
- }
-
- Collapse.prototype.dimension = function () {
- var hasWidth = this.$element.hasClass('width')
- return hasWidth ? 'width' : 'height'
- }
-
- Collapse.prototype.show = function () {
- if (this.transitioning || this.$element.hasClass('in')) return
-
- var activesData
- var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')
-
- if (actives && actives.length) {
- activesData = actives.data('bs.collapse')
- if (activesData && activesData.transitioning) return
- }
-
- var startEvent = $.Event('show.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- if (actives && actives.length) {
- Plugin.call(actives, 'hide')
- activesData || actives.data('bs.collapse', null)
- }
-
- var dimension = this.dimension()
-
- this.$element
- .removeClass('collapse')
- .addClass('collapsing')[dimension](0)
- .attr('aria-expanded', true)
-
- this.$trigger
- .removeClass('collapsed')
- .attr('aria-expanded', true)
-
- this.transitioning = 1
-
- var complete = function () {
- this.$element
- .removeClass('collapsing')
- .addClass('collapse in')[dimension]('')
- this.transitioning = 0
- this.$element
- .trigger('shown.bs.collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- var scrollSize = $.camelCase(['scroll', dimension].join('-'))
-
- this.$element
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
- }
-
- Collapse.prototype.hide = function () {
- if (this.transitioning || !this.$element.hasClass('in')) return
-
- var startEvent = $.Event('hide.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- var dimension = this.dimension()
-
- this.$element[dimension](this.$element[dimension]())[0].offsetHeight
-
- this.$element
- .addClass('collapsing')
- .removeClass('collapse in')
- .attr('aria-expanded', false)
-
- this.$trigger
- .addClass('collapsed')
- .attr('aria-expanded', false)
-
- this.transitioning = 1
-
- var complete = function () {
- this.transitioning = 0
- this.$element
- .removeClass('collapsing')
- .addClass('collapse')
- .trigger('hidden.bs.collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- this.$element
- [dimension](0)
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
- }
-
- Collapse.prototype.toggle = function () {
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
- }
-
- Collapse.prototype.getParent = function () {
- return $(this.options.parent)
- .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
- .each($.proxy(function (i, element) {
- var $element = $(element)
- this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
- }, this))
- .end()
- }
-
- Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
- var isOpen = $element.hasClass('in')
-
- $element.attr('aria-expanded', isOpen)
- $trigger
- .toggleClass('collapsed', !isOpen)
- .attr('aria-expanded', isOpen)
- }
-
- function getTargetFromTrigger($trigger) {
- var href
- var target = $trigger.attr('data-target')
- || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
-
- return $(target)
- }
-
-
- // COLLAPSE PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.collapse')
- var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
- if (!data && options.toggle && option == 'show') options.toggle = false
- if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.collapse
-
- $.fn.collapse = Plugin
- $.fn.collapse.Constructor = Collapse
-
-
- // COLLAPSE NO CONFLICT
- // ====================
-
- $.fn.collapse.noConflict = function () {
- $.fn.collapse = old
- return this
- }
-
-
- // COLLAPSE DATA-API
- // =================
-
- $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
- var $this = $(this)
-
- if (!$this.attr('data-target')) e.preventDefault()
-
- var $target = getTargetFromTrigger($this)
- var data = $target.data('bs.collapse')
- var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })
-
- Plugin.call($target, option)
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: dropdown.js v3.3.1
- * 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.3.1'
-
- 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')
- .attr('aria-expanded', 'true')
-
- $parent
- .toggleClass('open')
- .trigger('shown.bs.dropdown', relatedTarget)
- }
-
- return false
- }
-
- Dropdown.prototype.keydown = function (e) {
- if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
-
- var $this = $(this)
-
- e.preventDefault()
- e.stopPropagation()
-
- if ($this.is('.disabled, :disabled')) return
-
- var $parent = getParent($this)
- var isActive = $parent.hasClass('open')
-
- if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
- if (e.which == 27) $parent.find(toggle).trigger('focus')
- return $this.trigger('click')
- }
-
- var desc = ' li:not(.divider):visible a'
- var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
-
- if (!$items.length) return
-
- var index = $items.index(e.target)
-
- if (e.which == 38 && index > 0) index-- // up
- if (e.which == 40 && index < $items.length - 1) index++ // down
- if (!~index) index = 0
-
- $items.eq(index).trigger('focus')
- }
-
- function clearMenus(e) {
- if (e && e.which === 3) return
- $(backdrop).remove()
- $(toggle).each(function () {
- var $this = $(this)
- var $parent = getParent($this)
- var relatedTarget = { relatedTarget: this }
-
- if (!$parent.hasClass('open')) return
-
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this.attr('aria-expanded', 'false')
- $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, Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tab.js v3.3.1
- * 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.3.1'
-
- Tab.TRANSITION_DURATION = 150
-
- Tab.prototype.show = function () {
- var $this = this.element
- var $ul = $this.closest('ul:not(.dropdown-menu)')
- var selector = $this.data('target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- if ($this.parent('li').hasClass('active')) return
-
- var $previous = $ul.find('.active:last a')
- var hideEvent = $.Event('hide.bs.tab', {
- relatedTarget: $this[0]
- })
- var showEvent = $.Event('show.bs.tab', {
- relatedTarget: $previous[0]
- })
-
- $previous.trigger(hideEvent)
- $this.trigger(showEvent)
-
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
-
- var $target = $(selector)
-
- this.activate($this.closest('li'), $ul)
- this.activate($target, $target.parent(), function () {
- $previous.trigger({
- type: 'hidden.bs.tab',
- relatedTarget: $this[0]
- })
- $this.trigger({
- type: 'shown.bs.tab',
- relatedTarget: $previous[0]
- })
- })
- }
-
- Tab.prototype.activate = function (element, container, callback) {
- var $active = container.find('> .active')
- var transition = callback
- && $.support.transition
- && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
-
- function next() {
- $active
- .removeClass('active')
- .find('> .dropdown-menu > .active')
- .removeClass('active')
- .end()
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', false)
-
- element
- .addClass('active')
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
-
- if (transition) {
- element[0].offsetWidth // reflow for transition
- element.addClass('in')
- } else {
- element.removeClass('fade')
- }
-
- if (element.parent('.dropdown-menu')) {
- element
- .closest('li.dropdown')
- .addClass('active')
- .end()
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
- }
-
- callback && callback()
- }
-
- $active.length && transition ?
- $active
- .one('bsTransitionEnd', next)
- .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
- next()
-
- $active.removeClass('in')
- }
-
-
- // TAB PLUGIN DEFINITION
- // =====================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tab')
-
- if (!data) $this.data('bs.tab', (data = new Tab(this)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tab
-
- $.fn.tab = Plugin
- $.fn.tab.Constructor = Tab
-
-
- // TAB NO CONFLICT
- // ===============
-
- $.fn.tab.noConflict = function () {
- $.fn.tab = old
- return this
- }
-
-
- // TAB DATA-API
- // ============
-
- var clickHandler = function (e) {
- e.preventDefault()
- Plugin.call($(this), 'show')
- }
-
- $(document)
- .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
- .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: transition.js v3.3.1
- * 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: scrollspy.js v3.3.1
- * 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.3.1'
-
- 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]) {
- this.activeTarget = null
- return this.clear()
- }
-
- 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.clear()
-
- var selector = this.selector +
- '[data-target="' + target + '"],' +
- this.selector + '[href="' + target + '"]'
-
- var active = $(selector)
- .parents('li')
- .addClass('active')
-
- if (active.parent('.dropdown-menu').length) {
- active = active
- .closest('li.dropdown')
- .addClass('active')
- }
-
- active.trigger('activate.bs.scrollspy')
- }
-
- ScrollSpy.prototype.clear = function () {
- $(this.selector)
- .parentsUntil(this.options.target, '.active')
- .removeClass('active')
- }
-
-
- // SCROLLSPY PLUGIN DEFINITION
- // ===========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.scrollspy')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.scrollspy
-
- $.fn.scrollspy = Plugin
- $.fn.scrollspy.Constructor = ScrollSpy
-
-
- // SCROLLSPY NO CONFLICT
- // =====================
-
- $.fn.scrollspy.noConflict = function () {
- $.fn.scrollspy = old
- return this
- }
-
-
- // SCROLLSPY DATA-API
- // ==================
-
- $(window).on('load.bs.scrollspy.data-api', function () {
- $('[data-spy="scroll"]').each(function () {
- var $spy = $(this)
- Plugin.call($spy, $spy.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: modal.js v3.3.1
- * 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.3.1'
-
- Modal.TRANSITION_DURATION = 300
- Modal.BACKDROP_TRANSITION_DURATION = 150
-
- Modal.DEFAULTS = {
- backdrop: true,
- keyboard: true,
- show: true
- }
-
- Modal.prototype.toggle = function (_relatedTarget) {
- return this.isShown ? this.hide() : this.show(_relatedTarget)
- }
-
- Modal.prototype.show = function (_relatedTarget) {
- var that = this
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
-
- this.$element.trigger(e)
-
- if (this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = true
-
- this.checkScrollbar()
- this.setScrollbar()
- this.$body.addClass('modal-open')
-
- this.escape()
- this.resize()
-
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
- this.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 (that.options.backdrop) that.adjustBackdrop()
- that.adjustDialog()
-
- 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(Modal.TRANSITION_DURATION) :
- that.$element.trigger('focus').trigger(e)
- })
- }
-
- Modal.prototype.hide = function (e) {
- if (e) e.preventDefault()
-
- e = $.Event('hide.bs.modal')
-
- this.$element.trigger(e)
-
- if (!this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = false
-
- this.escape()
- this.resize()
-
- $(document).off('focusin.bs.modal')
-
- this.$element
- .removeClass('in')
- .attr('aria-hidden', true)
- .off('click.dismiss.bs.modal')
-
- $.support.transition && this.$element.hasClass('fade') ?
- this.$element
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- this.hideModal()
- }
-
- Modal.prototype.enforceFocus = function () {
- $(document)
- .off('focusin.bs.modal') // guard against infinite focus loop
- .on('focusin.bs.modal', $.proxy(function (e) {
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
- this.$element.trigger('focus')
- }
- }, this))
- }
-
- Modal.prototype.escape = function () {
- if (this.isShown && this.options.keyboard) {
- this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
- e.which == 27 && this.hide()
- }, this))
- } else if (!this.isShown) {
- this.$element.off('keydown.dismiss.bs.modal')
- }
- }
-
- Modal.prototype.resize = function () {
- if (this.isShown) {
- $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
- } else {
- $(window).off('resize.bs.modal')
- }
- }
-
- Modal.prototype.hideModal = function () {
- var that = this
- this.$element.hide()
- this.backdrop(function () {
- that.$body.removeClass('modal-open')
- that.resetAdjustments()
- that.resetScrollbar()
- that.$element.trigger('hidden.bs.modal')
- })
- }
-
- Modal.prototype.removeBackdrop = function () {
- this.$backdrop && this.$backdrop.remove()
- this.$backdrop = null
- }
-
- Modal.prototype.backdrop = function (callback) {
- var that = this
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
-
- if (this.isShown && this.options.backdrop) {
- var doAnimate = $.support.transition && animate
-
- this.$backdrop = $('
')
- .prependTo(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(Modal.BACKDROP_TRANSITION_DURATION) :
- callback()
-
- } else if (!this.isShown && this.$backdrop) {
- this.$backdrop.removeClass('in')
-
- var callbackRemove = function () {
- that.removeBackdrop()
- callback && callback()
- }
- $.support.transition && this.$element.hasClass('fade') ?
- this.$backdrop
- .one('bsTransitionEnd', callbackRemove)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callbackRemove()
-
- } else if (callback) {
- callback()
- }
- }
-
- // these following methods are used to handle overflowing modals
-
- Modal.prototype.handleUpdate = function () {
- if (this.options.backdrop) this.adjustBackdrop()
- this.adjustDialog()
- }
-
- Modal.prototype.adjustBackdrop = function () {
- this.$backdrop
- .css('height', 0)
- .css('height', this.$element[0].scrollHeight)
- }
-
- Modal.prototype.adjustDialog = function () {
- var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
-
- this.$element.css({
- paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
- paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
- })
- }
-
- Modal.prototype.resetAdjustments = function () {
- this.$element.css({
- paddingLeft: '',
- paddingRight: ''
- })
- }
-
- Modal.prototype.checkScrollbar = function () {
- this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight
- this.scrollbarWidth = this.measureScrollbar()
- }
-
- Modal.prototype.setScrollbar = function () {
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
- if (this.bodyIsOverflowing) 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.3.1
- * 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.3.1'
-
- Tooltip.TRANSITION_DURATION = 150
-
- Tooltip.DEFAULTS = {
- animation: true,
- placement: 'top',
- selector: false,
- template: '',
- trigger: 'hover focus',
- title: '',
- delay: 0,
- html: false,
- container: false,
- viewport: {
- selector: 'body',
- padding: 0
- }
- }
-
- Tooltip.prototype.init = function (type, element, options) {
- this.enabled = true
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
- this.$viewport = this.options.viewport && $(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.$tip && self.$tip.is(':visible')) {
- self.hoverState = 'in'
- return
- }
-
- 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(this.$element[0].ownerDocument.documentElement, this.$element[0])
- if (e.isDefaultPrevented() || !inDom) return
- var that = this
-
- var $tip = this.tip()
-
- var tipId = this.getUID(this.type)
-
- this.setContent()
- $tip.attr('id', tipId)
- this.$element.attr('aria-describedby', tipId)
-
- if (this.options.animation) $tip.addClass('fade')
-
- var placement = typeof this.options.placement == 'function' ?
- this.options.placement.call(this, $tip[0], this.$element[0]) :
- this.options.placement
-
- var autoToken = /\s?auto?\s?/i
- var autoPlace = autoToken.test(placement)
- if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
- $tip
- .detach()
- .css({ top: 0, left: 0, display: 'block' })
- .addClass(placement)
- .data('bs.' + this.type, this)
-
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
- var pos = this.getPosition()
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (autoPlace) {
- var orgPlacement = placement
- var $container = this.options.container ? $(this.options.container) : this.$element.parent()
- var containerDim = this.getPosition($container)
-
- placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
- placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
- placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
- placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
- placement
-
- $tip
- .removeClass(orgPlacement)
- .addClass(placement)
- }
-
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
- this.applyPlacement(calculatedOffset, placement)
-
- var complete = function () {
- var prevHoverState = that.hoverState
- that.$element.trigger('shown.bs.' + that.type)
- that.hoverState = null
-
- if (prevHoverState == 'out') that.leave(that)
- }
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
- complete()
- }
- }
-
- Tooltip.prototype.applyPlacement = function (offset, placement) {
- var $tip = this.tip()
- var width = $tip[0].offsetWidth
- var height = $tip[0].offsetHeight
-
- // manually read margins because getBoundingClientRect includes difference
- var marginTop = parseInt($tip.css('margin-top'), 10)
- var marginLeft = parseInt($tip.css('margin-left'), 10)
-
- // we must check for NaN for ie 8/9
- if (isNaN(marginTop)) marginTop = 0
- if (isNaN(marginLeft)) marginLeft = 0
-
- offset.top = 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 isVertical = /top|bottom/.test(placement)
- var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
- var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
-
- $tip.offset(offset)
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
- }
-
- Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {
- this.arrow()
- .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
- .css(isHorizontal ? 'top' : 'left', '')
- }
-
- Tooltip.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
-
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
- $tip.removeClass('fade in top bottom left right')
- }
-
- Tooltip.prototype.hide = function (callback) {
- var that = this
- var $tip = this.tip()
- var e = $.Event('hide.bs.' + this.type)
-
- function complete() {
- if (that.hoverState != 'in') $tip.detach()
- that.$element
- .removeAttr('aria-describedby')
- .trigger('hidden.bs.' + that.type)
- callback && callback()
- }
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- $tip.removeClass('in')
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
- complete()
-
- this.hoverState = null
-
- return this
- }
-
- Tooltip.prototype.fixTitle = function () {
- var $e = this.$element
- if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
- }
- }
-
- Tooltip.prototype.hasContent = function () {
- return this.getTitle()
- }
-
- Tooltip.prototype.getPosition = function ($element) {
- $element = $element || this.$element
-
- var el = $element[0]
- var isBody = el.tagName == 'BODY'
-
- var elRect = el.getBoundingClientRect()
- if (elRect.width == null) {
- // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
- elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
- }
- var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
- var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
- var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
-
- return $.extend({}, elRect, scroll, outerDims, elOffset)
- }
-
- Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
-
- }
-
- Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
- var delta = { top: 0, left: 0 }
- if (!this.$viewport) return delta
-
- var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
- var viewportDimensions = this.getPosition(this.$viewport)
-
- if (/right|left/.test(placement)) {
- var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
- var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
- if (topEdgeOffset < viewportDimensions.top) { // top overflow
- delta.top = viewportDimensions.top - topEdgeOffset
- } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
- delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
- }
- } else {
- var leftEdgeOffset = pos.left - viewportPadding
- var rightEdgeOffset = pos.left + viewportPadding + actualWidth
- if (leftEdgeOffset < viewportDimensions.left) { // left overflow
- delta.left = viewportDimensions.left - leftEdgeOffset
- } else if (rightEdgeOffset > viewportDimensions.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.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 () {
- var that = this
- clearTimeout(this.timeout)
- this.hide(function () {
- that.$element.off('.' + that.type).removeData('bs.' + that.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
- var selector = options && options.selector
-
- if (!data && option == 'destroy') return
- if (selector) {
- if (!data) $this.data('bs.tooltip', (data = {}))
- if (!data[selector]) data[selector] = new Tooltip(this, options)
- } else {
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
- }
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tooltip
-
- $.fn.tooltip = Plugin
- $.fn.tooltip.Constructor = Tooltip
-
-
- // TOOLTIP NO CONFLICT
- // ===================
-
- $.fn.tooltip.noConflict = function () {
- $.fn.tooltip = old
- return this
- }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.3.1
- * 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.3.1'
-
- Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
- placement: 'right',
- trigger: 'click',
- content: '',
- template: ''
- })
-
-
- // NOTE: POPOVER EXTENDS tooltip.js
- // ================================
-
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
- Popover.prototype.constructor = Popover
-
- Popover.prototype.getDefaults = function () {
- return Popover.DEFAULTS
- }
-
- Popover.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
- var content = this.getContent()
-
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
- $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
- this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
- ](content)
-
- $tip.removeClass('fade top bottom left right in')
-
- // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
- // this manually by checking the contents.
- if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
- }
-
- Popover.prototype.hasContent = function () {
- return this.getTitle() || this.getContent()
- }
-
- Popover.prototype.getContent = function () {
- var $e = this.$element
- var o = this.options
-
- return $e.attr('data-content')
- || (typeof o.content == 'function' ?
- o.content.call($e[0]) :
- o.content)
- }
-
- Popover.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
- }
-
- Popover.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
- var selector = options && options.selector
-
- if (!data && option == 'destroy') return
- if (selector) {
- if (!data) $this.data('bs.popover', (data = {}))
- if (!data[selector]) data[selector] = new Popover(this, options)
- } else {
- 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);
-
-
-}).call(global, module, undefined, undefined);
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"jquery":4}],3:[function(require,module,exports){
-// shim for using process in browser
-
-var process = module.exports = {};
-
-process.nextTick = (function () {
- var canSetImmediate = typeof window !== 'undefined'
- && window.setImmediate;
- var canPost = typeof window !== 'undefined'
- && window.postMessage && window.addEventListener
- ;
-
- if (canSetImmediate) {
- return function (f) { return window.setImmediate(f) };
- }
-
- if (canPost) {
- var queue = [];
- window.addEventListener('message', function (ev) {
- var source = ev.source;
- if ((source === window || source === null) && ev.data === 'process-tick') {
- ev.stopPropagation();
- if (queue.length > 0) {
- var fn = queue.shift();
- fn();
- }
- }
- }, true);
-
- return function nextTick(fn) {
- queue.push(fn);
- window.postMessage('process-tick', '*');
- };
- }
-
- return function nextTick(fn) {
- setTimeout(fn, 0);
- };
-})();
-
-process.title = 'browser';
-process.browser = true;
-process.env = {};
-process.argv = [];
-
-function noop() {}
-
-process.on = noop;
-process.addListener = noop;
-process.once = noop;
-process.off = noop;
-process.removeListener = noop;
-process.removeAllListeners = noop;
-process.emit = noop;
-
-process.binding = function (name) {
- throw new Error('process.binding is not supported');
-}
-
-// TODO(shtylman)
-process.cwd = function () { return '/' };
-process.chdir = function (dir) {
- throw new Error('process.chdir is not supported');
-};
-
-},{}],4:[function(require,module,exports){
-/*!
- * jQuery JavaScript Library v2.1.4
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2015-04-28T16:01Z
- */
-
-(function( global, factory ) {
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Support: Firefox 18+
-// Can't be in strict mode, several libs including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-//
-
-var arr = [];
-
-var slice = arr.slice;
-
-var concat = arr.concat;
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var support = {};
-
-
-
-var
- // Use the correct document accordingly with window argument (sandbox)
- document = window.document,
-
- version = "2.1.4",
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init( selector, context );
- },
-
- // Support: Android<4.1
- // Make sure we trim BOM and NBSP
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/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();
- };
-
-jQuery.fn = jQuery.prototype = {
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // Start with an empty selector
- selector: "",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num != null ?
-
- // Return just the one element from the set
- ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
- // Return all the elements in a clean array
- slice.call( this );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
- ret.context = this.context;
-
- // 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 );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: arr.sort,
- splice: arr.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
-
- // Skip the boolean and the target
- target = arguments[ i ] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // Extend jQuery itself if only one argument is passed
- if ( i === length ) {
- target = this;
- i--;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- noop: function() {},
-
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray,
-
- isWindow: function( obj ) {
- return obj != null && obj === obj.window;
- },
-
- isNumeric: function( obj ) {
- // parseFloat NaNs numeric-cast false positives (null|true|false|"")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- // adding 1 corrects loss of precision from parseFloat (#15100)
- return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
- },
-
- isPlainObject: function( obj ) {
- // Not plain objects:
- // - Any object or value whose internal [[Class]] property is not "[object Object]"
- // - DOM nodes
- // - window
- if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- if ( obj.constructor &&
- !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
- return false;
- }
-
- // If the function hasn't returned already, we're confident that
- // |obj| is a plain object, created by {} or constructed with new Object
- return true;
- },
-
- isEmptyObject: function( obj ) {
- var name;
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- type: function( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
- // Support: Android<4.0, iOS<6 (functionish RegExp)
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call(obj) ] || "object" :
- typeof obj;
- },
-
- // Evaluates a script in a global context
- globalEval: function( code ) {
- var script,
- indirect = eval;
-
- code = jQuery.trim( code );
-
- if ( code ) {
- // If the code includes a valid, prologue position
- // strict mode pragma, execute code by injecting a
- // script tag into the document.
- if ( code.indexOf("use strict") === 1 ) {
- script = document.createElement("script");
- script.text = code;
- document.head.appendChild( script ).parentNode.removeChild( script );
- } else {
- // Otherwise, avoid the DOM node creation, insertion
- // and removal by using an indirect global eval
- indirect( code );
- }
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Support: IE9-11+
- // 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 value,
- i = 0,
- length = obj.length,
- isArray = isArraylike( obj );
-
- if ( args ) {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- }
- }
-
- return obj;
- },
-
- // Support: Android<4.1
- trim: function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArraylike( Object(arr) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- return arr == null ? -1 : indexOf.call( arr, elem, i );
- },
-
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- for ( ; j < len; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value,
- i = 0,
- length = elems.length,
- isArray = isArraylike( elems ),
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- // Flatten any nested arrays
- return concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var tmp, args, proxy;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- now: Date.now,
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
-
- // Support: iOS 8.2 (not reproducible in simulator)
- // `in` check used to prevent JIT error (gh-2145)
- // hasOwn isn't used here due to false negatives
- // regarding Nodelist length in IE
- var length = "length" in obj && obj.length,
- type = jQuery.type( obj );
-
- if ( type === "function" || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- if ( obj.nodeType === 1 && length ) {
- return true;
- }
-
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.2.0-pre
- * http://sizzlejs.com/
- *
- * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-12-16
- */
-(function( window ) {
-
-var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + 1 * new Date(),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- // General-purpose constants
- MAX_NEGATIVE = 1 << 31,
-
- // Instance methods
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf as it's faster than native
- // http://jsperf.com/thor-indexof-vs-for/5
- indexOf = function( list, elem ) {
- var i = 0,
- len = list.length;
- for ( ; i < len; i++ ) {
- if ( list[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // 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#" ),
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
- "*\\]",
-
- pseudos = ":(" + characterEncoding + ")(?:\\((" +
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
- // 3. anything else (capture 2)
- ".*" +
- ")\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rwhitespace = new RegExp( whitespace + "+", "g" ),
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + characterEncoding + ")" ),
- "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
- "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rsibling = /[+~]/,
- rescape = /'|\\/g,
-
- // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox<24
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ?
- escaped :
- high < 0 ?
- // BMP codepoint
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- },
-
- // Used for iframes
- // See setDocument()
- // Removing the function wrapper causes a "Permission Denied"
- // error in IE
- unloadHandler = function() {
- setDocument();
- };
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var match, elem, m, nodeType,
- // QSA vars
- i, groups, old, nid, newContext, newSelector;
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
-
- context = context || document;
- results = results || [];
- nodeType = context.nodeType;
-
- if ( typeof selector !== "string" || !selector ||
- nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
- return results;
- }
-
- if ( !seed && documentIsHTML ) {
-
- // Try to shortcut find operations when possible (e.g., not under DocumentFragment)
- if ( nodeType !== 11 && (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 (jQuery #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, context.getElementsByTagName( selector ) );
- return results;
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( (m = match[3]) && support.getElementsByClassName ) {
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // QSA path
- if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
- nid = old = expando;
- newContext = context;
- newSelector = nodeType !== 1 && 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 ( 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 + toSelector( groups[i] );
- }
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
- newSelector = groups.join(",");
- }
-
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch(qsaError) {
- } finally {
- if ( !old ) {
- context.removeAttribute("id");
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key + " " ] = value);
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
- var div = document.createElement("div");
-
- try {
- return !!fn( div );
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if ( div.parentNode ) {
- div.parentNode.removeChild( div );
- }
- // release memory in IE
- div = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
- var arr = attrs.split("|"),
- i = attrs.length;
-
- while ( i-- ) {
- Expr.attrHandle[ arr[i] ] = handler;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- ( ~b.sourceIndex || MAX_NEGATIVE ) -
- ( ~a.sourceIndex || MAX_NEGATIVE );
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
- return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare, parent,
- doc = node ? node.ownerDocument || node : preferredDoc;
-
- // If no document and documentElement is available, return
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Set our document
- document = doc;
- docElem = doc.documentElement;
- parent = doc.defaultView;
-
- // Support: IE>8
- // If iframe document is assigned to "document" variable and if iframe has been reloaded,
- // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
- // IE6-8 do not support the defaultView property so parent will be undefined
- if ( parent && parent !== parent.top ) {
- // IE11 does not have attachEvent, so all must suffer
- if ( parent.addEventListener ) {
- parent.addEventListener( "unload", unloadHandler, false );
- } else if ( parent.attachEvent ) {
- parent.attachEvent( "onunload", unloadHandler );
- }
- }
-
- /* Support tests
- ---------------------------------------------------------------------- */
- documentIsHTML = !isXML( doc );
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties
- // (excepting IE8 booleans)
- support.attributes = assert(function( div ) {
- div.className = "i";
- return !div.getAttribute("className");
- });
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function( div ) {
- div.appendChild( doc.createComment("") );
- return !div.getElementsByTagName("*").length;
- });
-
- // Support: IE<9
- support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function( div ) {
- docElem.appendChild( div ).id = expando;
- return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
- });
-
- // ID find and filter
- if ( support.getById ) {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
- 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 ] : [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
- // Support: IE6/7
- // getElementById is not reliable as a find shortcut
- delete Expr.find["ID"];
-
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( tag );
-
- // DocumentFragment nodes don't have gEBTN
- } else if ( support.qsa ) {
- return context.querySelectorAll( tag );
- }
- } :
-
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See http://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
- // 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 explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // http://bugs.jquery.com/ticket/12359
- docElem.appendChild( div ).innerHTML = " " +
- "" +
- " ";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( div.querySelectorAll("[msallowcapture^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !div.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
- if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
- rbuggyQSA.push("~=");
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
-
- // Support: Safari 8+, iOS 8+
- // https://bugs.webkit.org/show_bug.cgi?id=136851
- // In-page `selector#id sibing-combinator selector` fails
- if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
- rbuggyQSA.push(".#.+[+~]");
- }
- });
-
- assert(function( div ) {
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = doc.createElement("input");
- input.setAttribute( "type", "hidden" );
- div.appendChild( input ).setAttribute( "name", "D" );
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if ( div.querySelectorAll("[name=d]").length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":enabled").length ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- div.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( div ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( div, "div" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( div, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
- // Element contains another
- // Purposefully does not implement inclusive descendent
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- // Choose the first element that is related to our preferred document
- if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Parentless nodes are either documents or disconnected
- if ( !aup || !bup ) {
- return a === doc ? -1 :
- b === doc ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- return doc;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- if ( support.matchesSelector && documentIsHTML &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch (e) {}
- }
-
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
-
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- while ( (node = elem[i++]) ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[6] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[3] ) {
- match[2] = match[4] || match[5] || "";
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, outerCache, node, diff, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
- // Seek `elem` from a previously-cached index
- outerCache = parent[ expando ] || (parent[ expando ] = {});
- cache = outerCache[ type ] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = cache[0] === dirruns && cache[2];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- outerCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- // Use previously-cached element index if available
- } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
- diff = cache[1];
-
- // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
- } else {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
- // Cache the index of each encountered element
- if ( useCache ) {
- (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- // Don't keep the element (issue #299)
- input[0] = null;
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- text = text.replace( runescape, funescape );
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifier
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": 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;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( (tokens = []) );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- checkNonElements = base && dir === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var oldCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
- if ( (oldCache = outerCache[ dir ]) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- // Assign to newCache so results back-propagate to previous elements
- return (newCache[ 2 ] = oldCache[ 2 ]);
- } else {
- // Reuse newcache so results back-propagate to previous elements
- outerCache[ dir ] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
- return true;
- }
- }
- }
- }
- }
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- // Avoid hanging onto element (issue #299)
- checkContext = null;
- return ret;
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
- len = elems.length;
-
- if ( outermost ) {
- outermostContext = context !== document && context;
- }
-
- // Add elements passing elementMatchers directly to results
- // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id
- for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context, xml ) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // Apply set filters to unmatched elements
- matchedCount += i;
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( (selector = compiled.selector || selector) );
-
- results = results || [];
-
- // Try to minimize operations if there is no seed and 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" &&
- support.getById && context.nodeType === 9 && documentIsHTML &&
- Expr.relative[ tokens[1].type ] ) {
-
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if ( compiled ) {
- context = context.parentNode;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome 14-35+
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
- // Should return 1, but returns 4 (following)
- return div1.compareDocumentPosition( document.createElement("div") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
- div.innerHTML = " ";
- return div.firstChild.getAttribute("href") === "#" ;
-}) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
- div.innerHTML = " ";
- div.firstChild.setAttribute( "value", "" );
- return div.firstChild.getAttribute( "value" ) === "";
-}) ) {
- addHandle( "value", function( elem, name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
- return div.getAttribute("disabled") == null;
-}) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- (val = elem.getAttributeNode( name )) && val.specified ?
- val.value :
- null;
- }
- });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- /* jshint -W018 */
- return !!qualifier.call( elem, i, elem ) !== not;
- });
-
- }
-
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- });
-
- }
-
- if ( typeof qualifier === "string" ) {
- if ( risSimple.test( qualifier ) ) {
- return jQuery.filter( qualifier, elements, not );
- }
-
- qualifier = jQuery.filter( qualifier, elements );
- }
-
- return jQuery.grep( elements, function( elem ) {
- return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
- });
-}
-
-jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 && elem.nodeType === 1 ?
- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- }));
-};
-
-jQuery.fn.extend({
- find: function( selector ) {
- var i,
- len = this.length,
- ret = [],
- self = this;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- }) );
- }
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- // Needed because $( selector, context ) becomes $( context ).find( selector )
- ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
- ret.selector = this.selector ? this.selector + " " + selector : selector;
- return ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector || [], false) );
- },
- not: function( selector ) {
- return this.pushStack( winnow(this, selector || [], true) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
-});
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
- // A simple way to check for HTML strings
- // Prioritize #id over to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
- init = jQuery.fn.init = function( selector, context ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
-
- // Option to run scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge( this, jQuery.parseHTML(
- match[1],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
- // Properties of context are called as methods if possible
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[2] );
-
- // Support: Blackberry 4.6
- // gEBID returns nodes no longer in the document (#6963)
- if ( elem && elem.parentNode ) {
- // 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: $(DOMElement)
- } else if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return typeof rootjQuery.ready !== "undefined" ?
- rootjQuery.ready( selector ) :
- // Execute immediately if ready is not present
- selector( jQuery );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
- // Methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.extend({
- dir: function( elem, dir, until ) {
- var matched = [],
- truncate = until !== undefined;
-
- while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
- if ( elem.nodeType === 1 ) {
- if ( truncate && jQuery( elem ).is( until ) ) {
- break;
- }
- matched.push( elem );
- }
- }
- return matched;
- },
-
- sibling: function( n, elem ) {
- var matched = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- matched.push( n );
- }
- }
-
- return matched;
- }
-});
-
-jQuery.fn.extend({
- has: function( target ) {
- var targets = jQuery( target, this ),
- l = targets.length;
-
- return this.filter(function() {
- var i = 0;
- for ( ; i < l; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( ; i < l; i++ ) {
- for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
- // Always skip document fragments
- if ( cur.nodeType < 11 && (pos ?
- pos.index(cur) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector(cur, selectors)) ) {
-
- matched.push( cur );
- break;
- }
- }
- }
-
- return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
- },
-
- // Determine the position of an element within the set
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // Index in selector
- if ( typeof elem === "string" ) {
- return indexOf.call( jQuery( elem ), this[ 0 ] );
- }
-
- // Locate the position of the desired element
- return indexOf.call( this,
-
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[ 0 ] : elem
- );
- },
-
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.unique(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter(selector)
- );
- }
-});
-
-function sibling( cur, dir ) {
- while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
- return cur;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return 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 elem.contentDocument || jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var matched = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- matched = jQuery.filter( selector, matched );
- }
-
- if ( this.length > 1 ) {
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- jQuery.unique( matched );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- matched.reverse();
- }
- }
-
- return this.pushStack( matched );
- };
-});
-var rnotwhite = (/\S+/g);
-
-
-
-// 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.match( rnotwhite ) || [], 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" ) {
- if ( !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;
- },
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- firingLength = 0;
- 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 ) {
- if ( list && ( !fired || stack ) ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- 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 fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
- // deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[ tuple[1] ](function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .done( newDefer.resolve )
- .fail( newDefer.reject )
- .progress( newDefer.notify );
- } else {
- newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
- }
- });
- });
- 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 ]
- deferred[ tuple[0] ] = function() {
- deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
- return this;
- };
- 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 = 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 ? 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();
- }
-});
-
-
-// The deferred used on DOM ready
-var readyList;
-
-jQuery.fn.ready = function( fn ) {
- // Add the callback
- jQuery.ready.promise().done( fn );
-
- return this;
-};
-
-jQuery.extend({
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.triggerHandler ) {
- jQuery( document ).triggerHandler( "ready" );
- jQuery( document ).off( "ready" );
- }
- }
-});
-
-/**
- * The ready event handler and self cleanup method
- */
-function completed() {
- document.removeEventListener( "DOMContentLoaded", completed, false );
- window.removeEventListener( "load", completed, false );
- jQuery.ready();
-}
-
-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 );
-
- } else {
-
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed, false );
- }
- }
- return readyList.promise( obj );
-};
-
-// Kick off the DOM ready check even if the user does not
-jQuery.ready.promise();
-
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- len = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < len; i++ ) {
- fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
- }
- }
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- len ? fn( elems[0], key ) : emptyGet;
-};
-
-
-/**
- * Determines whether an object can have data
- */
-jQuery.acceptData = function( owner ) {
- // Accepts only:
- // - Node
- // - Node.ELEMENT_NODE
- // - Node.DOCUMENT_NODE
- // - Object
- // - Any
- /* jshint -W018 */
- return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
-};
-
-
-function Data() {
- // Support: Android<4,
- // Old WebKit does not have Object.preventExtensions/freeze method,
- // return new empty object instead with no [[set]] accessor
- Object.defineProperty( this.cache = {}, 0, {
- get: function() {
- return {};
- }
- });
-
- this.expando = jQuery.expando + Data.uid++;
-}
-
-Data.uid = 1;
-Data.accepts = jQuery.acceptData;
-
-Data.prototype = {
- key: function( owner ) {
- // We can accept data for non-element nodes in modern browsers,
- // but we should not, see #8335.
- // Always return the key for a frozen object.
- if ( !Data.accepts( owner ) ) {
- return 0;
- }
-
- var descriptor = {},
- // Check if the owner object already has a cache key
- unlock = owner[ this.expando ];
-
- // If not, create one
- if ( !unlock ) {
- unlock = Data.uid++;
-
- // Secure it in a non-enumerable, non-writable property
- try {
- descriptor[ this.expando ] = { value: unlock };
- Object.defineProperties( owner, descriptor );
-
- // Support: Android<4
- // Fallback to a less secure definition
- } catch ( e ) {
- descriptor[ this.expando ] = unlock;
- jQuery.extend( owner, descriptor );
- }
- }
-
- // Ensure the cache object
- if ( !this.cache[ unlock ] ) {
- this.cache[ unlock ] = {};
- }
-
- return unlock;
- },
- set: function( owner, data, value ) {
- var prop,
- // There may be an unlock assigned to this node,
- // if there is no entry for this "owner", create one inline
- // and set the unlock as though an owner entry had always existed
- unlock = this.key( owner ),
- cache = this.cache[ unlock ];
-
- // Handle: [ owner, key, value ] args
- if ( typeof data === "string" ) {
- cache[ data ] = value;
-
- // Handle: [ owner, { properties } ] args
- } else {
- // Fresh assignments by object are shallow copied
- if ( jQuery.isEmptyObject( cache ) ) {
- jQuery.extend( this.cache[ unlock ], data );
- // Otherwise, copy the properties one-by-one to the cache object
- } else {
- for ( prop in data ) {
- cache[ prop ] = data[ prop ];
- }
- }
- }
- return cache;
- },
- get: function( owner, key ) {
- // Either a valid cache is found, or will be created.
- // New caches will be created and the unlock returned,
- // allowing direct access to the newly created
- // empty data object. A valid owner object must be provided.
- var cache = this.cache[ this.key( owner ) ];
-
- return key === undefined ?
- cache : cache[ key ];
- },
- access: function( owner, key, value ) {
- var stored;
- // In cases where either:
- //
- // 1. No key was specified
- // 2. A string key was specified, but no value provided
- //
- // Take the "read" path and allow the get method to determine
- // which value to return, respectively either:
- //
- // 1. The entire cache object
- // 2. The data stored at the key
- //
- if ( key === undefined ||
- ((key && typeof key === "string") && value === undefined) ) {
-
- stored = this.get( owner, key );
-
- return stored !== undefined ?
- stored : this.get( owner, jQuery.camelCase(key) );
- }
-
- // [*]When the key is not a string, or both a key and value
- // are specified, set or extend (existing objects) with either:
- //
- // 1. An object of properties
- // 2. A key and value
- //
- this.set( owner, key, value );
-
- // Since the "set" path can have two possible entry points
- // return the expected data based on which path was taken[*]
- return value !== undefined ? value : key;
- },
- remove: function( owner, key ) {
- var i, name, camel,
- unlock = this.key( owner ),
- cache = this.cache[ unlock ];
-
- if ( key === undefined ) {
- this.cache[ unlock ] = {};
-
- } else {
- // Support array or space separated string of keys
- if ( jQuery.isArray( key ) ) {
- // If "name" is an array of keys...
- // When data is initially created, via ("key", "val") signature,
- // keys will be converted to camelCase.
- // Since there is no way to tell _how_ a key was added, remove
- // both plain key and camelCase key. #12786
- // This will only penalize the array argument path.
- name = key.concat( key.map( jQuery.camelCase ) );
- } else {
- camel = jQuery.camelCase( key );
- // Try the string as a key before any manipulation
- if ( key in cache ) {
- name = [ key, camel ];
- } else {
- // If a key with the spaces exists, use it.
- // Otherwise, create an array by matching non-whitespace
- name = camel;
- name = name in cache ?
- [ name ] : ( name.match( rnotwhite ) || [] );
- }
- }
-
- i = name.length;
- while ( i-- ) {
- delete cache[ name[ i ] ];
- }
- }
- },
- hasData: function( owner ) {
- return !jQuery.isEmptyObject(
- this.cache[ owner[ this.expando ] ] || {}
- );
- },
- discard: function( owner ) {
- if ( owner[ this.expando ] ) {
- delete this.cache[ owner[ this.expando ] ];
- }
- }
-};
-var data_priv = new Data();
-
-var data_user = new Data();
-
-
-
-// Implementation Summary
-//
-// 1. Enforce API surface and semantic compatibility with 1.9.x branch
-// 2. Improve the module's maintainability by reducing the storage
-// paths to a single mechanism.
-// 3. Use the same single mechanism to support "private" and "user" data.
-// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
-// 5. Avoid exposing implementation details on user objects (eg. expando properties)
-// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /([A-Z])/g;
-
-function dataAttr( elem, key, data ) {
- var name;
-
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
- name = "data-" + key.replace( rmultiDash, "-$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
- data_user.set( elem, key, data );
- } else {
- data = undefined;
- }
- }
- return data;
-}
-
-jQuery.extend({
- hasData: function( elem ) {
- return data_user.hasData( elem ) || data_priv.hasData( elem );
- },
-
- data: function( elem, name, data ) {
- return data_user.access( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- data_user.remove( elem, name );
- },
-
- // TODO: Now that all calls to _data and _removeData have been replaced
- // with direct calls to data_priv methods, these can be deprecated.
- _data: function( elem, name, data ) {
- return data_priv.access( elem, name, data );
- },
-
- _removeData: function( elem, name ) {
- data_priv.remove( elem, name );
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var i, name, data,
- elem = this[ 0 ],
- attrs = elem && elem.attributes;
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = data_user.get( elem );
-
- if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
- // Support: IE11+
- // The attrs elements can be null (#14894)
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.slice(5) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- data_priv.set( elem, "hasDataAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each(function() {
- data_user.set( this, key );
- });
- }
-
- return access( this, function( value ) {
- var data,
- camelKey = jQuery.camelCase( key );
-
- // The calling jQuery object (element matches) is not empty
- // (and therefore has an element appears at this[ 0 ]) and the
- // `value` parameter was not undefined. An empty jQuery object
- // will result in `undefined` for elem = this[ 0 ] which will
- // throw an exception if an attempt to read a data cache is made.
- if ( elem && value === undefined ) {
- // Attempt to get data from the cache
- // with the key as-is
- data = data_user.get( elem, key );
- if ( data !== undefined ) {
- return data;
- }
-
- // Attempt to get data from the cache
- // with the key camelized
- data = data_user.get( elem, camelKey );
- if ( data !== undefined ) {
- return data;
- }
-
- // Attempt to "discover" the data in
- // HTML5 custom data-* attrs
- data = dataAttr( elem, camelKey, undefined );
- if ( data !== undefined ) {
- return data;
- }
-
- // We tried really hard, but the data doesn't exist.
- return;
- }
-
- // Set the data...
- this.each(function() {
- // First, attempt to store a copy or reference of any
- // data that might've been store with a camelCased key.
- var data = data_user.get( this, camelKey );
-
- // For HTML5 data-* attribute interop, we have to
- // store property names with dashes in a camelCase form.
- // This might not apply to all properties...*
- data_user.set( this, camelKey, value );
-
- // *... In the case of properties that might _actually_
- // have dashes, we need to also store a copy of that
- // unchanged property.
- if ( key.indexOf("-") !== -1 && data !== undefined ) {
- data_user.set( this, key, value );
- }
- });
- }, null, value, arguments.length > 1, null, true );
- },
-
- removeData: function( key ) {
- return this.each(function() {
- data_user.remove( this, key );
- });
- }
-});
-
-
-jQuery.extend({
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = data_priv.get( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray( data ) ) {
- queue = data_priv.access( elem, type, jQuery.makeArray(data) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // Clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // Not public - generate a queueHooks object, or return the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return data_priv.get( elem, key ) || data_priv.access( elem, key, {
- empty: jQuery.Callbacks("once memory").add(function() {
- data_priv.remove( elem, [ type + "queue", key ] );
- })
- });
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[0], type );
- }
-
- return data === undefined ?
- this :
- this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- // Ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while ( i-- ) {
- tmp = data_priv.get( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-});
-var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHidden = function( elem, el ) {
- // isHidden might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
- };
-
-var rcheckableType = (/^(?:checkbox|radio)$/i);
-
-
-
-(function() {
- var fragment = document.createDocumentFragment(),
- div = fragment.appendChild( document.createElement( "div" ) ),
- input = document.createElement( "input" );
-
- // Support: Safari<=5.1
- // Check state lost if the name is set (#11217)
- // Support: Windows Web Apps (WWA)
- // `name` and `type` must use .setAttribute for WWA (#14901)
- input.setAttribute( "type", "radio" );
- input.setAttribute( "checked", "checked" );
- input.setAttribute( "name", "t" );
-
- div.appendChild( input );
-
- // Support: Safari<=5.1, Android<4.2
- // Older WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE<=11+
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- div.innerHTML = "x ";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-})();
-var strundefined = typeof undefined;
-
-
-
-support.focusinBubbles = "onfocusin" in window;
-
-
-var
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
-
- var handleObjIn, eventHandle, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = data_priv.get( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !(events = elemData.events) ) {
- events = elemData.events = {};
- }
- if ( !(eventHandle = elemData.handle) ) {
- eventHandle = elemData.handle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
- jQuery.event.dispatch.apply( elem, arguments ) : undefined;
- };
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !(handlers = events[ type ]) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
-
- var j, origCount, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = data_priv.hasData( elem ) && data_priv.get( elem );
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- delete elemData.handle;
- data_priv.remove( elem, "events" );
- }
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
-
- var i, cur, tmp, bubbleType, ontype, handle, special,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf(".") >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf(":") < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join(".");
- event.namespace_re = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === (elem.ownerDocument || document) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
- jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- elem[ type ]();
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event );
-
- var i, j, ret, matched, handleObj,
- handlerQueue = [],
- args = slice.call( arguments ),
- handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
- // Triggered event must either 1) have no namespace, or 2) have namespace(s)
- // a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( (event.result = ret) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var i, matches, sel, handleObj,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Find delegate handlers
- // Black-hole SVG instance trees (#13180)
- // Avoid non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
- for ( ; cur !== this; cur = cur.parentNode || this ) {
-
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.disabled !== true || event.type !== "click" ) {
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matches[ sel ] === undefined ) {
- matches[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) >= 0 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matches[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, handlers: matches });
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( delegateCount < handlers.length ) {
- handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
- }
-
- return handlerQueue;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- props: "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 offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var eventDoc, doc, body,
- button = original.button;
-
- // 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 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, copy,
- type = event.type,
- originalEvent = event,
- fixHook = this.fixHooks[ type ];
-
- if ( !fixHook ) {
- this.fixHooks[ type ] = fixHook =
- rmouseEvent.test( type ) ? this.mouseHooks :
- rkeyEvent.test( type ) ? this.keyHooks :
- {};
- }
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = new jQuery.Event( originalEvent );
-
- i = copy.length;
- while ( i-- ) {
- prop = copy[ i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Support: Cordova 2.5 (WebKit) (#13255)
- // All events should have a target; Cordova deviceready doesn't
- if ( !event.target ) {
- event.target = document;
- }
-
- // Support: Safari 6.0+, Chrome<28
- // Target should not be a text node (#504, #13143)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
- },
-
- special: {
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- focus: {
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function() {
- if ( this !== safeActiveElement() && this.focus ) {
- this.focus();
- return false;
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === safeActiveElement() && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
- // For checkbox, fire native event so checked state will be right
- trigger: function() {
- if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
- this.click();
- return false;
- }
- },
-
- // For cross-browser consistency, don't fire native .click() on links
- _default: function( event ) {
- return jQuery.nodeName( event.target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert if the returnValue field is not set.
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- },
-
- 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();
- }
- }
-};
-
-jQuery.removeEvent = function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
-};
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
- // Support: Android<4.0
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.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 = {
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
-
- if ( e && e.preventDefault ) {
- e.preventDefault();
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
-
- if ( e && e.stopPropagation ) {
- e.stopPropagation();
- }
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if ( e && e.stopImmediatePropagation ) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-// Support: Chrome 15+
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For 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;
- }
- };
-});
-
-// Support: Firefox, Chrome, Safari
-// Create "bubbling" focus and blur events
-if ( !support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- var doc = this.ownerDocument || this,
- attaches = data_priv.access( doc, fix );
-
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this,
- attaches = data_priv.access( doc, fix ) - 1;
-
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- data_priv.remove( doc, fix );
-
- } else {
- data_priv.access( doc, fix, attaches );
- }
- }
- };
- });
-}
-
-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" ) {
- // ( 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 );
- });
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- var elem = this[0];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-});
-
-
-var
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
- rtagName = /<([\w:]+)/,
- rhtml = /<|?\w+;/,
- rnoInnerhtml = /<(?:script|style|link)/i,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /^$|\/(?:java|ecma)script/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*\s*$/g,
-
- // We have to close these tags to support XHTML (#13200)
- wrapMap = {
-
- // Support: IE9
- option: [ 1, "", " " ],
-
- thead: [ 1, "" ],
- col: [ 2, "" ],
- tr: [ 2, "" ],
- td: [ 3, "" ],
-
- _default: [ 0, "", "" ]
- };
-
-// Support: IE9
-wrapMap.optgroup = wrapMap.option;
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// Support: 1.x compatibility
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
- return jQuery.nodeName( elem, "table" ) &&
- jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
-
- elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
- elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- var match = rscriptTypeMasked.exec( elem.type );
-
- if ( match ) {
- elem.type = match[ 1 ];
- } else {
- elem.removeAttribute("type");
- }
-
- return elem;
-}
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- data_priv.set(
- elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
- );
- }
-}
-
-function cloneCopyEvent( src, dest ) {
- var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
-
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // 1. Copy private data: events, handlers, etc.
- if ( data_priv.hasData( src ) ) {
- pdataOld = data_priv.access( src );
- pdataCur = data_priv.set( dest, pdataOld );
- events = pdataOld.events;
-
- if ( events ) {
- delete pdataCur.handle;
- pdataCur.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
- }
-
- // 2. Copy user data
- if ( data_user.hasData( src ) ) {
- udataOld = data_user.access( src );
- udataCur = jQuery.extend( {}, udataOld );
-
- data_user.set( dest, udataCur );
- }
-}
-
-function getAll( context, tag ) {
- var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
- context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
- [];
-
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], ret ) :
- ret;
-}
-
-// Fix IE bugs, see support tests
-function fixInput( src, dest ) {
- var nodeName = dest.nodeName.toLowerCase();
-
- // Fails to persist the checked state of a cloned checkbox or radio button.
- if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
- dest.checked = src.checked;
-
- // Fails to return the selected option to the default selected state when cloning options
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var i, l, srcElements, destElements,
- clone = elem.cloneNode( true ),
- inPage = jQuery.contains( elem.ownerDocument, elem );
-
- // Fix IE cloning issues
- if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
- !jQuery.isXMLDoc( elem ) ) {
-
- // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- fixInput( srcElements[ i ], destElements[ i ] );
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- cloneCopyEvent( srcElements[ i ], destElements[ i ] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- // Return the cloned set
- return clone;
- },
-
- buildFragment: function( elems, context, scripts, selection ) {
- var elem, tmp, tag, wrap, contains, j,
- fragment = context.createDocumentFragment(),
- nodes = [],
- i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( jQuery.type( elem ) === "object" ) {
- // Support: QtWebKit, PhantomJS
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || fragment.appendChild( context.createElement("div") );
-
- // Deserialize a standard representation
- tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
- tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1>$2>" ) + wrap[ 2 ];
-
- // Descend through wrappers to the right content
- j = wrap[ 0 ];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Support: QtWebKit, PhantomJS
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( nodes, tmp.childNodes );
-
- // Remember the top-level container
- tmp = fragment.firstChild;
-
- // Ensure the created nodes are orphaned (#12392)
- tmp.textContent = "";
- }
- }
- }
-
- // Remove wrapper from fragment
- fragment.textContent = "";
-
- i = 0;
- while ( (elem = nodes[ i++ ]) ) {
-
- // #4087 - If origin and destination elements are the same, and this is
- // that element, do not do anything
- if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( fragment.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( (elem = tmp[ j++ ]) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- return fragment;
- },
-
- cleanData: function( elems ) {
- var data, elem, type, key,
- special = jQuery.event.special,
- i = 0;
-
- for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
- if ( jQuery.acceptData( elem ) ) {
- key = elem[ data_priv.expando ];
-
- if ( key && (data = data_priv.cache[ key ]) ) {
- 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 );
- }
- }
- }
- if ( data_priv.cache[ key ] ) {
- // Discard any remaining `private` data
- delete data_priv.cache[ key ];
- }
- }
- }
- // Discard any remaining `user` data
- delete data_user.cache[ elem[ data_user.expando ] ];
- }
- }
-});
-
-jQuery.fn.extend({
- text: function( value ) {
- return access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().each(function() {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- this.textContent = value;
- }
- });
- }, null, value, arguments.length );
- },
-
- append: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- });
- },
-
- before: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- });
- },
-
- after: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- });
- },
-
- remove: function( selector, keepData /* Internal Use Only */ ) {
- var elem,
- elems = selector ? jQuery.filter( selector, this ) : this,
- i = 0;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem ) );
- }
-
- if ( elem.parentNode ) {
- if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
- setGlobalEval( getAll( elem, "script" ) );
- }
- elem.parentNode.removeChild( elem );
- }
- }
-
- return this;
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; (elem = this[i]) != null; i++ ) {
- if ( elem.nodeType === 1 ) {
-
- // Prevent memory leaks
- jQuery.cleanData( getAll( elem, false ) );
-
- // Remove any remaining nodes
- elem.textContent = "";
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map(function() {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- return access( this, function( value ) {
- var elem = this[ 0 ] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined && elem.nodeType === 1 ) {
- return elem.innerHTML;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
-
- value = value.replace( rxhtmlTag, "<$1>$2>" );
-
- try {
- for ( ; i < l; i++ ) {
- elem = this[ i ] || {};
-
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch( e ) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function() {
- var arg = arguments[ 0 ];
-
- // Make the changes, replacing each context element with the new content
- this.domManip( arguments, function( elem ) {
- arg = this.parentNode;
-
- jQuery.cleanData( getAll( this ) );
-
- if ( arg ) {
- arg.replaceChild( elem, this );
- }
- });
-
- // Force removal if there was no new content (e.g., from empty arguments)
- return arg && (arg.length || arg.nodeType) ? this : this.remove();
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, callback ) {
-
- // Flatten any nested arrays
- args = concat.apply( [], args );
-
- var fragment, first, scripts, hasScripts, node, doc,
- i = 0,
- l = this.length,
- set = this,
- iNoClone = l - 1,
- value = args[ 0 ],
- isFunction = jQuery.isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( isFunction ||
- ( l > 1 && typeof value === "string" &&
- !support.checkClone && rchecked.test( value ) ) ) {
- return this.each(function( index ) {
- var self = set.eq( index );
- if ( isFunction ) {
- args[ 0 ] = value.call( this, index, self.html() );
- }
- self.domManip( args, callback );
- });
- }
-
- if ( l ) {
- fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- if ( first ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
- // Support: QtWebKit
- // jQuery.merge because push.apply(_, arraylike) throws
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call( this[ i ], node, i );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
- if ( node.src ) {
- // Optional AJAX dependency, but won't run scripts if not present
- if ( jQuery._evalUrl ) {
- jQuery._evalUrl( node.src );
- }
- } else {
- jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
- }
- }
- }
- }
- }
- }
-
- return this;
- }
-});
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1,
- i = 0;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone( true );
- jQuery( insert[ i ] )[ original ]( elems );
-
- // Support: QtWebKit
- // .get() because push.apply(_, arraylike) throws
- push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-});
-
-
-var iframe,
- elemdisplay = {};
-
-/**
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
-// Called only from within defaultDisplay
-function actualDisplay( name, doc ) {
- var style,
- elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-
- // getDefaultComputedStyle might be reliably used only on attached element
- display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
-
- // Use of this method is a temporary fix (more like optimization) until something better comes along,
- // since it was removed from specification and supported only in FF
- style.display : jQuery.css( elem[ 0 ], "display" );
-
- // We don't have any data stored on the element,
- // so use "detach" method as fast way to get rid of the element
- elem.detach();
-
- return display;
-}
-
-/**
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
-function defaultDisplay( nodeName ) {
- var doc = document,
- display = elemdisplay[ nodeName ];
-
- if ( !display ) {
- display = actualDisplay( nodeName, doc );
-
- // If the simple way fails, read from inside an iframe
- if ( display === "none" || !display ) {
-
- // Use the already-created iframe if possible
- iframe = (iframe || jQuery( "" )).appendTo( doc.documentElement );
-
- // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
- doc = iframe[ 0 ].contentDocument;
-
- // Support: IE
- doc.write();
- doc.close();
-
- display = actualDisplay( nodeName, doc );
- iframe.detach();
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return display;
-}
-var rmargin = (/^margin/);
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-var getStyles = function( elem ) {
- // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
- // IE throws on elements created in popups
- // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
- if ( elem.ownerDocument.defaultView.opener ) {
- return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
- }
-
- return window.getComputedStyle( elem, null );
- };
-
-
-
-function curCSS( elem, name, computed ) {
- var width, minWidth, maxWidth, ret,
- style = elem.style;
-
- computed = computed || getStyles( elem );
-
- // Support: IE9
- // getPropertyValue is only needed for .css('filter') (#12537)
- if ( computed ) {
- ret = computed.getPropertyValue( name ) || computed[ name ];
- }
-
- if ( computed ) {
-
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // Support: iOS < 6
- // A tribute to the "awesome hack by Dean Edwards"
- // iOS < 6 (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 ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- return ret !== undefined ?
- // Support: IE
- // IE returns zIndex value as an integer.
- ret + "" :
- ret;
-}
-
-
-function addGetHookIf( conditionFn, hookFn ) {
- // Define the hook, we'll check on the first run if it's really needed.
- return {
- get: function() {
- if ( conditionFn() ) {
- // Hook not needed (or it's not possible to use it due
- // to missing dependency), remove it.
- delete this.get;
- return;
- }
-
- // Hook needed; redefine it so that the support test is not executed again.
- return (this.get = hookFn).apply( this, arguments );
- }
- };
-}
-
-
-(function() {
- var pixelPositionVal, boxSizingReliableVal,
- docElem = document.documentElement,
- container = document.createElement( "div" ),
- div = document.createElement( "div" );
-
- if ( !div.style ) {
- return;
- }
-
- // Support: IE9-11+
- // Style of cloned element affects source element cloned (#8908)
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
- "position:absolute";
- container.appendChild( div );
-
- // Executing both pixelPosition & boxSizingReliable tests require only one layout
- // so they're executed at the same time to save the second computation.
- function computePixelPositionAndBoxSizingReliable() {
- div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
- "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
- "border:1px;padding:1px;width:4px;position:absolute";
- div.innerHTML = "";
- docElem.appendChild( container );
-
- var divStyle = window.getComputedStyle( div, null );
- pixelPositionVal = divStyle.top !== "1%";
- boxSizingReliableVal = divStyle.width === "4px";
-
- docElem.removeChild( container );
- }
-
- // Support: node.js jsdom
- // Don't assume that getComputedStyle is a property of the global object
- if ( window.getComputedStyle ) {
- jQuery.extend( support, {
- pixelPosition: function() {
-
- // This test is executed only once but we still do memoizing
- // since we can use the boxSizingReliable pre-computing.
- // No need to check if the test was already performed, though.
- computePixelPositionAndBoxSizingReliable();
- return pixelPositionVal;
- },
- boxSizingReliable: function() {
- if ( boxSizingReliableVal == null ) {
- computePixelPositionAndBoxSizingReliable();
- }
- return boxSizingReliableVal;
- },
- reliableMarginRight: function() {
-
- // Support: Android 2.3
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. (#3333)
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // This support function is only executed once so no memoizing is needed.
- var ret,
- marginDiv = div.appendChild( document.createElement( "div" ) );
-
- // Reset CSS: box-sizing; display; margin; border; padding
- marginDiv.style.cssText = div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
- marginDiv.style.marginRight = marginDiv.style.width = "0";
- div.style.width = "1px";
- docElem.appendChild( container );
-
- ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
-
- docElem.removeChild( container );
- div.removeChild( marginDiv );
-
- return ret;
- }
- });
- }
-})();
-
-
-// A method for quickly swapping in/out CSS properties to get correct calculations.
-jQuery.swap = function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.apply( elem, args || [] );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
-};
-
-
-var
- // Swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
- // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
- rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- },
-
- cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
-// 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[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 setPositiveNumber( elem, value, subtract ) {
- var matches = rnumsplit.exec( value );
- return matches ?
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
- value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
- 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" ) {
- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
- }
-
- if ( isBorderBox ) {
- // border-box includes padding, so remove it if we want content
- if ( extra === "content" ) {
- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // At this point, extra isn't border nor margin, so remove border
- if ( extra !== "margin" ) {
- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- } else {
- // At this point, extra isn't content, so add padding
- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // At this point, extra isn't content nor padding, so add border
- if ( extra !== "padding" ) {
- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property, which is equivalent to the border-box value
- var valueIsBorderBox = true,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- styles = getStyles( elem ),
- isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "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, styles );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test(val) ) {
- return val;
- }
-
- // Check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox &&
- ( support.boxSizingReliable() || val === elem.style[ name ] );
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
- }
-
- // Use the active box-sizing model to add/subtract irrelevant styles
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles
- )
- ) + "px";
-}
-
-function showHide( elements, show ) {
- var display, elem, hidden,
- values = [],
- index = 0,
- length = elements.length;
-
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- values[ index ] = data_priv.get( elem, "olddisplay" );
- display = elem.style.display;
- if ( show ) {
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !values[ index ] && 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 ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
- }
- } else {
- hidden = isHidden( elem );
-
- if ( display !== "none" || !hidden ) {
- data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "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.extend({
-
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
-
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- "float": "cssFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
-
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
-
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
- // Gets hook for the prefixed version, then unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // Convert "+=" or "-=" to relative numbers (#7345)
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that null and NaN values aren't set (#7116)
- if ( value == null || value !== value ) {
- return;
- }
-
- // If a number, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // Support: IE9-11+
- // background-* props affect original clone's values
- if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
- style[ name ] = value;
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var val, num, hooks,
- origName = jQuery.camelCase( name );
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
- // Try prefixed name followed by the unprefixed name
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- // Convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Make numeric if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
- }
- return val;
- }
-});
-
-jQuery.each([ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
-
- // Certain elements can have dimension info if we invisibly show them
- // but it must have a current display style that would benefit
- return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
- jQuery.swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- }) :
- getWidthOrHeight( elem, name, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var styles = extra && getStyles( elem );
- return setPositiveNumber( elem, value, extra ?
- augmentWidthOrHeight(
- elem,
- name,
- extra,
- jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- styles
- ) : 0
- );
- }
- };
-});
-
-// Support: Android 2.3
-jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
- function( elem, computed ) {
- if ( computed ) {
- return jQuery.swap( elem, { "display": "inline-block" },
- curCSS, [ elem, "marginRight" ] );
- }
- }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // Assumes a single number if not a string
- parts = typeof value === "string" ? value.split(" ") : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-});
-
-jQuery.fn.extend({
- css: function( name, value ) {
- return access( this, function( elem, name, value ) {
- var styles, len,
- map = {},
- i = 0;
-
- if ( jQuery.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- },
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- if ( typeof state === "boolean" ) {
- return state ? this.show() : this.hide();
- }
-
- return this.each(function() {
- if ( isHidden( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- });
- }
-});
-
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || "swing";
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- if ( tween.elem[ tween.prop ] != null &&
- (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
- return tween.elem[ tween.prop ];
- }
-
- // Passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails.
- // Simple values such as "10px" are parsed to Float;
- // complex values such as "rotate(1rad)" are returned as-is.
- result = jQuery.css( tween.elem, tween.prop, "" );
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
- // Use step hook for back compat.
- // Use cssHook if its there.
- // Use .style if available and use plain properties where available.
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Support: IE9
-// Panic based approach to setting things on disconnected nodes
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p * Math.PI ) / 2;
- }
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
- fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
- rrun = /queueHooks$/,
- animationPrefilters = [ defaultPrefilter ],
- tweeners = {
- "*": [ function( prop, value ) {
- var tween = this.createTween( prop, value ),
- target = tween.cur(),
- parts = rfxnum.exec( value ),
- unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
- rfxnum.exec( jQuery.css( tween.elem, prop ) ),
- scale = 1,
- maxIterations = 20;
-
- if ( start && start[ 3 ] !== unit ) {
- // Trust units reported by jQuery.css
- unit = unit || start[ 3 ];
-
- // Make sure we update the tween properties later on
- parts = parts || [];
-
- // Iteratively approximate from a nonzero starting point
- start = +target || 1;
-
- do {
- // If previous iteration zeroed out, double until we get *something*.
- // Use string for doubling so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- start = start / scale;
- jQuery.style( tween.elem, prop, start + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur(),
- // break the loop if scale is unchanged or perfect, or if we've just had enough
- } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
- }
-
- // Update tween properties
- if ( parts ) {
- start = tween.start = +start || +target || 0;
- tween.unit = unit;
- // If a +=/-= token was provided, we're doing a relative animation
- tween.end = parts[ 1 ] ?
- start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
- +parts[ 2 ];
- }
-
- return tween;
- } ]
- };
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout(function() {
- fxNow = undefined;
- });
- return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- i = 0,
- attrs = { height: type };
-
- // If we include width, step value is 1 to do all cssExpand values,
- // otherwise step value is 2 to skip over Left and Right
- includeWidth = includeWidth ? 1 : 0;
- for ( ; i < 4 ; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-function createTween( value, prop, animation ) {
- var tween,
- collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( (tween = collection[ index ].call( animation, prop, value )) ) {
-
- // We're done with this property
- return tween;
- }
- }
-}
-
-function defaultPrefilter( elem, props, opts ) {
- /* jshint validthis: true */
- var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHidden( elem ),
- dataShow = data_priv.get( elem, "fxshow" );
-
- // Handle queue: false promises
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always(function() {
- // Ensure the complete handler is called before this completes
- anim.always(function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- });
- });
- }
-
- // Height/width overflow pass
- if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE9-10 do not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- display = jQuery.css( elem, "display" );
-
- // Test default display if display is currently "none"
- checkDisplay = display === "none" ?
- data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
-
- if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
- style.display = "inline-block";
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- anim.always(function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- });
- }
-
- // show/hide pass
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.exec( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
-
- // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
- if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
- hidden = true;
- } else {
- continue;
- }
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-
- // Any non-fx value stops us from restoring the original display value
- } else {
- display = undefined;
- }
- }
-
- if ( !jQuery.isEmptyObject( orig ) ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = data_priv.access( elem, "fxshow", {} );
- }
-
- // Store state if its toggle - enables .stop().toggle() to "reverse"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
- if ( hidden ) {
- jQuery( elem ).show();
- } else {
- anim.done(function() {
- jQuery( elem ).hide();
- });
- }
- anim.done(function() {
- var prop;
-
- data_priv.remove( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- });
- for ( prop in orig ) {
- tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = tween.start;
- if ( hidden ) {
- tween.end = tween.start;
- tween.start = prop === "width" || prop === "height" ? 1 : 0;
- }
- }
- }
-
- // If this is a noop like .hide().hide(), restore an overwritten display value
- } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
- style.display = display;
- }
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // Not quite $.extend, this won't overwrite existing keys.
- // Reusing 'index' because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = animationPrefilters.length,
- deferred = jQuery.Deferred().always( function() {
- // Don't match elem in the :animated selector
- delete tick.elem;
- }),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
- // Support: Android 2.3
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise({
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, { specialEasing: {} }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
- // If we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // Resolve when we played the last frame; otherwise, reject
- if ( gotoEnd ) {
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- }),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length ; index++ ) {
- result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- return result;
- }
- }
-
- jQuery.map( props, createTween, animation );
-
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- })
- );
-
- // attach callbacks from options
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.split(" ");
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length ; index++ ) {
- prop = props[ index ];
- tweeners[ prop ] = tweeners[ prop ] || [];
- tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- animationPrefilters.unshift( callback );
- } else {
- animationPrefilters.push( callback );
- }
- }
-});
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // Normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.fn.extend({
- fadeTo: function( speed, to, easing, callback ) {
-
- // Show any hidden elements after setting opacity to 0
- return this.filter( isHidden ).css( "opacity", 0 ).show()
-
- // Animate to the value specified
- .end().animate({ opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations, or finishing resolves immediately
- if ( empty || data_priv.get( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = data_priv.get( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // Start the next in the queue if the last step wasn't forced.
- // Timers currently will call their complete callbacks, which
- // will dequeue but only if they were gotoEnd.
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each(function() {
- var index,
- data = data_priv.get( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // Enable finishing flag on private data
- data.finish = true;
-
- // Empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- // Look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // Look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // Turn off finishing flag
- delete data.finish;
- });
- }
-});
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-});
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show"),
- slideUp: genFx("hide"),
- slideToggle: genFx("toggle"),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
- var timer,
- i = 0,
- timers = jQuery.timers;
-
- fxNow = jQuery.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- jQuery.timers.push( timer );
- if ( timer() ) {
- jQuery.fx.start();
- } else {
- jQuery.timers.pop();
- }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
- if ( !timerId ) {
- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
-};
-
-jQuery.fx.stop = function() {
- clearInterval( timerId );
- timerId = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
-};
-
-
-(function() {
- var input = document.createElement( "input" ),
- select = document.createElement( "select" ),
- opt = select.appendChild( document.createElement( "option" ) );
-
- input.type = "checkbox";
-
- // Support: iOS<=5.1, Android<=4.2+
- // Default value for a checkbox should be "on"
- support.checkOn = input.value !== "";
-
- // Support: IE<=11+
- // Must access selectedIndex to make default options select
- support.optSelected = opt.selected;
-
- // Support: Android<=2.3
- // Options inside disabled selects are incorrectly marked as disabled
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Support: IE<=11+
- // An input loses its value after becoming a radio
- input = document.createElement( "input" );
- input.value = "t";
- input.type = "radio";
- support.radioValue = input.value === "t";
-})();
-
-
-var nodeHook, boolHook,
- attrHandle = jQuery.expr.attrHandle;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- }
-});
-
-jQuery.extend({
- attr: function( elem, name, value ) {
- var hooks, ret,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === strundefined ) {
- return jQuery.prop( elem, name, value );
- }
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
-
- } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- ret = jQuery.find.attr( elem, name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var name, propName,
- i = 0,
- attrNames = value && value.match( rnotwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( (name = attrNames[i++]) ) {
- propName = jQuery.propFix[ name ] || name;
-
- // Boolean attributes get special treatment (#10870)
- if ( jQuery.expr.match.bool.test( name ) ) {
- // Set corresponding property to false
- elem[ propName ] = false;
- }
-
- elem.removeAttribute( name );
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !support.radioValue && value === "radio" &&
- jQuery.nodeName( elem, "input" ) ) {
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- }
-});
-
-// Hooks for boolean attributes
-boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- elem.setAttribute( name, name );
- }
- return name;
- }
-};
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
- var getter = attrHandle[ name ] || jQuery.find.attr;
-
- attrHandle[ name ] = function( elem, name, isXML ) {
- var ret, handle;
- if ( !isXML ) {
- // Avoid an infinite loop by temporarily removing this function from the getter
- handle = attrHandle[ name ];
- attrHandle[ name ] = ret;
- ret = getter( elem, name, isXML ) != null ?
- name.toLowerCase() :
- null;
- attrHandle[ name ] = handle;
- }
- return ret;
- };
-});
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button)$/i;
-
-jQuery.fn.extend({
- prop: function( name, value ) {
- return access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- return this.each(function() {
- delete this[ jQuery.propFix[ name ] || name ];
- });
- }
-});
-
-jQuery.extend({
- propFix: {
- "for": "htmlFor",
- "class": "className"
- },
-
- 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 ) {
- return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
- ret :
- ( elem[ name ] = value );
-
- } else {
- return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
- ret :
- elem[ name ];
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
- elem.tabIndex :
- -1;
- }
- }
- }
-});
-
-if ( !support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
- var parent = elem.parentNode;
- if ( parent && parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- return null;
- }
- };
-}
-
-jQuery.each([
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
-], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
-});
-
-
-
-
-var rclass = /[\t\r\n\f]/g;
-
-jQuery.fn.extend({
- addClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- proceed = typeof value === "string" && value,
- i = 0,
- len = this.length;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call( this, j, this.className ) );
- });
- }
-
- if ( proceed ) {
- // The disjunction here is for better compressibility (see removeClass)
- classes = ( value || "" ).match( rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- " "
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
-
- // only assign if different to avoid unneeded rendering.
- finalValue = jQuery.trim( cur );
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- proceed = arguments.length === 0 || typeof value === "string" && value,
- i = 0,
- len = this.length;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call( this, j, this.className ) );
- });
- }
- if ( proceed ) {
- classes = ( value || "" ).match( rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- ""
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = value ? jQuery.trim( cur ) : "";
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value;
-
- if ( typeof stateVal === "boolean" && type === "string" ) {
- return stateVal ? this.addClass( value ) : this.removeClass( value );
- }
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // Toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- classNames = value.match( rnotwhite ) || [];
-
- while ( (className = classNames[ i++ ]) ) {
- // Check each className given, space separated list
- if ( self.hasClass( className ) ) {
- self.removeClass( className );
- } else {
- self.addClass( className );
- }
- }
-
- // Toggle whole class name
- } else if ( type === strundefined || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- data_priv.set( this, "__className__", this.className );
- }
-
- // If the element has a class name or if we're passed `false`,
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- this.className = this.className || value === false ? "" : data_priv.get( 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;
- }
-});
-
-
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend({
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- 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;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
-
- } else if ( typeof val === "number" ) {
- val += "";
-
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map( val, function( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
- // Support: IE10-11+
- // option.text throws exceptions (#14686, #14858)
- jQuery.trim( jQuery.text( elem ) );
- }
- },
- select: {
- get: function( elem ) {
- var value, option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one" || index < 0,
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ?
- max :
- one ? index : 0;
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // IE6-9 doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
- // Don't return options that are disabled or in a disabled optgroup
- ( 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 );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
-
- while ( i-- ) {
- option = options[ i ];
- if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
- optionSet = true;
- }
- }
-
- // Force browsers to behave consistently when non-matching value is set
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- }
-});
-
-// Radios and checkboxes getter/setter
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- };
- if ( !support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
- return elem.getAttribute("value") === null ? "on" : elem.value;
- };
- }
-});
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-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 ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-});
-
-jQuery.fn.extend({
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- 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 );
- }
-});
-
-
-var nonce = jQuery.now();
-
-var rquery = (/\?/);
-
-
-
-// Support: Android 2.3
-// Workaround failure to string-cast null input
-jQuery.parseJSON = function( data ) {
- return JSON.parse( data + "" );
-};
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
- var xml, tmp;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
-
- // Support: IE9
- try {
- tmp = new DOMParser();
- xml = tmp.parseFromString( data, "text/xml" );
- } catch ( e ) {
- xml = undefined;
- }
-
- if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
-};
-
-
-var
- rhash = /#.*$/,
- rts = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat( "*" ),
-
- // Document location
- ajaxLocation = window.location.href,
-
- // Segment location into parts
- ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
-
- if ( jQuery.isFunction( func ) ) {
- // For each dataType in the dataTypeExpression
- while ( (dataType = dataTypes[i++]) ) {
- // Prepend if requested
- if ( dataType[0] === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
- // Otherwise append
- } else {
- (structure[ dataType ] = structure[ dataType ] || []).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- });
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var ct, type, finalDataType, firstDataType,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while ( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while ( current ) {
-
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- // Apply the dataFilter if provided
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if ( current ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current === "*" ) {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s[ "throws" ] ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
-}
-
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: ajaxLocation,
- type: "GET",
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var transport,
- // URL without anti-cache param
- cacheURL,
- // Response headers
- responseHeadersString,
- responseHeaders,
- // timeout handle
- timeoutTimer,
- // Cross-domain detection vars
- parts,
- // To know if global events are to be dispatched
- fireGlobals,
- // Loop variable
- i,
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks("once memory"),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // The jqXHR state
- state = 0,
- // Default abort message
- strAbort = "canceled",
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( (match = rheaders.exec( responseHeadersString )) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match == null ? null : match;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- var lname = name.toLowerCase();
- if ( !state ) {
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( state < 2 ) {
- for ( code in map ) {
- // Lazy-add the new callback in a way that preserves old ones
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- } else {
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR ).complete = completeDeferred.add;
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (prefilters might expect it)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
- .replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
-
- // A cross-domain request is in order when we have a protocol:host:port mismatch
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( state === 2 ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
- fireGlobals = jQuery.event && s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger("ajaxStart");
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- cacheURL = s.url;
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
- s.url = rts.test( cacheURL ) ?
-
- // If there is already a '_' parameter, set its value
- cacheURL.replace( rts, "$1_=" + nonce++ ) :
-
- // Otherwise add one to the end
- cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
- }
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // Aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout(function() {
- jqXHR.abort("timeout");
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch ( e ) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- // If successful, handle type chaining
- if ( isSuccess ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader("Last-Modified");
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader("etag");
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
- // Extract error from statusText and normalize for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger("ajaxStop");
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // Shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- });
- };
-});
-
-
-jQuery._evalUrl = function( url ) {
- return jQuery.ajax({
- url: url,
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
-};
-
-
-jQuery.fn.extend({
- wrapAll: function( html ) {
- var wrap;
-
- 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
- wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
-
- if ( this[ 0 ].parentNode ) {
- wrap.insertBefore( this[ 0 ] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstElementChild ) {
- elem = elem.firstElementChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function( i ) {
- jQuery( this ).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function( i ) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- }
-});
-
-
-jQuery.expr.filters.hidden = function( elem ) {
- // Support: Opera <= 12.12
- // Opera reports offsetWidths and offsetHeights less than zero on some elements
- return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
-};
-jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
-};
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, 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, "+" );
-};
-
-jQuery.fn.extend({
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map(function() {
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- })
- .filter(function() {
- var type = this.type;
-
- // Use .is( ":disabled" ) so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !rcheckableType.test( type ) );
- })
- .map(function( i, elem ) {
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val ) {
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-
-jQuery.ajaxSettings.xhr = function() {
- try {
- return new XMLHttpRequest();
- } catch( e ) {}
-};
-
-var xhrId = 0,
- xhrCallbacks = {},
- xhrSuccessStatus = {
- // file protocol always yields status code 0, assume 200
- 0: 200,
- // Support: IE9
- // #1450: sometimes IE returns 1223 when it should be 204
- 1223: 204
- },
- xhrSupported = jQuery.ajaxSettings.xhr();
-
-// Support: IE9
-// Open requests must be manually aborted on unload (#5280)
-// See https://support.microsoft.com/kb/2856746 for more info
-if ( window.attachEvent ) {
- window.attachEvent( "onunload", function() {
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]();
- }
- });
-}
-
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-support.ajax = xhrSupported = !!xhrSupported;
-
-jQuery.ajaxTransport(function( options ) {
- var callback;
-
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( support.cors || xhrSupported && !options.crossDomain ) {
- return {
- send: function( headers, complete ) {
- var i,
- xhr = options.xhr(),
- id = ++xhrId;
-
- xhr.open( options.type, options.url, options.async, options.username, options.password );
-
- // Apply custom fields if provided
- if ( options.xhrFields ) {
- for ( i in options.xhrFields ) {
- xhr[ i ] = options.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( options.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( options.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !options.crossDomain && !headers["X-Requested-With"] ) {
- headers["X-Requested-With"] = "XMLHttpRequest";
- }
-
- // Set headers
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
-
- // Callback
- callback = function( type ) {
- return function() {
- if ( callback ) {
- delete xhrCallbacks[ id ];
- callback = xhr.onload = xhr.onerror = null;
-
- if ( type === "abort" ) {
- xhr.abort();
- } else if ( type === "error" ) {
- complete(
- // file: protocol always yields status 0; see #8605, #14207
- xhr.status,
- xhr.statusText
- );
- } else {
- complete(
- xhrSuccessStatus[ xhr.status ] || xhr.status,
- xhr.statusText,
- // Support: IE9
- // Accessing binary-data responseText throws an exception
- // (#11426)
- typeof xhr.responseText === "string" ? {
- text: xhr.responseText
- } : undefined,
- xhr.getAllResponseHeaders()
- );
- }
- }
- };
- };
-
- // Listen to events
- xhr.onload = callback();
- xhr.onerror = callback("error");
-
- // Create the abort callback
- callback = xhrCallbacks[ id ] = callback("abort");
-
- try {
- // Do send the request (this may raise an exception)
- xhr.send( options.hasContent && options.data || null );
- } catch ( e ) {
- // #14683: Only rethrow if this hasn't been notified as an error yet
- if ( callback ) {
- throw e;
- }
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /(?:java|ecma)script/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and crossDomain
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function( s ) {
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
- var script, callback;
- return {
- send: function( _, complete ) {
- script = jQuery("
-
-
-
-
-
-
-
-
-
-Alerts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<UI . SuccessAlert > success< /UI.SuccessAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . InfoAlert > info< /UI.InfoAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . WarningAlert > warning< /UI.WarningAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . ErrorAlert > error< /UI.ErrorAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Dismissable
-Add the dismissable
property to add a close button to the alert.
-
-
-
-
-
-
-
-
-
-
-
<UI . SuccessAlert dismissable > success< /UI.SuccessAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-If you want a callback to be called when the close button is
-clicked, set the dismissable
property to that callback.
-
-
-
var callback = function() {
- alert('Dismissed!');
-};
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<UI . InfoAlert dismissable= {callback} > with callback< /UI.InfoAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Alerts with Icons
-If you want an icon to be displayed, set the withIcon
property.
-
-
-
-
-
-
-
-
-
-
-
<UI . SuccessAlert withIcon > success< /UI.SuccessAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . InfoAlert withIcon > info< /UI.InfoAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . WarningAlert withIcon > warning< /UI.WarningAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . ErrorAlert withIcon > error< /UI.ErrorAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-Here's a dismissable alert with an icon
-
-
-
-
-
-
-
-
-
-
-
<UI . WarningAlert dismissable withIcon > warning< /UI.WarningAlert>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Back to Top
-You can use this component to scroll to the top of a page.
The button will be fixed to the bottom right hand corner of the page.
You can place the link anywhere in your markup, but best practices are either towards the top or bottom of your markup.
-
-
-Buttons use the button tag by default. If you'd like a link rather than a button, simply add an href
attribute.
-
-
-
-
-
-
-
-
-
-
-
<UI . DefaultButton href= "http://example.com" >
- Default
-< /UI.DefaultButton>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-To make a button large, set the large
property to true.
-
-
-
-
-
-
-
-
-
-
-
<UI . HighlightButton large= {true} >
- Big Button
-< /UI.HighlightButton>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-To make a button full-width, set the block
property to true.
-
-
-
-
<UI . DangerButton block= {true} href= "http://i.imgur.com/oq2qkUN.gif" >
- Danger Zone
-< /UI.DangerButton>
-
-
- Copy
-
-
-
-Specific button types.
-
-
-
-
-
-
-
-
-
-
-
<UI . DefaultButton >
- Default
-< /UI.DefaultButton>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . DefaultAltButton >
- Default alternate
-< /UI.DefaultAltButton>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . PrimaryButton >
- Primary
-< /UI.PrimaryButton>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . LowlightButton >
- Lowlight
-< /UI.LowlightButton>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . DangerButton >
- Danger
-< /UI.DangerButton>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . HighlightButton >
- Highlight
-< /UI.HighlightButton>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . HighlightAltButton >
- Highlight alternate
-< /UI.HighlightAltButton>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-The base button renderer. You won't really interact with this directly.
-
-
-
-
-
-
-
-
-
-
-
<UI . UIButton >
- I'm a button
-< /UI.UIButton>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Collapse
-
-
-Collapse components are implementations of the Accordion style. In
-all Collapse
component variations, the header
prop describes the text
-of the clickable region to toggle the expand/collapse states.
-Alt
-This is a basic collapse with an +/- icon in the clickable region.
-
-
-
-
<UI . AltCollapse header= "Without Arrows" >
- <p> Content!</p>
- <p> Content!</p>
- <p> Content!</p>
- <p> Content!</p>
- <p> Content!</p>
-< /UI.AltCollapse>
-
-
- Copy
-
-
-
-
-Arrows
-This is a basic collapse with an arrow icon in the clickable region.
-
-
-
-
<UI . Collapse header= "With Arrows" >
- <p> Content!</p>
- <p> Content!</p>
- <p> Content!</p>
- <p> Content!</p>
- <p> Content!</p>
-< /UI.Collapse>
-
-
- Copy
-
-
-
-
-Base
-This is a basic collapse with no additional styles.
-
-
-
-
<UI . BaseCollapse header= "Panel 1" >
- <p> Panel 1 content</p>
- <p> Panel 1 content</p>
- <p> Panel 1 content</p>
- <p> Panel 1 content</p>
- <p> Panel 1 content</p>
- <p> Panel 1 content</p>
- <p> Panel 1 content</p>
- <p> Panel 1 content</p>
- <p> Panel 1 content</p>
- <p> Panel 1 content</p>
-< /UI.BaseCollapse>
-
-
- Copy
-
-
-
-
-Adding Dividers
-To add a divider between the clickable region and the expanded content region,
-simply set the divider
property to be true.
-
-
-
-
<UI . Collapse header= "With Divider" divider >
- <p> Content!</p>
- <p> Content!</p>
- <p> Content!</p>
- <p> Content!</p>
- <p> Content!</p>
-< /UI.Collapse>
-
-
- Copy
-
-
-
-
-Dividers
-Dividers draw horizontal lines between different content groupings.
-
-
-
-
-
-
-
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Divider size= "large" />
-
-
-
- Copy
-
-
-
-
-
-
-
-
-On a dark background, use these inverse dividers
-
-
-
-
-
-
-
-
-
-
-
<div className= 'contrast-bar' >
- <UI . InverseDivider />
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<div className= 'contrast-bar' >
- <UI . InverseDivider size= 'large' />
-</div>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Dropdowns
-This is the basic bootstrap dropdown:
-
-
-
-
-
-
-
-
-
-
-
<UI . Dropdown title= 'DropDown' >
- <UI . DropdownItem href= "http://media.giphy.com/media/13py6c5BSnBkic/giphy.gif" > Booyeah< /UI.DropdownItem>
- <UI . DropdownItem divider />
- <UI . DropdownItem href= "http://media.giphy.com/media/TlK63EQERmiAVzMEgO4/giphy.gif" > Adorable< /UI.DropdownItem>
-< /UI.Dropdown>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-Here are all the different dropdown styles:
-
-
-
-
-
-
-
-
-
-
-
<UI . LinkDropdown title= 'Link' >
- <UI . DropdownItem href= "http://media.giphy.com/media/TlK63EQERmiAVzMEgO4/giphy.gif" > Adorable< /UI.DropdownItem>
-< /UI.LinkDropdown>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . DefaultAltDropdown title= 'Default Alt' >
- <UI . DropdownItem href= "http://media.giphy.com/media/TlK63EQERmiAVzMEgO4/giphy.gif" > Adorable< /UI.DropdownItem>
-< /UI.DefaultAltDropdown>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . PrimaryDropdown title= 'Primary' >
- <UI . DropdownItem href= "http://media.giphy.com/media/TlK63EQERmiAVzMEgO4/giphy.gif" > Adorable< /UI.DropdownItem>
-< /UI.PrimaryDropdown>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . LowlightDropdown title= 'Lowlight' >
- <UI . DropdownItem href= "http://media.giphy.com/media/TlK63EQERmiAVzMEgO4/giphy.gif" > Adorable< /UI.DropdownItem>
-< /UI.LowlightDropdown>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . DangerDropdown title= 'Danger' >
- <UI . DropdownItem href= "http://media.giphy.com/media/TlK63EQERmiAVzMEgO4/giphy.gif" > Adorable< /UI.DropdownItem>
-< /UI.DangerDropdown>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . HighlightDropdown title= 'Highlight' >
- <UI . DropdownItem href= "http://media.giphy.com/media/TlK63EQERmiAVzMEgO4/giphy.gif" > Adorable< /UI.DropdownItem>
-< /UI.HighlightDropdown>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . HighlightAltDropdown title= 'Highlight Alt' >
- <UI . DropdownItem href= "http://media.giphy.com/media/TlK63EQERmiAVzMEgO4/giphy.gif" > Adorable< /UI.DropdownItem>
-< /UI.HighlightAltDropdown>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Expander
-Expanders are collapsable content areas which are unlike their accordion counterparts in that they do not require a
-parent collapse and child content structure. This means you can trigger the expanding and collapsing content from somewhere
-else within the DOM.
The expander pattern requires two components -- the ExpanderContent and the ExpanderTrigger. You will need to implement a
-component which handles the communication between these two components so the Trigger knows which Content to toggle. This is done
-through the setTarget method exposed on the ExpanderTrigger.
See the example below for how to use these components in your own application.
-
-
-
var MoreInfo = React.createClass({
- componentDidMount: function () {
- this.refs.infoTrigger.setTarget(this.refs.infoContent);
- },
- render: function() {
- return (
- <main>
- <UI . ExpanderContent ref= "infoContent" >
- <p className= 'h1 bg-neutral-2 type-neutral-9' > Hamburgers</p>
- < /UI.ExpanderContent>
- <br/>
- <UI . ExpanderTrigger ref= "infoTrigger" >
- <button className= 'btn btn-highlight' > Toggle Content</button>
- < /UI.ExpanderTrigger>
- </main>
- )
- }
-});
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-Using React radio buttons in a form is fairly straightforward.
-
-
-
-
<UI . RadioGroup name= "field_name" >
- <UI . Radio value= "firstValue" > You could click this radio button< /UI.Radio>
- <UI . Radio value= "SecondValue" defaultChecked > This is also a radio button< /UI.Radio>
- < /UI.RadioGroup>
-
-
- Copy
-
-
-
-In this case, the name
attached to RadioGroup
will be applied to all of Radio children.
Additionally, special behaviors can be added to the onChange
event handler
-exposed by radio groups. In this example, additional form controls are displayed
-when the user selects the third radio button.
Similar to the name
property, the onChange
handlers is passed down to all child components.
-
-
-
var MyComponent = React.createClass({
- getInitialState: function() { return {selection: null}; },
-
- change: function(value) {
- this.setState({selection: value});
- },
-
- render: function() {
- return (
- <form role= "form" className= "form-horizontal" >
- <div className= "form-group" >
- <UI . Col md= {3} >
- <label> Options</label>
- < /UI.Col>
- <UI . Col md= {21} >
- <UI . RadioGroup name= "stuff" onChange= {this.change} >
- <UI . Radio value= "others" > Others< /UI.Radio>
- <UI . Radio value= "others1" defaultChecked > More others< /UI.Radio>
- <UI . Radio value= "special" > Click for more!< /UI.Radio>
- < /UI.RadioGroup>
- < /UI.Col>
- </div>
- {this.state.selection === 'special' && <div className= "form-group" >
- <UI . Col md= {3} >
- <label> Stuff that appears</label>
- < /UI.Col>
- <UI . Col md= {21} >
- <label htmlFor= "exampleInputEmail1" > Email address</label>
- <input type= "email" className= "form-control" id= "exampleInputEmail1" placeholder= "Enter email" />
- < /UI.Col>
- </div> }
- </form>
- );
- }
-});
-
-
- Copy
-
-
-
-
-
-
-A SearchInput
component can be used on its own as an input. It accepts standard
-text input properties (such as placeholder
).
-
-
-
-
<UI . SearchInput placeholder= "Search..." />
-
-
- Copy
-
-
-
-To demonstrate how to use a SearchInput in a more complex example, let's say
-we want to filter a list based on the user's input. We can accomplish this
-by creating a stateful component which is composed of the SearchInput and the
-list to filter.
-
-
-
var FilteringSearchExample = React.createClass({
- getInitialState: function () {
- return {
- filter: "",
- items: ['Apple', 'Banana', 'Orange'] // Defaults in the event the server is down
- }
- },
-
- componentDidMount: function () {
- var self = this;
-
- $.getJSON('http://pivotal-enchilada.cfapps.io/list', function (data) {
- self.setState({ items: data });
- });
- },
-
- updateFilter: function (event) {
- this.setState({ filter: event.target.value });
- },
-
- render: function () {
- var filterRegex = new RegExp(this.state.filter, "i");
- var displayedItems = _.filter(this.state.items, function (item) {
- return item.match(filterRegex);
- });
-
- var listItems = _.map(displayedItems, function (item) {
- return (<li key= {item} > {item}</li> )
- });
-
- return (
- <div>
- <UI . SearchInput placeholder= 'Filter by...' onChange= {this.updateFilter}/ >
- <ul>
- {listItems}
- </ul>
- </div>
- )
- }
-});
-
-
- Copy
-
-
-
-
-
-
-
-
<FilteringSearchExample />
-
-
- Copy
-
-
-
-
-Grids
-
-
-The react grids depend on React-Bootstrap . Check out their docs
-for advanced stuff like pushing, pulling, and offsets.
-Examples
-
-
-
-
-
<div>
- <UI . Row className= "grid-show" >
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- <UI . Col md= {2} > < /UI.Col>
- < /UI.Row>
-
- <UI . Row className= "grid-show" >
- <UI . Col md= {16} > < /UI.Col>
- <UI . Col md= {8} > < /UI.Col>
- < /UI.Row>
-
- <UI . Row className= "grid-show" >
- <UI . Col md= {8} > < /UI.Col>
- <UI . Col md= {8} > < /UI.Col>
- <UI . Col md= {8} > < /UI.Col>
- < /UI.Row>
-
- <UI . Row className= "grid-show" >
- <UI . Col md= {12} > < /UI.Col>
- <UI . Col md= {12} > < /UI.Col>
- < /UI.Row>
-</div>
-
-
- Copy
-
-
-
-
-Example: Mobile and Desktop
-Don't want your columns to simply stack in smaller devices?
-Use the extra small and medium device grid classes by adding .col-xs-*
.col-md-*
to your columns.
-See the example below for a better idea of how it all works.
-
-
-
-
<div>
- <UI . Row className= "grid-show" >
- <UI . Col xs= {24} md= {16} > < /UI.Col>
- <UI . Col xs= {12} md= {8} > < /UI.Col>
- < /UI.Row>
-
- <UI . Row className= "grid-show" >
- <UI . Col xs= {12} md= {8} > < /UI.Col>
- <UI . Col xs= {12} md= {8} > < /UI.Col>
- <UI . Col xs= {12} md= {8} > < /UI.Col>
- < /UI.Row>
-
- <UI . Row className= "grid-show" >
- <UI . Col xs= {12} > < /UI.Col>
- <UI . Col xs= {12} > < /UI.Col>
- < /UI.Row>
-</div>
-
-
- Copy
-
-
-
-
-Gutter Sizes
-
-
-
-
-
<div>
- <UI . Row className= "grid-show" >
- <UI . Col md= {12} > < /UI.Col>
- <UI . Col md= {12} > < /UI.Col>
- < /UI.Row>
-
- <UI . Row className= "grid-show" gutter= "md" >
- <UI . Col md= {12} > < /UI.Col>
- <UI . Col md= {12} > < /UI.Col>
- < /UI.Row>
-
- <UI . Row className= "grid-show" gutter= "sm" >
- <UI . Col md= {12} > < /UI.Col>
- <UI . Col md= {12} > < /UI.Col>
- < /UI.Row>
-</div>
-
-
- Copy
-
-
-
-
-Icons
-We use Font Awesome .
-Specify the icon by changing the name. The name is the font-awesome class sans the fa-
.
-To spin the icon, add spin
to the Icon.
-
-
-
-
-
-
-
-
-
-
-
<UI . Icon name= "plus" />
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Icon spin name= "angellist" />
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Images
-Images in react can be responsive and/or wrapped in a link.
-
-
-
-
<UI . Image src= "http://placehold.it/1000x100" responsive= {true} href= "http://google.com" />
-
-
- Copy
-
-
-
-
-Labels
-Labels are a straightforward implementation of the Label style.
Labels can be used on their own:
-
-
-
-
<UI . Label > yeah< /UI.Label>
-
-
- Copy
-
-
-
-Labels used within an element which already has font modifier styles will use the parents' styling. For example:
-
-
-
-
<UI . DefaultH3 >
- Now the label is in a typography component <UI . Label > yeah< /UI.Label>
-< /UI.DefaultH3>
-
-
- Copy
-
-
-
-
-Lists
-
-
-
-Addable
-Here's an example of how you might write an addable list component. Transitions are added to each list item through componentWillEnter
.
-If you wish to save the new item in your database, you should do so in the change
function, before setting state.
-
-
-
var ReactTransitionGroup = React.addons.TransitionGroup;
-
-var AddableListItem = React.createClass({
- componentWillEnter: function(done) {
- this.$el = $(this.getDOMNode());
- this.$el.addClass("new-enter");
- done();
- },
-
- render: function(){
- return (
- <UI . ListItem {... this . props } > {this.props.children}< /UI.ListItem>
- );
- }
-});
-
-var AddableList = React.createClass({
- getInitialState: function() {
- return {
- items: ['one','two','three']
- };
- },
-
- change: function() {
- var newItems = this.state.items.concat([prompt('Enter some text')]);
- this.setState({items: newItems});
- },
-
- render: function() {
- var items = _.map(this.state.items, function(item, key) {
- return (
- <AddableListItem key= {key+item} >
- {item}
- </AddableListItem>
- );
- });
- return (
- <div>
- <ReactTransitionGroup component= {UI.StepList} transitionName= 'new' >
- {items}
- </ReactTransitionGroup>
- <UI . HighlightButton onClick= {this.change} > Click to Add Item< /UI.HighlightButton>
- </div>
- );
- }
-});
-
-
- Copy
-
-
-
-
-
-Breadcrumb
-
-
-
-
-
<UI . BreadcrumbList >
- <UI . ListItem ><a href= "#" > Item 1</a> < /UI.ListItem>
- <UI . ListItem ><a href= "#" > Item 2</a> < /UI.ListItem>
- <UI . ListItem className= "current" ><span> Item 3</span> < /UI.ListItem>
-< /UI.BreadcrumbList>
-
-
- Copy
-
-
-
-
-Cards
-=D
-Checked
-
-
-
-
-
<UI . UnorderedList checked >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem > Item 3< /UI.ListItem>
-< /UI.UnorderedList>
-
-
- Copy
-
-
-
-
-Draggable
-Creates a draggable list.
The property onDrop
is a callback when a drop event has completed. Use this
-if you need to make an API call to update the order of some elements.
-
-
-
var draggableListDropCallback = function(data) {
- alert('New item indices order: ' + data);
-};
-
-
- Copy
-
-
-
-
-
-
-
-
<UI . DraggableList onDrop= {draggableListDropCallback} >
- <UI . DraggableListItem >
- Get me out of here!
- < /UI.DraggableListItem>
-
- <UI . DraggableListItem >
- LOL
- < /UI.DraggableListItem>
-
- <UI . DraggableListItem >
- Can't stop
- < /UI.DraggableListItem>
-< /UI.DraggableList>
-
-
- Copy
-
-
-
-
-Group Inverse
-
-
-
-
-
<UI . GroupListInverse >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem > Item 3< /UI.ListItem>
-< /UI.GroupListInverse>
-
-
- Copy
-
-
-
-
-Group
-
-
-
-
-
<UI . GroupList >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem > Item 3< /UI.ListItem>
-< /UI.GroupList>
-
-
- Copy
-
-
-
-
-Inline Divider
-
-
-
-
-
-
-
-
-
-
-
-
<UI . InlineList divider >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem > Item 3< /UI.ListItem>
-< /UI.InlineList>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Inline
-
-
-
-
-
-
-
-
-
-
-
-
<UI . InlineList >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem > Item 3< /UI.ListItem>
-< /UI.InlineList>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Ordered
-
-
-
-
-
-
-
-
-
-
-
-
<UI . OrderedList >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem > Item 3< /UI.ListItem>
-< /UI.OrderedList>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<UI . OrderedList unstyled >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem > Item 3< /UI.ListItem>
-< /UI.OrderedList>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Configuring Spacing
-List Spacing can be changed setting the size of the spacing property.
-Options
-Values
-Pixels
-
-
-n
-none
-0px
-
-
-s
-small
-5px
-
-
-m
-medium
-7px
-
-
-l
-large
-10px
-
-
-xl
-extra large
-21px
-
-
-
-
-
-
<UI . StepList spacing= "n" >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem className= "current" > Item 3< /UI.ListItem>
-< /UI.StepList>
-
-
- Copy
-
-
-
-
-
-
-
-
<UI . UnorderedList spacing= "xl" >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem className= "current" > Item 3< /UI.ListItem>
-< /UI.UnorderedList>
-
-
- Copy
-
-
-
-
-Steps
-
-
-
-
-
<UI . StepList >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem className= "current" > Item 3< /UI.ListItem>
-< /UI.StepList>
-
-
- Copy
-
-
-
-
-Unordered
-
-
-
-
-
-
-
-
-
-
-
-
<UI . UnorderedList >
- <UI . ListItem > feep< /UI.ListItem>
- <UI . ListItem > fop< /UI.ListItem>
- <UI . ListItem > meep< /UI.ListItem>
-< /UI.UnorderedList>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Unstyled
-
-
-
-
-
-
-
-
-
-
-
-
<UI . UnorderedList unstyled >
- <UI . ListItem > Item 1< /UI.ListItem>
- <UI . ListItem > Item 2< /UI.ListItem>
- <UI . ListItem > Item 3< /UI.ListItem>
-< /UI.UnorderedList>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Vertical Divider
-
-
-
-
-
-General media object modifiers
-
-Media Modifiers
-Options
-Description
-
-
-bodyAlignment
-top (default), "middle", "bottom"
-Vertical alignment of the body (used for large images with small content next to it, usually centered)
-
-
-stackSize
-"xsmall", "small", "medium", "large"
-At what breakpoint should the media object stack
-
-
The images or other media can be aligned top, middle, or bottom. The default is top aligned.
The base button renderer. You won't really interact with this directly.
-
-
-
var mediaBasicImage = <UI . Image src= 'http://placehold.it/50x50' /> ;
-var mediaBasicLinkedImage = <UI . Image src= 'http://placehold.it/50x50' href= "http://google.com" /> ;
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Media
- leftImage= {mediaBasicImage} >
- left media
-< /UI.Media>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Media
- rightImage= {mediaBasicLinkedImage}
- vAlign= 'middle' >
- right media
-< /UI.Media>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Media
- leftImage= {mediaBasicImage}
- rightImage= {mediaBasicImage}
- vAlign= 'middle'
- stackSize= 'medium' >
- left and right media
-< /UI.Media>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
var mediaAlignmentImage = <UI . Image href= 'http://www.google.com' src= 'http://placehold.it/50x50' /> ;
-
-
- Copy
-
-
-
-
-
-
-
-
<div>
- <UI . Media leftImage= {mediaAlignmentImage} >
- top aligned image - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- < /UI.Media>
-
- <UI . Flag leftImage= {mediaAlignmentImage} >
- middle aligned image - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- < /UI.Flag>
-
- <UI . Flag leftImage= {mediaAlignmentImage} >
- middle aligned and middle body (for short text and big images)
- < /UI.Flag>
-
- <UI . Media
- leftImage= {mediaAlignmentImage}
- vAlign= 'bottom' >
- bottom aligned - This is rarely, if ever, used. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- < /UI.Media>
-</div>
-
-
- Copy
-
-
-
-
-
-Media spacing can be added to the left and right medias. If no spacing is defined, it defaults to large.
-
-
-
var mediaSpacingImage = <UI . Image href= 'http://www.google.com' src= 'http://placehold.it/50x50' /> ;
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Media leftImage= {mediaSpacingImage} >
- default image spacing media
-< /UI.Media>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Media
- leftImage= {mediaSpacingImage}
- leftMediaSpacing= 'small' >
- small image spacing media
-< /UI.Media>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Media
- leftImage= {mediaSpacingImage}
- leftMediaSpacing= 'medium' >
- medium image spacing media
-< /UI.Media>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Media
- leftImage= {mediaSpacingImage}
- leftMediaSpacing= 'large' >
- large image spacing media
-< /UI.Media>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Media
- leftImage= {mediaSpacingImage}
- leftMediaSpacing= 'xlarge' >
- xlarge image spacing media
-< /UI.Media>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Modals
-We provide 3 components that can be used to assemble modals:
UI.Modal
-UI.ModalBody
-UI.ModalFooter
-
-
-
- Opening and closing the modal with callbacks
-
-
- Modals will be closed by default. To open the modal, add a ref
- property to the modal (i.e. ref='myModal'
). Trigger
- this.refs.myModal.open();
to open the modal, and
- this.refs.myModal.close();
to close the modal.
-
-
-There are 4 ways to close the modal
Clicking the "x" button
-Clicking on the modal backdrop
-Clicking the esc key
-Doing any action that triggers this.refs.myModal.close
.
-
-
-
-
var MyModal = React.createClass({
- _openModal: function(){
- this.refs.modal.open();
- },
-
- _closeModal: function() {
- this.refs.modal.close();
- },
-
- render: function() {
- return (
- <div>
- <UI . DefaultButton id= 'openButton' onClick= {this._openModal} > Open Modal< /UI.DefaultButton>
- <UI . Modal title= 'What a Header!' ref= 'modal' >
- <UI . ModalBody > Text in a body< /UI.ModalBody>
- <UI . ModalFooter >
- <UI . DefaultButton id= 'closeButton' onClick= {this._closeModal} > Close< /UI.DefaultButton>
- < /UI.ModalFooter>
- < /UI.Modal>
- </div>
- )
- }
-});
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Notifications
-
-
-Here's an example if there are no notifications:
-
-
-
-
-
-
-
-
-
-
- Copy
-
-
-
-
-
-
-
-
-Here's an example if there are notifications:
-
-
-
var newLabel = <UI . DefaultH3 ><UI . Label > New< /UI.Label>< /UI.DefaultH3>;
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Notifications >
- <UI . NotificationItem href= "http://media.giphy.com/media/Qvw9p4uX7IBy0/giphy.gif" >
- <UI . Flag leftImage= {newLabel} >
- <UI . DefaultH5 className= "media-heading mbn type-dark-1" > Notification< /UI.DefaultH5>
- <p className= "type-sm type-neutral-5 mvn" > Click for Cute Gif</p>
- < /UI.Flag>
- < /UI.NotificationItem>
-< /UI.Notifications>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Alerts
-Here's an example if there are no alerts:
-
-
-
-
-
-
-
-
-
-
-
<UI . AlertNotifications />
-
-
-
- Copy
-
-
-
-
-
-
-
-
-Here's an example if there are alerts:
-
-
-
var alertImage = <UI . Icon name= "exclamation-triangle" className= "h4 type-warn-2 mrm" /> ;
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<UI . AlertNotifications >
- <UI . NotificationItem href= "http://media.giphy.com/media/Qvw9p4uX7IBy0/giphy.gif" >
- <UI . Flag leftImage= {alertImage} >
- <UI . DefaultH5 className= "media-heading mbn type-dark-1" > WARNING< /UI.DefaultH5>
- <p className= "type-sm type-neutral-5 mvn" > Click for Cute Gif</p>
- < /UI.Flag>
- < /UI.NotificationItem>
-< /UI.AlertNotifications>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Panes
-The Pane
component is a straightforward implementation of the Pane styling.
-Any className values passed through are passed to the underlying .pane
.
-
-
-
-
<UI . Pane className= "bg-neutral-10" >
- <UI . DefaultH1 > This is a pane< /UI.DefaultH1>
-< /UI.Pane>
-
-
- Copy
-
-
-
-In the event that you need additional configuration applied to a Pane, you can use the
-BasePane
component which accepts properties for outerClass
and innerClass
.
These values are added to the class name of the .pane
and the .container
respectively.
-
-
-
-
<UI . BasePane outerClass= "bg-dark-1" innerClass= "bg-glow" >
- <UI . DefaultH1 color= "type-neutral-9" > This is a pane (configurable)< /UI.DefaultH1>
-< /UI.BasePane>
-
-
- Copy
-
-
-
-
-Panels
-
-
-Panel components are straightforward implementations of the Panel styling. The Panel
component itself
-is the base, and there are many different flavors of Panels which all construct a particularly styled Panel
.
See examples below.
-
-
-
-
-
-
-
-
-
-
-
<UI . Panel className= "bg-neutral-8" >
- <p> Base Panel</p>
-< /UI.Panel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Basic Panel Alt
-
-
-
-
-
-
-
-
-
-
-
-
<UI . BasicPanelAlt >
- Basic Panel
-< /UI.BasicPanelAlt>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . BasicPanelAlt title= 'Basic Alt Title' >
- Basic Panel
-< /UI.BasicPanelAlt>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Basic
-
-
-
-
-
-
-
-
-
-
-
-
<UI . BasicPanel >
- Basic Panel
-< /UI.BasicPanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . BasicPanel title= 'Basic Title' >
- Basic Panel
-< /UI.BasicPanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Clickable
-
-
-
-
-
-
-
-
-
-
-
-
<UI . ClickablePanel > Clickable Panel< /UI.ClickablePanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . ClickableAltPanel > Clickable Panel (Alt)< /UI.ClickableAltPanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Highlight
-
-
-
-
-
-
-
-
-
-
-
-
<UI . HighlightPanel >
- Highlight Panel
-< /UI.HighlightPanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Padding
-Add a "padding" attribute (i.e. pal
, pbn
, etc.) to change the padding on the panel-body
.
-
-
-
-
-
-
-
-
-
-
-
<UI . Panel className= "bg-neutral-8" padding= "paxxl" >
- <p> Base Panel</p>
-< /UI.Panel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-A ScrollingPanel is created by using a Panel
component and including a true value for the scrollable
-property. Alternatively, if this value is a number, it will become the height of the scrollable panel in pixels!
-
-
-
-
-
-
-
-
-
-
-
<UI . Panel className= "bg-neutral-8" scrollable= {100} >
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
-< /UI.Panel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Panel className= "bg-neutral-8" scrollable= {true} >
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
- <p> Scrollable Panel</p>
-< /UI.Panel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Shadow
-ShadowPanels
accept a shadowLevel
property between 1 and 4 (darkest to lightest).
-If no shadowLevel
is set, a default value of 3 is applied.
-
-
-
-
-
-
-
-
-
-
-
<UI . ShadowPanel > Shadow Panel (Defaults to shadow level 3)< /UI.ShadowPanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . ShadowPanel shadowLevel= {1} > Shadow Panel (level 1)< /UI.ShadowPanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . ShadowPanel shadowLevel= {2} > Shadow Panel (level 2)< /UI.ShadowPanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . ShadowPanel shadowLevel= {3} > Shadow Panel (level 3)< /UI.ShadowPanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . ShadowPanel shadowLevel= {4} > Shadow Panel (level 4)< /UI.ShadowPanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Simple
-
-
-
-
-
-
-
-
-
-
-
-
<UI . SimplePanel >
- Simple Panel
-< /UI.SimplePanel>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Pivnetacos
-
-
-
- Deprecation warning
-
-
- This component is deprecated.
-
-
-Here is a basic example of how React components can be combined to create larger pieces.
-
-
-
var PivnetHomepage = React.createClass({
- render: function () {
- return (
- <div className= "bg-dark-1 txt-c ptxl" >
- <div className= "pvxxxl" >
- <UI . DefaultH1 color= "type-neutral-9" className= "mbn" > Explore, download, and update Pivotal software and services< /UI.DefaultH1>
- <UI . DefaultH2 color= "type-neutral-11" bold= "low" className= "mtn" > Software designed with the enterprise in mind< /UI.DefaultH2>
- </div>
-
- <UI . InverseDivider className= "mbn" />
-
- <UI . Pane className= "bg-shadow-1" >
- <div className= "row" >
- <div className= "col-md-8 col-md-offset-8" >
- <UI . HighlightAltButton className= "mtxxl" block= {true} large= {true} > Join< /UI.HighlightAltButton>
- <p className= "type-sm type-neutral-6" > To download and evaluate all products and services</p>
- </div>
- </div>
- < /UI.Pane>
- </div>
- );
- }
-});
-
-
- Copy
-
-
-
-
-
-Ribbons
-
-
-Ribbon
components are straightforward implementations of the Ribbon styles.
-They should be used to call out access, status, environment, etc.
-
-
-
-
-
-
-
-
-
-
-
<UI . Ribbon > British < /UI.Ribbon>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . PrimaryRibbon > English-British < /UI.PrimaryRibbon>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Banners
-
-
-
-
-
-
-
-
-
-
-
-
<UI . Banner > British < /UI.Banner>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Tables
-
-
-
-Sortable
-The SortableTable
component is a robust component that offers a styled table with fully
-functioning sort.
The SortableTable
expects the following properties:
-Property
-Type
-Description
-
-
-data
-Array of JS objects
-The collection of data to be displayed
-
-
-columns
-Array of column objects
-Informs the table how to render columns as well as which columns should be sortable
-
-
-classes
-Array of strings
-A list of class names to be added to the table element
-
-
The column objects should have the following structure:
-Property
-Required?
-Type
-Description
-
-
-name
-yes
-String
-Name of the property on a data object (how to lookup the value for this column)
-
-
-title
-yes
-String
-Name to display on the table header
-
-
-sortable
-no
-Boolean
-Is this column sortable? Defaults to false
-
-
-align
-no
-'center', 'left', or 'right'
-How should text be aligned within this column? Defaults to left
-
-
If a column is marked as being sortable, it will attempt to sort the values as strings.
-
-
-
var sortTableCols = [
- {
- name : 'name' ,
- title : 'Name' ,
- sortable : true
- },
- {
- name : 'instances' ,
- title : 'Instances' ,
- sortable : true ,
- align : 'center'
- },
- {
- name : 'cpu' ,
- title : 'CPU' ,
- sortable : true ,
- align : 'right'
- },
- {
- name : 'synergy' ,
- title : 'Synergy' ,
- align : 'left'
- }
-]
-
-var sortTableData = [
- {
- instances : '1' ,
- name : 'foo' ,
- cpu : 'po' ,
- synergy : 'qum' ,
- ram : 'bee' ,
- },
- {
- name : 'yee' ,
- instances : 'di' ,
- cpu : 'no' ,
- synergy : 'aum'
- },
- {
- name : 'zee' ,
- instances : 'si' ,
- cpu : 'mo' ,
- synergy : 'wum'
- },
- {
- name : 'jee' ,
- instances : 'ui' ,
- cpu : 'no' ,
- synergy : 'mum'
- }
-];
-
-
- Copy
-
-
-
-
-
-
-
-
<UI . SortableTable
- data= {sortTableData}
- columns= {sortTableCols}
- classes= {['table-data', ' table-light ']} />
-
-
- Copy
-
-
-
-
-Tabs
-
-
-Using Tab components in React consists of a parent element for the desired Tab type (for example,
-SimpleTabs
or SimpleAltTabs
). Each Tab
is a child of this and has a tab
property for the
-string value a Tab should display. Additionally, each Tab
must define an eventKey
property
-for uniquely identifying this tab to its parent component. When you want to indicate which
-tab should be selected by default, apply the defaultActiveKey
prop to the parent.
For examples, see the various Tabs defined below.
-Simple
-
-
-
-
-
<UI . SimpleTabs defaultActiveKey= {1} >
- <UI . Tab eventKey= {1} tab= "Tab 1" > Wow!< /UI.Tab>
- <UI . Tab eventKey= {2} tab= "Tab 2" >
- <h2> Neat!</h2>
- <span> So much content.</span>
- < /UI.Tab>
-< /UI.SimpleTabs>
-
-
- Copy
-
-
-
-
-Alt
-
-
-
-
-
<UI . SimpleAltTabs defaultActiveKey= {2} >
- <UI . Tab eventKey= {1} tab= "Tab 1" > Wow!< /UI.Tab>
- <UI . Tab eventKey= {2} tab= "Tab 2" >
- <h2> Neat!</h2>
- <span> So much content.</span>
- < /UI.Tab>
-< /UI.SimpleAltTabs>
-
-
- Copy
-
-
-
-
-
-Tooltips are used to display extra information on hover.
-To make an element show a tooltip, wrap it in an OverlayTrigger
.
-If the overlay
property passed into the OverlayTrigger
will be displayed on hover,
-this is where the Tooltip
can be used. The is currently a thin wrapper around
-React Bootstrap.
Tooltips are placed using the placement
property on OverlayTrigger
, "left", "right", "bottom", "top".
-
-
-
-
<div>
-<p>
- Check out this
- <UI . OverlayTrigger placement= "left" overlay= {<UI.Tooltip > I should be on the left< /UI.Tooltip>}>
- <a href= "#" > tooltip on the left</a>
- < /UI.OverlayTrigger>
-</p>
-<p>
- Check out this
- <UI . OverlayTrigger placement= "right" overlay= {<UI.Tooltip > I should be on the right< /UI.Tooltip>}>
- <a href= "#" > tooltip on the right</a>
- < /UI.OverlayTrigger>
-</p>
-<p>
- Check out this
- <UI . OverlayTrigger placement= "top" overlay= {<UI.Tooltip > I should be on the top< /UI.Tooltip>}>
- <a href= "#" > tooltip on the top</a>
- < /UI.OverlayTrigger>
-</p>
-<p>
- Check out this
- <UI . OverlayTrigger placement= "bottom" overlay= {<UI.Tooltip > I should be on the bottom< /UI.Tooltip>}>
- <a href= "#" > tooltip on the bottom</a>
- < /UI.OverlayTrigger>
-</p>
-</div>
-
-
- Copy
-
-
-
-
-Typography
-
-
-We have three type systems. Which one you choose depends on your product.
Marketing sites should use the largest styles, for example <UI.MarketingH1>A Top Level Heading</UI.MarketingH1>
-Most sites will use our default headings, for example <UI.DefaultH1>A Top Level Heading</UI.DefaultH1>
-Rarely, sites will need a smaller type scale, for example <UI.AlternateH1>A Top Level Heading</UI.AlternateH1>
-
-Default
-
-
-
-
-
-
-
-
-
-
-
-
<UI . DefaultH1 > h1 31px< /UI.DefaultH1>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . DefaultH2 > h2 25px< /UI.DefaultH2>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . DefaultH3 > h3 20px< /UI.DefaultH3>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . DefaultH4 > h4 18px< /UI.DefaultH4>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . DefaultH5 > h5 16px< /UI.DefaultH5>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . DefaultH6 > h6 13px< /UI.DefaultH6>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Alternate
-
-
-
-
-
-
-
-
-
-
-
-
<UI . AlternateH1 > This is an H1< /UI.AlternateH1>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . AlternateH2 > This is an H2< /UI.AlternateH2>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . AlternateH3 > This is an H3< /UI.AlternateH3>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . AlternateH4 > This is an H4< /UI.AlternateH4>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . AlternateH5 > This is an H5< /UI.AlternateH5>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . AlternateH6 > This is an H6< /UI.AlternateH6>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Marketing
-
-
-
-
-
-
-
-
-
-
-
-
<UI . MarketingH1 > This is an h1< /UI.MarketingH1>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . MarketingH2 > This is an h2< /UI.MarketingH2>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . MarketingH3 > This is an h3< /UI.MarketingH3>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . MarketingH4 > This is an h4< /UI.MarketingH4>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . MarketingH5 > This is an h5< /UI.MarketingH5>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<UI . MarketingH6 > This is an h6< /UI.MarketingH6>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-Custom
-Usually, you want to use the provided headings. If your mock doesn't exactly match, you should try the normal headings,
-and see if it still looks ok. If it doesn't (this should be rare!) you can use our custom type generator.
You may want to wrap this in a custom reusable React component rather than calling it directly.
-
-
-
-
<UI . Heading element= "h1" bold= "high" color= "type-brand-2" > This is a custom h1< /UI.Heading>
-
-
- Copy
-
-
-
-
-
-
-
-
-
diff --git a/release/pui-v1.9.0/styleguide/console-laptop.png b/release/pui-v1.9.0/styleguide/console-laptop.png
deleted file mode 100644
index 84ba20643..000000000
Binary files a/release/pui-v1.9.0/styleguide/console-laptop.png and /dev/null differ
diff --git a/release/pui-v1.9.0/styleguide/favicon.ico b/release/pui-v1.9.0/styleguide/favicon.ico
deleted file mode 100644
index aa9da6a12..000000000
Binary files a/release/pui-v1.9.0/styleguide/favicon.ico and /dev/null differ
diff --git a/release/pui-v1.9.0/styleguide/gentle_scroll.js b/release/pui-v1.9.0/styleguide/gentle_scroll.js
deleted file mode 100644
index e69de29bb..000000000
diff --git a/release/pui-v1.9.0/styleguide/github.css b/release/pui-v1.9.0/styleguide/github.css
deleted file mode 100644
index f01250526..000000000
--- a/release/pui-v1.9.0/styleguide/github.css
+++ /dev/null
@@ -1,61 +0,0 @@
-hll { background-color: #ffffcc }
-.c { color: #999988; font-style: italic } /* Comment */
-.err { color: #a61717; background-color: #e3d2d2 } /* Error */
-.k { color: #000000; font-weight: bold } /* Keyword */
-.o { color: #000000; font-weight: bold } /* Operator */
-.cm { color: #999988; font-style: italic } /* Comment.Multiline */
-.cp { color: #999999; font-weight: bold; font-style: italic } /* Comment.Preproc */
-.c1 { color: #999988; font-style: italic } /* Comment.Single */
-.cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
-.gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
-.ge { color: #000000; font-style: italic } /* Generic.Emph */
-.gr { color: #aa0000 } /* Generic.Error */
-.gh { color: #999999 } /* Generic.Heading */
-.gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
-.go { color: #888888 } /* Generic.Output */
-.gp { color: #555555 } /* Generic.Prompt */
-.gs { font-weight: bold } /* Generic.Strong */
-.gu { color: #aaaaaa } /* Generic.Subheading */
-.gt { color: #aa0000 } /* Generic.Traceback */
-.kc { color: #000000; font-weight: bold } /* Keyword.Constant */
-.kd { color: #000000; font-weight: bold } /* Keyword.Declaration */
-.kn { color: #000000; font-weight: bold } /* Keyword.Namespace */
-.kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */
-.kr { color: #000000; font-weight: bold } /* Keyword.Reserved */
-.kt { color: #445588; font-weight: bold } /* Keyword.Type */
-.m { color: #009999 } /* Literal.Number */
-.s { color: #d01040 } /* Literal.String */
-.na { color: #008080 } /* Name.Attribute */
-.nb { color: #0086B3 } /* Name.Builtin */
-.nc { color: #445588; font-weight: bold } /* Name.Class */
-.no { color: #008080 } /* Name.Constant */
-.nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */
-.ni { color: #800080 } /* Name.Entity */
-.ne { color: #990000; font-weight: bold } /* Name.Exception */
-.nf { color: #990000; font-weight: bold } /* Name.Function */
-.nl { color: #990000; font-weight: bold } /* Name.Label */
-.nn { color: #555555 } /* Name.Namespace */
-.nt { color: #000080 } /* Name.Tag */
-.nv { color: #008080 } /* Name.Variable */
-.ow { color: #000000; font-weight: bold } /* Operator.Word */
-.w { color: #bbbbbb } /* Text.Whitespace */
-.mf { color: #009999 } /* Literal.Number.Float */
-.mh { color: #009999 } /* Literal.Number.Hex */
-.mi { color: #009999 } /* Literal.Number.Integer */
-.mo { color: #009999 } /* Literal.Number.Oct */
-.sb { color: #d01040 } /* Literal.String.Backtick */
-.sc { color: #d01040 } /* Literal.String.Char */
-.sd { color: #d01040 } /* Literal.String.Doc */
-.s2 { color: #d01040 } /* Literal.String.Double */
-.se { color: #d01040 } /* Literal.String.Escape */
-.sh { color: #d01040 } /* Literal.String.Heredoc */
-.si { color: #d01040 } /* Literal.String.Interpol */
-.sx { color: #d01040 } /* Literal.String.Other */
-.sr { color: #009926 } /* Literal.String.Regex */
-.s1 { color: #d01040 } /* Literal.String.Single */
-.ss { color: #990073 } /* Literal.String.Symbol */
-.bp { color: #999999 } /* Name.Builtin.Pseudo */
-.vc { color: #008080 } /* Name.Variable.Class */
-.vg { color: #008080 } /* Name.Variable.Global */
-.vi { color: #008080 } /* Name.Variable.Instance */
-.il { color: #009999 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/release/pui-v1.9.0/styleguide/img--examplesDebra.png b/release/pui-v1.9.0/styleguide/img--examplesDebra.png
deleted file mode 100644
index 9e2799e11..000000000
Binary files a/release/pui-v1.9.0/styleguide/img--examplesDebra.png and /dev/null differ
diff --git a/release/pui-v1.9.0/styleguide/img--examplesGary.png b/release/pui-v1.9.0/styleguide/img--examplesGary.png
deleted file mode 100644
index 37f41d616..000000000
Binary files a/release/pui-v1.9.0/styleguide/img--examplesGary.png and /dev/null differ
diff --git a/release/pui-v1.9.0/styleguide/img--examplesKelly.png b/release/pui-v1.9.0/styleguide/img--examplesKelly.png
deleted file mode 100644
index aceb3c793..000000000
Binary files a/release/pui-v1.9.0/styleguide/img--examplesKelly.png and /dev/null differ
diff --git a/release/pui-v1.9.0/styleguide/img--examplesTodd.png b/release/pui-v1.9.0/styleguide/img--examplesTodd.png
deleted file mode 100644
index 91e875618..000000000
Binary files a/release/pui-v1.9.0/styleguide/img--examplesTodd.png and /dev/null differ
diff --git a/release/pui-v1.9.0/styleguide/pui-logo@2x.png b/release/pui-v1.9.0/styleguide/pui-logo@2x.png
deleted file mode 100644
index 37c3e54e5..000000000
Binary files a/release/pui-v1.9.0/styleguide/pui-logo@2x.png and /dev/null differ
diff --git a/release/pui-v1.9.0/styleguide/styleguide.css b/release/pui-v1.9.0/styleguide/styleguide.css
deleted file mode 100644
index 19afff2f2..000000000
--- a/release/pui-v1.9.0/styleguide/styleguide.css
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * IE 10 doesn't support conditional comments so using IE9/IE10 hack.
- * Does not affect IE 5.5 through IE 8, nor other browsers.
- *
- * For details see: http://www.impressivewebs.com/ie10-css-hacks/
- */
-@media screen and (min-width: 0\0) {
- .chip .chip-color-name {
- font-size: 10px !important; }
- h3, .h3 {
- font-size: 22px; } }
-
-/* ==========================================================================
- Browser support
- ========================================================================== */
-/* Typography
- ========================================================================== */
-/* Grid
- ========================================================================== */
-/* Code examples
- ========================================================================== */
-/* Transition mixins */
-/* Button Mixins */
-html {
- background-color: #ecefef; }
-
-.container {
- max-width: 1128px;
- width: auto;
- margin: 0 auto; }
-
-.content {
- margin-top: 5px; }
-
-.main > h1 {
- margin-top: 30px; }
-
-.main > h1:first-child {
- margin-top: 0; }
-
-h1.styleguide, h2.styleguide, h3.styleguide, h4.styleguide, h5.styleguide, h6.styleguide {
- color: #00a79d;
- font-weight: 600;
- margin-top: 0; }
- @media screen and (min-width: 992px) {
- h1.styleguide, h2.styleguide, h3.styleguide, h4.styleguide, h5.styleguide, h6.styleguide {
- padding-top: 50px; } }
-
-h1.styleguide {
- font-size: 42px; }
-
-footer {
- margin-top: 20px;
- text-align: center; }
-
-.componentMenu {
- max-height: 535px;
- width: 175px;
- overflow-y: auto; }
-
-blockquote:before {
- content: "Design Note:";
- font-weight: bold; }
-
-blockquote {
- border: 1px solid #eee;
- border-radius: 4px;
- font-family: "Comic Sans MS";
- font-size: 16px;
- margin: 10px 0;
- padding: 5px; }
-
-.styleguide-header {
- min-height: 40px;
- width: 100%;
- z-index: 100;
- background: #243640;
- color: white;
- @-webkit-keyframes hoverSpin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg); }
-
- 100% {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg); } }
-
- @keyframes hoverSpin {
- 0% {
- opacity: 1; }
-
- 50% {
- opacity: .6; }
-
- 100% {
- opacity: 1; } }
- }
- .styleguide-header .styleguide-logo {
- float: left;
- margin-top: 5px;
- margin-right: 15px; }
- .styleguide-header .styleguide-logo:hover {
- -webkit-animation: hoverSpin 5s linear infinite;
- animation: hoverSpin 5s linear infinite; }
- .styleguide-header #navbar-hamburger {
- float: right;
- margin: 4px 0px;
- border: none;
- padding: 5px 7px;
- border-radius: 4px;
- background: transparent;
- -webkit-transition: background 0.5s ease-out;
- transition: background 0.5s ease-out; }
- .styleguide-header #navbar-hamburger:hover {
- background: #3f484f; }
- .styleguide-header #navbar-hamburger .icon-bar {
- display: block;
- width: 22px;
- height: 2px;
- border-radius: 1px;
- background: #F8F8F8; }
- .styleguide-header #navbar-hamburger .icon-bar:not(:first-of-type) {
- margin: 4px; }
- .styleguide-header #styleguide-first-level-nav-wrapper {
- margin: 0 -10px; }
- .styleguide-header ul#styleguide-first-level-nav {
- display: none;
- clear: both;
- margin: 0;
- padding: 0;
- background: #243640;
- list-style-type: none; }
- .styleguide-header ul#styleguide-first-level-nav > li {
- -webkit-transition: background 300ms ease-out;
- transition: background 300ms ease-out; }
- .styleguide-header ul#styleguide-first-level-nav > li > a {
- color: white; }
- .styleguide-header ul#styleguide-first-level-nav > li a.category-link, .styleguide-header ul#styleguide-first-level-nav > li a.styleguide-second-level-nav-link {
- padding: 8px 10px; }
- .styleguide-header ul#styleguide-first-level-nav > li a.category-link {
- display: inline-block;
- width: 55%;
- -webkit-transition: color 300ms ease-out;
- transition: color 300ms ease-out; }
- .styleguide-header ul#styleguide-first-level-nav > li a.styleguide-second-level-nav-link {
- float: right;
- width: 40%;
- text-align: right; }
- .styleguide-header ul#styleguide-first-level-nav > li ul.styleguide-second-level-nav {
- display: none;
- padding-left: 0;
- list-style-type: none;
- background-color: #282828; }
- .styleguide-header ul#styleguide-first-level-nav > li ul.styleguide-second-level-nav > li {
- padding-bottom: 5px;
- font-size: 16px; }
- .styleguide-header ul#styleguide-first-level-nav > li ul.styleguide-second-level-nav > li a {
- display: block;
- color: #F8F8F8;
- padding: 8px 10px 8px 30px; }
- .styleguide-header ul#styleguide-first-level-nav > li ul.styleguide-second-level-nav > li:hover a {
- color: #49a8d5; }
- .styleguide-header ul#styleguide-first-level-nav > li:hover, .styleguide-header ul#styleguide-first-level-nav > li.active {
- background: #282828; }
- .styleguide-header ul#styleguide-first-level-nav > li:hover a.category-link, .styleguide-header ul#styleguide-first-level-nav > li:hover a.styleguide-second-level-nav-link, .styleguide-header ul#styleguide-first-level-nav > li.active a.category-link, .styleguide-header ul#styleguide-first-level-nav > li.active a.styleguide-second-level-nav-link {
- color: #00a79d; }
- @media (min-width: 992px) {
- .styleguide-header {
- position: fixed;
- top: 0; }
- .styleguide-header #styleguide-first-level-nav-wrapper {
- margin: 0; }
- .styleguide-header ul#styleguide-first-level-nav {
- display: block;
- clear: none;
- top: 0;
- background: transparent; }
- .styleguide-header ul#styleguide-first-level-nav > li {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- padding: 10px 15px;
- font-size: 14px; }
- .styleguide-header ul#styleguide-first-level-nav > li a.category-link {
- padding: 0;
- display: inline; }
- .styleguide-header ul#styleguide-first-level-nav > li a.styleguide-second-level-nav-link {
- float: none; }
- .styleguide-header ul#styleguide-first-level-nav > li ul.styleguide-second-level-nav {
- position: absolute;
- top: 100%;
- left: 0;
- width: 200px;
- padding: 10px 20px; }
- .styleguide-header ul#styleguide-first-level-nav > li ul.styleguide-second-level-nav > li a {
- padding: 0; }
- .styleguide-header ul#styleguide-first-level-nav > li:hover ul.styleguide-second-level-nav {
- display: block; }
- .styleguide-header #navbar-hamburger {
- display: none; } }
-
-.exampleOutput .back-to-top {
- position: absolute; }
-
-.contrast-bar {
- padding: 20px;
- background-color: #243640;
- min-height: 80px; }
- .contrast-bar .row {
- float: left;
- width: 100%; }
- .contrast-bar .row .chip-color {
- min-height: 93px; }
-
-.chip {
- margin-top: 5px; }
- .chip .chip-color {
- min-height: 53px; }
- .chip .chip-color-name {
- color: #777;
- padding-top: 5px;
- font-size: 8px;
- font-family: Monaco, Menlo, Consolas, "Courier New", monospace; }
-
-.marquee {
- min-height: 400px; }
-
-.marquee-name {
- color: #777;
- padding-top: 5px;
- font-size: 11px;
- font-family: Monaco, Menlo, Consolas, "Courier New", monospace; }
-
-.componentMenu {
- max-height: 535px;
- width: 175px;
- overflow-y: auto; }
-
-blockquote:before {
- content: "Design Note:";
- font-weight: bold; }
-
-blockquote {
- border: 1px solid #eee;
- border-radius: 4px;
- font-family: "Comic Sans MS";
- font-size: 16px;
- margin: 10px 0;
- padding: 5px; }
-
-.sg-code {
- padding: 2px 4px;
- color: #d14;
- white-space: nowrap;
- background-color: #f9f9f9;
- border: 1px solid #ccc;
- border-radius: 4px; }
-
-.codeExample, .jsExample {
- background-clip: padding-box; }
- .codeExample .docSwatch, .jsExample .docSwatch {
- min-height: 218.21px;
- border: 1px solid #ccc;
- padding: 10px 0 0 10px;
- font-size: 12px;
- margin-bottom: 5px; }
-
-.codeExample .codeBlock, .jsExample.codeBlock {
- position: relative;
- background-color: #F8F8F8;
- border-top: 1px solid rgba(0, 0, 0, 0.07);
- padding: 40px; }
- .codeExample .codeBlock pre, .jsExample.codeBlock pre {
- background-color: transparent;
- margin: 0;
- border: none;
- padding: 0; }
- .codeExample .codeBlock .btn-copy, .jsExample.codeBlock .btn-copy {
- display: none;
- border-left: 1px solid rgba(0, 0, 0, 0.07);
- border-bottom: 1px solid rgba(0, 0, 0, 0.07); }
- .codeExample .codeBlock .btn-copy.zeroclipboard-is-hover, .jsExample.codeBlock .btn-copy.zeroclipboard-is-hover {
- display: block; }
- .codeExample .codeBlock:hover .btn-copy, .jsExample.codeBlock:hover .btn-copy {
- display: block; }
-
-.codeExample {
- margin: 10px 0;
- background-color: white; }
- .codeExample .exampleOutput {
- padding: 20px; }
- .codeExample .line > div:after {
- content: attr(class);
- display: block;
- min-height: 40px;
- line-height: 40px;
- background-color: #EEE;
- text-align: center;
- border-radius: 3px;
- font-size: 12px; }
-
-.jsExample {
- margin: -10px 0 10px; }
-
-.codeTable table {
- padding: 7px;
- border: none;
- table-layout: fixed;
- width: 100%;
- max-width: 100%;
- margin-bottom: 24px; }
- .codeTable table tr, .codeTable table th, .codeTable table td {
- font-weight: normal; }
- .codeTable table tr {
- padding: 7px;
- border-bottom: 1px solid rgba(0, 0, 0, 0.07); }
- .codeTable table tr:last-of-type {
- border-bottom: none; }
- .codeTable table th {
- padding: 10px 20px;
- vertical-align: middle;
- background-color: white; }
- .codeTable table td {
- position: relative;
- padding: 10px 10px;
- vertical-align: middle;
- background-color: #F8F8F8; }
- .codeTable table td .btn-copy {
- display: none;
- border-left: 1px solid rgba(0, 0, 0, 0.14);
- border-bottom: 1px solid rgba(0, 0, 0, 0.14); }
- .codeTable table td .btn-copy.zeroclipboard-is-hover {
- display: block; }
- .codeTable table td:hover .btn-copy {
- display: block; }
- .codeTable table pre {
- background-color: transparent;
- margin: 0;
- border: none;
- padding: 0; }
-
-table.styleguide {
- padding: 7px;
- margin-bottom: 12px;
- border: 1px solid #ccc;
- width: 100%; }
- table.styleguide tr, table.styleguide th, table.styleguide td {
- padding: 7px;
- border: 1px solid #ccc;
- font-weight: normal; }
- table.styleguide th {
- font-weight: bold; }
- table.styleguide td.no-wrap, table.styleguide th.no-wrap {
- white-space: nowrap; }
-
-.btn-copy {
- -webkit-transition: background 0.5s ease-out;
- transition: background 0.5s ease-out;
- position: absolute;
- top: 0;
- right: 0;
- padding: 7px 20px;
- border-radius: 0; }
- .btn-copy.zeroclipboard-is-hover {
- background-color: white; }
-
-.grid-show {
- margin-bottom: 20px;
- text-align: center; }
- .grid-show [class*=col]:before {
- content: attr(class) '\a' attr(grid-content);
- white-space: pre;
- display: block;
- background-color: #F8F8F8;
- padding: 10px 0;
- outline: 1px solid #b4b4b4; }
-
-.styleguide-form {
- padding: 25px; }
-
-.styleguide-component-wrapper {
- position: relative;
- border: 1px solid #c3c5c7;
- height: 200px;
- width: 100%;
- overflow: hidden; }
- .styleguide-component-wrapper .ribbon-banner {
- position: absolute; }
-
-.bkg-highlight-2 {
- background-position: 0 50%; }
-
-.code-hide-haml .codeBlock.haml {
- display: none; }
-
-.code-hide-html .codeBlock.html {
- display: none; }
-
-.section-nav {
- font-size: 14px;
- padding-left: 0;
- font-weight: bold; }
- .section-nav li {
- display: inline-block; }
- .section-nav li a {
- display: inline-block;
- padding: 5px 10px;
- margin-right: 5px;
- margin-bottom: 10px;
- background-color: rgba(255, 255, 255, 0.4);
- -webkit-transition: all 300ms ease-out;
- transition: all 300ms ease-out;
- border-radius: 3px; }
- .section-nav li a:hover {
- background-color: white; }
-
-td.is-visible, td.is-hidden {
- text-align: center;
- vertical-align: middle; }
-
-td.is-visible {
- color: #468847;
- background-color: #dff0d8 !important; }
-
-td.is-hidden {
- color: #ccc;
- background-color: #f9f9f9 !important; }
-
-.aligner {
- background-color: #F8F8F8; }
- .aligner > * {
- background-color: white; }
diff --git a/release/pui-v1.9.0/styleguide/styleguide.js b/release/pui-v1.9.0/styleguide/styleguide.js
deleted file mode 100644
index 1b6bc22f1..000000000
--- a/release/pui-v1.9.0/styleguide/styleguide.js
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Stylesheet swappin */
-$(document).ready(function(){
- $('input.alternate-css').change(function() {
- if($(this).get(0).checked) {
- $("link[href*='prism-okaida.css']").attr('disabled', 'disabled');
- $("link[href*='prism-default.css']").removeAttr('disabled');
- } else {
- $("link[href*='prism-okaida.css']").removeAttr('disabled');
- $("link[href*='prism-default.css']").attr('disabled', 'disabled');
- }
- });
-});
-
-/* Adjust scrollTop when navigating to a subsection on the current page */
-
-$(document).ready(function() {
- $('a.styleguide-subsection, .section-nav a').click(function(e) {
- var $target = $(e.target.hash);
- var desiredScrollPosition = $target.offset().top;
- window.history.pushState('', '', e.target.hash);
- $('body, html').animate({
- scrollTop: desiredScrollPosition
- }, 500, function () {
- $target.focus();
- });
- return false;
- });
-});
-
-/* Make all links inside codeExamples open in a new window */
-
-$(document).ready(function() {
- $('.codeExample a').attr('target', '_blank');
-});
-
-/* Navbar hamburger functionality */
-
-$(document).ready(function() {
- $('#navbar-hamburger').click(function() {
- $('ul#styleguide-first-level-nav').slideToggle(300);
- });
-
- $('.styleguide-second-level-nav-link').click(function(e) {
- e.preventDefault();
-
- var $targetCategory = $('#' + $(e.currentTarget).data('target'));
- var targetCategoryClosed = !$targetCategory.hasClass('active');
-
- $('li.styleguide-category').removeClass('active');
- $('ul.styleguide-second-level-nav').slideUp();
- if (targetCategoryClosed) {
- $targetCategory.addClass('active');
- $targetCategory.find('ul.styleguide-second-level-nav').slideDown();
- }
- });
-});
-
-/* Copy button */
-
-$(document).ready(function() {
- ZeroClipboard.config({ swfPath: "zeroclipboard/ZeroClipboard.swf" });
- var zc = new ZeroClipboard( $('[data-btn-copy]') );
-
- $('[data-btn-copy]')
- .attr('title', 'Copy to clipboard');
-
- $('[data-btn-copy]').tooltip();
-
- zc.on('ready', function() {
- zc.on('copy', function(e) {
- var copyText = $(e.target).parent().find('[data-code-to-copy]').text();
- e.clipboardData.setData('text/plain', copyText);
- });
-
- zc.on('aftercopy', function(e) {
- $(e.target).attr('title', 'Copied!')
- .tooltip('fixTitle')
- .tooltip('show')
- .attr('title', 'Copy to clipboard')
- .tooltip('fixTitle');
- });
- });
-
- zc.on('error', function(err) {
- console.error('Zero clipboard error', err);
- ZeroClipboard.destroy();
- });
-});
diff --git a/release/pui-v1.9.0/styleguide/such-awesome.jpg b/release/pui-v1.9.0/styleguide/such-awesome.jpg
deleted file mode 100644
index b034f775e..000000000
Binary files a/release/pui-v1.9.0/styleguide/such-awesome.jpg and /dev/null differ
diff --git a/release/pui-v1.9.0/syntax-highlighting/prism-default.css b/release/pui-v1.9.0/syntax-highlighting/prism-default.css
deleted file mode 100644
index 3915f73d8..000000000
--- a/release/pui-v1.9.0/syntax-highlighting/prism-default.css
+++ /dev/null
@@ -1,217 +0,0 @@
-/* http://prismjs.com/download.html?themes=prism&languages=markup+css+css-extras+clike+javascript+java+php+php-extras+coffeescript+scss+bash+python+http+ruby+go&plugins=line-highlight+line-numbers */
-/**
- * prism.js default theme for JavaScript, CSS and HTML
- * Based on dabblet (http://dabblet.com)
- * @author Lea Verou
- */
-
-code[class*="language-"],
-pre[class*="language-"] {
- color: black;
- text-shadow: 0 1px white;
- font-family: Consolas, Monaco, 'Andale Mono', monospace;
- direction: ltr;
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
-
-
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
-
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
-}
-
-pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
-code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
- text-shadow: none;
- background: #b3d4fc;
-}
-
-pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
-code[class*="language-"]::selection, code[class*="language-"] ::selection {
- text-shadow: none;
- background: #b3d4fc;
-}
-
-@media print {
- code[class*="language-"],
- pre[class*="language-"] {
- text-shadow: none;
- }
-}
-
-/* Code blocks */
-pre[class*="language-"] {
- padding: 1em;
- margin: .5em 0;
- overflow: auto;
-}
-
-:not(pre) > code[class*="language-"],
-pre[class*="language-"] {
- background: #f5f2f0;
-}
-
-/* Inline code */
-:not(pre) > code[class*="language-"] {
- padding: .1em;
- border-radius: .3em;
-}
-
-.token.comment,
-.token.prolog,
-.token.doctype,
-.token.cdata {
- color: slategray;
-}
-
-.token.punctuation {
- color: #999;
-}
-
-.namespace {
- opacity: .7;
-}
-
-.token.property,
-.token.tag,
-.token.boolean,
-.token.number,
-.token.constant,
-.token.symbol {
- color: #905;
-}
-
-.token.selector,
-.token.attr-name,
-.token.string,
-.token.builtin {
- color: #690;
-}
-
-.token.operator,
-.token.entity,
-.token.url,
-.language-css .token.string,
-.style .token.string,
-.token.variable {
- color: #a67f59;
- background: hsla(0,0%,100%,.5);
-}
-
-.token.atrule,
-.token.attr-value,
-.token.keyword {
- color: #07a;
-}
-
-.token.function {
- color: #DD4A68;
-}
-
-.token.regex,
-.token.important {
- color: #e90;
-}
-
-.token.important {
- font-weight: bold;
-}
-
-.token.entity {
- cursor: help;
-}
-
-pre[data-line] {
- position: relative;
- padding: 1em 0 1em 3em;
-}
-
-.line-highlight {
- position: absolute;
- left: 0;
- right: 0;
- padding: inherit 0;
- margin-top: 1em; /* Same as .prism’s padding-top */
-
- background: hsla(24, 20%, 50%,.08);
- background: -moz-linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
- background: -webkit-linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
- background: -o-linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
- background: linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
-
- pointer-events: none;
-
- line-height: inherit;
- white-space: pre;
-}
-
- .line-highlight:before,
- .line-highlight[data-end]:after {
- content: attr(data-start);
- position: absolute;
- top: .4em;
- left: .6em;
- min-width: 1em;
- padding: 0 .5em;
- background-color: hsla(24, 20%, 50%,.4);
- color: hsl(24, 20%, 95%);
- font: bold 65%/1.5 sans-serif;
- text-align: center;
- vertical-align: .3em;
- border-radius: 999px;
- text-shadow: none;
- box-shadow: 0 1px white;
- }
-
- .line-highlight[data-end]:after {
- content: attr(data-end);
- top: auto;
- bottom: .4em;
- }
-pre.line-numbers {
- position: relative;
- padding-left: 3.8em;
- counter-reset: linenumber;
-}
-
-pre.line-numbers > code {
- position: relative;
-}
-
-.line-numbers .line-numbers-rows {
- position: absolute;
- pointer-events: none;
- top: 0;
- font-size: 100%;
- left: -3.8em;
- width: 3em; /* works for line-numbers below 1000 lines */
- letter-spacing: -1px;
- border-right: 1px solid #999;
-
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-
-}
-
- .line-numbers-rows > span {
- pointer-events: none;
- display: block;
- counter-increment: linenumber;
- }
-
- .line-numbers-rows > span:before {
- content: counter(linenumber);
- color: #999;
- display: block;
- padding-right: 0.8em;
- text-align: right;
- }
diff --git a/release/pui-v1.9.0/syntax-highlighting/prism-okaida.css b/release/pui-v1.9.0/syntax-highlighting/prism-okaida.css
deleted file mode 100644
index 5a71d22de..000000000
--- a/release/pui-v1.9.0/syntax-highlighting/prism-okaida.css
+++ /dev/null
@@ -1,115 +0,0 @@
-/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+css-extras+clike+javascript+java+php+php-extras+coffeescript+scss+bash+python+http+ruby+go */
-/**
- * okaidia theme for JavaScript, CSS and HTML
- * Loosely based on Monokai textmate theme by http://www.monokai.nl/
- * @author ocodia
- */
-
-code[class*="language-"],
-pre[class*="language-"] {
- color: #f8f8f2;
- text-shadow: 0 1px rgba(0,0,0,0.3);
- font-family: Consolas, Monaco, 'Andale Mono', monospace;
- direction: ltr;
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
-
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
-
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
-}
-
-/* Code blocks */
-pre[class*="language-"] {
- padding: 1em;
- margin: .5em 0;
- overflow: auto;
- border-radius: 0.3em;
-}
-
-:not(pre) > code[class*="language-"],
-pre[class*="language-"] {
- background: #272822;
-}
-
-/* Inline code */
-:not(pre) > code[class*="language-"] {
- padding: .1em;
- border-radius: .3em;
-}
-
-.token.comment,
-.token.prolog,
-.token.doctype,
-.token.cdata {
- color: slategray;
-}
-
-.token.punctuation {
- color: #f8f8f2;
-}
-
-.namespace {
- opacity: .7;
-}
-
-.token.property,
-.token.tag,
-.token.constant,
-.token.symbol {
- color: #f92672;
-}
-
-.token.boolean,
-.token.number{
- color: #ae81ff;
-}
-
-.token.selector,
-.token.attr-name,
-.token.string,
-.token.builtin {
- color: #a6e22e;
-}
-
-
-.token.operator,
-.token.entity,
-.token.url,
-.language-css .token.string,
-.style .token.string,
-.token.variable {
- color: #f8f8f2;
-}
-
-.token.atrule,
-.token.attr-value
-{
- color: #e6db74;
-}
-
-
-.token.keyword{
-color: #66d9ef;
-}
-
-.token.regex,
-.token.important {
- color: #fd971f;
-}
-
-.token.important {
- font-weight: bold;
-}
-
-.token.entity {
- cursor: help;
-}
-
diff --git a/release/pui-v1.9.0/utilities.html b/release/pui-v1.9.0/utilities.html
deleted file mode 100644
index e84e68a05..000000000
--- a/release/pui-v1.9.0/utilities.html
+++ /dev/null
@@ -1,1896 +0,0 @@
-
-
-
- a brand new styleguide: Utilities
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Alignment
-The following classes can be used to for horizontal alignment.
-
-
-
-
-
-
-
-
-
-
-
<p class= "txt-l" >
- <code> .txt-l</code>
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<p class= "txt-c" >
- <code> .txt-c</code>
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
-
<p class= "txt-r" >
- <code> .txt-r</code>
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-On display: inline
and display: table-cell
elements,
-the following classes can be used to for vertical alignment.
-
-
-
- .txt-t
-
-
- .txt-m
-
-
- .txt-b
-
-
- Distillery trust fund Neutra fingerstache plaid messenger bag.
- Try-hard health goth PBR Helvetica hashtag. Try-hard narwhal letterpress,
- crucifix selfies trust fund swag mustache quinoa chambray iPhone.
-
-
-
-
-
-
-
<table class= "table table-bordered" >
- <tr>
- <td class= "txt-t" width= "20%" >
- <code> .txt-t</code>
- </td>
- <td class= "txt-m" width= "20%" >
- <code> .txt-m</code>
- </td>
- <td class= "txt-b" width= "20%" >
- <code> .txt-b</code>
- </td>
- <td width= "40%" >
- Distillery trust fund Neutra fingerstache plaid messenger bag.
- Try-hard health goth PBR Helvetica hashtag. Try-hard narwhal letterpress,
- crucifix selfies trust fund swag mustache quinoa chambray iPhone.
- </td>
- </tr>
-</table>
-
-
- Copy
-
-
-
-If you need to vertically align an element that does not fit into those display types,
-take a look at vertical alignment .
-Colors
-
-
-Our color pallet is composed of several different colors. At any given point in captures the current
-evolution of our design and likely includes old and new colors. Whenever possible, evolve the old
-colors rather than adding new ones.
-
-
- Sass variables should only be used in variables.css.scss.
-
-
- They should never be used directly when building components, because it makes
- it very hard to change the values later if you can't tell how they might have been used.
- You should define your own variables that use these colors in variables.css.scss.
-
-
-This example shows proper use of Sass variables.
-
-
$tabs-active-bg-color: $gray-2;
-
-
-
-
-
-
-
-
- $gray-1
- .bg-neutral-1
- .type-neutral-1
-
-
-
-
-
-
-
-
-
-
- $gray-2
- .bg-neutral-2
- .type-neutral-2
-
-
-
-
-
-
-
-
-
- $gray-3
- .bg-neutral-3
- .type-neutral-3
-
-
-
-
-
-
-
-
-
- $gray-4
- .bg-neutral-4
- .type-neutral-4
-
-
-
-
-
-
-
-
-
- $gray-5
- .bg-neutral-5
- .type-neutral-5
-
-
-
-
-
-
-
-
-
- $gray-6
- .bg-neutral-6
- .type-neutral-6
-
-
-
-
-
-
-
-
-
- $gray-7
- .bg-neutral-7
- .type-neutral-7
-
-
-
-
-
-
-
-
-
- $gray-8
- .bg-neutral-8
- .type-neutral-8
-
-
-
-
-
-
-
-
-
- $gray-9
- .bg-neutral-9
- .type-neutral-9
-
-
-
-
-
-
-
-
-
- $gray-10
- .bg-neutral-10
- .type-neutral-10
-
-
-
-
-
-
-
-
-
- $gray-11
- .bg-neutral-11
- .type-neutral-11
-
-
-
-
-
-
-
-
-
-
-
-
- $dark-1
- .bg-dark-1
- .type-dark-1
-
-
-
-
-
-
-
-
-
- $dark-2
- .bg-dark-2
- .type-dark-2
-
-
-
-
-
-
-
-
-
- $dark-3
- .bg-dark-3
- .type-dark-3
-
-
-
-
-
-
-
-
-
-
-
-
- $brand-1
- .bg-brand-1
- .type-brand-1
-
-
-
-
-
-
-
-
-
- $brand-2
- .bg-brand-2
- .type-brand-2
-
-
-
-
-
-
-
-
-
- $brand-3
- .bg-brand-3
- .type-brand-3
-
-
-
-
-
-
-
-
-
- $brand-4
- .bg-brand-4
- .type-brand-4
-
-
-
-
-
-
-
-
-
- $brand-5
- .bg-brand-5
- .type-brand-5
-
-
-
-
-
-
-
-
-
-
-
-
- $accent-5
- .bg-accent-5
- .type-accent-5
-
-
-
-
-
-
-
-
-
- $accent-2
- .bg-accent-2
- .type-accent-2
-
-
-
-
-
-
-
-
-
- $accent-3
- .bg-accent-3
- .type-accent-3
-
-
-
-
-
-
-
-
-
- $accent-4
- .bg-accent-4
- .type-accent-4
-
-
-
-
-
-
-
-
-
- $accent-5
- .bg-accent-5
- .type-accent-5
-
-
-
-
-
-
-
-
-
-
-
-
- $error-1
- .bg-error-1
- .type-error-1
-
-
-
-
-
-
-
-
-
- $error-2
- .bg-error-2
- .type-error-2
-
-
-
-
-
-
-
-
-
- $error-3
- .bg-error-3
- .type-error-3
-
-
-
-
-
-
-
-
-
- $error-4
- .bg-error-4
- .type-error-4
-
-
-
-
-
-
-
-
-
-
-
-
- $warn-1
- .bg-warn-1
- .type-warn-1
-
-
-
-
-
-
-
-
-
- $warn-2
- .bg-warn-2
- .type-warn-2
-
-
-
-
-
-
-
-
-
- $warn-3
- .bg-warn-3
- .type-warn-3
-
-
-
-
-
-
-
-
-
-
-
-
- $success-1
- .bg-success-1
- .type-success-1
-
-
-
-
-
-
-
-
-
- $success-2
- .bg-success-2
- .type-success-2
-
-
-
-
-
-
-Shadows & Glows
-
-
-Ellipsis
-The type .type-ellipsis-1-line
adds ellipsis to text when there is too much. Combine it with .col-md-*
classes to get the width you want.
-
-
- Deprecation warning
-
-
- The 2- and 3-line ellipsis are deprecated.
-
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
-
-
-
-
-
<p class= "type-ellipsis-1-line" >
- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
-
-
-
-
-
<p class= "type-ellipsis-2-lines" >
- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
-
-
-
-
-
-
<p class= "type-ellipsis-3-lines" >
- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-</p>
-
-
-
- Copy
-
-
-
-
-
-
-
-
-
-
-
- Multi-line ellipsis only works on webkit.
-
-
-
-Hoverable
-This component is for showing hidden actions on hover.
-If you put this on an element then hovering on that parent element will show the hidden element.
List example:
This can be used with any kind of list but the list group style seems to fit this use case best.
-
-
- List Item 1
- Edit
-
-
- List Item 2
- Edit
-
-
- List Item 3
- Edit
-
-
- Not hoverable
-
-
-
-
-
-
<ul class= "list-group" hoverable-group= "true" >
- <li class= "list-group-item" hoverable= "true" >
- List Item 1
- <a class= "hovered" href= "#" > Edit</a>
- </li>
- <li class= "list-group-item" hoverable= "true" >
- List Item 2
- <a class= "hovered" href= "#" > Edit</a>
- </li>
- <li class= "list-group-item" hoverable= "true" >
- List Item 3
- <a class= "hovered" href= "#" > Edit</a>
- </li>
- <li class= "list-group-item" >
- Not hoverable
- </li>
-</ul>
-
-
- Copy
-
-
-
-Table example:
-
-
- Name
-
-
-
- Row 1
- Delete
-
-
-
-
- Row 2
- Delete
-
-
-
-
- Row 3
- Delete
-
-
-
-
- Not hoverable
-
-
-
-
-
-
-
<table hoverable-group= "true" >
- <tr>
- <th> Name</th>
- </tr>
- <tr hoverable= "true" >
- <td>
- Row 1
- <a class= "hovered" href= "#" > Delete</a>
- </td>
- </tr>
- <tr hoverable= "<%= true %>" >
- <td>
- Row 2
- <a class= "hovered" href= "#" > Delete</a>
- </td>
- </tr>
- <tr hoverable= "true" >
- <td>
- Row 3
- <a class= "hovered" href= "#" > Delete</a>
- </td>
- </tr>
- <tr>
- <td>
- Not hoverable
- </td>
- </tr>
-</table>
-
-
- Copy
-
-
-
-
-Print
-Similar to the regular responsive classes, use these for toggling content for print.
-
-
-
- Classes
- Browser
- Print
-
-
-
-
-
- .visible-print-block
- .visible-print-inline
- .visible-print-inline-block
-
- Hidden
- Visible
-
-
- .hidden-print
- Visible
- Hidden
-
-
-
-
-Responsive Utilities
-Use a single or combination of the available classes for toggling content across viewport breakpoints.
-
-
-
-
-
- Extra small devices
- Phones (<768px)
-
-
- Small devices
- Tablets (≥768px)
-
-
- Medium devices
- Desktops (≥992px)
-
-
- Large devices
- Desktops (≥1200px)
-
-
-
-
-
- .visible-xs-*
- Visible
- Hidden
- Hidden
- Hidden
-
-
- .visible-sm-*
- Hidden
- Visible
- Hidden
- Hidden
-
-
- .visible-md-*
- Hidden
- Hidden
- Visible
- Hidden
-
-
- .visible-lg-*
- Hidden
- Hidden
- Hidden
- Visible
-
-
-
-
- .hidden-xs
- Hidden
- Visible
- Visible
- Visible
-
-
- .hidden-sm
- Visible
- Hidden
- Visible
- Visible
-
-
- .hidden-md
- Visible
- Visible
- Hidden
- Visible
-
-
- .hidden-lg
- Visible
- Visible
- Visible
- Hidden
-
-
-
-The .visible-*-*
classes for each breakpoint come in three variations, one for each CSS display property value listed below.
-
-
-
- Group of classes
- CSS display
-
-
-
-
- .visible-*-block
- display: block;
-
-
- .visible-*-inline
- display: inline;
-
-
- .visible-*-inline-block
- display: inline-block;
-
-
-
-So, for extra small (xs
) screens for example, the available .visible-*-*
classes are:
.visible-xs-block
-.visible-xs-inline
-.visible-xs-inline-block
-
-Whitespace
-
-
-
-Standard
-Should be used to modify the default spacing between objects (not between nodes of the same object)
-Please use judiciously. You want to be using defaults most of the time, these are exceptions!
-<type><location><size>
-Letter
-Description
-
-
-p, m
-padding, margin
-
-
-a, t, r, b, l, h, v
-all, top, right, bottom, left, horizontal, vertical
-
-
-n, s, m, l, xl, xxl, xxxl, xxxxl
-none(0px), small(5px), medium(7px), large(10px), extra large(20px), extra extra large (40px), extra extra extra large (120px), extra extra extra extra large (140px)
-
-
-
A normal paragraph
-
A paragraph with large padding
-
-
-
-
<p> A normal paragraph</p>
-<p class= "pal" > A paragraph with large padding</p>
-
-
- Copy
-
-
-
-
-List
-See list spacing .
-
-
-
-
-
diff --git a/release/pui-v1.9.0/zeroclipboard/ZeroClipboard.js b/release/pui-v1.9.0/zeroclipboard/ZeroClipboard.js
deleted file mode 100644
index 6e20b5910..000000000
--- a/release/pui-v1.9.0/zeroclipboard/ZeroClipboard.js
+++ /dev/null
@@ -1,2581 +0,0 @@
-/*!
- * ZeroClipboard
- * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.
- * Copyright (c) 2009-2014 Jon Rohan, James M. Greene
- * Licensed MIT
- * http://zeroclipboard.org/
- * v2.2.0
- */
-(function(window, undefined) {
- "use strict";
- /**
- * Store references to critically important global functions that may be
- * overridden on certain web pages.
- */
- var _window = window, _document = _window.document, _navigator = _window.navigator, _setTimeout = _window.setTimeout, _clearTimeout = _window.clearTimeout, _setInterval = _window.setInterval, _clearInterval = _window.clearInterval, _getComputedStyle = _window.getComputedStyle, _encodeURIComponent = _window.encodeURIComponent, _ActiveXObject = _window.ActiveXObject, _Error = _window.Error, _parseInt = _window.Number.parseInt || _window.parseInt, _parseFloat = _window.Number.parseFloat || _window.parseFloat, _isNaN = _window.Number.isNaN || _window.isNaN, _now = _window.Date.now, _keys = _window.Object.keys, _defineProperty = _window.Object.defineProperty, _hasOwn = _window.Object.prototype.hasOwnProperty, _slice = _window.Array.prototype.slice, _unwrap = function() {
- var unwrapper = function(el) {
- return el;
- };
- if (typeof _window.wrap === "function" && typeof _window.unwrap === "function") {
- try {
- var div = _document.createElement("div");
- var unwrappedDiv = _window.unwrap(div);
- if (div.nodeType === 1 && unwrappedDiv && unwrappedDiv.nodeType === 1) {
- unwrapper = _window.unwrap;
- }
- } catch (e) {}
- }
- return unwrapper;
- }();
- /**
- * Convert an `arguments` object into an Array.
- *
- * @returns The arguments as an Array
- * @private
- */
- var _args = function(argumentsObj) {
- return _slice.call(argumentsObj, 0);
- };
- /**
- * Shallow-copy the owned, enumerable properties of one object over to another, similar to jQuery's `$.extend`.
- *
- * @returns The target object, augmented
- * @private
- */
- var _extend = function() {
- var i, len, arg, prop, src, copy, args = _args(arguments), target = args[0] || {};
- for (i = 1, len = args.length; i < len; i++) {
- if ((arg = args[i]) != null) {
- for (prop in arg) {
- if (_hasOwn.call(arg, prop)) {
- src = target[prop];
- copy = arg[prop];
- if (target !== copy && copy !== undefined) {
- target[prop] = copy;
- }
- }
- }
- }
- }
- return target;
- };
- /**
- * Return a deep copy of the source object or array.
- *
- * @returns Object or Array
- * @private
- */
- var _deepCopy = function(source) {
- var copy, i, len, prop;
- if (typeof source !== "object" || source == null || typeof source.nodeType === "number") {
- copy = source;
- } else if (typeof source.length === "number") {
- copy = [];
- for (i = 0, len = source.length; i < len; i++) {
- if (_hasOwn.call(source, i)) {
- copy[i] = _deepCopy(source[i]);
- }
- }
- } else {
- copy = {};
- for (prop in source) {
- if (_hasOwn.call(source, prop)) {
- copy[prop] = _deepCopy(source[prop]);
- }
- }
- }
- return copy;
- };
- /**
- * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to keep.
- * The inverse of `_omit`, mostly. The big difference is that these properties do NOT need to be enumerable to
- * be kept.
- *
- * @returns A new filtered object.
- * @private
- */
- var _pick = function(obj, keys) {
- var newObj = {};
- for (var i = 0, len = keys.length; i < len; i++) {
- if (keys[i] in obj) {
- newObj[keys[i]] = obj[keys[i]];
- }
- }
- return newObj;
- };
- /**
- * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to omit.
- * The inverse of `_pick`.
- *
- * @returns A new filtered object.
- * @private
- */
- var _omit = function(obj, keys) {
- var newObj = {};
- for (var prop in obj) {
- if (keys.indexOf(prop) === -1) {
- newObj[prop] = obj[prop];
- }
- }
- return newObj;
- };
- /**
- * Remove all owned, enumerable properties from an object.
- *
- * @returns The original object without its owned, enumerable properties.
- * @private
- */
- var _deleteOwnProperties = function(obj) {
- if (obj) {
- for (var prop in obj) {
- if (_hasOwn.call(obj, prop)) {
- delete obj[prop];
- }
- }
- }
- return obj;
- };
- /**
- * Determine if an element is contained within another element.
- *
- * @returns Boolean
- * @private
- */
- var _containedBy = function(el, ancestorEl) {
- if (el && el.nodeType === 1 && el.ownerDocument && ancestorEl && (ancestorEl.nodeType === 1 && ancestorEl.ownerDocument && ancestorEl.ownerDocument === el.ownerDocument || ancestorEl.nodeType === 9 && !ancestorEl.ownerDocument && ancestorEl === el.ownerDocument)) {
- do {
- if (el === ancestorEl) {
- return true;
- }
- el = el.parentNode;
- } while (el);
- }
- return false;
- };
- /**
- * Get the URL path's parent directory.
- *
- * @returns String or `undefined`
- * @private
- */
- var _getDirPathOfUrl = function(url) {
- var dir;
- if (typeof url === "string" && url) {
- dir = url.split("#")[0].split("?")[0];
- dir = url.slice(0, url.lastIndexOf("/") + 1);
- }
- return dir;
- };
- /**
- * Get the current script's URL by throwing an `Error` and analyzing it.
- *
- * @returns String or `undefined`
- * @private
- */
- var _getCurrentScriptUrlFromErrorStack = function(stack) {
- var url, matches;
- if (typeof stack === "string" && stack) {
- matches = stack.match(/^(?:|[^:@]*@|.+\)@(?=http[s]?|file)|.+?\s+(?: at |@)(?:[^:\(]+ )*[\(]?)((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/);
- if (matches && matches[1]) {
- url = matches[1];
- } else {
- matches = stack.match(/\)@((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/);
- if (matches && matches[1]) {
- url = matches[1];
- }
- }
- }
- return url;
- };
- /**
- * Get the current script's URL by throwing an `Error` and analyzing it.
- *
- * @returns String or `undefined`
- * @private
- */
- var _getCurrentScriptUrlFromError = function() {
- var url, err;
- try {
- throw new _Error();
- } catch (e) {
- err = e;
- }
- if (err) {
- url = err.sourceURL || err.fileName || _getCurrentScriptUrlFromErrorStack(err.stack);
- }
- return url;
- };
- /**
- * Get the current script's URL.
- *
- * @returns String or `undefined`
- * @private
- */
- var _getCurrentScriptUrl = function() {
- var jsPath, scripts, i;
- if (_document.currentScript && (jsPath = _document.currentScript.src)) {
- return jsPath;
- }
- scripts = _document.getElementsByTagName("script");
- if (scripts.length === 1) {
- return scripts[0].src || undefined;
- }
- if ("readyState" in scripts[0]) {
- for (i = scripts.length; i--; ) {
- if (scripts[i].readyState === "interactive" && (jsPath = scripts[i].src)) {
- return jsPath;
- }
- }
- }
- if (_document.readyState === "loading" && (jsPath = scripts[scripts.length - 1].src)) {
- return jsPath;
- }
- if (jsPath = _getCurrentScriptUrlFromError()) {
- return jsPath;
- }
- return undefined;
- };
- /**
- * Get the unanimous parent directory of ALL script tags.
- * If any script tags are either (a) inline or (b) from differing parent
- * directories, this method must return `undefined`.
- *
- * @returns String or `undefined`
- * @private
- */
- var _getUnanimousScriptParentDir = function() {
- var i, jsDir, jsPath, scripts = _document.getElementsByTagName("script");
- for (i = scripts.length; i--; ) {
- if (!(jsPath = scripts[i].src)) {
- jsDir = null;
- break;
- }
- jsPath = _getDirPathOfUrl(jsPath);
- if (jsDir == null) {
- jsDir = jsPath;
- } else if (jsDir !== jsPath) {
- jsDir = null;
- break;
- }
- }
- return jsDir || undefined;
- };
- /**
- * Get the presumed location of the "ZeroClipboard.swf" file, based on the location
- * of the executing JavaScript file (e.g. "ZeroClipboard.js", etc.).
- *
- * @returns String
- * @private
- */
- var _getDefaultSwfPath = function() {
- var jsDir = _getDirPathOfUrl(_getCurrentScriptUrl()) || _getUnanimousScriptParentDir() || "";
- return jsDir + "ZeroClipboard.swf";
- };
- /**
- * Keep track of if the page is framed (in an `iframe`). This can never change.
- * @private
- */
- var _pageIsFramed = function() {
- return window.opener == null && (!!window.top && window != window.top || !!window.parent && window != window.parent);
- }();
- /**
- * Keep track of the state of the Flash object.
- * @private
- */
- var _flashState = {
- bridge: null,
- version: "0.0.0",
- pluginType: "unknown",
- disabled: null,
- outdated: null,
- sandboxed: null,
- unavailable: null,
- degraded: null,
- deactivated: null,
- overdue: null,
- ready: null
- };
- /**
- * The minimum Flash Player version required to use ZeroClipboard completely.
- * @readonly
- * @private
- */
- var _minimumFlashVersion = "11.0.0";
- /**
- * The ZeroClipboard library version number, as reported by Flash, at the time the SWF was compiled.
- */
- var _zcSwfVersion;
- /**
- * Keep track of all event listener registrations.
- * @private
- */
- var _handlers = {};
- /**
- * Keep track of the currently activated element.
- * @private
- */
- var _currentElement;
- /**
- * Keep track of the element that was activated when a `copy` process started.
- * @private
- */
- var _copyTarget;
- /**
- * Keep track of data for the pending clipboard transaction.
- * @private
- */
- var _clipData = {};
- /**
- * Keep track of data formats for the pending clipboard transaction.
- * @private
- */
- var _clipDataFormatMap = null;
- /**
- * Keep track of the Flash availability check timeout.
- * @private
- */
- var _flashCheckTimeout = 0;
- /**
- * Keep track of SWF network errors interval polling.
- * @private
- */
- var _swfFallbackCheckInterval = 0;
- /**
- * The `message` store for events
- * @private
- */
- var _eventMessages = {
- ready: "Flash communication is established",
- error: {
- "flash-disabled": "Flash is disabled or not installed. May also be attempting to run Flash in a sandboxed iframe, which is impossible.",
- "flash-outdated": "Flash is too outdated to support ZeroClipboard",
- "flash-sandboxed": "Attempting to run Flash in a sandboxed iframe, which is impossible",
- "flash-unavailable": "Flash is unable to communicate bidirectionally with JavaScript",
- "flash-degraded": "Flash is unable to preserve data fidelity when communicating with JavaScript",
- "flash-deactivated": "Flash is too outdated for your browser and/or is configured as click-to-activate.\nThis may also mean that the ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity.\nMay also be attempting to run Flash in a sandboxed iframe, which is impossible.",
- "flash-overdue": "Flash communication was established but NOT within the acceptable time limit",
- "version-mismatch": "ZeroClipboard JS version number does not match ZeroClipboard SWF version number",
- "clipboard-error": "At least one error was thrown while ZeroClipboard was attempting to inject your data into the clipboard",
- "config-mismatch": "ZeroClipboard configuration does not match Flash's reality",
- "swf-not-found": "The ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity"
- }
- };
- /**
- * The `name`s of `error` events that can only occur is Flash has at least
- * been able to load the SWF successfully.
- * @private
- */
- var _errorsThatOnlyOccurAfterFlashLoads = [ "flash-unavailable", "flash-degraded", "flash-overdue", "version-mismatch", "config-mismatch", "clipboard-error" ];
- /**
- * The `name`s of `error` events that should likely result in the `_flashState`
- * variable's property values being updated.
- * @private
- */
- var _flashStateErrorNames = [ "flash-disabled", "flash-outdated", "flash-sandboxed", "flash-unavailable", "flash-degraded", "flash-deactivated", "flash-overdue" ];
- /**
- * A RegExp to match the `name` property of `error` events related to Flash.
- * @private
- */
- var _flashStateErrorNameMatchingRegex = new RegExp("^flash-(" + _flashStateErrorNames.map(function(errorName) {
- return errorName.replace(/^flash-/, "");
- }).join("|") + ")$");
- /**
- * A RegExp to match the `name` property of `error` events related to Flash,
- * which is enabled.
- * @private
- */
- var _flashStateEnabledErrorNameMatchingRegex = new RegExp("^flash-(" + _flashStateErrorNames.slice(1).map(function(errorName) {
- return errorName.replace(/^flash-/, "");
- }).join("|") + ")$");
- /**
- * ZeroClipboard configuration defaults for the Core module.
- * @private
- */
- var _globalConfig = {
- swfPath: _getDefaultSwfPath(),
- trustedDomains: window.location.host ? [ window.location.host ] : [],
- cacheBust: true,
- forceEnhancedClipboard: false,
- flashLoadTimeout: 3e4,
- autoActivate: true,
- bubbleEvents: true,
- containerId: "global-zeroclipboard-html-bridge",
- containerClass: "global-zeroclipboard-container",
- swfObjectId: "global-zeroclipboard-flash-bridge",
- hoverClass: "zeroclipboard-is-hover",
- activeClass: "zeroclipboard-is-active",
- forceHandCursor: false,
- title: null,
- zIndex: 999999999
- };
- /**
- * The underlying implementation of `ZeroClipboard.config`.
- * @private
- */
- var _config = function(options) {
- if (typeof options === "object" && options !== null) {
- for (var prop in options) {
- if (_hasOwn.call(options, prop)) {
- if (/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(prop)) {
- _globalConfig[prop] = options[prop];
- } else if (_flashState.bridge == null) {
- if (prop === "containerId" || prop === "swfObjectId") {
- if (_isValidHtml4Id(options[prop])) {
- _globalConfig[prop] = options[prop];
- } else {
- throw new Error("The specified `" + prop + "` value is not valid as an HTML4 Element ID");
- }
- } else {
- _globalConfig[prop] = options[prop];
- }
- }
- }
- }
- }
- if (typeof options === "string" && options) {
- if (_hasOwn.call(_globalConfig, options)) {
- return _globalConfig[options];
- }
- return;
- }
- return _deepCopy(_globalConfig);
- };
- /**
- * The underlying implementation of `ZeroClipboard.state`.
- * @private
- */
- var _state = function() {
- _detectSandbox();
- return {
- browser: _pick(_navigator, [ "userAgent", "platform", "appName" ]),
- flash: _omit(_flashState, [ "bridge" ]),
- zeroclipboard: {
- version: ZeroClipboard.version,
- config: ZeroClipboard.config()
- }
- };
- };
- /**
- * The underlying implementation of `ZeroClipboard.isFlashUnusable`.
- * @private
- */
- var _isFlashUnusable = function() {
- return !!(_flashState.disabled || _flashState.outdated || _flashState.sandboxed || _flashState.unavailable || _flashState.degraded || _flashState.deactivated);
- };
- /**
- * The underlying implementation of `ZeroClipboard.on`.
- * @private
- */
- var _on = function(eventType, listener) {
- var i, len, events, added = {};
- if (typeof eventType === "string" && eventType) {
- events = eventType.toLowerCase().split(/\s+/);
- } else if (typeof eventType === "object" && eventType && typeof listener === "undefined") {
- for (i in eventType) {
- if (_hasOwn.call(eventType, i) && typeof i === "string" && i && typeof eventType[i] === "function") {
- ZeroClipboard.on(i, eventType[i]);
- }
- }
- }
- if (events && events.length) {
- for (i = 0, len = events.length; i < len; i++) {
- eventType = events[i].replace(/^on/, "");
- added[eventType] = true;
- if (!_handlers[eventType]) {
- _handlers[eventType] = [];
- }
- _handlers[eventType].push(listener);
- }
- if (added.ready && _flashState.ready) {
- ZeroClipboard.emit({
- type: "ready"
- });
- }
- if (added.error) {
- for (i = 0, len = _flashStateErrorNames.length; i < len; i++) {
- if (_flashState[_flashStateErrorNames[i].replace(/^flash-/, "")] === true) {
- ZeroClipboard.emit({
- type: "error",
- name: _flashStateErrorNames[i]
- });
- break;
- }
- }
- if (_zcSwfVersion !== undefined && ZeroClipboard.version !== _zcSwfVersion) {
- ZeroClipboard.emit({
- type: "error",
- name: "version-mismatch",
- jsVersion: ZeroClipboard.version,
- swfVersion: _zcSwfVersion
- });
- }
- }
- }
- return ZeroClipboard;
- };
- /**
- * The underlying implementation of `ZeroClipboard.off`.
- * @private
- */
- var _off = function(eventType, listener) {
- var i, len, foundIndex, events, perEventHandlers;
- if (arguments.length === 0) {
- events = _keys(_handlers);
- } else if (typeof eventType === "string" && eventType) {
- events = eventType.split(/\s+/);
- } else if (typeof eventType === "object" && eventType && typeof listener === "undefined") {
- for (i in eventType) {
- if (_hasOwn.call(eventType, i) && typeof i === "string" && i && typeof eventType[i] === "function") {
- ZeroClipboard.off(i, eventType[i]);
- }
- }
- }
- if (events && events.length) {
- for (i = 0, len = events.length; i < len; i++) {
- eventType = events[i].toLowerCase().replace(/^on/, "");
- perEventHandlers = _handlers[eventType];
- if (perEventHandlers && perEventHandlers.length) {
- if (listener) {
- foundIndex = perEventHandlers.indexOf(listener);
- while (foundIndex !== -1) {
- perEventHandlers.splice(foundIndex, 1);
- foundIndex = perEventHandlers.indexOf(listener, foundIndex);
- }
- } else {
- perEventHandlers.length = 0;
- }
- }
- }
- }
- return ZeroClipboard;
- };
- /**
- * The underlying implementation of `ZeroClipboard.handlers`.
- * @private
- */
- var _listeners = function(eventType) {
- var copy;
- if (typeof eventType === "string" && eventType) {
- copy = _deepCopy(_handlers[eventType]) || null;
- } else {
- copy = _deepCopy(_handlers);
- }
- return copy;
- };
- /**
- * The underlying implementation of `ZeroClipboard.emit`.
- * @private
- */
- var _emit = function(event) {
- var eventCopy, returnVal, tmp;
- event = _createEvent(event);
- if (!event) {
- return;
- }
- if (_preprocessEvent(event)) {
- return;
- }
- if (event.type === "ready" && _flashState.overdue === true) {
- return ZeroClipboard.emit({
- type: "error",
- name: "flash-overdue"
- });
- }
- eventCopy = _extend({}, event);
- _dispatchCallbacks.call(this, eventCopy);
- if (event.type === "copy") {
- tmp = _mapClipDataToFlash(_clipData);
- returnVal = tmp.data;
- _clipDataFormatMap = tmp.formatMap;
- }
- return returnVal;
- };
- /**
- * The underlying implementation of `ZeroClipboard.create`.
- * @private
- */
- var _create = function() {
- var previousState = _flashState.sandboxed;
- _detectSandbox();
- if (typeof _flashState.ready !== "boolean") {
- _flashState.ready = false;
- }
- if (_flashState.sandboxed !== previousState && _flashState.sandboxed === true) {
- _flashState.ready = false;
- ZeroClipboard.emit({
- type: "error",
- name: "flash-sandboxed"
- });
- } else if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {
- var maxWait = _globalConfig.flashLoadTimeout;
- if (typeof maxWait === "number" && maxWait >= 0) {
- _flashCheckTimeout = _setTimeout(function() {
- if (typeof _flashState.deactivated !== "boolean") {
- _flashState.deactivated = true;
- }
- if (_flashState.deactivated === true) {
- ZeroClipboard.emit({
- type: "error",
- name: "flash-deactivated"
- });
- }
- }, maxWait);
- }
- _flashState.overdue = false;
- _embedSwf();
- }
- };
- /**
- * The underlying implementation of `ZeroClipboard.destroy`.
- * @private
- */
- var _destroy = function() {
- ZeroClipboard.clearData();
- ZeroClipboard.blur();
- ZeroClipboard.emit("destroy");
- _unembedSwf();
- ZeroClipboard.off();
- };
- /**
- * The underlying implementation of `ZeroClipboard.setData`.
- * @private
- */
- var _setData = function(format, data) {
- var dataObj;
- if (typeof format === "object" && format && typeof data === "undefined") {
- dataObj = format;
- ZeroClipboard.clearData();
- } else if (typeof format === "string" && format) {
- dataObj = {};
- dataObj[format] = data;
- } else {
- return;
- }
- for (var dataFormat in dataObj) {
- if (typeof dataFormat === "string" && dataFormat && _hasOwn.call(dataObj, dataFormat) && typeof dataObj[dataFormat] === "string" && dataObj[dataFormat]) {
- _clipData[dataFormat] = dataObj[dataFormat];
- }
- }
- };
- /**
- * The underlying implementation of `ZeroClipboard.clearData`.
- * @private
- */
- var _clearData = function(format) {
- if (typeof format === "undefined") {
- _deleteOwnProperties(_clipData);
- _clipDataFormatMap = null;
- } else if (typeof format === "string" && _hasOwn.call(_clipData, format)) {
- delete _clipData[format];
- }
- };
- /**
- * The underlying implementation of `ZeroClipboard.getData`.
- * @private
- */
- var _getData = function(format) {
- if (typeof format === "undefined") {
- return _deepCopy(_clipData);
- } else if (typeof format === "string" && _hasOwn.call(_clipData, format)) {
- return _clipData[format];
- }
- };
- /**
- * The underlying implementation of `ZeroClipboard.focus`/`ZeroClipboard.activate`.
- * @private
- */
- var _focus = function(element) {
- if (!(element && element.nodeType === 1)) {
- return;
- }
- if (_currentElement) {
- _removeClass(_currentElement, _globalConfig.activeClass);
- if (_currentElement !== element) {
- _removeClass(_currentElement, _globalConfig.hoverClass);
- }
- }
- _currentElement = element;
- _addClass(element, _globalConfig.hoverClass);
- var newTitle = element.getAttribute("title") || _globalConfig.title;
- if (typeof newTitle === "string" && newTitle) {
- var htmlBridge = _getHtmlBridge(_flashState.bridge);
- if (htmlBridge) {
- htmlBridge.setAttribute("title", newTitle);
- }
- }
- var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, "cursor") === "pointer";
- _setHandCursor(useHandCursor);
- _reposition();
- };
- /**
- * The underlying implementation of `ZeroClipboard.blur`/`ZeroClipboard.deactivate`.
- * @private
- */
- var _blur = function() {
- var htmlBridge = _getHtmlBridge(_flashState.bridge);
- if (htmlBridge) {
- htmlBridge.removeAttribute("title");
- htmlBridge.style.left = "0px";
- htmlBridge.style.top = "-9999px";
- htmlBridge.style.width = "1px";
- htmlBridge.style.height = "1px";
- }
- if (_currentElement) {
- _removeClass(_currentElement, _globalConfig.hoverClass);
- _removeClass(_currentElement, _globalConfig.activeClass);
- _currentElement = null;
- }
- };
- /**
- * The underlying implementation of `ZeroClipboard.activeElement`.
- * @private
- */
- var _activeElement = function() {
- return _currentElement || null;
- };
- /**
- * Check if a value is a valid HTML4 `ID` or `Name` token.
- * @private
- */
- var _isValidHtml4Id = function(id) {
- return typeof id === "string" && id && /^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(id);
- };
- /**
- * Create or update an `event` object, based on the `eventType`.
- * @private
- */
- var _createEvent = function(event) {
- var eventType;
- if (typeof event === "string" && event) {
- eventType = event;
- event = {};
- } else if (typeof event === "object" && event && typeof event.type === "string" && event.type) {
- eventType = event.type;
- }
- if (!eventType) {
- return;
- }
- eventType = eventType.toLowerCase();
- if (!event.target && (/^(copy|aftercopy|_click)$/.test(eventType) || eventType === "error" && event.name === "clipboard-error")) {
- event.target = _copyTarget;
- }
- _extend(event, {
- type: eventType,
- target: event.target || _currentElement || null,
- relatedTarget: event.relatedTarget || null,
- currentTarget: _flashState && _flashState.bridge || null,
- timeStamp: event.timeStamp || _now() || null
- });
- var msg = _eventMessages[event.type];
- if (event.type === "error" && event.name && msg) {
- msg = msg[event.name];
- }
- if (msg) {
- event.message = msg;
- }
- if (event.type === "ready") {
- _extend(event, {
- target: null,
- version: _flashState.version
- });
- }
- if (event.type === "error") {
- if (_flashStateErrorNameMatchingRegex.test(event.name)) {
- _extend(event, {
- target: null,
- minimumVersion: _minimumFlashVersion
- });
- }
- if (_flashStateEnabledErrorNameMatchingRegex.test(event.name)) {
- _extend(event, {
- version: _flashState.version
- });
- }
- }
- if (event.type === "copy") {
- event.clipboardData = {
- setData: ZeroClipboard.setData,
- clearData: ZeroClipboard.clearData
- };
- }
- if (event.type === "aftercopy") {
- event = _mapClipResultsFromFlash(event, _clipDataFormatMap);
- }
- if (event.target && !event.relatedTarget) {
- event.relatedTarget = _getRelatedTarget(event.target);
- }
- return _addMouseData(event);
- };
- /**
- * Get a relatedTarget from the target's `data-clipboard-target` attribute
- * @private
- */
- var _getRelatedTarget = function(targetEl) {
- var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute("data-clipboard-target");
- return relatedTargetId ? _document.getElementById(relatedTargetId) : null;
- };
- /**
- * Add element and position data to `MouseEvent` instances
- * @private
- */
- var _addMouseData = function(event) {
- if (event && /^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {
- var srcElement = event.target;
- var fromElement = event.type === "_mouseover" && event.relatedTarget ? event.relatedTarget : undefined;
- var toElement = event.type === "_mouseout" && event.relatedTarget ? event.relatedTarget : undefined;
- var pos = _getElementPosition(srcElement);
- var screenLeft = _window.screenLeft || _window.screenX || 0;
- var screenTop = _window.screenTop || _window.screenY || 0;
- var scrollLeft = _document.body.scrollLeft + _document.documentElement.scrollLeft;
- var scrollTop = _document.body.scrollTop + _document.documentElement.scrollTop;
- var pageX = pos.left + (typeof event._stageX === "number" ? event._stageX : 0);
- var pageY = pos.top + (typeof event._stageY === "number" ? event._stageY : 0);
- var clientX = pageX - scrollLeft;
- var clientY = pageY - scrollTop;
- var screenX = screenLeft + clientX;
- var screenY = screenTop + clientY;
- var moveX = typeof event.movementX === "number" ? event.movementX : 0;
- var moveY = typeof event.movementY === "number" ? event.movementY : 0;
- delete event._stageX;
- delete event._stageY;
- _extend(event, {
- srcElement: srcElement,
- fromElement: fromElement,
- toElement: toElement,
- screenX: screenX,
- screenY: screenY,
- pageX: pageX,
- pageY: pageY,
- clientX: clientX,
- clientY: clientY,
- x: clientX,
- y: clientY,
- movementX: moveX,
- movementY: moveY,
- offsetX: 0,
- offsetY: 0,
- layerX: 0,
- layerY: 0
- });
- }
- return event;
- };
- /**
- * Determine if an event's registered handlers should be execute synchronously or asynchronously.
- *
- * @returns {boolean}
- * @private
- */
- var _shouldPerformAsync = function(event) {
- var eventType = event && typeof event.type === "string" && event.type || "";
- return !/^(?:(?:before)?copy|destroy)$/.test(eventType);
- };
- /**
- * Control if a callback should be executed asynchronously or not.
- *
- * @returns `undefined`
- * @private
- */
- var _dispatchCallback = function(func, context, args, async) {
- if (async) {
- _setTimeout(function() {
- func.apply(context, args);
- }, 0);
- } else {
- func.apply(context, args);
- }
- };
- /**
- * Handle the actual dispatching of events to client instances.
- *
- * @returns `undefined`
- * @private
- */
- var _dispatchCallbacks = function(event) {
- if (!(typeof event === "object" && event && event.type)) {
- return;
- }
- var async = _shouldPerformAsync(event);
- var wildcardTypeHandlers = _handlers["*"] || [];
- var specificTypeHandlers = _handlers[event.type] || [];
- var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);
- if (handlers && handlers.length) {
- var i, len, func, context, eventCopy, originalContext = this;
- for (i = 0, len = handlers.length; i < len; i++) {
- func = handlers[i];
- context = originalContext;
- if (typeof func === "string" && typeof _window[func] === "function") {
- func = _window[func];
- }
- if (typeof func === "object" && func && typeof func.handleEvent === "function") {
- context = func;
- func = func.handleEvent;
- }
- if (typeof func === "function") {
- eventCopy = _extend({}, event);
- _dispatchCallback(func, context, [ eventCopy ], async);
- }
- }
- }
- return this;
- };
- /**
- * Check an `error` event's `name` property to see if Flash has
- * already loaded, which rules out possible `iframe` sandboxing.
- * @private
- */
- var _getSandboxStatusFromErrorEvent = function(event) {
- var isSandboxed = null;
- if (_pageIsFramed === false || event && event.type === "error" && event.name && _errorsThatOnlyOccurAfterFlashLoads.indexOf(event.name) !== -1) {
- isSandboxed = false;
- }
- return isSandboxed;
- };
- /**
- * Preprocess any special behaviors, reactions, or state changes after receiving this event.
- * Executes only once per event emitted, NOT once per client.
- * @private
- */
- var _preprocessEvent = function(event) {
- var element = event.target || _currentElement || null;
- var sourceIsSwf = event._source === "swf";
- delete event._source;
- switch (event.type) {
- case "error":
- var isSandboxed = event.name === "flash-sandboxed" || _getSandboxStatusFromErrorEvent(event);
- if (typeof isSandboxed === "boolean") {
- _flashState.sandboxed = isSandboxed;
- }
- if (_flashStateErrorNames.indexOf(event.name) !== -1) {
- _extend(_flashState, {
- disabled: event.name === "flash-disabled",
- outdated: event.name === "flash-outdated",
- unavailable: event.name === "flash-unavailable",
- degraded: event.name === "flash-degraded",
- deactivated: event.name === "flash-deactivated",
- overdue: event.name === "flash-overdue",
- ready: false
- });
- } else if (event.name === "version-mismatch") {
- _zcSwfVersion = event.swfVersion;
- _extend(_flashState, {
- disabled: false,
- outdated: false,
- unavailable: false,
- degraded: false,
- deactivated: false,
- overdue: false,
- ready: false
- });
- }
- _clearTimeoutsAndPolling();
- break;
-
- case "ready":
- _zcSwfVersion = event.swfVersion;
- var wasDeactivated = _flashState.deactivated === true;
- _extend(_flashState, {
- disabled: false,
- outdated: false,
- sandboxed: false,
- unavailable: false,
- degraded: false,
- deactivated: false,
- overdue: wasDeactivated,
- ready: !wasDeactivated
- });
- _clearTimeoutsAndPolling();
- break;
-
- case "beforecopy":
- _copyTarget = element;
- break;
-
- case "copy":
- var textContent, htmlContent, targetEl = event.relatedTarget;
- if (!(_clipData["text/html"] || _clipData["text/plain"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {
- event.clipboardData.clearData();
- event.clipboardData.setData("text/plain", textContent);
- if (htmlContent !== textContent) {
- event.clipboardData.setData("text/html", htmlContent);
- }
- } else if (!_clipData["text/plain"] && event.target && (textContent = event.target.getAttribute("data-clipboard-text"))) {
- event.clipboardData.clearData();
- event.clipboardData.setData("text/plain", textContent);
- }
- break;
-
- case "aftercopy":
- _queueEmitClipboardErrors(event);
- ZeroClipboard.clearData();
- if (element && element !== _safeActiveElement() && element.focus) {
- element.focus();
- }
- break;
-
- case "_mouseover":
- ZeroClipboard.focus(element);
- if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
- if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {
- _fireMouseEvent(_extend({}, event, {
- type: "mouseenter",
- bubbles: false,
- cancelable: false
- }));
- }
- _fireMouseEvent(_extend({}, event, {
- type: "mouseover"
- }));
- }
- break;
-
- case "_mouseout":
- ZeroClipboard.blur();
- if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
- if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {
- _fireMouseEvent(_extend({}, event, {
- type: "mouseleave",
- bubbles: false,
- cancelable: false
- }));
- }
- _fireMouseEvent(_extend({}, event, {
- type: "mouseout"
- }));
- }
- break;
-
- case "_mousedown":
- _addClass(element, _globalConfig.activeClass);
- if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
- _fireMouseEvent(_extend({}, event, {
- type: event.type.slice(1)
- }));
- }
- break;
-
- case "_mouseup":
- _removeClass(element, _globalConfig.activeClass);
- if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
- _fireMouseEvent(_extend({}, event, {
- type: event.type.slice(1)
- }));
- }
- break;
-
- case "_click":
- _copyTarget = null;
- if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
- _fireMouseEvent(_extend({}, event, {
- type: event.type.slice(1)
- }));
- }
- break;
-
- case "_mousemove":
- if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
- _fireMouseEvent(_extend({}, event, {
- type: event.type.slice(1)
- }));
- }
- break;
- }
- if (/^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {
- return true;
- }
- };
- /**
- * Check an "aftercopy" event for clipboard errors and emit a corresponding "error" event.
- * @private
- */
- var _queueEmitClipboardErrors = function(aftercopyEvent) {
- if (aftercopyEvent.errors && aftercopyEvent.errors.length > 0) {
- var errorEvent = _deepCopy(aftercopyEvent);
- _extend(errorEvent, {
- type: "error",
- name: "clipboard-error"
- });
- delete errorEvent.success;
- _setTimeout(function() {
- ZeroClipboard.emit(errorEvent);
- }, 0);
- }
- };
- /**
- * Dispatch a synthetic MouseEvent.
- *
- * @returns `undefined`
- * @private
- */
- var _fireMouseEvent = function(event) {
- if (!(event && typeof event.type === "string" && event)) {
- return;
- }
- var e, target = event.target || null, doc = target && target.ownerDocument || _document, defaults = {
- view: doc.defaultView || _window,
- canBubble: true,
- cancelable: true,
- detail: event.type === "click" ? 1 : 0,
- button: typeof event.which === "number" ? event.which - 1 : typeof event.button === "number" ? event.button : doc.createEvent ? 0 : 1
- }, args = _extend(defaults, event);
- if (!target) {
- return;
- }
- if (doc.createEvent && target.dispatchEvent) {
- args = [ args.type, args.canBubble, args.cancelable, args.view, args.detail, args.screenX, args.screenY, args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, args.relatedTarget ];
- e = doc.createEvent("MouseEvents");
- if (e.initMouseEvent) {
- e.initMouseEvent.apply(e, args);
- e._source = "js";
- target.dispatchEvent(e);
- }
- }
- };
- /**
- * Continuously poll the DOM until either:
- * (a) the fallback content becomes visible, or
- * (b) we receive an event from SWF (handled elsewhere)
- *
- * IMPORTANT:
- * This is NOT a necessary check but it can result in significantly faster
- * detection of bad `swfPath` configuration and/or network/server issues [in
- * supported browsers] than waiting for the entire `flashLoadTimeout` duration
- * to elapse before detecting that the SWF cannot be loaded. The detection
- * duration can be anywhere from 10-30 times faster [in supported browsers] by
- * using this approach.
- *
- * @returns `undefined`
- * @private
- */
- var _watchForSwfFallbackContent = function() {
- var maxWait = _globalConfig.flashLoadTimeout;
- if (typeof maxWait === "number" && maxWait >= 0) {
- var pollWait = Math.min(1e3, maxWait / 10);
- var fallbackContentId = _globalConfig.swfObjectId + "_fallbackContent";
- _swfFallbackCheckInterval = _setInterval(function() {
- var el = _document.getElementById(fallbackContentId);
- if (_isElementVisible(el)) {
- _clearTimeoutsAndPolling();
- _flashState.deactivated = null;
- ZeroClipboard.emit({
- type: "error",
- name: "swf-not-found"
- });
- }
- }, pollWait);
- }
- };
- /**
- * Create the HTML bridge element to embed the Flash object into.
- * @private
- */
- var _createHtmlBridge = function() {
- var container = _document.createElement("div");
- container.id = _globalConfig.containerId;
- container.className = _globalConfig.containerClass;
- container.style.position = "absolute";
- container.style.left = "0px";
- container.style.top = "-9999px";
- container.style.width = "1px";
- container.style.height = "1px";
- container.style.zIndex = "" + _getSafeZIndex(_globalConfig.zIndex);
- return container;
- };
- /**
- * Get the HTML element container that wraps the Flash bridge object/element.
- * @private
- */
- var _getHtmlBridge = function(flashBridge) {
- var htmlBridge = flashBridge && flashBridge.parentNode;
- while (htmlBridge && htmlBridge.nodeName === "OBJECT" && htmlBridge.parentNode) {
- htmlBridge = htmlBridge.parentNode;
- }
- return htmlBridge || null;
- };
- /**
- * Create the SWF object.
- *
- * @returns The SWF object reference.
- * @private
- */
- var _embedSwf = function() {
- var len, flashBridge = _flashState.bridge, container = _getHtmlBridge(flashBridge);
- if (!flashBridge) {
- var allowScriptAccess = _determineScriptAccess(_window.location.host, _globalConfig);
- var allowNetworking = allowScriptAccess === "never" ? "none" : "all";
- var flashvars = _vars(_extend({
- jsVersion: ZeroClipboard.version
- }, _globalConfig));
- var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);
- container = _createHtmlBridge();
- var divToBeReplaced = _document.createElement("div");
- container.appendChild(divToBeReplaced);
- _document.body.appendChild(container);
- var tmpDiv = _document.createElement("div");
- var usingActiveX = _flashState.pluginType === "activex";
- tmpDiv.innerHTML = '" + (usingActiveX ? ' ' : "") + ' ' + ' ' + ' ' + ' ' + ' ' + '
' + " ";
- flashBridge = tmpDiv.firstChild;
- tmpDiv = null;
- _unwrap(flashBridge).ZeroClipboard = ZeroClipboard;
- container.replaceChild(flashBridge, divToBeReplaced);
- _watchForSwfFallbackContent();
- }
- if (!flashBridge) {
- flashBridge = _document[_globalConfig.swfObjectId];
- if (flashBridge && (len = flashBridge.length)) {
- flashBridge = flashBridge[len - 1];
- }
- if (!flashBridge && container) {
- flashBridge = container.firstChild;
- }
- }
- _flashState.bridge = flashBridge || null;
- return flashBridge;
- };
- /**
- * Destroy the SWF object.
- * @private
- */
- var _unembedSwf = function() {
- var flashBridge = _flashState.bridge;
- if (flashBridge) {
- var htmlBridge = _getHtmlBridge(flashBridge);
- if (htmlBridge) {
- if (_flashState.pluginType === "activex" && "readyState" in flashBridge) {
- flashBridge.style.display = "none";
- (function removeSwfFromIE() {
- if (flashBridge.readyState === 4) {
- for (var prop in flashBridge) {
- if (typeof flashBridge[prop] === "function") {
- flashBridge[prop] = null;
- }
- }
- if (flashBridge.parentNode) {
- flashBridge.parentNode.removeChild(flashBridge);
- }
- if (htmlBridge.parentNode) {
- htmlBridge.parentNode.removeChild(htmlBridge);
- }
- } else {
- _setTimeout(removeSwfFromIE, 10);
- }
- })();
- } else {
- if (flashBridge.parentNode) {
- flashBridge.parentNode.removeChild(flashBridge);
- }
- if (htmlBridge.parentNode) {
- htmlBridge.parentNode.removeChild(htmlBridge);
- }
- }
- }
- _clearTimeoutsAndPolling();
- _flashState.ready = null;
- _flashState.bridge = null;
- _flashState.deactivated = null;
- _zcSwfVersion = undefined;
- }
- };
- /**
- * Map the data format names of the "clipData" to Flash-friendly names.
- *
- * @returns A new transformed object.
- * @private
- */
- var _mapClipDataToFlash = function(clipData) {
- var newClipData = {}, formatMap = {};
- if (!(typeof clipData === "object" && clipData)) {
- return;
- }
- for (var dataFormat in clipData) {
- if (dataFormat && _hasOwn.call(clipData, dataFormat) && typeof clipData[dataFormat] === "string" && clipData[dataFormat]) {
- switch (dataFormat.toLowerCase()) {
- case "text/plain":
- case "text":
- case "air:text":
- case "flash:text":
- newClipData.text = clipData[dataFormat];
- formatMap.text = dataFormat;
- break;
-
- case "text/html":
- case "html":
- case "air:html":
- case "flash:html":
- newClipData.html = clipData[dataFormat];
- formatMap.html = dataFormat;
- break;
-
- case "application/rtf":
- case "text/rtf":
- case "rtf":
- case "richtext":
- case "air:rtf":
- case "flash:rtf":
- newClipData.rtf = clipData[dataFormat];
- formatMap.rtf = dataFormat;
- break;
-
- default:
- break;
- }
- }
- }
- return {
- data: newClipData,
- formatMap: formatMap
- };
- };
- /**
- * Map the data format names from Flash-friendly names back to their original "clipData" names (via a format mapping).
- *
- * @returns A new transformed object.
- * @private
- */
- var _mapClipResultsFromFlash = function(clipResults, formatMap) {
- if (!(typeof clipResults === "object" && clipResults && typeof formatMap === "object" && formatMap)) {
- return clipResults;
- }
- var newResults = {};
- for (var prop in clipResults) {
- if (_hasOwn.call(clipResults, prop)) {
- if (prop === "errors") {
- newResults[prop] = clipResults[prop] ? clipResults[prop].slice() : [];
- for (var i = 0, len = newResults[prop].length; i < len; i++) {
- newResults[prop][i].format = formatMap[newResults[prop][i].format];
- }
- } else if (prop !== "success" && prop !== "data") {
- newResults[prop] = clipResults[prop];
- } else {
- newResults[prop] = {};
- var tmpHash = clipResults[prop];
- for (var dataFormat in tmpHash) {
- if (dataFormat && _hasOwn.call(tmpHash, dataFormat) && _hasOwn.call(formatMap, dataFormat)) {
- newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];
- }
- }
- }
- }
- }
- return newResults;
- };
- /**
- * Will look at a path, and will create a "?noCache={time}" or "&noCache={time}"
- * query param string to return. Does NOT append that string to the original path.
- * This is useful because ExternalInterface often breaks when a Flash SWF is cached.
- *
- * @returns The `noCache` query param with necessary "?"/"&" prefix.
- * @private
- */
- var _cacheBust = function(path, options) {
- var cacheBust = options == null || options && options.cacheBust === true;
- if (cacheBust) {
- return (path.indexOf("?") === -1 ? "?" : "&") + "noCache=" + _now();
- } else {
- return "";
- }
- };
- /**
- * Creates a query string for the FlashVars param.
- * Does NOT include the cache-busting query param.
- *
- * @returns FlashVars query string
- * @private
- */
- var _vars = function(options) {
- var i, len, domain, domains, str = "", trustedOriginsExpanded = [];
- if (options.trustedDomains) {
- if (typeof options.trustedDomains === "string") {
- domains = [ options.trustedDomains ];
- } else if (typeof options.trustedDomains === "object" && "length" in options.trustedDomains) {
- domains = options.trustedDomains;
- }
- }
- if (domains && domains.length) {
- for (i = 0, len = domains.length; i < len; i++) {
- if (_hasOwn.call(domains, i) && domains[i] && typeof domains[i] === "string") {
- domain = _extractDomain(domains[i]);
- if (!domain) {
- continue;
- }
- if (domain === "*") {
- trustedOriginsExpanded.length = 0;
- trustedOriginsExpanded.push(domain);
- break;
- }
- trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, "//" + domain, _window.location.protocol + "//" + domain ]);
- }
- }
- }
- if (trustedOriginsExpanded.length) {
- str += "trustedOrigins=" + _encodeURIComponent(trustedOriginsExpanded.join(","));
- }
- if (options.forceEnhancedClipboard === true) {
- str += (str ? "&" : "") + "forceEnhancedClipboard=true";
- }
- if (typeof options.swfObjectId === "string" && options.swfObjectId) {
- str += (str ? "&" : "") + "swfObjectId=" + _encodeURIComponent(options.swfObjectId);
- }
- if (typeof options.jsVersion === "string" && options.jsVersion) {
- str += (str ? "&" : "") + "jsVersion=" + _encodeURIComponent(options.jsVersion);
- }
- return str;
- };
- /**
- * Extract the domain (e.g. "github.com") from an origin (e.g. "https://github.com") or
- * URL (e.g. "https://github.com/zeroclipboard/zeroclipboard/").
- *
- * @returns the domain
- * @private
- */
- var _extractDomain = function(originOrUrl) {
- if (originOrUrl == null || originOrUrl === "") {
- return null;
- }
- originOrUrl = originOrUrl.replace(/^\s+|\s+$/g, "");
- if (originOrUrl === "") {
- return null;
- }
- var protocolIndex = originOrUrl.indexOf("//");
- originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);
- var pathIndex = originOrUrl.indexOf("/");
- originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);
- if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === ".swf") {
- return null;
- }
- return originOrUrl || null;
- };
- /**
- * Set `allowScriptAccess` based on `trustedDomains` and `window.location.host` vs. `swfPath`.
- *
- * @returns The appropriate script access level.
- * @private
- */
- var _determineScriptAccess = function() {
- var _extractAllDomains = function(origins) {
- var i, len, tmp, resultsArray = [];
- if (typeof origins === "string") {
- origins = [ origins ];
- }
- if (!(typeof origins === "object" && origins && typeof origins.length === "number")) {
- return resultsArray;
- }
- for (i = 0, len = origins.length; i < len; i++) {
- if (_hasOwn.call(origins, i) && (tmp = _extractDomain(origins[i]))) {
- if (tmp === "*") {
- resultsArray.length = 0;
- resultsArray.push("*");
- break;
- }
- if (resultsArray.indexOf(tmp) === -1) {
- resultsArray.push(tmp);
- }
- }
- }
- return resultsArray;
- };
- return function(currentDomain, configOptions) {
- var swfDomain = _extractDomain(configOptions.swfPath);
- if (swfDomain === null) {
- swfDomain = currentDomain;
- }
- var trustedDomains = _extractAllDomains(configOptions.trustedDomains);
- var len = trustedDomains.length;
- if (len > 0) {
- if (len === 1 && trustedDomains[0] === "*") {
- return "always";
- }
- if (trustedDomains.indexOf(currentDomain) !== -1) {
- if (len === 1 && currentDomain === swfDomain) {
- return "sameDomain";
- }
- return "always";
- }
- }
- return "never";
- };
- }();
- /**
- * Get the currently active/focused DOM element.
- *
- * @returns the currently active/focused element, or `null`
- * @private
- */
- var _safeActiveElement = function() {
- try {
- return _document.activeElement;
- } catch (err) {
- return null;
- }
- };
- /**
- * Add a class to an element, if it doesn't already have it.
- *
- * @returns The element, with its new class added.
- * @private
- */
- var _addClass = function(element, value) {
- var c, cl, className, classNames = [];
- if (typeof value === "string" && value) {
- classNames = value.split(/\s+/);
- }
- if (element && element.nodeType === 1 && classNames.length > 0) {
- if (element.classList) {
- for (c = 0, cl = classNames.length; c < cl; c++) {
- element.classList.add(classNames[c]);
- }
- } else if (element.hasOwnProperty("className")) {
- className = " " + element.className + " ";
- for (c = 0, cl = classNames.length; c < cl; c++) {
- if (className.indexOf(" " + classNames[c] + " ") === -1) {
- className += classNames[c] + " ";
- }
- }
- element.className = className.replace(/^\s+|\s+$/g, "");
- }
- }
- return element;
- };
- /**
- * Remove a class from an element, if it has it.
- *
- * @returns The element, with its class removed.
- * @private
- */
- var _removeClass = function(element, value) {
- var c, cl, className, classNames = [];
- if (typeof value === "string" && value) {
- classNames = value.split(/\s+/);
- }
- if (element && element.nodeType === 1 && classNames.length > 0) {
- if (element.classList && element.classList.length > 0) {
- for (c = 0, cl = classNames.length; c < cl; c++) {
- element.classList.remove(classNames[c]);
- }
- } else if (element.className) {
- className = (" " + element.className + " ").replace(/[\r\n\t]/g, " ");
- for (c = 0, cl = classNames.length; c < cl; c++) {
- className = className.replace(" " + classNames[c] + " ", " ");
- }
- element.className = className.replace(/^\s+|\s+$/g, "");
- }
- }
- return element;
- };
- /**
- * Attempt to interpret the element's CSS styling. If `prop` is `"cursor"`,
- * then we assume that it should be a hand ("pointer") cursor if the element
- * is an anchor element ("a" tag).
- *
- * @returns The computed style property.
- * @private
- */
- var _getStyle = function(el, prop) {
- var value = _getComputedStyle(el, null).getPropertyValue(prop);
- if (prop === "cursor") {
- if (!value || value === "auto") {
- if (el.nodeName === "A") {
- return "pointer";
- }
- }
- }
- return value;
- };
- /**
- * Get the absolutely positioned coordinates of a DOM element.
- *
- * @returns Object containing the element's position, width, and height.
- * @private
- */
- var _getElementPosition = function(el) {
- var pos = {
- left: 0,
- top: 0,
- width: 0,
- height: 0
- };
- if (el.getBoundingClientRect) {
- var elRect = el.getBoundingClientRect();
- var pageXOffset = _window.pageXOffset;
- var pageYOffset = _window.pageYOffset;
- var leftBorderWidth = _document.documentElement.clientLeft || 0;
- var topBorderWidth = _document.documentElement.clientTop || 0;
- var leftBodyOffset = 0;
- var topBodyOffset = 0;
- if (_getStyle(_document.body, "position") === "relative") {
- var bodyRect = _document.body.getBoundingClientRect();
- var htmlRect = _document.documentElement.getBoundingClientRect();
- leftBodyOffset = bodyRect.left - htmlRect.left || 0;
- topBodyOffset = bodyRect.top - htmlRect.top || 0;
- }
- pos.left = elRect.left + pageXOffset - leftBorderWidth - leftBodyOffset;
- pos.top = elRect.top + pageYOffset - topBorderWidth - topBodyOffset;
- pos.width = "width" in elRect ? elRect.width : elRect.right - elRect.left;
- pos.height = "height" in elRect ? elRect.height : elRect.bottom - elRect.top;
- }
- return pos;
- };
- /**
- * Determine is an element is visible somewhere within the document (page).
- *
- * @returns Boolean
- * @private
- */
- var _isElementVisible = function(el) {
- if (!el) {
- return false;
- }
- var styles = _getComputedStyle(el, null);
- var hasCssHeight = _parseFloat(styles.height) > 0;
- var hasCssWidth = _parseFloat(styles.width) > 0;
- var hasCssTop = _parseFloat(styles.top) >= 0;
- var hasCssLeft = _parseFloat(styles.left) >= 0;
- var cssKnows = hasCssHeight && hasCssWidth && hasCssTop && hasCssLeft;
- var rect = cssKnows ? null : _getElementPosition(el);
- var isVisible = styles.display !== "none" && styles.visibility !== "collapse" && (cssKnows || !!rect && (hasCssHeight || rect.height > 0) && (hasCssWidth || rect.width > 0) && (hasCssTop || rect.top >= 0) && (hasCssLeft || rect.left >= 0));
- return isVisible;
- };
- /**
- * Clear all existing timeouts and interval polling delegates.
- *
- * @returns `undefined`
- * @private
- */
- var _clearTimeoutsAndPolling = function() {
- _clearTimeout(_flashCheckTimeout);
- _flashCheckTimeout = 0;
- _clearInterval(_swfFallbackCheckInterval);
- _swfFallbackCheckInterval = 0;
- };
- /**
- * Reposition the Flash object to cover the currently activated element.
- *
- * @returns `undefined`
- * @private
- */
- var _reposition = function() {
- var htmlBridge;
- if (_currentElement && (htmlBridge = _getHtmlBridge(_flashState.bridge))) {
- var pos = _getElementPosition(_currentElement);
- _extend(htmlBridge.style, {
- width: pos.width + "px",
- height: pos.height + "px",
- top: pos.top + "px",
- left: pos.left + "px",
- zIndex: "" + _getSafeZIndex(_globalConfig.zIndex)
- });
- }
- };
- /**
- * Sends a signal to the Flash object to display the hand cursor if `true`.
- *
- * @returns `undefined`
- * @private
- */
- var _setHandCursor = function(enabled) {
- if (_flashState.ready === true) {
- if (_flashState.bridge && typeof _flashState.bridge.setHandCursor === "function") {
- _flashState.bridge.setHandCursor(enabled);
- } else {
- _flashState.ready = false;
- }
- }
- };
- /**
- * Get a safe value for `zIndex`
- *
- * @returns an integer, or "auto"
- * @private
- */
- var _getSafeZIndex = function(val) {
- if (/^(?:auto|inherit)$/.test(val)) {
- return val;
- }
- var zIndex;
- if (typeof val === "number" && !_isNaN(val)) {
- zIndex = val;
- } else if (typeof val === "string") {
- zIndex = _getSafeZIndex(_parseInt(val, 10));
- }
- return typeof zIndex === "number" ? zIndex : "auto";
- };
- /**
- * Attempt to detect if ZeroClipboard is executing inside of a sandboxed iframe.
- * If it is, Flash Player cannot be used, so ZeroClipboard is dead in the water.
- *
- * @see {@link http://lists.w3.org/Archives/Public/public-whatwg-archive/2014Dec/0002.html}
- * @see {@link https://github.com/zeroclipboard/zeroclipboard/issues/511}
- * @see {@link http://zeroclipboard.org/test-iframes.html}
- *
- * @returns `true` (is sandboxed), `false` (is not sandboxed), or `null` (uncertain)
- * @private
- */
- var _detectSandbox = function(doNotReassessFlashSupport) {
- var effectiveScriptOrigin, frame, frameError, previousState = _flashState.sandboxed, isSandboxed = null;
- doNotReassessFlashSupport = doNotReassessFlashSupport === true;
- if (_pageIsFramed === false) {
- isSandboxed = false;
- } else {
- try {
- frame = window.frameElement || null;
- } catch (e) {
- frameError = {
- name: e.name,
- message: e.message
- };
- }
- if (frame && frame.nodeType === 1 && frame.nodeName === "IFRAME") {
- try {
- isSandboxed = frame.hasAttribute("sandbox");
- } catch (e) {
- isSandboxed = null;
- }
- } else {
- try {
- effectiveScriptOrigin = document.domain || null;
- } catch (e) {
- effectiveScriptOrigin = null;
- }
- if (effectiveScriptOrigin === null || frameError && frameError.name === "SecurityError" && /(^|[\s\(\[@])sandbox(es|ed|ing|[\s\.,!\)\]@]|$)/.test(frameError.message.toLowerCase())) {
- isSandboxed = true;
- }
- }
- }
- _flashState.sandboxed = isSandboxed;
- if (previousState !== isSandboxed && !doNotReassessFlashSupport) {
- _detectFlashSupport(_ActiveXObject);
- }
- return isSandboxed;
- };
- /**
- * Detect the Flash Player status, version, and plugin type.
- *
- * @see {@link https://code.google.com/p/doctype-mirror/wiki/ArticleDetectFlash#The_code}
- * @see {@link http://stackoverflow.com/questions/12866060/detecting-pepper-ppapi-flash-with-javascript}
- *
- * @returns `undefined`
- * @private
- */
- var _detectFlashSupport = function(ActiveXObject) {
- var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = "";
- /**
- * Derived from Apple's suggested sniffer.
- * @param {String} desc e.g. "Shockwave Flash 7.0 r61"
- * @returns {String} "7.0.61"
- * @private
- */
- function parseFlashVersion(desc) {
- var matches = desc.match(/[\d]+/g);
- matches.length = 3;
- return matches.join(".");
- }
- function isPepperFlash(flashPlayerFileName) {
- return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === "chrome.plugin");
- }
- function inspectPlugin(plugin) {
- if (plugin) {
- hasFlash = true;
- if (plugin.version) {
- flashVersion = parseFlashVersion(plugin.version);
- }
- if (!flashVersion && plugin.description) {
- flashVersion = parseFlashVersion(plugin.description);
- }
- if (plugin.filename) {
- isPPAPI = isPepperFlash(plugin.filename);
- }
- }
- }
- if (_navigator.plugins && _navigator.plugins.length) {
- plugin = _navigator.plugins["Shockwave Flash"];
- inspectPlugin(plugin);
- if (_navigator.plugins["Shockwave Flash 2.0"]) {
- hasFlash = true;
- flashVersion = "2.0.0.11";
- }
- } else if (_navigator.mimeTypes && _navigator.mimeTypes.length) {
- mimeType = _navigator.mimeTypes["application/x-shockwave-flash"];
- plugin = mimeType && mimeType.enabledPlugin;
- inspectPlugin(plugin);
- } else if (typeof ActiveXObject !== "undefined") {
- isActiveX = true;
- try {
- ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
- hasFlash = true;
- flashVersion = parseFlashVersion(ax.GetVariable("$version"));
- } catch (e1) {
- try {
- ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
- hasFlash = true;
- flashVersion = "6.0.21";
- } catch (e2) {
- try {
- ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
- hasFlash = true;
- flashVersion = parseFlashVersion(ax.GetVariable("$version"));
- } catch (e3) {
- isActiveX = false;
- }
- }
- }
- }
- _flashState.disabled = hasFlash !== true;
- _flashState.outdated = flashVersion && _parseFloat(flashVersion) < _parseFloat(_minimumFlashVersion);
- _flashState.version = flashVersion || "0.0.0";
- _flashState.pluginType = isPPAPI ? "pepper" : isActiveX ? "activex" : hasFlash ? "netscape" : "unknown";
- };
- /**
- * Invoke the Flash detection algorithms immediately upon inclusion so we're not waiting later.
- */
- _detectFlashSupport(_ActiveXObject);
- /**
- * Always assess the `sandboxed` state of the page at important Flash-related moments.
- */
- _detectSandbox(true);
- /**
- * A shell constructor for `ZeroClipboard` client instances.
- *
- * @constructor
- */
- var ZeroClipboard = function() {
- if (!(this instanceof ZeroClipboard)) {
- return new ZeroClipboard();
- }
- if (typeof ZeroClipboard._createClient === "function") {
- ZeroClipboard._createClient.apply(this, _args(arguments));
- }
- };
- /**
- * The ZeroClipboard library's version number.
- *
- * @static
- * @readonly
- * @property {string}
- */
- _defineProperty(ZeroClipboard, "version", {
- value: "2.2.0",
- writable: false,
- configurable: true,
- enumerable: true
- });
- /**
- * Update or get a copy of the ZeroClipboard global configuration.
- * Returns a copy of the current/updated configuration.
- *
- * @returns Object
- * @static
- */
- ZeroClipboard.config = function() {
- return _config.apply(this, _args(arguments));
- };
- /**
- * Diagnostic method that describes the state of the browser, Flash Player, and ZeroClipboard.
- *
- * @returns Object
- * @static
- */
- ZeroClipboard.state = function() {
- return _state.apply(this, _args(arguments));
- };
- /**
- * Check if Flash is unusable for any reason: disabled, outdated, deactivated, etc.
- *
- * @returns Boolean
- * @static
- */
- ZeroClipboard.isFlashUnusable = function() {
- return _isFlashUnusable.apply(this, _args(arguments));
- };
- /**
- * Register an event listener.
- *
- * @returns `ZeroClipboard`
- * @static
- */
- ZeroClipboard.on = function() {
- return _on.apply(this, _args(arguments));
- };
- /**
- * Unregister an event listener.
- * If no `listener` function/object is provided, it will unregister all listeners for the provided `eventType`.
- * If no `eventType` is provided, it will unregister all listeners for every event type.
- *
- * @returns `ZeroClipboard`
- * @static
- */
- ZeroClipboard.off = function() {
- return _off.apply(this, _args(arguments));
- };
- /**
- * Retrieve event listeners for an `eventType`.
- * If no `eventType` is provided, it will retrieve all listeners for every event type.
- *
- * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`
- */
- ZeroClipboard.handlers = function() {
- return _listeners.apply(this, _args(arguments));
- };
- /**
- * Event emission receiver from the Flash object, forwarding to any registered JavaScript event listeners.
- *
- * @returns For the "copy" event, returns the Flash-friendly "clipData" object; otherwise `undefined`.
- * @static
- */
- ZeroClipboard.emit = function() {
- return _emit.apply(this, _args(arguments));
- };
- /**
- * Create and embed the Flash object.
- *
- * @returns The Flash object
- * @static
- */
- ZeroClipboard.create = function() {
- return _create.apply(this, _args(arguments));
- };
- /**
- * Self-destruct and clean up everything, including the embedded Flash object.
- *
- * @returns `undefined`
- * @static
- */
- ZeroClipboard.destroy = function() {
- return _destroy.apply(this, _args(arguments));
- };
- /**
- * Set the pending data for clipboard injection.
- *
- * @returns `undefined`
- * @static
- */
- ZeroClipboard.setData = function() {
- return _setData.apply(this, _args(arguments));
- };
- /**
- * Clear the pending data for clipboard injection.
- * If no `format` is provided, all pending data formats will be cleared.
- *
- * @returns `undefined`
- * @static
- */
- ZeroClipboard.clearData = function() {
- return _clearData.apply(this, _args(arguments));
- };
- /**
- * Get a copy of the pending data for clipboard injection.
- * If no `format` is provided, a copy of ALL pending data formats will be returned.
- *
- * @returns `String` or `Object`
- * @static
- */
- ZeroClipboard.getData = function() {
- return _getData.apply(this, _args(arguments));
- };
- /**
- * Sets the current HTML object that the Flash object should overlay. This will put the global
- * Flash object on top of the current element; depending on the setup, this may also set the
- * pending clipboard text data as well as the Flash object's wrapping element's title attribute
- * based on the underlying HTML element and ZeroClipboard configuration.
- *
- * @returns `undefined`
- * @static
- */
- ZeroClipboard.focus = ZeroClipboard.activate = function() {
- return _focus.apply(this, _args(arguments));
- };
- /**
- * Un-overlays the Flash object. This will put the global Flash object off-screen; depending on
- * the setup, this may also unset the Flash object's wrapping element's title attribute based on
- * the underlying HTML element and ZeroClipboard configuration.
- *
- * @returns `undefined`
- * @static
- */
- ZeroClipboard.blur = ZeroClipboard.deactivate = function() {
- return _blur.apply(this, _args(arguments));
- };
- /**
- * Returns the currently focused/"activated" HTML element that the Flash object is wrapping.
- *
- * @returns `HTMLElement` or `null`
- * @static
- */
- ZeroClipboard.activeElement = function() {
- return _activeElement.apply(this, _args(arguments));
- };
- /**
- * Keep track of the ZeroClipboard client instance counter.
- */
- var _clientIdCounter = 0;
- /**
- * Keep track of the state of the client instances.
- *
- * Entry structure:
- * _clientMeta[client.id] = {
- * instance: client,
- * elements: [],
- * handlers: {}
- * };
- */
- var _clientMeta = {};
- /**
- * Keep track of the ZeroClipboard clipped elements counter.
- */
- var _elementIdCounter = 0;
- /**
- * Keep track of the state of the clipped element relationships to clients.
- *
- * Entry structure:
- * _elementMeta[element.zcClippingId] = [client1.id, client2.id];
- */
- var _elementMeta = {};
- /**
- * Keep track of the state of the mouse event handlers for clipped elements.
- *
- * Entry structure:
- * _mouseHandlers[element.zcClippingId] = {
- * mouseover: function(event) {},
- * mouseout: function(event) {},
- * mouseenter: function(event) {},
- * mouseleave: function(event) {},
- * mousemove: function(event) {}
- * };
- */
- var _mouseHandlers = {};
- /**
- * Extending the ZeroClipboard configuration defaults for the Client module.
- */
- _extend(_globalConfig, {
- autoActivate: true
- });
- /**
- * The real constructor for `ZeroClipboard` client instances.
- * @private
- */
- var _clientConstructor = function(elements) {
- var client = this;
- client.id = "" + _clientIdCounter++;
- _clientMeta[client.id] = {
- instance: client,
- elements: [],
- handlers: {}
- };
- if (elements) {
- client.clip(elements);
- }
- ZeroClipboard.on("*", function(event) {
- return client.emit(event);
- });
- ZeroClipboard.on("destroy", function() {
- client.destroy();
- });
- ZeroClipboard.create();
- };
- /**
- * The underlying implementation of `ZeroClipboard.Client.prototype.on`.
- * @private
- */
- var _clientOn = function(eventType, listener) {
- var i, len, events, added = {}, meta = _clientMeta[this.id], handlers = meta && meta.handlers;
- if (!meta) {
- throw new Error("Attempted to add new listener(s) to a destroyed ZeroClipboard client instance");
- }
- if (typeof eventType === "string" && eventType) {
- events = eventType.toLowerCase().split(/\s+/);
- } else if (typeof eventType === "object" && eventType && typeof listener === "undefined") {
- for (i in eventType) {
- if (_hasOwn.call(eventType, i) && typeof i === "string" && i && typeof eventType[i] === "function") {
- this.on(i, eventType[i]);
- }
- }
- }
- if (events && events.length) {
- for (i = 0, len = events.length; i < len; i++) {
- eventType = events[i].replace(/^on/, "");
- added[eventType] = true;
- if (!handlers[eventType]) {
- handlers[eventType] = [];
- }
- handlers[eventType].push(listener);
- }
- if (added.ready && _flashState.ready) {
- this.emit({
- type: "ready",
- client: this
- });
- }
- if (added.error) {
- for (i = 0, len = _flashStateErrorNames.length; i < len; i++) {
- if (_flashState[_flashStateErrorNames[i].replace(/^flash-/, "")]) {
- this.emit({
- type: "error",
- name: _flashStateErrorNames[i],
- client: this
- });
- break;
- }
- }
- if (_zcSwfVersion !== undefined && ZeroClipboard.version !== _zcSwfVersion) {
- this.emit({
- type: "error",
- name: "version-mismatch",
- jsVersion: ZeroClipboard.version,
- swfVersion: _zcSwfVersion
- });
- }
- }
- }
- return this;
- };
- /**
- * The underlying implementation of `ZeroClipboard.Client.prototype.off`.
- * @private
- */
- var _clientOff = function(eventType, listener) {
- var i, len, foundIndex, events, perEventHandlers, meta = _clientMeta[this.id], handlers = meta && meta.handlers;
- if (!handlers) {
- return this;
- }
- if (arguments.length === 0) {
- events = _keys(handlers);
- } else if (typeof eventType === "string" && eventType) {
- events = eventType.split(/\s+/);
- } else if (typeof eventType === "object" && eventType && typeof listener === "undefined") {
- for (i in eventType) {
- if (_hasOwn.call(eventType, i) && typeof i === "string" && i && typeof eventType[i] === "function") {
- this.off(i, eventType[i]);
- }
- }
- }
- if (events && events.length) {
- for (i = 0, len = events.length; i < len; i++) {
- eventType = events[i].toLowerCase().replace(/^on/, "");
- perEventHandlers = handlers[eventType];
- if (perEventHandlers && perEventHandlers.length) {
- if (listener) {
- foundIndex = perEventHandlers.indexOf(listener);
- while (foundIndex !== -1) {
- perEventHandlers.splice(foundIndex, 1);
- foundIndex = perEventHandlers.indexOf(listener, foundIndex);
- }
- } else {
- perEventHandlers.length = 0;
- }
- }
- }
- }
- return this;
- };
- /**
- * The underlying implementation of `ZeroClipboard.Client.prototype.handlers`.
- * @private
- */
- var _clientListeners = function(eventType) {
- var copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;
- if (handlers) {
- if (typeof eventType === "string" && eventType) {
- copy = handlers[eventType] ? handlers[eventType].slice(0) : [];
- } else {
- copy = _deepCopy(handlers);
- }
- }
- return copy;
- };
- /**
- * The underlying implementation of `ZeroClipboard.Client.prototype.emit`.
- * @private
- */
- var _clientEmit = function(event) {
- if (_clientShouldEmit.call(this, event)) {
- if (typeof event === "object" && event && typeof event.type === "string" && event.type) {
- event = _extend({}, event);
- }
- var eventCopy = _extend({}, _createEvent(event), {
- client: this
- });
- _clientDispatchCallbacks.call(this, eventCopy);
- }
- return this;
- };
- /**
- * The underlying implementation of `ZeroClipboard.Client.prototype.clip`.
- * @private
- */
- var _clientClip = function(elements) {
- if (!_clientMeta[this.id]) {
- throw new Error("Attempted to clip element(s) to a destroyed ZeroClipboard client instance");
- }
- elements = _prepClip(elements);
- for (var i = 0; i < elements.length; i++) {
- if (_hasOwn.call(elements, i) && elements[i] && elements[i].nodeType === 1) {
- if (!elements[i].zcClippingId) {
- elements[i].zcClippingId = "zcClippingId_" + _elementIdCounter++;
- _elementMeta[elements[i].zcClippingId] = [ this.id ];
- if (_globalConfig.autoActivate === true) {
- _addMouseHandlers(elements[i]);
- }
- } else if (_elementMeta[elements[i].zcClippingId].indexOf(this.id) === -1) {
- _elementMeta[elements[i].zcClippingId].push(this.id);
- }
- var clippedElements = _clientMeta[this.id] && _clientMeta[this.id].elements;
- if (clippedElements.indexOf(elements[i]) === -1) {
- clippedElements.push(elements[i]);
- }
- }
- }
- return this;
- };
- /**
- * The underlying implementation of `ZeroClipboard.Client.prototype.unclip`.
- * @private
- */
- var _clientUnclip = function(elements) {
- var meta = _clientMeta[this.id];
- if (!meta) {
- return this;
- }
- var clippedElements = meta.elements;
- var arrayIndex;
- if (typeof elements === "undefined") {
- elements = clippedElements.slice(0);
- } else {
- elements = _prepClip(elements);
- }
- for (var i = elements.length; i--; ) {
- if (_hasOwn.call(elements, i) && elements[i] && elements[i].nodeType === 1) {
- arrayIndex = 0;
- while ((arrayIndex = clippedElements.indexOf(elements[i], arrayIndex)) !== -1) {
- clippedElements.splice(arrayIndex, 1);
- }
- var clientIds = _elementMeta[elements[i].zcClippingId];
- if (clientIds) {
- arrayIndex = 0;
- while ((arrayIndex = clientIds.indexOf(this.id, arrayIndex)) !== -1) {
- clientIds.splice(arrayIndex, 1);
- }
- if (clientIds.length === 0) {
- if (_globalConfig.autoActivate === true) {
- _removeMouseHandlers(elements[i]);
- }
- delete elements[i].zcClippingId;
- }
- }
- }
- }
- return this;
- };
- /**
- * The underlying implementation of `ZeroClipboard.Client.prototype.elements`.
- * @private
- */
- var _clientElements = function() {
- var meta = _clientMeta[this.id];
- return meta && meta.elements ? meta.elements.slice(0) : [];
- };
- /**
- * The underlying implementation of `ZeroClipboard.Client.prototype.destroy`.
- * @private
- */
- var _clientDestroy = function() {
- if (!_clientMeta[this.id]) {
- return;
- }
- this.unclip();
- this.off();
- delete _clientMeta[this.id];
- };
- /**
- * Inspect an Event to see if the Client (`this`) should honor it for emission.
- * @private
- */
- var _clientShouldEmit = function(event) {
- if (!(event && event.type)) {
- return false;
- }
- if (event.client && event.client !== this) {
- return false;
- }
- var meta = _clientMeta[this.id];
- var clippedEls = meta && meta.elements;
- var hasClippedEls = !!clippedEls && clippedEls.length > 0;
- var goodTarget = !event.target || hasClippedEls && clippedEls.indexOf(event.target) !== -1;
- var goodRelTarget = event.relatedTarget && hasClippedEls && clippedEls.indexOf(event.relatedTarget) !== -1;
- var goodClient = event.client && event.client === this;
- if (!meta || !(goodTarget || goodRelTarget || goodClient)) {
- return false;
- }
- return true;
- };
- /**
- * Handle the actual dispatching of events to a client instance.
- *
- * @returns `undefined`
- * @private
- */
- var _clientDispatchCallbacks = function(event) {
- var meta = _clientMeta[this.id];
- if (!(typeof event === "object" && event && event.type && meta)) {
- return;
- }
- var async = _shouldPerformAsync(event);
- var wildcardTypeHandlers = meta && meta.handlers["*"] || [];
- var specificTypeHandlers = meta && meta.handlers[event.type] || [];
- var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);
- if (handlers && handlers.length) {
- var i, len, func, context, eventCopy, originalContext = this;
- for (i = 0, len = handlers.length; i < len; i++) {
- func = handlers[i];
- context = originalContext;
- if (typeof func === "string" && typeof _window[func] === "function") {
- func = _window[func];
- }
- if (typeof func === "object" && func && typeof func.handleEvent === "function") {
- context = func;
- func = func.handleEvent;
- }
- if (typeof func === "function") {
- eventCopy = _extend({}, event);
- _dispatchCallback(func, context, [ eventCopy ], async);
- }
- }
- }
- };
- /**
- * Prepares the elements for clipping/unclipping.
- *
- * @returns An Array of elements.
- * @private
- */
- var _prepClip = function(elements) {
- if (typeof elements === "string") {
- elements = [];
- }
- return typeof elements.length !== "number" ? [ elements ] : elements;
- };
- /**
- * Add a `mouseover` handler function for a clipped element.
- *
- * @returns `undefined`
- * @private
- */
- var _addMouseHandlers = function(element) {
- if (!(element && element.nodeType === 1)) {
- return;
- }
- var _suppressMouseEvents = function(event) {
- if (!(event || (event = _window.event))) {
- return;
- }
- if (event._source !== "js") {
- event.stopImmediatePropagation();
- event.preventDefault();
- }
- delete event._source;
- };
- var _elementMouseOver = function(event) {
- if (!(event || (event = _window.event))) {
- return;
- }
- _suppressMouseEvents(event);
- ZeroClipboard.focus(element);
- };
- element.addEventListener("mouseover", _elementMouseOver, false);
- element.addEventListener("mouseout", _suppressMouseEvents, false);
- element.addEventListener("mouseenter", _suppressMouseEvents, false);
- element.addEventListener("mouseleave", _suppressMouseEvents, false);
- element.addEventListener("mousemove", _suppressMouseEvents, false);
- _mouseHandlers[element.zcClippingId] = {
- mouseover: _elementMouseOver,
- mouseout: _suppressMouseEvents,
- mouseenter: _suppressMouseEvents,
- mouseleave: _suppressMouseEvents,
- mousemove: _suppressMouseEvents
- };
- };
- /**
- * Remove a `mouseover` handler function for a clipped element.
- *
- * @returns `undefined`
- * @private
- */
- var _removeMouseHandlers = function(element) {
- if (!(element && element.nodeType === 1)) {
- return;
- }
- var mouseHandlers = _mouseHandlers[element.zcClippingId];
- if (!(typeof mouseHandlers === "object" && mouseHandlers)) {
- return;
- }
- var key, val, mouseEvents = [ "move", "leave", "enter", "out", "over" ];
- for (var i = 0, len = mouseEvents.length; i < len; i++) {
- key = "mouse" + mouseEvents[i];
- val = mouseHandlers[key];
- if (typeof val === "function") {
- element.removeEventListener(key, val, false);
- }
- }
- delete _mouseHandlers[element.zcClippingId];
- };
- /**
- * Creates a new ZeroClipboard client instance.
- * Optionally, auto-`clip` an element or collection of elements.
- *
- * @constructor
- */
- ZeroClipboard._createClient = function() {
- _clientConstructor.apply(this, _args(arguments));
- };
- /**
- * Register an event listener to the client.
- *
- * @returns `this`
- */
- ZeroClipboard.prototype.on = function() {
- return _clientOn.apply(this, _args(arguments));
- };
- /**
- * Unregister an event handler from the client.
- * If no `listener` function/object is provided, it will unregister all handlers for the provided `eventType`.
- * If no `eventType` is provided, it will unregister all handlers for every event type.
- *
- * @returns `this`
- */
- ZeroClipboard.prototype.off = function() {
- return _clientOff.apply(this, _args(arguments));
- };
- /**
- * Retrieve event listeners for an `eventType` from the client.
- * If no `eventType` is provided, it will retrieve all listeners for every event type.
- *
- * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`
- */
- ZeroClipboard.prototype.handlers = function() {
- return _clientListeners.apply(this, _args(arguments));
- };
- /**
- * Event emission receiver from the Flash object for this client's registered JavaScript event listeners.
- *
- * @returns For the "copy" event, returns the Flash-friendly "clipData" object; otherwise `undefined`.
- */
- ZeroClipboard.prototype.emit = function() {
- return _clientEmit.apply(this, _args(arguments));
- };
- /**
- * Register clipboard actions for new element(s) to the client.
- *
- * @returns `this`
- */
- ZeroClipboard.prototype.clip = function() {
- return _clientClip.apply(this, _args(arguments));
- };
- /**
- * Unregister the clipboard actions of previously registered element(s) on the page.
- * If no elements are provided, ALL registered elements will be unregistered.
- *
- * @returns `this`
- */
- ZeroClipboard.prototype.unclip = function() {
- return _clientUnclip.apply(this, _args(arguments));
- };
- /**
- * Get all of the elements to which this client is clipped.
- *
- * @returns array of clipped elements
- */
- ZeroClipboard.prototype.elements = function() {
- return _clientElements.apply(this, _args(arguments));
- };
- /**
- * Self-destruct and clean up everything for a single client.
- * This will NOT destroy the embedded Flash object.
- *
- * @returns `undefined`
- */
- ZeroClipboard.prototype.destroy = function() {
- return _clientDestroy.apply(this, _args(arguments));
- };
- /**
- * Stores the pending plain text to inject into the clipboard.
- *
- * @returns `this`
- */
- ZeroClipboard.prototype.setText = function(text) {
- if (!_clientMeta[this.id]) {
- throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");
- }
- ZeroClipboard.setData("text/plain", text);
- return this;
- };
- /**
- * Stores the pending HTML text to inject into the clipboard.
- *
- * @returns `this`
- */
- ZeroClipboard.prototype.setHtml = function(html) {
- if (!_clientMeta[this.id]) {
- throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");
- }
- ZeroClipboard.setData("text/html", html);
- return this;
- };
- /**
- * Stores the pending rich text (RTF) to inject into the clipboard.
- *
- * @returns `this`
- */
- ZeroClipboard.prototype.setRichText = function(richText) {
- if (!_clientMeta[this.id]) {
- throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");
- }
- ZeroClipboard.setData("application/rtf", richText);
- return this;
- };
- /**
- * Stores the pending data to inject into the clipboard.
- *
- * @returns `this`
- */
- ZeroClipboard.prototype.setData = function() {
- if (!_clientMeta[this.id]) {
- throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");
- }
- ZeroClipboard.setData.apply(this, _args(arguments));
- return this;
- };
- /**
- * Clears the pending data to inject into the clipboard.
- * If no `format` is provided, all pending data formats will be cleared.
- *
- * @returns `this`
- */
- ZeroClipboard.prototype.clearData = function() {
- if (!_clientMeta[this.id]) {
- throw new Error("Attempted to clear pending clipboard data from a destroyed ZeroClipboard client instance");
- }
- ZeroClipboard.clearData.apply(this, _args(arguments));
- return this;
- };
- /**
- * Gets a copy of the pending data to inject into the clipboard.
- * If no `format` is provided, a copy of ALL pending data formats will be returned.
- *
- * @returns `String` or `Object`
- */
- ZeroClipboard.prototype.getData = function() {
- if (!_clientMeta[this.id]) {
- throw new Error("Attempted to get pending clipboard data from a destroyed ZeroClipboard client instance");
- }
- return ZeroClipboard.getData.apply(this, _args(arguments));
- };
- if (typeof define === "function" && define.amd) {
- define(function() {
- return ZeroClipboard;
- });
- } else if (typeof module === "object" && module && typeof module.exports === "object" && module.exports) {
- module.exports = ZeroClipboard;
- } else {
- window.ZeroClipboard = ZeroClipboard;
- }
-})(function() {
- return this || window;
-}());
\ No newline at end of file
diff --git a/release/pui-v1.9.0/zeroclipboard/ZeroClipboard.swf b/release/pui-v1.9.0/zeroclipboard/ZeroClipboard.swf
deleted file mode 100644
index 8bad6a3e3..000000000
Binary files a/release/pui-v1.9.0/zeroclipboard/ZeroClipboard.swf and /dev/null differ