This commit is contained in:
0dp 2018-06-14 11:33:05 +02:00
commit d8ad7b29d4
98 changed files with 19033 additions and 14699 deletions

12
.gitignore vendored
View File

@ -13,3 +13,15 @@ dist-product
npm-debug.log npm-debug.log
/vendor/ /vendor/
.DS_Store
Thumbs.db
.svn
.cvs
*.bak
*.swp

View File

@ -1,3 +1,20 @@
- ** Release 0.8.2 April 11th 2018 **
- Update to Bootstrap 4.1
- Adding CONTRIBUTING.md and ISSUE_TEMPLATE.md - Thx @Thomas-A-Reinert
- Adding empty JS file into build process for adding own JS more easily - Thx @Thomas-A-Reinert
- WooCommerce update and cleanup - Thx @ZacharyElkins
- Adding SASS source map functionality - Thx @axlright
- Cleanup - Thx @axlright
- Adding custom editor SASS stylesheet into build process
- Remove woocommerce.php integration and replace it with hooked approach - See: https://docs.woocommerce.com/document/third-party-custom-theme-compatibility/#section-5
- New pagination - Thx @0dp
- Update functions.php - Thx @0dp
- Add pluggable functions - Thx @axlright
- Add polish translation - Thx @mirzal
- Adding timestamp to js and css resources to prevent caching while developinh - Thx @@gintsmurans
- Improve left sidebar check - Thx @ZacharyElkins
- ** Release 0.8.1 March 7th 2018 ** - ** Release 0.8.1 March 7th 2018 **
- Updating dependencies - Updating dependencies
- Fixing and improing gulpfile.js - thx @0dp - Fixing and improing gulpfile.js - thx @0dp

View File

@ -9,11 +9,11 @@ Please delete anything that does not apply for you!
## Please tell us about your environment: ## Please tell us about your environment:
- WordPress Version: 4.9.x - **WordPress Version:** 4.9.x
- OS Version: [Windows 7 | Windows 8 | Windows 10 | Linux [Distribution / Version] | MacOsX [Version | Android[Version] | iOS[Version] - **OS Version:** [Windows 7 | Windows 8 | Windows 10] | Linux [Distribution / Version] | MacOS [Version] | Android [Version] | iOS [Version]
- Browser: [ all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari ] - **Browser:** [ all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari ]
- Language: [ all | PHP | SQL | HTML | S/CSS | Javascript | jQuery | ES6 | JSON | XML] - **Language:** [ all | PHP | SQL | HTML | S/CSS | Javascript | jQuery | ES6 | JSON | XML]
- Node.js & NPM Versions: Node.js [V X.XX] | NPM [V X.XX] - **Node.js & NPM Versions:** Node.js [V X.XX] | NPM [V X.XX]
--- ---

5
ISSUE_TEMPLATE/test.md Normal file
View File

@ -0,0 +1,5 @@
# Testing
[] YES
[] NO!

View File

@ -6,16 +6,14 @@ Travis build: [![Build Status](https://travis-ci.org/understrap/understrap.svg?b
Website: [https://understrap.com](https://understrap.com) Website: [https://understrap.com](https://understrap.com)
Child Theme Project: [https://github.com/holger1411/understrap-child](https://github.com/holger1411/understrap-child) Child Theme Project: [https://github.com/understrap/understrap-child](https://github.com/understrap/understrap-child)
## About ## About
Im a huge fan of Underscores, Bootstrap, and Sass. Why not combine these into a solid WordPress Theme Framework? Im a huge fan of Underscores, Bootstrap, and Sass. Why not combine these into a solid WordPress Theme Framework? Thats what UnderStrap is. You can use it as a starter theme and build your own theme on top of it. Or you can use it as a parent theme and create your own child theme for UnderStrap.
Thats what UnderStrap is.
You can use it as starter theme and build your own theme on top of it. Or you use it as parent theme and create your own child theme for UnderStrap.
## License ## License
UnderStrap WordPress Theme, Copyright 2013-2017 Holger Koenemann UnderStrap WordPress Theme, Copyright 2013-2018 Holger Koenemann
UnderStrap is distributed under the terms of the GNU GPL version 2 UnderStrap is distributed under the terms of the GNU GPL version 2
http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
@ -28,7 +26,7 @@ See [changelog](CHANGELOG.md)
- Combines Underscores PHP/JS files and Bootstraps HTML/CSS/JS. - Combines Underscores PHP/JS files and Bootstraps HTML/CSS/JS.
- Comes with Bootstrap (v4) Sass source files and additional .scss files. Nicely sorted and ready to add your own variables and customize the Bootstrap variables. - Comes with Bootstrap (v4) Sass source files and additional .scss files. Nicely sorted and ready to add your own variables and customize the Bootstrap variables.
- Uses a single and minified CSS file for all the basic stuff. - Uses a single minified CSS file for all the basic stuff.
- [Font Awesome](http://fortawesome.github.io/Font-Awesome/) integration (v4.7.0) - [Font Awesome](http://fortawesome.github.io/Font-Awesome/) integration (v4.7.0)
- Jetpack ready. - Jetpack ready.
- WooCommerce support. - WooCommerce support.
@ -44,26 +42,30 @@ Why not add a well known and supported layout framework to have a solid, clean a
## Confused by All the CSS and Sass Files? ## Confused by All the CSS and Sass Files?
Some basics about the Sass and CSS files that come with UnderStrap: Some basics about the Sass and CSS files that come with UnderStrap:
- The theme itself uses the `/style.css`file just to identify the theme inside of WordPress. The file is not loaded by the theme and does not include any styles. - The theme itself uses the `/style.css`file only to identify the theme inside of WordPress. The file is not loaded by the theme and does not include any styles.
- The `/css/theme.css` and its minified little brother `/css/theme.min.css` file(s) provides all styles. It is composed of five different SCSS sets and one variable file at `/sass/theme.scss`: - The `/css/theme.css` and its minified little brother `/css/theme.min.css` file(s) provides all styles. It is composed of five different SCSS sets and one variable file at `/sass/theme.scss`:
- 1 "theme/theme_variables"; // <--------- Add your variables into this file. Also add variables to overwrite Bootstrap or UnderStrap variables here ```@import "theme/theme_variables"; // 1. Add your variables into this file. Also add variables to overwrite Bootstrap or UnderStrap variables here
- 2 "../src/bootstrap-sass/assets/stylesheets/bootstrap"; // <--------- All the Bootstrap stuff - Don´t edit this! @import "../src/bootstrap-sass/assets/stylesheets/bootstrap"; // 2. All the Bootstrap stuff - Don´t edit this!
- 3 "understrap/understrap"; // <--------- Some basic WordPress stylings and needed styles to combine Boostrap and Underscores @import "understrap/understrap"; // 3. Some basic WordPress stylings and needed styles to combine Boostrap and Underscores
- 4 "../src/fontawesome/scss/font-awesome"; // <--------- Font Awesome Icon styles @import "../src/fontawesome/scss/font-awesome"; // 4. Font Awesome Icon styles
// Any additional imported files // // Any additional imported files //
- 5 "theme/theme"; // <--------- Add your styles into this file @import "theme/theme"; // 5. Add your styles into this file
```
- Dont edit the files no. 2-4 files/filesets or you wont be able to update it without overwriting your own work! - Dont edit the number 2-4 files/filesets listed above or you wont be able to update Understrap without overwriting your own work!
- Your design goes into: `/sass/theme`. Add your styles to the `/sass/theme/_theme.scss` file and your variables to the `/sass/theme/_theme_variables.scss`. Or add other .scss files into it and `@import` it into `/sass/theme/_theme.scss`. - Your design goes into: `/sass/theme`.
- Add your styles to the `/sass/theme/_theme.scss` file
- And your variables to the `/sass/theme/_theme_variables.scss`
- Or add other .scss files into it and `@import` it into `/sass/theme/_theme.scss`.
## Installation ## Installation
There are several ways to install UnderStrap. We'll look at three of them: (1) classic install by uploading UnderStrap to a WordPress install, (2) using npm, and (3) using the theme directory in WordPress.
### Classic install ### Classic install
- Download the understrap folder from GitHub or from [https://understrap.com](https://understrap.com) - Download the understrap folder from GitHub or from [https://understrap.com](https://understrap.com)
- IMPORTANT: If you download it from GitHub make sure you rename the "understrap-master.zip" file just to "understrap.zip" or you might have problems using child themes !! - IMPORTANT: If you download it from GitHub make sure you rename the "understrap-master.zip" file just to "understrap.zip" or you might have problems using child themes!
- Upload it into your WordPress installation subfolder here: `/wp-content/themes/` - Upload it into your WordPress installation theme subfolder: `/wp-content/themes/`
- Login to your WordPress backend - Login to your WordPress backend
- Go to Appearance → Themes - Go to Appearance → Themes
- Activate the UnderStrap theme - Activate the UnderStrap theme
@ -84,12 +86,12 @@ Some basics about the Sass and CSS files that come with UnderStrap:
## Developing With npm, Gulp and SASS and [Browser Sync][1] ## Developing With npm, Gulp and SASS and [Browser Sync][1]
### Installing Dependencies ### Installing Dependencies
- Make sure you have installed Node.js and Browser-Sync* (* optional, if you wanna use it) on your computer globally - Make sure you have installed Node.js and Browser-Sync (optional) on your computer globally
- Then open your terminal and browse to the location of your UnderStrap copy - Then open your terminal and browse to the location of your UnderStrap copy
- Run: `$ npm install` - Run: `$ npm install`
### Running ### Running
To work and compile your Sass files on the fly start: To work with and compile your Sass files on the fly start:
- `$ gulp watch` - `$ gulp watch`
@ -107,7 +109,7 @@ Or, to run with Browser-Sync:
``` ```
- then run: `$ gulp watch-bs` - then run: `$ gulp watch-bs`
## How to Use the Build-In Widget Slider ## How to Use the Built-In Widget Slider
The front-page slider is widget driven. Simply add more than one widget to widget position “Hero”. The front-page slider is widget driven. Simply add more than one widget to widget position “Hero”.
- Click on Appearance → Widgets. - Click on Appearance → Widgets.
@ -115,10 +117,11 @@ The front-page slider is widget driven. Simply add more than one widget to widge
- Thats it. - Thats it.
## RTL styles? ## RTL styles?
Just add a new file to the themes root folder called rtl.css. Add all alignments to this file according to this description: Add a new file to the themes root folder called rtl.css. Add all alignments to this file according to this description:
https://codex.wordpress.org/Right_to_Left_Language_Support https://codex.wordpress.org/Right_to_Left_Language_Support
## Page Templates ## Page Templates
UnderStrap includes several different page template files: (1) blank template, (2) empty template, and (3) full width template.
### Blank Template ### Blank Template
@ -132,6 +135,8 @@ The `empty.php` template displays a header and a footer only. A good starting po
The `fullwidthpage.php` template has full width layout without a sidebar. The `fullwidthpage.php` template has full width layout without a sidebar.
## Footnotes
[1] Visit [http://browsersync.io](http://browsersync.io) for more information on Browser Sync [1] Visit [http://browsersync.io](http://browsersync.io) for more information on Browser Sync
Licenses & Credits Licenses & Credits

View File

@ -60,8 +60,6 @@ $container = get_theme_mod( 'understrap_container_type' );
<!-- The pagination component --> <!-- The pagination component -->
<?php understrap_pagination(); ?> <?php understrap_pagination(); ?>
</div><!-- #primary -->
<!-- Do the right sidebar check --> <!-- Do the right sidebar check -->
<?php get_template_part( 'global-templates/right-sidebar-check' ); ?> <?php get_template_part( 'global-templates/right-sidebar-check' ); ?>

View File

@ -84,8 +84,6 @@ $container = get_theme_mod( 'understrap_container_type' );
<!-- The pagination component --> <!-- The pagination component -->
<?php understrap_pagination(); ?> <?php understrap_pagination(); ?>
</div><!-- #primary -->
<!-- Do the right sidebar check --> <!-- Do the right sidebar check -->
<?php get_template_part( 'global-templates/right-sidebar-check' ); ?> <?php get_template_part( 'global-templates/right-sidebar-check' ); ?>

View File

@ -1,6 +1,6 @@
{ {
"name": "understrap", "name": "understrap",
"version": "0.8.0", "version": "0.8.2",
"homepage": "http://understrap.com", "homepage": "http://understrap.com",
"authors": [ "authors": [
"Holger Koenemann <office@holgerkoenemann.de>" "Holger Koenemann <office@holgerkoenemann.de>"

View File

@ -1,10 +1,10 @@
{ {
"name": "holger1411/understrap", "name": "holger1411/understrap",
"description": "Combines Automattic´s Underscores Starter Theme and Bootstrap 4", "description": "Combines Automattic´s Underscores Starter Theme and Bootstrap 4",
"type": "library", "type": "wordpress-theme",
"license": "GPL-2.0", "license": "GPL-2.0",
"minimum-stability": "stable", "minimum-stability": "stable",
"require": {}, "require": {"composer/installers": "^1.5"},
"keywords": ["wordpress","theme","bootstrap"], "keywords": ["wordpress","theme","bootstrap"],
"homepage": "https://github.com/holger1411/understrap" "homepage": "https://github.com/holger1411/understrap"
} }

File diff suppressed because one or more lines are too long

4
css/theme.min.css vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -31,7 +31,7 @@ require get_template_directory() . '/inc/enqueue.php';
require get_template_directory() . '/inc/template-tags.php'; require get_template_directory() . '/inc/template-tags.php';
/** /**
* Custom template tags for this theme. * Custom pagination for this theme.
*/ */
require get_template_directory() . '/inc/pagination.php'; require get_template_directory() . '/inc/pagination.php';
@ -58,7 +58,7 @@ require get_template_directory() . '/inc/jetpack.php';
/** /**
* Load custom WordPress nav walker. * Load custom WordPress nav walker.
*/ */
require get_template_directory() . '/inc/bootstrap-wp-navwalker.php'; require get_template_directory() . '/inc/class-wp-bootstrap-navwalker.php';
/** /**
* Load WooCommerce functions. * Load WooCommerce functions.

View File

@ -7,12 +7,14 @@
?> ?>
<?php if ( is_active_sidebar( 'hero' ) || is_active_sidebar( 'statichero' ) ) : ?> <?php if ( is_active_sidebar( 'hero' ) || is_active_sidebar( 'statichero' ) || is_active_sidebar( 'herocanvas' ) ) : ?>
<div class="wrapper" id="wrapper-hero"> <div class="wrapper" id="wrapper-hero">
<?php get_sidebar( 'hero' ); ?> <?php get_sidebar( 'hero' ); ?>
<?php get_sidebar( 'herocanvas' ); ?>
<?php get_sidebar( 'statichero' ); ?> <?php get_sidebar( 'statichero' ); ?>
</div> </div>

View File

@ -19,16 +19,18 @@ $sidebar_pos = get_theme_mod( 'understrap_sidebar_position' );
$html = ''; $html = '';
if ( 'right' === $sidebar_pos || 'left' === $sidebar_pos ) { if ( 'right' === $sidebar_pos || 'left' === $sidebar_pos ) {
$html = '<div class="'; $html = '<div class="';
if ( is_active_sidebar( 'right-sidebar' ) || is_active_sidebar( 'left-sidebar' ) ) { if ( ( is_active_sidebar( 'right-sidebar' ) && 'right' === $sidebar_pos ) || ( is_active_sidebar( 'left-sidebar' ) && 'left' === $sidebar_pos ) ) {
$html .= 'col-md-8 content-area" id="primary">'; $html .= 'col-md-8 content-area" id="primary">';
} else { } else {
$html .= 'col-md-12 content-area" id="primary">'; $html .= 'col-md-12 content-area" id="primary">';
} }
echo $html; // WPCS: XSS OK. echo $html; // WPCS: XSS OK.
} elseif ( is_active_sidebar( 'right-sidebar' ) && is_active_sidebar( 'left-sidebar' ) ) { } elseif ( 'both' === $sidebar_pos ) {
$html = '<div class="'; $html = '<div class="';
if ( 'both' === $sidebar_pos ) { if ( is_active_sidebar( 'right-sidebar' ) && is_active_sidebar( 'left-sidebar' ) ) {
$html .= 'col-md-6 content-area" id="primary">'; $html .= 'col-md-6 content-area" id="primary">';
} elseif ( is_active_sidebar( 'right-sidebar' ) || is_active_sidebar( 'left-sidebar' ) ) {
$html .= 'col-md-8 content-area" id="primary">';
} else { } else {
$html .= 'col-md-12 content-area" id="primary">'; $html .= 'col-md-12 content-area" id="primary">';
} }
@ -36,4 +38,3 @@ $sidebar_pos = get_theme_mod( 'understrap_sidebar_position' );
} else { } else {
echo '<div class="col-md-12 content-area" id="primary">'; echo '<div class="col-md-12 content-area" id="primary">';
} }

View File

@ -6,6 +6,8 @@
*/ */
?> ?>
</div><!-- #closing the primary container from /global-templates/left-sidebar-check.php -->
<?php $sidebar_pos = get_theme_mod( 'understrap_sidebar_position' ); ?> <?php $sidebar_pos = get_theme_mod( 'understrap_sidebar_position' ); ?>
<?php if ( 'right' === $sidebar_pos || 'both' === $sidebar_pos ) : ?> <?php if ( 'right' === $sidebar_pos || 'both' === $sidebar_pos ) : ?>

View File

@ -32,7 +32,7 @@ $container = get_theme_mod( 'understrap_container_type' );
<a class="skip-link screen-reader-text sr-only" href="#content"><?php esc_html_e( 'Skip to content', 'understrap' ); ?></a> <a class="skip-link screen-reader-text sr-only" href="#content"><?php esc_html_e( 'Skip to content', 'understrap' ); ?></a>
<nav class="navbar navbar-expand-md navbar-dark bg-dark"> <nav class="navbar navbar-expand-md navbar-dark bg-primary">
<?php if ( 'container' == $container ) : ?> <?php if ( 'container' == $container ) : ?>
<div class="container" > <div class="container" >
@ -69,7 +69,8 @@ $container = get_theme_mod( 'understrap_container_type' );
'menu_class' => 'navbar-nav', 'menu_class' => 'navbar-nav',
'fallback_cb' => '', 'fallback_cb' => '',
'menu_id' => 'main-menu', 'menu_id' => 'main-menu',
'walker' => new understrap_WP_Bootstrap_Navwalker(), 'depth' => 2,
'walker' => new Understrap_WP_Bootstrap_Navwalker(),
) )
); ?> ); ?>
<?php if ( 'container' == $container ) : ?> <?php if ( 'container' == $container ) : ?>

View File

@ -1,216 +0,0 @@
<?php
/**
* Adapted from Edward McIntyre's wp_bootstrap_navwalker class.
* Removed support for glyphicon and added support for Font Awesome.
*
* @package understrap
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if (! class_exists ( 'understrap_WP_Bootstrap_Navwalker' )) :
/**
* Class WP_Bootstrap_Navwalker
* GitHub URI: https://github.com/twittem/wp-bootstrap-navwalker
* Description: A custom WordPress nav walker class to implement the Bootstrap 4
* navigation style in a custom theme using the WordPress built in menu manager.
* Version: 2.0.4
* Author: Edward McIntyre - @twittem
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
class understrap_WP_Bootstrap_Navwalker extends Walker_Nav_Menu {
/**
* The starting level of the menu.
*
* @see Walker::start_lvl()
* @since 3.0.0
*
* @param string $output Passed by reference. Used to append additional content.
* @param int $depth Depth of page. Used for padding.
* @param mixed $args Rest of arguments.
*/
public function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat( "\t", $depth );
$output .= "\n$indent<ul class=\" dropdown-menu\" role=\"menu\">\n";
}
/**
* Open element.
*
* @see Walker::start_el()
* @since 3.0.0
*
* @param string $output Passed by reference. Used to append additional content.
* @param object $item Menu item data object.
* @param int $depth Depth of menu item. Used for padding.
* @param mixed $args Rest arguments.
* @param int $id Element's ID.
*/
public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
/**
* Dividers, Headers or Disabled
* =============================
* Determine whether the item is a Divider, Header, Disabled or regular
* menu item. To prevent errors we use the strcasecmp() function to so a
* comparison that is not case sensitive. The strcasecmp() function returns
* a 0 if the strings are equal.
*/
if ( strcasecmp( $item->attr_title, 'divider' ) == 0 && $depth === 1 ) {
$output .= $indent . '<li class="dropdown-divider" role="presentation">';
} else if ( strcasecmp( $item->title, 'divider' ) == 0 && $depth === 1 ) {
$output .= $indent . '<li class="dropdown-divider" role="presentation">';
} else if ( strcasecmp( $item->attr_title, 'dropdown-header' ) == 0 && $depth === 1 ) {
$output .= $indent . '<li class="dropdown-header" role="presentation">' . esc_html( $item->title );
} else if ( strcasecmp( $item->attr_title, 'disabled' ) == 0 ) {
$output .= $indent . '<li class="disabled" role="presentation"><a href="#">' . esc_html( $item->title ) . '</a>';
} else {
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = 'nav-item menu-item-' . $item->ID;
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
/*
if ( $args->has_children )
$class_names .= ' dropdown';
*/
if ( $args->has_children && $depth === 0 ) {
$class_names .= ' dropdown';
} elseif ( $args->has_children && $depth > 0 ) {
$class_names .= ' dropdown-submenu';
}
if ( in_array( 'current-menu-item', $classes ) ) {
$class_names .= ' active';
}
// remove Font Awesome icon from classes array and save the icon
// we will add the icon back in via a <span> below so it aligns with
// the menu item
if ( in_array( 'fa', $classes ) ) {
$key = array_search( 'fa', $classes );
$icon = $classes[ $key + 1 ];
$class_names = str_replace( $classes[ $key + 1 ], '', $class_names );
$class_names = str_replace( $classes[ $key ], '', $class_names );
}
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
$id = apply_filters( 'nav_menu_item_id', 'menu-item-' . $item->ID, $item, $args );
$id = $id ? ' id="' . esc_attr( $id ) . '"' : '';
$output .= $indent . '<li' . $id . $value . $class_names . '>';
$atts = array();
if ( empty( $item->attr_title ) ) { $atts['title'] = ! empty( $item->title ) ? strip_tags( $item->title ) : ''; } else { $atts['title'] = $item->attr_title; }
$atts['target'] = ! empty( $item->target ) ? $item->target : '';
$atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : '';
// If item has_children add atts to a.
if ( $args->has_children && $depth === 0 ) {
$atts['href'] = '#';
$atts['data-toggle'] = 'dropdown';
$atts['class'] = 'nav-link dropdown-toggle';
} else {
$atts['href'] = ! empty( $item->url ) ? $item->url : '';
$atts['class'] = 'nav-link';
}
$atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args );
$attributes = '';
foreach ( $atts as $attr => $value ) {
if ( ! empty( $value ) ) {
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
$attributes .= ' ' . $attr . '="' . $value . '"';
}
}
$item_output = $args->before;
// Font Awesome icons
if ( ! empty( $icon ) ) {
$item_output .= '<a' . $attributes . '><span class="fa ' . esc_attr( $icon ) . '"></span>&nbsp;';
} else {
$item_output .= '<a' . $attributes . '>';
}
$item_output .= $args->link_before . apply_filters( 'the_title', $item->title,
$item->ID ) . $args->link_after;
$item_output .= ( $args->has_children && 0 === $depth ) ? ' <span class="caret"></span></a>' : '</a>';
$item_output .= $args->after;
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
}
/**
* Traverse elements to create list from elements.
*
* Display one element if the element doesn't have any children otherwise,
* display the element and its children. Will only traverse up to the max
* depth and no ignore elements under that depth.
*
* This method shouldn't be called directly, use the walk() method instead.
*
* @see Walker::start_el()
* @since 2.5.0
*
* @param object $element Data object
* @param array $children_elements List of elements to continue traversing.
* @param int $max_depth Max depth to traverse.
* @param int $depth Depth of current element.
* @param array $args
* @param string $output Passed by reference. Used to append additional content.
*
* @return null Null on failure with no changes to parameters.
*/
public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
if ( ! $element ) {
return;
}
$id_field = $this->db_fields['id'];
// Display this element.
if ( is_object( $args[0] ) ) {
$args[0]->has_children = ! empty( $children_elements[ $element->$id_field ] );
}
parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
}
/**
* Menu Fallback
* =============
* If this function is assigned to the wp_nav_menu's fallback_cb variable
* and a manu has not been assigned to the theme location in the WordPress
* menu manager the function with display nothing to a non-logged in user,
* and will add a link to the WordPress menu manager if logged in as an admin.
*
* @param array $args passed from the wp_nav_menu function.
*
*/
public static function fallback( $args ) {
if ( current_user_can( 'manage_options' ) ) {
extract( $args );
$fb_output = null;
if ( $container ) {
$fb_output = '<' . $container;
if ( $container_class ) {
$fb_output .= ' class="' . $container_class . '"';
}
if ( $container_id ) {
$fb_output .= ' id="' . $container_id . '"';
}
$fb_output .= '>';
}
$fb_output .= '<ul';
if ( $menu_class ) {
$fb_output .= ' class="' . $menu_class . '"';
}
if ( $menu_id ) {
$fb_output .= ' id="' . $menu_id . '"';
}
$fb_output .= '>';
$fb_output .= '<li><a href="' . admin_url( 'nav-menus.php' ) . '">Add a menu</a></li>';
$fb_output .= '</ul>';
if ( $container ) {
$fb_output .= '</' . $container . '>';
}
echo $fb_output;
}
}
}
endif; /* End if class exists */

View File

@ -0,0 +1,555 @@
<?php
/**
* WP Bootstrap Navwalker
*
* @package WP-Bootstrap-Navwalker
*/
/*
* Class Name: WP_Bootstrap_Navwalker
* Plugin Name: WP Bootstrap Navwalker
* Plugin URI: https://github.com/wp-bootstrap/wp-bootstrap-navwalker
* Description: A custom WordPress nav walker class to implement the Bootstrap 4 navigation style in a custom theme using the WordPress built in menu manager.
* Author: Edward McIntyre - @twittem, WP Bootstrap, William Patton - @pattonwebz
* Version: 4.1.0
* Author URI: https://github.com/wp-bootstrap
* GitHub Plugin URI: https://github.com/wp-bootstrap/wp-bootstrap-navwalker
* GitHub Branch: master
* License: GPL-3.0+
* License URI: http://www.gnu.org/licenses/gpl-3.0.txt
*/
/* Check if Class Exists. */
if ( ! class_exists( 'Understrap_WP_Bootstrap_Navwalker' ) ) {
/**
* WP_Bootstrap_Navwalker class.
*
* @extends Walker_Nav_Menu
*/
class Understrap_WP_Bootstrap_Navwalker extends Walker_Nav_Menu {
/**
* Starts the list before the elements are added.
*
* @since WP 3.0.0
*
* @see Walker_Nav_Menu::start_lvl()
*
* @param string $output Used to append additional content (passed by reference).
* @param int $depth Depth of menu item. Used for padding.
* @param stdClass $args An object of wp_nav_menu() arguments.
*/
public function start_lvl( &$output, $depth = 0, $args = array() ) {
if ( isset( $args->item_spacing ) && 'discard' === $args->item_spacing ) {
$t = '';
$n = '';
} else {
$t = "\t";
$n = "\n";
}
$indent = str_repeat( $t, $depth );
// Default class to add to the file.
$classes = array( 'dropdown-menu' );
/**
* Filters the CSS class(es) applied to a menu list element.
*
* @since WP 4.8.0
*
* @param array $classes The CSS classes that are applied to the menu `<ul>` element.
* @param stdClass $args An object of `wp_nav_menu()` arguments.
* @param int $depth Depth of menu item. Used for padding.
*/
$class_names = join( ' ', apply_filters( 'nav_menu_submenu_css_class', $classes, $args, $depth ) );
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
/**
* The `.dropdown-menu` container needs to have a labelledby
* attribute which points to it's trigger link.
*
* Form a string for the labelledby attribute from the the latest
* link with an id that was added to the $output.
*/
$labelledby = '';
// find all links with an id in the output.
preg_match_all( '/(<a.*?id=\"|\')(.*?)\"|\'.*?>/im', $output, $matches );
// with pointer at end of array check if we got an ID match.
if ( end( $matches[2] ) ) {
// build a string to use as aria-labelledby.
$labelledby = 'aria-labelledby="' . end( $matches[2] ) . '"';
}
$output .= "{$n}{$indent}<ul$class_names $labelledby role=\"menu\">{$n}";
}
/**
* Starts the element output.
*
* @since WP 3.0.0
* @since WP 4.4.0 The {@see 'nav_menu_item_args'} filter was added.
*
* @see Walker_Nav_Menu::start_el()
*
* @param string $output Used to append additional content (passed by reference).
* @param WP_Post $item Menu item data object.
* @param int $depth Depth of menu item. Used for padding.
* @param stdClass $args An object of wp_nav_menu() arguments.
* @param int $id Current item ID.
*/
public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
if ( isset( $args->item_spacing ) && 'discard' === $args->item_spacing ) {
$t = '';
$n = '';
} else {
$t = "\t";
$n = "\n";
}
$indent = ( $depth ) ? str_repeat( $t, $depth ) : '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
// Initialize some holder variables to store specially handled item
// wrappers and icons.
$linkmod_classes = array();
$icon_classes = array();
/**
* Get an updated $classes array without linkmod or icon classes.
*
* NOTE: linkmod and icon class arrays are passed by reference and
* are maybe modified before being used later in this function.
*/
$classes = self::seporate_linkmods_and_icons_from_classes( $classes, $linkmod_classes, $icon_classes, $depth );
// Join any icon classes plucked from $classes into a string.
$icon_class_string = join( ' ', $icon_classes );
/**
* Filters the arguments for a single nav menu item.
*
* WP 4.4.0
*
* @param stdClass $args An object of wp_nav_menu() arguments.
* @param WP_Post $item Menu item data object.
* @param int $depth Depth of menu item. Used for padding.
*/
$args = apply_filters( 'nav_menu_item_args', $args, $item, $depth );
// Add .dropdown or .active classes where they are needed.
if ( isset( $args->has_children ) && $args->has_children ) {
$classes[] = 'dropdown';
}
if ( in_array( 'current-menu-item', $classes, true ) || in_array( 'current-menu-parent', $classes, true ) ) {
$classes[] = 'active';
}
// Add some additional default classes to the item.
$classes[] = 'menu-item-' . $item->ID;
$classes[] = 'nav-item';
// Allow filtering the classes.
$classes = apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args, $depth );
// Form a string of classes in format: class="class_names".
$class_names = join( ' ', $classes );
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
/**
* Filters the ID applied to a menu item's list item element.
*
* @since WP 3.0.1
* @since WP 4.1.0 The `$depth` parameter was added.
*
* @param string $menu_id The ID that is applied to the menu item's `<li>` element.
* @param WP_Post $item The current menu item.
* @param stdClass $args An object of wp_nav_menu() arguments.
* @param int $depth Depth of menu item. Used for padding.
*/
$id = apply_filters( 'nav_menu_item_id', 'menu-item-' . $item->ID, $item, $args, $depth );
$id = $id ? ' id="' . esc_attr( $id ) . '"' : '';
$output .= $indent . '<li itemscope="itemscope" itemtype="https://www.schema.org/SiteNavigationElement"' . $id . $class_names . '>';
// initialize array for holding the $atts for the link item.
$atts = array();
// Set title from item to the $atts array - if title is empty then
// default to item title.
if ( empty( $item->attr_title ) ) {
$atts['title'] = ! empty( $item->title ) ? strip_tags( $item->title ) : '';
} else {
$atts['title'] = $item->attr_title;
}
$atts['target'] = ! empty( $item->target ) ? $item->target : '';
$atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : '';
// If item has_children add atts to <a>.
if ( isset( $args->has_children ) && $args->has_children && 0 === $depth && $args->depth > 1 ) {
$atts['href'] = '#';
$atts['data-toggle'] = 'dropdown';
$atts['aria-haspopup'] = 'true';
$atts['aria-expanded'] = 'false';
$atts['class'] = 'dropdown-toggle nav-link';
$atts['id'] = 'menu-item-dropdown-' . $item->ID;
} else {
$atts['href'] = ! empty( $item->url ) ? $item->url : '#';
// Items in dropdowns use .dropdown-item instead of .nav-link.
if ( $depth > 0 ) {
$atts['class'] = 'dropdown-item';
} else {
$atts['class'] = 'nav-link';
}
}
// update atts of this item based on any custom linkmod classes.
$atts = self::update_atts_for_linkmod_type( $atts, $linkmod_classes );
// Allow filtering of the $atts array before using it.
$atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args, $depth );
// Build a string of html containing all the atts for the item.
$attributes = '';
foreach ( $atts as $attr => $value ) {
if ( ! empty( $value ) ) {
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
$attributes .= ' ' . $attr . '="' . $value . '"';
}
}
/**
* Set a typeflag to easily test if this is a linkmod or not.
*/
$linkmod_type = self::get_linkmod_type( $linkmod_classes );
/**
* START appending the internal item contents to the output.
*/
$item_output = isset( $args->before ) ? $args->before : '';
/**
* This is the start of the internal nav item. Depending on what
* kind of linkmod we have we may need different wrapper elements.
*/
if ( '' !== $linkmod_type ) {
// is linkmod, output the required element opener.
$item_output .= self::linkmod_element_open( $linkmod_type, $attributes );
} else {
// With no link mod type set this must be a standard <a> tag.
$item_output .= '<a' . $attributes . '>';
}
/**
* Initiate empty icon var, then if we have a string containing any
* icon classes form the icon markup with an <i> element. This is
* output inside of the item before the $title (the link text).
*/
$icon_html = '';
if ( ! empty( $icon_class_string ) ) {
// append an <i> with the icon classes to what is output before links.
$icon_html = '<i class="' . esc_attr( $icon_class_string ) . '" aria-hidden="true"></i> ';
}
/** This filter is documented in wp-includes/post-template.php */
$title = apply_filters( 'the_title', $item->title, $item->ID );
/**
* Filters a menu item's title.
*
* @since WP 4.4.0
*
* @param string $title The menu item's title.
* @param WP_Post $item The current menu item.
* @param stdClass $args An object of wp_nav_menu() arguments.
* @param int $depth Depth of menu item. Used for padding.
*/
$title = apply_filters( 'nav_menu_item_title', $title, $item, $args, $depth );
/**
* If the .sr-only class was set apply to the nav items text only.
*/
if ( in_array( 'sr-only', $linkmod_classes, true ) ) {
$title = self::wrap_for_screen_reader( $title );
$keys_to_unset = array_keys( $linkmod_classes, 'sr-only' );
foreach ( $keys_to_unset as $k ) {
unset( $linkmod_classes[ $k ] );
}
}
// Put the item contents into $output.
$item_output .= isset( $args->link_before ) ? $args->link_before . $icon_html . $title . $args->link_after : '';
/**
* This is the end of the internal nav item. We need to close the
* correct element depending on the type of link or link mod.
*/
if ( '' !== $linkmod_type ) {
// is linkmod, output the required element opener.
$item_output .= self::linkmod_element_close( $linkmod_type, $attributes );
} else {
// With no link mod type set this must be a standard <a> tag.
$item_output .= '</a>';
}
$item_output .= isset( $args->after ) ? $args->after : '';
/**
* END appending the internal item contents to the output.
*/
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
/**
* Traverse elements to create list from elements.
*
* Display one element if the element doesn't have any children otherwise,
* display the element and its children. Will only traverse up to the max
* depth and no ignore elements under that depth. It is possible to set the
* max depth to include all depths, see walk() method.
*
* This method should not be called directly, use the walk() method instead.
*
* @since WP 2.5.0
*
* @see Walker::start_lvl()
*
* @param object $element Data object.
* @param array $children_elements List of elements to continue traversing (passed by reference).
* @param int $max_depth Max depth to traverse.
* @param int $depth Depth of current element.
* @param array $args An array of arguments.
* @param string $output Used to append additional content (passed by reference).
*/
public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
if ( ! $element ) {
return; }
$id_field = $this->db_fields['id'];
// Display this element.
if ( is_object( $args[0] ) ) {
$args[0]->has_children = ! empty( $children_elements[ $element->$id_field ] ); }
parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
}
/**
* Menu Fallback
* =============
* If this function is assigned to the wp_nav_menu's fallback_cb variable
* and a menu has not been assigned to the theme location in the WordPress
* menu manager the function with display nothing to a non-logged in user,
* and will add a link to the WordPress menu manager if logged in as an admin.
*
* @param array $args passed from the wp_nav_menu function.
*/
public static function fallback( $args ) {
if ( current_user_can( 'edit_theme_options' ) ) {
/* Get Arguments. */
$container = $args['container'];
$container_id = $args['container_id'];
$container_class = $args['container_class'];
$menu_class = $args['menu_class'];
$menu_id = $args['menu_id'];
// initialize var to store fallback html.
$fallback_output = '';
if ( $container ) {
$fallback_output .= '<' . esc_attr( $container );
if ( $container_id ) {
$fallback_output .= ' id="' . esc_attr( $container_id ) . '"';
}
if ( $container_class ) {
$fallback_output .= ' class="' . esc_attr( $container_class ) . '"';
}
$fallback_output .= '>';
}
$fallback_output .= '<ul';
if ( $menu_id ) {
$fallback_output .= ' id="' . esc_attr( $menu_id ) . '"'; }
if ( $menu_class ) {
$fallback_output .= ' class="' . esc_attr( $menu_class ) . '"'; }
$fallback_output .= '>';
$fallback_output .= '<li><a href="' . esc_url( admin_url( 'nav-menus.php' ) ) . '" title="' . esc_attr__( 'Add a menu', 'understrap' ) . '">' . esc_html__( 'Add a menu', 'understrap' ) . '</a></li>';
$fallback_output .= '</ul>';
if ( $container ) {
$fallback_output .= '</' . esc_attr( $container ) . '>';
}
// if $args has 'echo' key and it's true echo, otherwise return.
if ( array_key_exists( 'echo', $args ) && $args['echo'] ) {
echo $fallback_output; // WPCS: XSS OK.
} else {
return $fallback_output;
}
}
}
/**
* Find any custom linkmod or icon classes and store in their holder
* arrays then remove them from the main classes array.
*
* Supported linkmods: .disabled, .dropdown-header, .dropdown-divider, .sr-only
* Supported iconsets: Font Awesome 4/5, Glypicons
*
* NOTE: This accepts the linkmod and icon arrays by reference.
*
* @since 4.0.0
*
* @param array $classes an array of classes currently assigned to the item.
* @param array $linkmod_classes an array to hold linkmod classes.
* @param array $icon_classes an array to hold icon classes.
* @param integer $depth an integer holding current depth level.
*
* @return array $classes a maybe modified array of classnames.
*/
private function seporate_linkmods_and_icons_from_classes( $classes, &$linkmod_classes, &$icon_classes, $depth ) {
// Loop through $classes array to find linkmod or icon classes.
foreach ( $classes as $key => $class ) {
// If any special classes are found, store the class in it's
// holder array and and unset the item from $classes.
if ( preg_match( '/^disabled|^sr-only/i', $class ) ) {
// Test for .disabled or .sr-only classes.
$linkmod_classes[] = $class;
unset( $classes[ $key ] );
} elseif ( preg_match( '/^dropdown-header|^dropdown-divider|^dropdown-item-text/i', $class ) && $depth > 0 ) {
// Test for .dropdown-header or .dropdown-divider and a
// depth greater than 0 - IE inside a dropdown.
$linkmod_classes[] = $class;
unset( $classes[ $key ] );
} elseif ( preg_match( '/^fa-(\S*)?|^fa(s|r|l|b)?(\s?)?$/i', $class ) ) {
// Font Awesome.
$icon_classes[] = $class;
unset( $classes[ $key ] );
} elseif ( preg_match( '/^glyphicon-(\S*)?|^glyphicon(\s?)$/i', $class ) ) {
// Glyphicons.
$icon_classes[] = $class;
unset( $classes[ $key ] );
}
}
return $classes;
}
/**
* Return a string containing a linkmod type and update $atts array
* accordingly depending on the decided.
*
* @since 4.0.0
*
* @param array $linkmod_classes array of any link modifier classes.
*
* @return string empty for default, a linkmod type string otherwise.
*/
private function get_linkmod_type( $linkmod_classes = array() ) {
$linkmod_type = '';
// Loop through array of linkmod classes to handle their $atts.
if ( ! empty( $linkmod_classes ) ) {
foreach ( $linkmod_classes as $link_class ) {
if ( ! empty( $link_class ) ) {
// check for special class types and set a flag for them.
if ( 'dropdown-header' === $link_class ) {
$linkmod_type = 'dropdown-header';
} elseif ( 'dropdown-divider' === $link_class ) {
$linkmod_type = 'dropdown-divider';
} elseif ( 'dropdown-item-text' === $link_class ) {
$linkmod_type = 'dropdown-item-text';
}
}
}
}
return $linkmod_type;
}
/**
* Update the attributes of a nav item depending on the limkmod classes.
*
* @since 4.0.0
*
* @param array $atts array of atts for the current link in nav item.
* @param array $linkmod_classes an array of classes that modify link or nav item behaviors or displays.
*
* @return array maybe updated array of attributes for item.
*/
private function update_atts_for_linkmod_type( $atts = array(), $linkmod_classes = array() ) {
if ( ! empty( $linkmod_classes ) ) {
foreach ( $linkmod_classes as $link_class ) {
if ( ! empty( $link_class ) ) {
// update $atts with a space and the extra classname...
// so long as it's not a sr-only class.
if ( 'sr-only' !== $link_class ) {
$atts['class'] .= ' ' . esc_attr( $link_class );
}
// check for special class types we need additional handling for.
if ( 'disabled' === $link_class ) {
// Convert link to '#' and unset open targets.
$atts['href'] = '#';
unset( $atts['target'] );
} elseif ( 'dropdown-header' === $link_class || 'dropdown-divider' === $link_class || 'dropdown-item-text' === $link_class ) {
// Store a type flag and unset href and target.
unset( $atts['href'] );
unset( $atts['target'] );
}
}
}
}
return $atts;
}
/**
* Wraps the passed text in a screen reader only class.
*
* @since 4.0.0
*
* @param string $text the string of text to be wrapped in a screen reader class.
* @return string the string wrapped in a span with the class.
*/
private function wrap_for_screen_reader( $text = '' ) {
if ( $text ) {
$text = '<span class="sr-only">' . $text . '</span>';
}
return $text;
}
/**
* Returns the correct opening element and attributes for a linkmod.
*
* @since 4.0.0
*
* @param string $linkmod_type a sting containing a linkmod type flag.
* @param string $attributes a string of attributes to add to the element.
*
* @return string a string with the openign tag for the element with attribibutes added.
*/
private function linkmod_element_open( $linkmod_type, $attributes = '' ) {
$output = '';
if ( 'dropdown-item-text' === $linkmod_type ) {
$output .= '<span class="dropdown-item-text"' . $attributes . '>';
} elseif ( 'dropdown-header' === $linkmod_type ) {
// For a header use a span with the .h6 class instead of a real
// header tag so that it doesn't confuse screen readers.
$output .= '<span class="dropdown-header h6"' . $attributes . '>';
} elseif ( 'dropdown-divider' === $linkmod_type ) {
// this is a divider.
$output .= '<div class="dropdown-divider"' . $attributes . '>';
}
return $output;
}
/**
* Return the correct closing tag for the linkmod element.
*
* @since 4.0.0
*
* @param string $linkmod_type a string containing a special linkmod type.
*
* @return string a string with the closing tag for this linkmod type.
*/
private function linkmod_element_close( $linkmod_type ) {
$output = '';
if ( 'dropdown-header' === $linkmod_type || 'dropdown-item-text' === $linkmod_type ) {
// For a header use a span with the .h6 class instead of a real
// header tag so that it doesn't confuse screen readers.
$output .= '</span>';
} elseif ( 'dropdown-divider' === $linkmod_type ) {
// this is a divider.
$output .= '</div>';
}
return $output;
}
}
}

View File

@ -23,6 +23,7 @@ if ( ! function_exists( 'understrap_bootstrap_comment_form_fields' ) ) {
$req = get_option( 'require_name_email' ); $req = get_option( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true'" : '' ); $aria_req = ( $req ? " aria-required='true'" : '' );
$html5 = current_theme_supports( 'html5', 'comment-form' ) ? 1 : 0; $html5 = current_theme_supports( 'html5', 'comment-form' ) ? 1 : 0;
$consent = empty( $commenter['comment_author_email'] ) ? '' : ' checked="checked"';
$fields = array( $fields = array(
'author' => '<div class="form-group comment-form-author"><label for="author">' . __( 'Name', 'author' => '<div class="form-group comment-form-author"><label for="author">' . __( 'Name',
'understrap' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . 'understrap' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
@ -33,6 +34,8 @@ if ( ! function_exists( 'understrap_bootstrap_comment_form_fields' ) ) {
'url' => '<div class="form-group comment-form-url"><label for="url">' . __( 'Website', 'url' => '<div class="form-group comment-form-url"><label for="url">' . __( 'Website',
'understrap' ) . '</label> ' . 'understrap' ) . '</label> ' .
'<input class="form-control" id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30"></div>', '<input class="form-control" id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30"></div>',
'cookies' => '<div class="form-group form-check comment-form-cookies-consent"><input class="form-check-input" id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"' . $consent . ' /> ' .
'<label class="form-check-label" for="wp-comment-cookies-consent">' . __( 'Save my name, email, and website in this browser for the next time I comment.' ) . '</label></div>',
); );
return $fields; return $fields;

View File

@ -5,6 +5,9 @@
* @package understrap * @package understrap
*/ */
add_action( 'after_setup_theme', 'understrap_custom_header_setup' );
if ( ! function_exists ( 'understrap_custom_header_setup' ) ) {
function understrap_custom_header_setup() { function understrap_custom_header_setup() {
/** /**
@ -39,4 +42,4 @@ function understrap_custom_header_setup() {
), ),
) ); ) );
} }
add_action( 'after_setup_theme', 'understrap_custom_header_setup' ); }

View File

@ -8,22 +8,30 @@
/** /**
* Registers an editor stylesheet for the theme. * Registers an editor stylesheet for the theme.
*/ */
add_action( 'admin_init', 'understrap_wpdocs_theme_add_editor_styles' );
if ( ! function_exists ( 'understrap_wpdocs_theme_add_editor_styles' ) ) {
function understrap_wpdocs_theme_add_editor_styles() { function understrap_wpdocs_theme_add_editor_styles() {
add_editor_style( 'css/custom-editor-style.min.css' ); add_editor_style( 'css/custom-editor-style.min.css' );
} }
add_action( 'admin_init', 'understrap_wpdocs_theme_add_editor_styles' ); }
// Add TinyMCE style formats. // Add TinyMCE style formats.
add_filter( 'mce_buttons_2', 'understrap_tiny_mce_style_formats' ); add_filter( 'mce_buttons_2', 'understrap_tiny_mce_style_formats' );
if ( ! function_exists ( 'understrap_tiny_mce_style_formats' ) ) {
function understrap_tiny_mce_style_formats( $styles ) { function understrap_tiny_mce_style_formats( $styles ) {
array_unshift( $styles, 'styleselect' ); array_unshift( $styles, 'styleselect' );
return $styles; return $styles;
} }
}
add_filter( 'tiny_mce_before_init', 'understrap_tiny_mce_before_init' ); add_filter( 'tiny_mce_before_init', 'understrap_tiny_mce_before_init' );
if ( ! function_exists ( 'understrap_tiny_mce_before_init' ) ) {
function understrap_tiny_mce_before_init( $settings ) { function understrap_tiny_mce_before_init( $settings ) {
$style_formats = array( $style_formats = array(
@ -63,3 +71,4 @@ function understrap_tiny_mce_before_init( $settings ) {
$settings['style_formats'] = json_encode( $style_formats ); $settings['style_formats'] = json_encode( $style_formats );
return $settings; return $settings;
} }
}

View File

@ -5,17 +5,35 @@
* @package understrap * @package understrap
*/ */
/**
* @param string $filename
* @return string
*/
function asset_path($filename) {
$manifest_path = get_stylesheet_directory_uri() .'/rev-manifest.json';
if ( file_exists($manifest_path ) ) {
$manifest = json_decode( file_get_contents( $manifest_path ), TRUE );
} else {
$manifest = [];
}
if ( array_key_exists( $filename, $manifest ) ) {
return $manifest[$filename];
}
return $filename;
}
if ( ! function_exists( 'understrap_scripts' ) ) { if ( ! function_exists( 'understrap_scripts' ) ) {
/** /**
* Load theme's JavaScript sources. * Load theme's JavaScript and CSS sources.
*/ */
function understrap_scripts() { function understrap_scripts() {
// Get the theme data.
$the_theme = wp_get_theme(); wp_enqueue_style( 'understrap-styles', get_stylesheet_directory_uri() . '/'. asset_path('css/theme.min.css'), array(), null);
wp_enqueue_style( 'understrap-styles', get_stylesheet_directory_uri() . '/css/theme.min.css', array(), $the_theme->get( 'Version' ) );
wp_enqueue_script( 'jquery'); wp_enqueue_script( 'jquery');
wp_enqueue_script( 'popper-scripts', get_template_directory_uri() . '/js/popper.min.js', array(), true); wp_enqueue_script( 'popper-scripts', get_template_directory_uri() . '/js/popper.min.js', array(), false, true);
wp_enqueue_script( 'understrap-scripts', get_template_directory_uri() . '/js/theme.min.js', array(), $the_theme->get( 'Version' ), true );
wp_enqueue_script( 'understrap-scripts', get_template_directory_uri() . '/' . asset_path('js/theme.min.js'), array(), null, true );
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' ); wp_enqueue_script( 'comment-reply' );
} }

View File

@ -7,6 +7,8 @@
* @package understrap * @package understrap
*/ */
add_filter( 'body_class', 'understrap_body_classes' );
if ( ! function_exists( 'understrap_body_classes' ) ) { if ( ! function_exists( 'understrap_body_classes' ) ) {
/** /**
* Adds custom classes to the array of body classes. * Adds custom classes to the array of body classes.
@ -28,7 +30,6 @@ if ( ! function_exists( 'understrap_body_classes' ) ) {
return $classes; return $classes;
} }
} }
add_filter( 'body_class', 'understrap_body_classes' );
// Removes tag class from the body_class array to avoid Bootstrap markup styling issues. // Removes tag class from the body_class array to avoid Bootstrap markup styling issues.
add_filter( 'body_class', 'understrap_adjust_body_class' ); add_filter( 'body_class', 'understrap_adjust_body_class' );
@ -78,8 +79,8 @@ if ( ! function_exists( 'understrap_change_logo_class' ) ) {
/** /**
* Display navigation to next/previous post when applicable. * Display navigation to next/previous post when applicable.
*/ */
if ( ! function_exists( 'understrap_post_nav' ) ) :
if ( ! function_exists ( 'understrap_post_nav' ) ) {
function understrap_post_nav() { function understrap_post_nav() {
// Don't print empty markup if there's nowhere to navigate. // Don't print empty markup if there's nowhere to navigate.
$previous = ( is_attachment() ) ? get_post( get_post()->post_parent ) : get_adjacent_post( false, '', true ); $previous = ( is_attachment() ) ? get_post( get_post()->post_parent ) : get_adjacent_post( false, '', true );
@ -106,4 +107,4 @@ if ( ! function_exists( 'understrap_post_nav' ) ) :
<?php <?php
} }
endif; }

View File

@ -13,6 +13,10 @@
* See: https://jetpack.me/support/infinite-scroll/ * See: https://jetpack.me/support/infinite-scroll/
* See: https://jetpack.me/support/responsive-videos/ * See: https://jetpack.me/support/responsive-videos/
*/ */
add_action( 'after_setup_theme', 'understrap_components_jetpack_setup' );
if ( ! function_exists ( 'understrap_components_jetpack_setup' ) ) {
function understrap_components_jetpack_setup() { function understrap_components_jetpack_setup() {
// Add theme support for Infinite Scroll. // Add theme support for Infinite Scroll.
add_theme_support( 'infinite-scroll', array( add_theme_support( 'infinite-scroll', array(
@ -28,11 +32,14 @@ function understrap_components_jetpack_setup() {
add_theme_support( 'jetpack-social-menu' ); add_theme_support( 'jetpack-social-menu' );
} }
add_action( 'after_setup_theme', 'understrap_components_jetpack_setup' ); }
/** /**
* Custom render function for Infinite Scroll. * Custom render function for Infinite Scroll.
*/ */
if ( ! function_exists ( 'understrap_components_infinite_scroll_render' ) ) {
function understrap_components_infinite_scroll_render() { function understrap_components_infinite_scroll_render() {
while ( have_posts() ) { while ( have_posts() ) {
the_post(); the_post();
@ -43,7 +50,9 @@ function understrap_components_infinite_scroll_render() {
endif; endif;
} }
} }
}
if ( ! function_exists ( 'understrap_components_social_menu' ) ) {
function understrap_components_social_menu() { function understrap_components_social_menu() {
if ( ! function_exists( 'jetpack_social_menu' ) ) { if ( ! function_exists( 'jetpack_social_menu' ) ) {
return; return;
@ -51,3 +60,4 @@ function understrap_components_social_menu() {
jetpack_social_menu(); jetpack_social_menu();
} }
} }
}

View File

@ -5,14 +5,15 @@
* @package understrap * @package understrap
*/ */
if ( ! function_exists( 'understrap_pagination' ) ) : if ( ! function_exists ( 'understrap_pagination' ) ) {
function understrap_pagination($args = [], $class = 'pagination') { function understrap_pagination($args = [], $class = 'pagination') {
if ($GLOBALS['wp_query']->max_num_pages <= 1) return; if ($GLOBALS['wp_query']->max_num_pages <= 1) return;
$args = wp_parse_args( $args, [ $args = wp_parse_args( $args, [
'mid_size' => 2, 'mid_size' => 2,
'prev_next' => false, 'prev_next' => true,
'prev_text' => __('&laquo;', 'understrap'), 'prev_text' => __('&laquo;', 'understrap'),
'next_text' => __('&raquo;', 'understrap'), 'next_text' => __('&raquo;', 'understrap'),
'screen_reader_text' => __('Posts navigation', 'understrap'), 'screen_reader_text' => __('Posts navigation', 'understrap'),
@ -21,38 +22,31 @@
]); ]);
$links = paginate_links($args); $links = paginate_links($args);
$next_link = get_next_posts_page_link();
$prev_link = get_previous_posts_page_link();
?> ?>
<nav aria-label="<?php echo $args['screen_reader_text']; ?>"> <nav aria-label="<?php echo $args['screen_reader_text']; ?>">
<ul class="pagination"> <ul class="pagination">
<li class="page-item">
<a class="page-link" href="<?php echo esc_attr($prev_link); ?>" aria-label="<?php echo __('Previous', 'understrap'); ?>">
<span aria-hidden="true"><?php echo esc_attr($args['prev_text']); ?></span>
<span class="sr-only"><?php echo __('Previous', 'understrap'); ?></span>
</a>
</li>
<?php <?php
$i = 1;
foreach ( $links as $link ) { ?> foreach ( $links as $key => $link ) { ?>
<li class="page-item <?php if ($i == $args['current']) { echo active; }; ?>">
<li class="page-item <?php echo strpos( $link, 'current' ) ? 'active' : '' ?>">
<?php echo str_replace( 'page-numbers', 'page-link', $link ); ?> <?php echo str_replace( 'page-numbers', 'page-link', $link ); ?>
</li> </li>
<?php $i++;} ?> <?php } ?>
<li class="page-item">
<a class="page-link" href="<?php echo esc_attr($next_link); ?>" aria-label="<?php echo __('Next', 'understrap'); ?>">
<span aria-hidden="true"><?php echo esc_attr($args['next_text']); ?></span>
<span class="sr-only"><?php echo __('Next', 'understrap'); ?></span>
</a>
</li>
</ul> </ul>
</nav> </nav>
<?php <?php
} }
endif; }
?> ?>

View File

@ -11,7 +11,9 @@ if ( ! isset( $content_width ) ) {
$content_width = 640; /* pixels */ $content_width = 640; /* pixels */
} }
if ( ! function_exists( 'understrap_setup' ) ) : add_action( 'after_setup_theme', 'understrap_setup' );
if ( ! function_exists ( 'understrap_setup' ) ) {
/** /**
* Sets up theme defaults and registers support for various WordPress features. * Sets up theme defaults and registers support for various WordPress features.
* *
@ -91,8 +93,10 @@ if ( ! function_exists( 'understrap_setup' ) ) :
understrap_setup_theme_default_settings(); understrap_setup_theme_default_settings();
} }
endif; // understrap_setup. }
add_action( 'after_setup_theme', 'understrap_setup' );
add_filter( 'excerpt_more', 'understrap_custom_excerpt_more' );
if ( ! function_exists( 'understrap_custom_excerpt_more' ) ) { if ( ! function_exists( 'understrap_custom_excerpt_more' ) ) {
/** /**
@ -106,7 +110,8 @@ if ( ! function_exists( 'understrap_custom_excerpt_more' ) ) {
return ''; return '';
} }
} }
add_filter( 'excerpt_more', 'understrap_custom_excerpt_more' );
add_filter( 'wp_trim_excerpt', 'understrap_all_excerpts_get_more_link' );
if ( ! function_exists( 'understrap_all_excerpts_get_more_link' ) ) { if ( ! function_exists( 'understrap_all_excerpts_get_more_link' ) ) {
/** /**
@ -122,4 +127,3 @@ if ( ! function_exists( 'understrap_all_excerpts_get_more_link' ) ) {
'understrap' ) . '</a></p>'; 'understrap' ) . '</a></p>';
} }
} }
add_filter( 'wp_trim_excerpt', 'understrap_all_excerpts_get_more_link' );

View File

@ -7,10 +7,11 @@
* @package understrap * @package understrap
*/ */
if ( ! function_exists( 'understrap_posted_on' ) ) :
/** /**
* Prints HTML with meta information for the current post-date/time and author. * Prints HTML with meta information for the current post-date/time and author.
*/ */
if ( ! function_exists ( 'understrap_posted_on' ) ) {
function understrap_posted_on() { function understrap_posted_on() {
$time_string = '<time class="entry-date published updated" datetime="%1$s">%2$s</time>'; $time_string = '<time class="entry-date published updated" datetime="%1$s">%2$s</time>';
if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) { if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) {
@ -32,12 +33,13 @@ function understrap_posted_on() {
); );
echo '<span class="posted-on">' . $posted_on . '</span><span class="byline"> ' . $byline . '</span>'; // WPCS: XSS OK. echo '<span class="posted-on">' . $posted_on . '</span><span class="byline"> ' . $byline . '</span>'; // WPCS: XSS OK.
} }
endif; }
if ( ! function_exists( 'understrap_entry_footer' ) ) :
/** /**
* Prints HTML with meta information for the categories, tags and comments. * Prints HTML with meta information for the categories, tags and comments.
*/ */
if ( ! function_exists ( 'understrap_entry_footer' ) ) {
function understrap_entry_footer() { function understrap_entry_footer() {
// Hide category and tag text for pages. // Hide category and tag text for pages.
if ( 'post' === get_post_type() ) { if ( 'post' === get_post_type() ) {
@ -67,13 +69,15 @@ function understrap_entry_footer() {
'</span>' '</span>'
); );
} }
endif; }
/** /**
* Returns true if a blog has more than 1 category. * Returns true if a blog has more than 1 category.
* *
* @return bool * @return bool
*/ */
if ( ! function_exists ( 'understrap_categorized_blog' ) ) {
function understrap_categorized_blog() { function understrap_categorized_blog() {
if ( false === ( $all_the_cool_cats = get_transient( 'understrap_categories' ) ) ) { if ( false === ( $all_the_cool_cats = get_transient( 'understrap_categories' ) ) ) {
// Create an array of all the categories that are attached to posts. // Create an array of all the categories that are attached to posts.
@ -95,10 +99,16 @@ function understrap_categorized_blog() {
return false; return false;
} }
} }
}
/** /**
* Flush out the transients used in understrap_categorized_blog. * Flush out the transients used in understrap_categorized_blog.
*/ */
add_action( 'edit_category', 'understrap_category_transient_flusher' );
add_action( 'save_post', 'understrap_category_transient_flusher' );
if ( ! function_exists ( 'understrap_category_transient_flusher' ) ) {
function understrap_category_transient_flusher() { function understrap_category_transient_flusher() {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return; return;
@ -106,6 +116,4 @@ function understrap_category_transient_flusher() {
// Like, beat it. Dig? // Like, beat it. Dig?
delete_transient( 'understrap_categories' ); delete_transient( 'understrap_categories' );
} }
add_action( 'edit_category', 'understrap_category_transient_flusher' ); }
add_action( 'save_post', 'understrap_category_transient_flusher' );

View File

@ -6,7 +6,7 @@
* *
*/ */
if ( ! function_exists( 'understrap_setup_theme_default_settings' ) ) : if ( ! function_exists ( 'understrap_setup_theme_default_settings' ) ) {
function understrap_setup_theme_default_settings() { function understrap_setup_theme_default_settings() {
// check if settings are set, if not set defaults. // check if settings are set, if not set defaults.
@ -29,4 +29,4 @@ if ( ! function_exists( 'understrap_setup_theme_default_settings' ) ) :
set_theme_mod( 'understrap_container_type', 'container' ); set_theme_mod( 'understrap_container_type', 'container' );
} }
} }
endif; }

View File

@ -44,6 +44,8 @@ if ( ! function_exists( 'understrap_slbd_count_widgets' ) ) {
} }
} }
add_action( 'widgets_init', 'understrap_widgets_init' );
if ( ! function_exists( 'understrap_widgets_init' ) ) { if ( ! function_exists( 'understrap_widgets_init' ) ) {
/** /**
* Initializes themes widgets. * Initializes themes widgets.
@ -80,9 +82,19 @@ if ( ! function_exists( 'understrap_widgets_init' ) ) {
) ); ) );
register_sidebar( array( register_sidebar( array(
'name' => __( 'Hero Static', 'understrap' ), 'name' => __( 'Hero Canvas', 'understrap' ),
'id' => 'herocanvas',
'description' => 'Full size canvas hero area for Bootstrap and other custom HTML markup',
'before_widget' => '',
'after_widget' => '',
'before_title' => '',
'after_title' => '',
) );
register_sidebar( array(
'name' => __( 'Top Full', 'understrap' ),
'id' => 'statichero', 'id' => 'statichero',
'description' => 'Static Hero widget. no slider functionallity', 'description' => 'Full top widget with dynmic grid',
'before_widget' => '<div id="%1$s" class="static-hero-widget %2$s '. understrap_slbd_count_widgets( 'statichero' ) .'">', 'before_widget' => '<div id="%1$s" class="static-hero-widget %2$s '. understrap_slbd_count_widgets( 'statichero' ) .'">',
'after_widget' => '</div><!-- .static-hero-widget -->', 'after_widget' => '</div><!-- .static-hero-widget -->',
'before_title' => '<h3 class="widget-title">', 'before_title' => '<h3 class="widget-title">',
@ -90,9 +102,9 @@ if ( ! function_exists( 'understrap_widgets_init' ) ) {
) ); ) );
register_sidebar( array( register_sidebar( array(
'name' => __( 'Footer Full', 'understrap' ), 'name' => __( 'Bottom Full', 'understrap' ),
'id' => 'footerfull', 'id' => 'footerfull',
'description' => 'Widget area below main content and above footer', 'description' => 'Full bottom widget with dynmic grid',
'before_widget' => '<div id="%1$s" class="footer-widget %2$s '. understrap_slbd_count_widgets( 'footerfull' ) .'">', 'before_widget' => '<div id="%1$s" class="footer-widget %2$s '. understrap_slbd_count_widgets( 'footerfull' ) .'">',
'after_widget' => '</div><!-- .footer-widget -->', 'after_widget' => '</div><!-- .footer-widget -->',
'before_title' => '<h3 class="widget-title">', 'before_title' => '<h3 class="widget-title">',
@ -101,5 +113,3 @@ if ( ! function_exists( 'understrap_widgets_init' ) ) {
} }
} // endif function_exists( 'understrap_widgets_init' ). } // endif function_exists( 'understrap_widgets_init' ).
add_action( 'widgets_init', 'understrap_widgets_init' );

View File

@ -4,6 +4,8 @@
* *
* @package understrap * @package understrap
*/ */
add_action( 'after_setup_theme', 'understrap_woocommerce_support' ); add_action( 'after_setup_theme', 'understrap_woocommerce_support' );
if ( ! function_exists( 'understrap_woocommerce_support' ) ) { if ( ! function_exists( 'understrap_woocommerce_support' ) ) {
/** /**
@ -22,6 +24,7 @@ if ( ! function_exists( 'understrap_woocommerce_support' ) ) {
} }
} }
/** /**
* First unhook the WooCommerce wrappers * First unhook the WooCommerce wrappers
*/ */
@ -46,7 +49,6 @@ if ( ! function_exists( 'understrap_woocommerce_wrapper_start' ) ) {
if ( ! function_exists( 'understrap_woocommerce_wrapper_end' ) ) { if ( ! function_exists( 'understrap_woocommerce_wrapper_end' ) ) {
function understrap_woocommerce_wrapper_end() { function understrap_woocommerce_wrapper_end() {
echo '</main><!-- #main -->'; echo '</main><!-- #main -->';
echo '</div><!-- #primary -->';
get_template_part( 'global-templates/right-sidebar-check' ); get_template_part( 'global-templates/right-sidebar-check' );
echo '</div><!-- .row -->'; echo '</div><!-- .row -->';
echo '</div><!-- Container end -->'; echo '</div><!-- Container end -->';
@ -54,6 +56,7 @@ function understrap_woocommerce_wrapper_end() {
} }
} }
/** /**
* Filter hook function monkey patching form classes * Filter hook function monkey patching form classes
* Author: Adriano Monecchi http://stackoverflow.com/a/36724593/307826 * Author: Adriano Monecchi http://stackoverflow.com/a/36724593/307826
@ -64,6 +67,7 @@ function understrap_woocommerce_wrapper_end() {
* *
* @return mixed * @return mixed
*/ */
if ( ! function_exists ( 'understrap_wc_form_field_args' ) ) {
function understrap_wc_form_field_args( $args, $key, $value = null ) { function understrap_wc_form_field_args( $args, $key, $value = null ) {
// Start field type switch case. // Start field type switch case.
switch ( $args['type'] ) { switch ( $args['type'] ) {
@ -131,13 +135,17 @@ function understrap_wc_form_field_args( $args, $key, $value = null ) {
} // end switch ($args). } // end switch ($args).
return $args; return $args;
} }
}
/** /**
* Change loop add-to-cart button class to Bootstrap * Change loop add-to-cart button class to Bootstrap
*/ */
add_filter( 'woocommerce_loop_add_to_cart_args', 'understrap_woocommerce_add_to_cart_args', 10, 2 ); add_filter( 'woocommerce_loop_add_to_cart_args', 'understrap_woocommerce_add_to_cart_args', 10, 2 );
if ( ! function_exists ( 'understrap_woocommerce_add_to_cart_args' ) ) {
function understrap_woocommerce_add_to_cart_args( $args, $product ) { function understrap_woocommerce_add_to_cart_args( $args, $product ) {
$args['class'] = str_replace('button','btn btn-outline-primary', 'button'); $args['class'] = str_replace('button','btn btn-outline-primary', 'button');
return $args; return $args;
} }
}

View File

@ -12,6 +12,9 @@
* *
* @global array $themecolors * @global array $themecolors
*/ */
add_action( 'after_setup_theme', 'understrap_wpcom_setup' );
if ( ! function_exists ( 'understrap_wpcom_setup' ) ) {
function understrap_wpcom_setup() { function understrap_wpcom_setup() {
global $themecolors; global $themecolors;
@ -29,12 +32,16 @@ function understrap_wpcom_setup() {
/* Add WP.com print styles */ /* Add WP.com print styles */
add_theme_support( 'print-styles' ); add_theme_support( 'print-styles' );
} }
add_action( 'after_setup_theme', 'understrap_wpcom_setup' ); }
/* /*
* WordPress.com-specific styles * WordPress.com-specific styles
*/ */
add_action( 'wp_enqueue_scripts', 'understrap_wpcom_styles' );
if ( ! function_exists ( 'understrap_wpcom_styles' ) ) {
function understrap_wpcom_styles() { function understrap_wpcom_styles() {
wp_enqueue_style( 'understrap-wpcom', get_template_directory_uri() . '/inc/style-wpcom.css', '20160411' ); wp_enqueue_style( 'understrap-wpcom', get_template_directory_uri() . '/inc/style-wpcom.css', '20160411' );
} }
add_action( 'wp_enqueue_scripts', 'understrap_wpcom_styles' ); }

View File

@ -60,8 +60,6 @@ $container = get_theme_mod( 'understrap_container_type' );
<!-- The pagination component --> <!-- The pagination component -->
<?php understrap_pagination(); ?> <?php understrap_pagination(); ?>
</div><!-- #primary -->
<!-- Do the right sidebar check --> <!-- Do the right sidebar check -->
<?php get_template_part( 'global-templates/right-sidebar-check' ); ?> <?php get_template_part( 'global-templates/right-sidebar-check' ); ?>

View File

@ -1,112 +0,0 @@
/**
* File navigation.js.
*
* Handles toggling the navigation menu for small screens and enables TAB key
* navigation support for dropdown menus.
*/
( function() {
var container, button, menu, links, subMenus, i, len;
container = document.getElementById( 'site-navigation' );
if ( ! container ) {
return;
}
button = container.getElementsByTagName( 'button' )[0];
if ( 'undefined' === typeof button ) {
return;
}
menu = container.getElementsByTagName( 'ul' )[0];
// Hide menu toggle button if menu is empty and return early.
if ( 'undefined' === typeof menu ) {
button.style.display = 'none';
return;
}
menu.setAttribute( 'aria-expanded', 'false' );
if ( -1 === menu.className.indexOf( 'nav-menu' ) ) {
menu.className += ' nav-menu';
}
button.onclick = function() {
if ( -1 !== container.className.indexOf( 'toggled' ) ) {
container.className = container.className.replace( ' toggled', '' );
button.setAttribute( 'aria-expanded', 'false' );
menu.setAttribute( 'aria-expanded', 'false' );
} else {
container.className += ' toggled';
button.setAttribute( 'aria-expanded', 'true' );
menu.setAttribute( 'aria-expanded', 'true' );
}
};
// Get all the link elements within the menu.
links = menu.getElementsByTagName( 'a' );
subMenus = menu.getElementsByTagName( 'ul' );
// Set menu items with submenus to aria-haspopup="true".
for ( i = 0, len = subMenus.length; i < len; i++ ) {
subMenus[i].parentNode.setAttribute( 'aria-haspopup', 'true' );
}
// Each time a menu link is focused or blurred, toggle focus.
for ( i = 0, len = links.length; i < len; i++ ) {
links[i].addEventListener( 'focus', toggleFocus, true );
links[i].addEventListener( 'blur', toggleFocus, true );
}
/**
* Sets or removes .focus class on an element.
*/
function toggleFocus() {
var self = this;
// Move up through the ancestors of the current link until we hit .nav-menu.
while ( -1 === self.className.indexOf( 'nav-menu' ) ) {
// On li elements toggle the class .focus.
if ( 'li' === self.tagName.toLowerCase() ) {
if ( -1 !== self.className.indexOf( 'focus' ) ) {
self.className = self.className.replace( ' focus', '' );
} else {
self.className += ' focus';
}
}
self = self.parentElement;
}
}
/**
* Toggles `focus` class to allow submenu access on tablets.
*/
( function( container ) {
var touchStartFn, i,
parentLink = container.querySelectorAll( '.menu-item-has-children > a, .page_item_has_children > a' );
if ( 'ontouchstart' in window ) {
touchStartFn = function( e ) {
var menuItem = this.parentNode, i;
if ( ! menuItem.classList.contains( 'focus' ) ) {
e.preventDefault();
for ( i = 0; i < menuItem.parentNode.children.length; ++i ) {
if ( menuItem === menuItem.parentNode.children[i] ) {
continue;
}
menuItem.parentNode.children[i].classList.remove( 'focus' );
}
menuItem.classList.add( 'focus' );
} else {
menuItem.classList.remove( 'focus' );
}
};
for ( i = 0; i < parentLink.length; ++i ) {
parentLink[i].addEventListener( 'touchstart', touchStartFn, false );
}
}
}( container ) );
} )();

View File

@ -1,33 +0,0 @@
/**
* File skip-link-focus-fix.js.
*
* Helps with accessibility for keyboard only users.
*
* Learn more: https://git.io/vWdr2
*/
( function() {
var isWebkit = navigator.userAgent.toLowerCase().indexOf( 'webkit' ) > -1,
isOpera = navigator.userAgent.toLowerCase().indexOf( 'opera' ) > -1,
isIe = navigator.userAgent.toLowerCase().indexOf( 'msie' ) > -1;
if ( ( isWebkit || isOpera || isIe ) && document.getElementById && window.addEventListener ) {
window.addEventListener( 'hashchange', function() {
var id = location.hash.substring( 1 ),
element;
if ( ! ( /^[A-z0-9_-]+$/.test( id ) ) ) {
return;
}
element = document.getElementById( id );
if ( element ) {
if ( ! ( /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) ) {
element.tabIndex = -1;
}
element.focus();
}
}, false );
}
})();

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap v4.0.0 (https://getbootstrap.com) * Bootstrap v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
@ -28,22 +28,38 @@ function _createClass(Constructor, protoProps, staticProps) {
return Constructor; return Constructor;
} }
function _extends() { function _defineProperty(obj, key, value) {
_extends = Object.assign || function (target) { if (key in obj) {
for (var i = 1; i < arguments.length; i++) { Object.defineProperty(obj, key, {
var source = arguments[i]; value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
for (var key in source) { return obj;
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
} }
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
} }
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} }
return target; return target;
};
return _extends.apply(this, arguments);
} }
function _inheritsLoose(subClass, superClass) { function _inheritsLoose(subClass, superClass) {
@ -54,7 +70,7 @@ function _inheritsLoose(subClass, superClass) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): util.js * Bootstrap (v4.1.0): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -65,17 +81,18 @@ var Util = function ($$$1) {
* Private TransitionEnd Helpers * Private TransitionEnd Helpers
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var transition = false; var TRANSITION_END = 'transitionend';
var MAX_UID = 1000000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) var MAX_UID = 1000000;
var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
function toType(obj) { function toType(obj) {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
} }
function getSpecialTransitionEndEvent() { function getSpecialTransitionEndEvent() {
return { return {
bindType: transition.end, bindType: TRANSITION_END,
delegateType: transition.end, delegateType: TRANSITION_END,
handle: function handle(event) { handle: function handle(event) {
if ($$$1(event.target).is(this)) { if ($$$1(event.target).is(this)) {
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
@ -86,16 +103,6 @@ var Util = function ($$$1) {
}; };
} }
function transitionEndTest() {
if (typeof window !== 'undefined' && window.QUnit) {
return false;
}
return {
end: 'transitionend'
};
}
function transitionEndEmulator(duration) { function transitionEndEmulator(duration) {
var _this = this; var _this = this;
@ -112,20 +119,9 @@ var Util = function ($$$1) {
} }
function setTransitionEndSupport() { function setTransitionEndSupport() {
transition = transitionEndTest();
$$$1.fn.emulateTransitionEnd = transitionEndEmulator; $$$1.fn.emulateTransitionEnd = transitionEndEmulator;
if (Util.supportsTransitionEnd()) {
$$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
} }
}
function escapeId(selector) {
// We escape IDs in case of special selectors (selector = '#myId:something')
// $.escapeSelector does not exist in jQuery < 3
selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1');
return selector;
}
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Public Util Api * Public Util Api
@ -148,11 +144,6 @@ var Util = function ($$$1) {
if (!selector || selector === '#') { if (!selector || selector === '#') {
selector = element.getAttribute('href') || ''; selector = element.getAttribute('href') || '';
} // If it's an ID
if (selector.charAt(0) === '#') {
selector = escapeId(selector);
} }
try { try {
@ -162,14 +153,32 @@ var Util = function ($$$1) {
return null; return null;
} }
}, },
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
if (!element) {
return 0;
} // Get transition-duration of the element
var transitionDuration = $$$1(element).css('transition-duration');
var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found
if (!floatTransitionDuration) {
return 0;
} // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0];
return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;
},
reflow: function reflow(element) { reflow: function reflow(element) {
return element.offsetHeight; return element.offsetHeight;
}, },
triggerTransitionEnd: function triggerTransitionEnd(element) { triggerTransitionEnd: function triggerTransitionEnd(element) {
$$$1(element).trigger(transition.end); $$$1(element).trigger(TRANSITION_END);
}, },
// TODO: Remove in v5
supportsTransitionEnd: function supportsTransitionEnd() { supportsTransitionEnd: function supportsTransitionEnd() {
return Boolean(transition); return Boolean(TRANSITION_END);
}, },
isElement: function isElement(obj) { isElement: function isElement(obj) {
return (obj[0] || obj).nodeType; return (obj[0] || obj).nodeType;
@ -194,7 +203,7 @@ var Util = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): alert.js * Bootstrap (v4.1.0): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -206,12 +215,11 @@ var Alert = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.alert'; var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var Selector = { var Selector = {
DISMISS: '[data-dismiss="alert"]' DISMISS: '[data-dismiss="alert"]'
}; };
@ -289,15 +297,16 @@ var Alert = function ($$$1) {
$$$1(element).removeClass(ClassName.SHOW); $$$1(element).removeClass(ClassName.SHOW);
if (!Util.supportsTransitionEnd() || !$$$1(element).hasClass(ClassName.FADE)) { if (!$$$1(element).hasClass(ClassName.FADE)) {
this._destroyElement(element); this._destroyElement(element);
return; return;
} }
var transitionDuration = Util.getTransitionDurationFromElement(element);
$$$1(element).one(Util.TRANSITION_END, function (event) { $$$1(element).one(Util.TRANSITION_END, function (event) {
return _this._destroyElement(element, event); return _this._destroyElement(element, event);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
}; };
_proto._destroyElement = function _destroyElement(element) { _proto._destroyElement = function _destroyElement(element) {
@ -337,6 +346,7 @@ var Alert = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Alert; return Alert;
}(); }();
/** /**
@ -366,7 +376,7 @@ var Alert = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): button.js * Bootstrap (v4.1.0): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -378,7 +388,7 @@ var Button = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'button'; var NAME = 'button';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.button'; var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -488,6 +498,7 @@ var Button = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Button; return Button;
}(); }();
/** /**
@ -529,7 +540,7 @@ var Button = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): carousel.js * Bootstrap (v4.1.0): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -541,12 +552,11 @@ var Carousel = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'carousel'; var NAME = 'carousel';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.carousel'; var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 600;
var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
@ -655,7 +665,7 @@ var Carousel = function ($$$1) {
this._isPaused = true; this._isPaused = true;
} }
if ($$$1(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) { if ($$$1(this._element).find(Selector.NEXT_PREV)[0]) {
Util.triggerTransitionEnd(this._element); Util.triggerTransitionEnd(this._element);
this.cycle(true); this.cycle(true);
} }
@ -723,7 +733,7 @@ var Carousel = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -894,11 +904,12 @@ var Carousel = function ($$$1) {
to: nextElementIndex to: nextElementIndex
}); });
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.SLIDE)) { if ($$$1(this._element).hasClass(ClassName.SLIDE)) {
$$$1(nextElement).addClass(orderClassName); $$$1(nextElement).addClass(orderClassName);
Util.reflow(nextElement); Util.reflow(nextElement);
$$$1(activeElement).addClass(directionalClassName); $$$1(activeElement).addClass(directionalClassName);
$$$1(nextElement).addClass(directionalClassName); $$$1(nextElement).addClass(directionalClassName);
var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
$$$1(activeElement).one(Util.TRANSITION_END, function () { $$$1(activeElement).one(Util.TRANSITION_END, function () {
$$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE);
$$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName);
@ -906,7 +917,7 @@ var Carousel = function ($$$1) {
setTimeout(function () { setTimeout(function () {
return $$$1(_this3._element).trigger(slidEvent); return $$$1(_this3._element).trigger(slidEvent);
}, 0); }, 0);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
} else { } else {
$$$1(activeElement).removeClass(ClassName.ACTIVE); $$$1(activeElement).removeClass(ClassName.ACTIVE);
$$$1(nextElement).addClass(ClassName.ACTIVE); $$$1(nextElement).addClass(ClassName.ACTIVE);
@ -924,10 +935,10 @@ var Carousel = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = _extends({}, Default, $$$1(this).data()); var _config = _objectSpread({}, Default, $$$1(this).data());
if (typeof config === 'object') { if (typeof config === 'object') {
_config = _extends({}, _config, config); _config = _objectSpread({}, _config, config);
} }
var action = typeof config === 'string' ? config : _config.slide; var action = typeof config === 'string' ? config : _config.slide;
@ -965,7 +976,8 @@ var Carousel = function ($$$1) {
return; return;
} }
var config = _extends({}, $$$1(target).data(), $$$1(this).data()); var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data());
var slideIndex = this.getAttribute('data-slide-to'); var slideIndex = this.getAttribute('data-slide-to');
if (slideIndex) { if (slideIndex) {
@ -992,6 +1004,7 @@ var Carousel = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Carousel; return Carousel;
}(); }();
/** /**
@ -1028,7 +1041,7 @@ var Carousel = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): collapse.js * Bootstrap (v4.1.0): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1040,12 +1053,11 @@ var Collapse = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'collapse'; var NAME = 'collapse';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.collapse'; var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 600;
var Default = { var Default = {
toggle: true, toggle: true,
parent: '' parent: ''
@ -1187,14 +1199,10 @@ var Collapse = function ($$$1) {
$$$1(_this._element).trigger(Event.SHOWN); $$$1(_this._element).trigger(Event.SHOWN);
}; };
if (!Util.supportsTransitionEnd()) {
complete();
return;
}
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
var scrollSize = "scroll" + capitalizedDimension; var scrollSize = "scroll" + capitalizedDimension;
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
this._element.style[dimension] = this._element[scrollSize] + "px"; this._element.style[dimension] = this._element[scrollSize] + "px";
}; };
@ -1242,13 +1250,8 @@ var Collapse = function ($$$1) {
}; };
this._element.style[dimension] = ''; this._element.style[dimension] = '';
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
if (!Util.supportsTransitionEnd()) { $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
complete();
return;
}
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
}; };
_proto.setTransitioning = function setTransitioning(isTransitioning) { _proto.setTransitioning = function setTransitioning(isTransitioning) {
@ -1266,7 +1269,7 @@ var Collapse = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
config.toggle = Boolean(config.toggle); // Coerce string values config.toggle = Boolean(config.toggle); // Coerce string values
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
@ -1321,7 +1324,7 @@ var Collapse = function ($$$1) {
var $this = $$$1(this); var $this = $$$1(this);
var data = $this.data(DATA_KEY); var data = $this.data(DATA_KEY);
var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config); var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config);
if (!data && _config.toggle && /show|hide/.test(config)) { if (!data && _config.toggle && /show|hide/.test(config)) {
_config.toggle = false; _config.toggle = false;
@ -1353,6 +1356,7 @@ var Collapse = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Collapse; return Collapse;
}(); }();
/** /**
@ -1397,7 +1401,7 @@ var Collapse = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): dropdown.js * Bootstrap (v4.1.0): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1409,7 +1413,7 @@ var Dropdown = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'dropdown'; var NAME = 'dropdown';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.dropdown'; var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1452,7 +1456,7 @@ var Dropdown = function ($$$1) {
FORM_CHILD: '.dropdown form', FORM_CHILD: '.dropdown form',
MENU: '.dropdown-menu', MENU: '.dropdown-menu',
NAVBAR_NAV: '.navbar-nav', NAVBAR_NAV: '.navbar-nav',
VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)' VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
}; };
var AttachmentMap = { var AttachmentMap = {
TOP: 'top-start', TOP: 'top-start',
@ -1467,12 +1471,16 @@ var Dropdown = function ($$$1) {
var Default = { var Default = {
offset: 0, offset: 0,
flip: true, flip: true,
boundary: 'scrollParent' boundary: 'scrollParent',
reference: 'toggle',
display: 'dynamic'
}; };
var DefaultType = { var DefaultType = {
offset: '(number|string|function)', offset: '(number|string|function)',
flip: 'boolean', flip: 'boolean',
boundary: '(string|element)' boundary: '(string|element)',
reference: '(string|element)',
display: 'string'
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
@ -1533,11 +1541,15 @@ var Dropdown = function ($$$1) {
throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
} }
var element = this._element; // For dropup with alignment we use the parent as popper container var referenceElement = this._element;
if ($$$1(parent).hasClass(ClassName.DROPUP)) { if (this._config.reference === 'parent') {
if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) { referenceElement = parent;
element = parent; } else if (Util.isElement(this._config.reference)) {
referenceElement = this._config.reference; // Check if it's jQuery element
if (typeof this._config.reference.jquery !== 'undefined') {
referenceElement = this._config.reference[0];
} }
} // If boundary is not `scrollParent`, then set position to `static` } // If boundary is not `scrollParent`, then set position to `static`
// to allow the menu to "escape" the scroll parent's boundaries // to allow the menu to "escape" the scroll parent's boundaries
@ -1548,7 +1560,7 @@ var Dropdown = function ($$$1) {
$$$1(parent).addClass(ClassName.POSITION_STATIC); $$$1(parent).addClass(ClassName.POSITION_STATIC);
} }
this._popper = new Popper(element, this._menu, this._getPopperConfig()); this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
} // If this is a touch-enabled device we add extra } // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
@ -1556,7 +1568,7 @@ var Dropdown = function ($$$1) {
if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {
$$$1('body').children().on('mouseover', null, $$$1.noop); $$$1(document.body).children().on('mouseover', null, $$$1.noop);
} }
this._element.focus(); this._element.focus();
@ -1601,7 +1613,7 @@ var Dropdown = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, this.constructor.Default, $$$1(this._element).data(), config); config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config);
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
return config; return config;
}; };
@ -1648,7 +1660,7 @@ var Dropdown = function ($$$1) {
if (typeof this._config.offset === 'function') { if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) { offsetConf.fn = function (data) {
data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets) || {}); data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
return data; return data;
}; };
} else { } else {
@ -1665,8 +1677,16 @@ var Dropdown = function ($$$1) {
preventOverflow: { preventOverflow: {
boundariesElement: this._config.boundary boundariesElement: this._config.boundary
} }
} } // Disable Popper.js if we have a static display
}; };
if (this._config.display === 'static') {
popperConfig.modifiers.applyStyle = {
enabled: false
};
}
return popperConfig; return popperConfig;
}; // Static }; // Static
@ -1731,7 +1751,7 @@ var Dropdown = function ($$$1) {
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().off('mouseover', null, $$$1.noop); $$$1(document.body).children().off('mouseover', null, $$$1.noop);
} }
toggles[i].setAttribute('aria-expanded', 'false'); toggles[i].setAttribute('aria-expanded', 'false');
@ -1826,6 +1846,7 @@ var Dropdown = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Dropdown; return Dropdown;
}(); }();
/** /**
@ -1862,7 +1883,7 @@ var Dropdown = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): modal.js * Bootstrap (v4.1.0): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1874,13 +1895,11 @@ var Modal = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'modal'; var NAME = 'modal';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.modal'; var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 300;
var BACKDROP_TRANSITION_DURATION = 150;
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
var Default = { var Default = {
@ -1941,7 +1960,6 @@ var Modal = function ($$$1) {
this._isShown = false; this._isShown = false;
this._isBodyOverflowing = false; this._isBodyOverflowing = false;
this._ignoreBackdropClick = false; this._ignoreBackdropClick = false;
this._originalBodyPadding = 0;
this._scrollbarWidth = 0; this._scrollbarWidth = 0;
} // Getters } // Getters
@ -1960,7 +1978,7 @@ var Modal = function ($$$1) {
return; return;
} }
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { if ($$$1(this._element).hasClass(ClassName.FADE)) {
this._isTransitioning = true; this._isTransitioning = true;
} }
@ -2022,7 +2040,7 @@ var Modal = function ($$$1) {
} }
this._isShown = false; this._isShown = false;
var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); var transition = $$$1(this._element).hasClass(ClassName.FADE);
if (transition) { if (transition) {
this._isTransitioning = true; this._isTransitioning = true;
@ -2038,9 +2056,10 @@ var Modal = function ($$$1) {
$$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS);
if (transition) { if (transition) {
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._element).one(Util.TRANSITION_END, function (event) { $$$1(this._element).one(Util.TRANSITION_END, function (event) {
return _this2._hideModal(event); return _this2._hideModal(event);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
} else { } else {
this._hideModal(); this._hideModal();
} }
@ -2065,7 +2084,7 @@ var Modal = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -2073,7 +2092,7 @@ var Modal = function ($$$1) {
_proto._showElement = function _showElement(relatedTarget) { _proto._showElement = function _showElement(relatedTarget) {
var _this3 = this; var _this3 = this;
var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); var transition = $$$1(this._element).hasClass(ClassName.FADE);
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
// Don't move modal's DOM position // Don't move modal's DOM position
@ -2110,7 +2129,8 @@ var Modal = function ($$$1) {
}; };
if (transition) { if (transition) {
$$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
} else { } else {
transitionComplete(); transitionComplete();
} }
@ -2188,7 +2208,6 @@ var Modal = function ($$$1) {
var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
if (this._isShown && this._config.backdrop) { if (this._isShown && this._config.backdrop) {
var doAnimate = Util.supportsTransitionEnd() && animate;
this._backdrop = document.createElement('div'); this._backdrop = document.createElement('div');
this._backdrop.className = ClassName.BACKDROP; this._backdrop.className = ClassName.BACKDROP;
@ -2214,7 +2233,7 @@ var Modal = function ($$$1) {
} }
}); });
if (doAnimate) { if (animate) {
Util.reflow(this._backdrop); Util.reflow(this._backdrop);
} }
@ -2224,12 +2243,13 @@ var Modal = function ($$$1) {
return; return;
} }
if (!doAnimate) { if (!animate) {
callback(); callback();
return; return;
} }
$$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
$$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
} else if (!this._isShown && this._backdrop) { } else if (!this._isShown && this._backdrop) {
$$$1(this._backdrop).removeClass(ClassName.SHOW); $$$1(this._backdrop).removeClass(ClassName.SHOW);
@ -2241,8 +2261,10 @@ var Modal = function ($$$1) {
} }
}; };
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { if ($$$1(this._element).hasClass(ClassName.FADE)) {
$$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
$$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
} else { } else {
callbackRemove(); callbackRemove();
} }
@ -2304,8 +2326,8 @@ var Modal = function ($$$1) {
}); // Adjust body padding }); // Adjust body padding
var actualPadding = document.body.style.paddingRight; var actualPadding = document.body.style.paddingRight;
var calculatedPadding = $$$1('body').css('padding-right'); var calculatedPadding = $$$1(document.body).css('padding-right');
$$$1('body').data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
} }
}; };
@ -2327,10 +2349,10 @@ var Modal = function ($$$1) {
} }
}); // Restore body padding }); // Restore body padding
var padding = $$$1('body').data('padding-right'); var padding = $$$1(document.body).data('padding-right');
if (typeof padding !== 'undefined') { if (typeof padding !== 'undefined') {
$$$1('body').css('padding-right', padding).removeData('padding-right'); $$$1(document.body).css('padding-right', padding).removeData('padding-right');
} }
}; };
@ -2349,7 +2371,7 @@ var Modal = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = _extends({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config); var _config = _objectSpread({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config);
if (!data) { if (!data) {
data = new Modal(this, _config); data = new Modal(this, _config);
@ -2379,6 +2401,7 @@ var Modal = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Modal; return Modal;
}(); }();
/** /**
@ -2398,7 +2421,7 @@ var Modal = function ($$$1) {
target = $$$1(selector)[0]; target = $$$1(selector)[0];
} }
var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _extends({}, $$$1(target).data(), $$$1(this).data()); var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data());
if (this.tagName === 'A' || this.tagName === 'AREA') { if (this.tagName === 'A' || this.tagName === 'AREA') {
event.preventDefault(); event.preventDefault();
@ -2438,7 +2461,7 @@ var Modal = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): tooltip.js * Bootstrap (v4.1.0): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -2450,11 +2473,10 @@ var Tooltip = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tooltip'; var NAME = 'tooltip';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.tooltip'; var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var CLASS_PREFIX = 'bs-tooltip'; var CLASS_PREFIX = 'bs-tooltip';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var DefaultType = { var DefaultType = {
@ -2700,7 +2722,7 @@ var Tooltip = function ($$$1) {
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().on('mouseover', null, $$$1.noop); $$$1(document.body).children().on('mouseover', null, $$$1.noop);
} }
var complete = function complete() { var complete = function complete() {
@ -2717,8 +2739,9 @@ var Tooltip = function ($$$1) {
} }
}; };
if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { if ($$$1(this.tip).hasClass(ClassName.FADE)) {
$$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
$$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -2761,15 +2784,16 @@ var Tooltip = function ($$$1) {
// empty mouseover listeners we added for iOS support // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().off('mouseover', null, $$$1.noop); $$$1(document.body).children().off('mouseover', null, $$$1.noop);
} }
this._activeTrigger[Trigger.CLICK] = false; this._activeTrigger[Trigger.CLICK] = false;
this._activeTrigger[Trigger.FOCUS] = false; this._activeTrigger[Trigger.FOCUS] = false;
this._activeTrigger[Trigger.HOVER] = false; this._activeTrigger[Trigger.HOVER] = false;
if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { if ($$$1(this.tip).hasClass(ClassName.FADE)) {
$$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(tip);
$$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -2860,7 +2884,7 @@ var Tooltip = function ($$$1) {
}); });
if (this.config.selector) { if (this.config.selector) {
this.config = _extends({}, this.config, { this.config = _objectSpread({}, this.config, {
trigger: 'manual', trigger: 'manual',
selector: '' selector: ''
}); });
@ -2954,7 +2978,7 @@ var Tooltip = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, this.constructor.Default, $$$1(this.element).data(), config); config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), config);
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
config.delay = { config.delay = {
@ -3081,6 +3105,7 @@ var Tooltip = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Tooltip; return Tooltip;
}(); }();
/** /**
@ -3103,7 +3128,7 @@ var Tooltip = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): popover.js * Bootstrap (v4.1.0): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3115,21 +3140,24 @@ var Popover = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'popover'; var NAME = 'popover';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.popover'; var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var CLASS_PREFIX = 'bs-popover'; var CLASS_PREFIX = 'bs-popover';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var Default = _extends({}, Tooltip.Default, {
var Default = _objectSpread({}, Tooltip.Default, {
placement: 'right', placement: 'right',
trigger: 'click', trigger: 'click',
content: '', content: '',
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
}); });
var DefaultType = _extends({}, Tooltip.DefaultType, {
var DefaultType = _objectSpread({}, Tooltip.DefaultType, {
content: '(string|element|function)' content: '(string|element|function)'
}); });
var ClassName = { var ClassName = {
FADE: 'fade', FADE: 'fade',
SHOW: 'show' SHOW: 'show'
@ -3274,6 +3302,7 @@ var Popover = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Popover; return Popover;
}(Tooltip); }(Tooltip);
/** /**
@ -3296,7 +3325,7 @@ var Popover = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): scrollspy.js * Bootstrap (v4.1.0): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3308,7 +3337,7 @@ var ScrollSpy = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'scrollspy'; var NAME = 'scrollspy';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.scrollspy'; var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3435,7 +3464,7 @@ var ScrollSpy = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
if (typeof config.target !== 'string') { if (typeof config.target !== 'string') {
var id = $$$1(config.target).attr('id'); var id = $$$1(config.target).attr('id');
@ -3570,6 +3599,7 @@ var ScrollSpy = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return ScrollSpy; return ScrollSpy;
}(); }();
/** /**
@ -3607,7 +3637,7 @@ var ScrollSpy = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): tab.js * Bootstrap (v4.1.0): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3619,12 +3649,11 @@ var Tab = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tab'; var NAME = 'tab';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.tab'; var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var Event = { var Event = {
HIDE: "hide" + EVENT_KEY, HIDE: "hide" + EVENT_KEY,
HIDDEN: "hidden" + EVENT_KEY, HIDDEN: "hidden" + EVENT_KEY,
@ -3743,14 +3772,15 @@ var Tab = function ($$$1) {
} }
var active = activeElements[0]; var active = activeElements[0];
var isTransitioning = callback && Util.supportsTransitionEnd() && active && $$$1(active).hasClass(ClassName.FADE); var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE);
var complete = function complete() { var complete = function complete() {
return _this2._transitionComplete(element, active, callback); return _this2._transitionComplete(element, active, callback);
}; };
if (active && isTransitioning) { if (active && isTransitioning) {
$$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(active);
$$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -3821,6 +3851,7 @@ var Tab = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Tab; return Tab;
}(); }();
/** /**
@ -3854,7 +3885,7 @@ var Tab = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.6): index.js * Bootstrap (v4.0.0): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3926,3 +3957,4 @@ Object.defineProperty(exports, '__esModule', { value: true });
}, false ); }, false );
} }
})(); })();

2
js/theme.min.js vendored

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -4,21 +4,21 @@ msgstr ""
"Report-Msgid-Bugs-To: http://wordpress.org/support/theme/_s\n" "Report-Msgid-Bugs-To: http://wordpress.org/support/theme/_s\n"
"POT-Creation-Date: 2017-01-06 07:53+0000\n" "POT-Creation-Date: 2017-01-06 07:53+0000\n"
"POT-Revision-Date: Mon Jul 04 2016 09:13:18 GMT+0200 (CEST)\n" "POT-Revision-Date: Mon Jul 04 2016 09:13:18 GMT+0200 (CEST)\n"
"PO-Revision-Date: 2018-03-02 14:13+0100\n" "PO-Revision-Date: 2018-05-16 15:45+0200\n"
"Language-Team: German\n" "Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 2.0.5\n" "X-Generator: Poedit 2.0.7\n"
"X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;" "X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
"__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;" "__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
"_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;" "_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
"esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;" "esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
"esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n" "esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
"X-Poedit-Basepath: ..\n" "X-Poedit-Basepath: ..\n"
"Last-Translator: Thomas A. Reinert | TAR MediaDesign <thomas@tarthemes.com>\n" "Last-Translator: Thomas A. Reinert | TAR MediaDesign <thomas@tarcgn.de>\n"
"Language: de_DE\n" "Language: de_DE\n"
"X-Poedit-SearchPath-0: footer.php\n" "X-Poedit-SearchPath-0: footer.php\n"
"X-Poedit-SearchPath-1: header.php\n" "X-Poedit-SearchPath-1: header.php\n"
@ -164,10 +164,10 @@ msgid ""
"order. You may be charged more than the amount stated above if you fail to " "order. You may be charged more than the amount stated above if you fail to "
"do so." "do so."
msgstr "" msgstr ""
"Da dein Browser keine Javascript unterstützt oder Javascript deaktiviert " "Da dein Browser kein JavaScript unterstützt oder JavaScript deaktiviert ist, "
"ist, stelle bitte sicher, den <em>Aktualisieren</em> Button zu klicken bevor " "stelle bitte sicher, den <em>Aktualisieren</em> Button zu klicken bevor du "
"du deine Bestellung durchführst. Falls du dies vergisst, könnte dir " "deine Bestellung durchführst. Falls du dies vergisst, könnte dir ansonsten "
"ansonsten mehr in Rechnung gestellt werden, als hier angezeigt wird." "mehr in Rechnung gestellt werden, als hier angezeigt wird."
#: woocommerce/checkout/payment.php:43 #: woocommerce/checkout/payment.php:43
msgid "Update totals" msgid "Update totals"
@ -426,7 +426,7 @@ msgstr ""
"vieles mehr, was du für die Erstellung einer einfachen Website benötigst. " "vieles mehr, was du für die Erstellung einer einfachen Website benötigst. "
"WICHTIG: Alle Abhängigkeiten der Entwicklertools sind in diesem Paket nicht " "WICHTIG: Alle Abhängigkeiten der Entwicklertools sind in diesem Paket nicht "
"enthalten! Lade die ZIP-Datei herunter, entpacke sie und führe \"npm install" "enthalten! Lade die ZIP-Datei herunter, entpacke sie und führe \"npm install"
"\" sowie \"gulp copy-assets\" in der Konsole im entpackten understrap-Ordner " "\" sowie \"gulp copy-assets\" in der Konsole im entpackten UnderStrap-Ordner "
"aus." "aus."
#: search.php:29 #: search.php:29
@ -789,7 +789,7 @@ msgstr "http://understrap.com"
#. Author of the theme #. Author of the theme
msgid "Holger Koenemann" msgid "Holger Koenemann"
msgstr "Holger Könemann" msgstr "Holger Koenemann"
#. Author URI of the theme #. Author URI of the theme
msgid "http://www.holgerkoenemann.de" msgid "http://www.holgerkoenemann.de"

BIN
languages/de_DE_formal.mo Normal file

Binary file not shown.

797
languages/de_DE_formal.po Normal file
View File

@ -0,0 +1,797 @@
msgid ""
msgstr ""
"Project-Id-Version: understrap\n"
"Report-Msgid-Bugs-To: http://wordpress.org/support/theme/_s\n"
"POT-Creation-Date: 2017-01-06 07:53+0000\n"
"POT-Revision-Date: Mon Jul 04 2016 09:13:18 GMT+0200 (CEST)\n"
"PO-Revision-Date: 2018-05-16 15:44+0200\n"
"Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 2.0.7\n"
"X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
"__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
"_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
"esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
"esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
"X-Poedit-Basepath: ..\n"
"Last-Translator: Thomas A. Reinert | TAR MediaDesign <thomas@tarcgn.de>\n"
"Language: de_DE\n"
"X-Poedit-SearchPath-0: footer.php\n"
"X-Poedit-SearchPath-1: header.php\n"
"X-Poedit-SearchPath-2: index.php\n"
"X-Poedit-SearchPath-3: statichero.php\n"
"X-Poedit-SearchPath-4: 404.php\n"
"X-Poedit-SearchPath-5: archive.php\n"
"X-Poedit-SearchPath-6: search.php\n"
"X-Poedit-SearchPath-7: sticky.php\n"
"X-Poedit-SearchPath-8: single.php\n"
"X-Poedit-SearchPath-9: sidebar.php\n"
"X-Poedit-SearchPath-10: comment-form.php\n"
"X-Poedit-SearchPath-11: comments.php\n"
"X-Poedit-SearchPath-12: content-none.php\n"
"X-Poedit-SearchPath-13: content-page.php\n"
"X-Poedit-SearchPath-14: content-search.php\n"
"X-Poedit-SearchPath-15: content-single.php\n"
"X-Poedit-SearchPath-16: content.php\n"
"X-Poedit-SearchPath-17: hero.php\n"
"X-Poedit-SearchPath-18: page.php\n"
"X-Poedit-SearchPath-19: functions.php\n"
"X-Poedit-SearchPath-20: page-templates\n"
"X-Poedit-SearchPath-21: inc\n"
#: inc/customizer.php:99
msgid "Choose between Bootstrap's container and container-fluid"
msgstr "Wählen Sie zwischen dem Bootstrap container und container-fluid aus"
#: inc/customizer.php:151
msgid "Choose how to display latest posts"
msgstr "Wählen Sie aus wie die letzten Beiträge angezeigt werden sollen"
#: inc/customizer.php:156
msgid "Default"
msgstr "Standard"
#: inc/customizer.php:157
msgid "Masonry"
msgstr "Masonry (Kachel-Layout)"
#: inc/customizer.php:158
msgid "Grid"
msgstr "Grid (Raster-Layout)"
#: inc/customizer.php:187
msgid "Grid Post Columns"
msgstr "Raster-Spalten"
#: inc/customizer.php:188
msgid "Choose how many columns to use"
msgstr "Wählen Sie aus wie viele Spalten benutzt werden sollen"
#: woocommerce/cart/proceed-to-checkout-button.php:27
msgid "Proceed to Checkout"
msgstr "Weiter zum Bezahlen"
#: woocommerce/cart/mini-cart.php:49 woocommerce/cart/cart.php:60
msgid "Remove this item"
msgstr "Entfernen Sie diesen Artikel"
#: woocommerce/cart/mini-cart.php:72
msgid "No products in the cart."
msgstr "Keine Produkte im Einkaufswagen."
#: woocommerce/cart/mini-cart.php:80
msgid "Subtotal"
msgstr "Zwischensumme"
#: woocommerce/cart/mini-cart.php:85
msgid "View Cart"
msgstr "Einkaufswagen ansehen"
#: woocommerce/cart/mini-cart.php:86
msgid "Checkout"
msgstr "Bezahlen"
#: woocommerce/cart/cart-empty.php:28
msgid "Your cart is currently empty."
msgstr "Der Einkaufswagen ist leer."
#: woocommerce/cart/cart-empty.php:36
msgid "Return To Shop"
msgstr "Zurück zum Shop"
#: woocommerce/cart/cart.php:36 woocommerce/cart/cart.php:79
#: woocommerce/checkout/form-pay.php:29
msgid "Product"
msgstr "Produkt"
#: woocommerce/cart/cart.php:37 woocommerce/cart/cart.php:97
msgid "Price"
msgstr "Preis"
#: woocommerce/cart/cart.php:38 woocommerce/cart/cart.php:103
msgid "Quantity"
msgstr "Menge"
#: woocommerce/cart/cart.php:39 woocommerce/cart/cart.php:120
#: woocommerce/myaccount/my-orders.php:16
msgid "Total"
msgstr "Gesamt"
#: woocommerce/cart/cart.php:92
msgid "Available on backorder"
msgstr "Wird nachbestellt"
#: woocommerce/cart/cart.php:138
msgid "Coupon:"
msgstr "Coupon:"
#: woocommerce/cart/cart.php:138 woocommerce/checkout/form-coupon.php:36
msgid "Coupon code"
msgstr "Coupon-Code"
#: woocommerce/cart/cart.php:138 woocommerce/checkout/form-coupon.php:40
msgid "Apply Coupon"
msgstr "Coupon anwenden"
#: woocommerce/cart/cart.php:144
msgid "Update Cart"
msgstr "Einkaufswagen aktualisieren"
#: woocommerce/checkout/payment.php:35
msgid ""
"Sorry, it seems that there are no available payment methods for your state. "
"Please contact us if you require assistance or wish to make alternate "
"arrangements."
msgstr ""
"Entschuldigen Sie, aber es sieht so aus als ob es keine verfügbaren "
"Zahlungsmethoden für Ihr Land gibt. Bitte kontaktieren Sie uns, falls Sie "
"Hilfe benötigen oder ein alternatives Arrangement mit uns treffen möchten."
#: woocommerce/checkout/payment.php:35
msgid "Please fill in your details above to see available payment methods."
msgstr ""
"Bitte füllen Sie die Details aus, um verfügbare Zahlungsmethoden einsehen zu "
"können."
#: woocommerce/checkout/payment.php:42
msgid ""
"Since your browser does not support JavaScript, or it is disabled, please "
"ensure you click the <em>Update Totals</em> button before placing your "
"order. You may be charged more than the amount stated above if you fail to "
"do so."
msgstr ""
"Da Ihr Browser kein JavaScript unterstützt oder JavaScript deaktiviert ist, "
"stellen Sie bitte sicher, den <em>Aktualisieren</em> Button zu klicken bevor "
"Sie Ihre Bestellung durchführen. Falls Sie dies vergessen, könnte Ihnen "
"ansonsten mehr in Rechnung gestellt werden, als hier angezeigt wird."
#: woocommerce/checkout/payment.php:43
msgid "Update totals"
msgstr "Gesamtbetrag aktualisieren"
#: woocommerce/checkout/form-pay.php:30
msgid "Qty"
msgstr "Menge"
#: woocommerce/checkout/form-pay.php:31
msgid "Totals"
msgstr "Gesamt"
#: woocommerce/checkout/form-pay.php:79
msgid ""
"Sorry, it seems that there are no available payment methods for your "
"location. Please contact us if you require assistance or wish to make "
"alternate arrangements."
msgstr ""
"Entschuldigen Sie, aber es sieht so aus als ob es keine verfügbaren "
"Zahlungsmethoden für Ihren Standort gibt. Bitte kontaktieren Sie uns, falls "
"Sie Hilfe benötigen oder ein alternatives Arrangement mit uns treffen "
"möchten."
#: woocommerce/checkout/form-coupon.php:28
msgid "Have a coupon?"
msgstr "Haben Sie einen Coupon?"
#: woocommerce/checkout/form-coupon.php:28
msgid "Click here to enter your code"
msgstr "Klicken Sie hier um Ihren Code einzugeben"
#: woocommerce/global/form-login.php:35
#: woocommerce/myaccount/form-lost-password.php:30
msgid "Username or email"
msgstr "Benutzername oder E-Mail"
#: woocommerce/global/form-login.php:39 woocommerce/myaccount/form-login.php:48
#: woocommerce/myaccount/form-login.php:98
msgid "Password"
msgstr "Passwort"
#: woocommerce/global/form-login.php:48 woocommerce/myaccount/form-login.php:37
#: woocommerce/myaccount/form-login.php:56
msgid "Login"
msgstr "Benutzername"
#: woocommerce/global/form-login.php:51 woocommerce/myaccount/form-login.php:58
msgid "Remember me"
msgstr "Login speichern"
#: woocommerce/global/form-login.php:55 woocommerce/myaccount/form-login.php:62
msgid "Lost your password?"
msgstr "Passwort vergessen?"
#: woocommerce/global/quantity-input.php:24
msgctxt "Product quantity input tooltip"
msgid "Qty"
msgstr "Menge"
#: woocommerce/myaccount/form-lost-password.php:27
msgid ""
"Lost your password? Please enter your username or email address. You will "
"receive a link to create a new password via email."
msgstr ""
"Passwort vergessen? Bitte geben Sie Ihren Benutzernamen oder E-Mail Adresse "
"ein. Sie werden dann per E-Mail einen Link erhalten mit dem Sie ein neues "
"Passwort vergeben können."
#: woocommerce/myaccount/form-lost-password.php:40
msgid "Reset Password"
msgstr "Passwort zurücksetzen"
#: woocommerce/myaccount/form-login.php:44
msgid "Username or email address"
msgstr "Benutzername oder E-Mail Adresse"
#: woocommerce/myaccount/form-login.php:75
#: woocommerce/myaccount/form-login.php:112
msgid "Register"
msgstr "Registrieren"
#: woocommerce/myaccount/form-login.php:84
msgid "Username"
msgstr "Benutzername"
#: woocommerce/myaccount/form-login.php:91
#: woocommerce/myaccount/form-edit-account.php:40
msgid "Email address"
msgstr "E-Mail Adresse"
#: woocommerce/myaccount/form-login.php:105
msgid "Anti-spam"
msgstr "Spam Schutz"
#: woocommerce/myaccount/form-edit-account.php:30
msgid "First name"
msgstr "Vorname"
#: woocommerce/myaccount/form-edit-account.php:34
msgid "Last name"
msgstr "Nachname"
#: woocommerce/myaccount/form-edit-account.php:45
msgid "Password Change"
msgstr "Passwort ändern"
#: woocommerce/myaccount/form-edit-account.php:48
msgid "Current Password (leave blank to leave unchanged)"
msgstr "Aktuelles Passwort (Leer lassen wenn es nicht geändert werden soll)"
#: woocommerce/myaccount/form-edit-account.php:52
msgid "New Password (leave blank to leave unchanged)"
msgstr "Neues Passwort (Leer lassen wenn es nicht geändert werden soll)"
#: woocommerce/myaccount/form-edit-account.php:56
msgid "Confirm New Password"
msgstr "Neues Passwort bestätigen"
#: woocommerce/myaccount/form-edit-account.php:66
msgid "Save changes"
msgstr "Änderungen speichern"
#: woocommerce/myaccount/my-orders.php:13
msgid "Order"
msgstr "Bestellung"
#: woocommerce/myaccount/my-orders.php:14
msgid "Date"
msgstr "Datum"
#: woocommerce/myaccount/my-orders.php:15
msgid "Status"
msgstr "Status"
#: woocommerce/myaccount/my-orders.php:30
msgid "Recent Orders"
msgstr "Kürzlich bestellt"
#: woocommerce/myaccount/my-orders.php:55 woocommerce/myaccount/orders.php:51
msgctxt "hash before order number"
msgid "#"
msgstr "#"
#: woocommerce/myaccount/my-orders.php:65 woocommerce/myaccount/orders.php:61
#, php-format
msgid "%s for %s item"
msgid_plural "%s for %s items"
msgstr[0] "%s für %s Artikel"
msgstr[1] "%s für %s Artikel"
#: woocommerce/myaccount/my-orders.php:72 woocommerce/myaccount/orders.php:68
msgid "Pay"
msgstr "Bezahlen"
#: woocommerce/myaccount/my-orders.php:76 woocommerce/myaccount/orders.php:72
msgid "View"
msgstr "Ansehen"
#: woocommerce/myaccount/my-orders.php:80 woocommerce/myaccount/orders.php:76
msgid "Cancel"
msgstr "Abbrechen"
#: woocommerce/myaccount/orders.php:107
msgid "Previous"
msgstr "Vorherige"
#: woocommerce/myaccount/orders.php:111
msgid "Next"
msgstr "Nächste"
#: woocommerce/myaccount/orders.php:119 woocommerce/myaccount/downloads.php:98
msgid "Go Shop"
msgstr "In den Shop"
#: woocommerce/myaccount/orders.php:121
msgid "No order has been made yet."
msgstr "Es wurde bisher keine Bestellung vorgenommen."
#: woocommerce/myaccount/form-edit-address.php:23
msgid "Billing Address"
msgstr "Rechnungsadresse"
#: woocommerce/myaccount/form-edit-address.php:23
msgid "Shipping Address"
msgstr "Lieferadresse"
#: woocommerce/myaccount/form-edit-address.php:46
msgid "Save Address"
msgstr "Adresse speichern"
#: woocommerce/myaccount/form-reset-password.php:27
msgid "Enter a new password below."
msgstr "Geben Sie unten ein neues Passwort ein."
#: woocommerce/myaccount/form-reset-password.php:30
msgid "New password"
msgstr "Neues Passwort"
#: woocommerce/myaccount/form-reset-password.php:34
msgid "Re-enter new password"
msgstr "Wiederholen Sie das Passwort"
#: woocommerce/myaccount/form-reset-password.php:47
msgid "Save"
msgstr "Speichern"
#: woocommerce/myaccount/downloads.php:59
msgid "&infin;"
msgstr "&infin;"
#: woocommerce/myaccount/downloads.php:67
msgid "Never"
msgstr "Niemals"
#: woocommerce/myaccount/downloads.php:75
msgid "Download"
msgstr "Download"
#: woocommerce/myaccount/downloads.php:100
msgid "No downloads available yet."
msgstr "Noch keine Downloads verfügbar."
#: woocommerce/single-product/review-rating.php:28
#, php-format
msgid "Rated %d out of 5"
msgstr "Bewertet mit %d von 5"
#: woocommerce/single-product/review-rating.php:29
msgid "out of 5"
msgstr "von 5"
#: woocommerce/single-product/rating.php:36
#, php-format
msgid "Rated %s out of 5"
msgstr "Bewertet mit %s von 5"
#: woocommerce/single-product/rating.php:38
#, php-format
msgid "out of %s5%s"
msgstr "von %s5%s"
#. Description of the theme
msgid ""
"Combination of Automattic´s _s theme and Bootstrap 4. Made as a solid "
"starting point for your next theme project and WordPress website. Use it as "
"starter theme or as a parent theme. It is up to you. Including Font Awesome "
"support, built-in widget slider and much more you need for basic websites. "
"IMPORTANT: All developer dependencies are not bundled with this install "
"file. Just download the .zip, extract it and run \"npm install\" and \"gulp "
"copy-assets\" inside the extracted /understrap folder."
msgstr ""
"Eine Kombination aus Automattic´s _s theme und Bootstrap 4. Konzipiert als "
"solider Ausgangspunkt für Ihr nächstes Theme-Projekt und WordPress Website. "
"Nutzen Sie es als eigenes Starter-Theme oder als Parent-Theme. Beides steht "
"Ihnen frei. Beinhaltet FontAwesome Unterstützung, integrierten Widget-Slider "
"und vieles mehr, was du für die Erstellung einer einfachen Website "
"benötigst. WICHTIG: Alle Abhängigkeiten der Entwicklertools sind in diesem "
"Paket nicht enthalten! Laden Sie die ZIP-Datei herunter, entpacken Sie sie "
"und führen Sie \"npm install\" sowie \"gulp copy-assets\" in der Konsole im "
"entpackten UnderStrap-Ordner aus."
#: search.php:29
#, php-format
msgid "Search Results for: %s"
msgstr "Suchergebnisse für: %s"
#: header.php:34
msgid "Skip to content"
msgstr "Zum Inhalt springen"
#: 404.php:24
msgid "Oops! That page can&rsquo;t be found."
msgstr "Oooops! Diese Seite konnte nicht gefunden werden."
#: 404.php:31
msgid ""
"It looks like nothing was found at this location. Maybe try one of the links "
"below or a search?"
msgstr ""
"Es scheint dass hier nichts gefunden wurde. Vielleicht sollten Sie einen der "
"Links unten oder die Suche verwenden?"
#: 404.php:42
msgid "Most Used Categories"
msgstr "Meistgenutzte Kategorien"
#. translators: %1$s: smiley
#: 404.php:62
#, php-format
msgid "Try looking in the monthly archives. %1$s"
msgstr "Versuchen Sie es einmal im monatlichen Archiv. %1$s"
#: author.php:34
msgid "About:"
msgstr "Über:"
#: author.php:42 inc/custom-comments.php:30
msgid "Website"
msgstr "Webseite"
#: author.php:49
msgid "Profile"
msgstr "Profil"
#: author.php:54
msgid "Posts by"
msgstr "Artikel von"
#: author.php:68
msgid "in"
msgstr "in"
#: comments.php:28
#, php-format
msgctxt "comments title"
msgid "One thought on &ldquo;%2$s&rdquo;"
msgid_plural "%1$s thoughts on &ldquo;%2$s&rdquo;"
msgstr[0] "Ein Gedanke zu &ldquo;%2$s&rdquo;"
msgstr[1] "%1$s Gedanken zu &ldquo;%2$s&rdquo;"
#: comments.php:36 comments.php:59
msgid "Comment navigation"
msgstr "Kommentarnavigation"
#: comments.php:38 comments.php:61
msgid "&larr; Older Comments"
msgstr "&larr; Ältere Kommentare"
#: comments.php:42 comments.php:65
msgid "Newer Comments &rarr;"
msgstr "Neuere Kommentare &rarr;"
#: comments.php:78
msgid "Comments are closed."
msgstr "Kommentare sind geschlossen."
#: footer.php:27
msgid "http://wordpress.org/"
msgstr "http://wordpress.org/"
#: footer.php:28
#, php-format
msgid "Proudly powered by %s"
msgstr "Stolz angetrieben durch %s"
#: footer.php:31
#, php-format
msgid "Theme: %1$s by %2$s."
msgstr "Theme: %1$s von %2$s."
#: footer.php:33
#, php-format
msgid "Version: %1$s"
msgstr "Version: %1$s"
#: searchform.php:10 searchform.php:16
msgid "Search"
msgstr "Suche"
#: searchform.php:13
msgid "Search &hellip;"
msgstr "Suche &hellip;"
#: loop-templates/content-card.php:43 loop-templates/content-page.php:25
#: loop-templates/content.php:37 loop-templates/content-single.php:31
#: loop-templates/content-verticalpage.php:28
msgid "Pages:"
msgstr "Seiten:"
#: loop-templates/content-page.php:34
#: loop-templates/content-verticalpage.php:37
msgid "Edit"
msgstr "Editieren"
#: loop-templates/content-none.php:15
msgid "Nothing Found"
msgstr "Nichts gefunden"
#: loop-templates/content-none.php:23
#, php-format
msgid ""
"Ready to publish your first post? <a href=\"%1$s\">Get started here</a>."
msgstr ""
"Bereit Ihren ersten Artikel zu veröffentlichen? <a href=\"%1$s\">Dann fangen "
"Sie hier an</a>."
#: loop-templates/content-none.php:28
msgid ""
"Sorry, but nothing matched your search terms. Please try again with some "
"different keywords."
msgstr ""
"Entschuldigung, aber leider wurde nichts zu Ihrem Suchbegriff gefunden. "
"Versuchen Sie es erneut mit einem anderen Suchbegriff."
#: loop-templates/content-none.php:34
msgid ""
"It seems we can&rsquo;t find what you&rsquo;re looking for. Perhaps "
"searching can help."
msgstr ""
"Leider konnten wir nicht das finden wonach Sie gesucht haben. Vielleicht "
"kann Ihnen die Suche helfen."
#. Name of the template
msgid "Blank Page Template"
msgstr "Komplett leere Seiten-Vorlage"
#. Name of the template
msgid "Left and Right Sidebar Layout"
msgstr "Linke und rechte Seitenspalte"
#. Name of the template
msgid "Empty Page Template"
msgstr "Leere Seiten-Vorlage"
#. Name of the template
msgid "Full Width Page"
msgstr "Seite mit voller Breite"
#. Name of the template
msgid "Left Sidebar Layout"
msgstr "Layout mit linker Seitenleiste"
#. Name of the template
msgid "Vertical One Page"
msgstr "Vertikales \"One Pager\" Layout"
#: inc/template-tags.php:18
#, php-format
msgid " Edited %4$s"
msgstr " Bearbeitet %4$s"
#: inc/template-tags.php:29
#, php-format
msgctxt "post date"
msgid "Posted on %s"
msgstr "Veröffentlicht am %s"
#: inc/template-tags.php:34
#, php-format
msgctxt "post author"
msgid "by %s"
msgstr "von %s"
#. translators: used between list items, there is a space after the comma
#: inc/template-tags.php:51 inc/template-tags.php:57
msgid ", "
msgstr ", "
#: inc/template-tags.php:53
#, php-format
msgid "Posted in %1$s"
msgstr "Veröffentlicht in %1$s"
#: inc/template-tags.php:59
#, php-format
msgid "Tagged %1$s"
msgstr "Verschlagwortet mit %1$s"
#: inc/template-tags.php:65
msgid "Leave a comment"
msgstr "Kommentar hinterlassen"
#: inc/template-tags.php:65
msgid "1 Comment"
msgstr "1 Kommentar"
#: inc/template-tags.php:65
msgid "% Comments"
msgstr "% Kommentare"
#. translators: %s: Name of current post
#: inc/template-tags.php:72
#, php-format
msgid "Edit %s"
msgstr "Editieren Sie %s"
#: inc/template-tags.php:143
msgid "Post navigation"
msgstr "Beitrags-Navigation"
#: inc/template-tags.php:148
msgctxt "Previous post link"
msgid "<i class=\"fa fa-angle-left\"></i>&nbsp;%title"
msgstr "<i class=\"fa fa-angle-left\"></i>&nbsp;%title"
#: inc/template-tags.php:151
msgctxt "Next post link"
msgid "%title&nbsp;<i class=\"fa fa-angle-right\"></i>"
msgstr "%title&nbsp;<i class=\"fa fa-angle-right\"></i>"
#: inc/setup.php:51
msgid "Primary Menu"
msgstr "Hauptmenü"
#: inc/setup.php:122
msgid "Read More..."
msgstr "Weiterlesen..."
#: inc/widgets.php:14
msgid "Right Sidebar"
msgstr "Rechte Seitenleiste"
#: inc/widgets.php:24
msgid "Left Sidebar"
msgstr "Linke Seitenleiste"
#: inc/widgets.php:34
msgid "Hero Slider"
msgstr "\"Bühnen\"-Slider"
#: inc/widgets.php:44
msgid "Hero Static"
msgstr "Statische \"Bühne\""
#: inc/widgets.php:54
msgid "Footer Full"
msgstr "Fußbereich"
#: inc/custom-comments.php:24
msgid "Name"
msgstr "Name"
#: inc/custom-comments.php:27
msgid "Email"
msgstr "E-Mail"
#: inc/custom-comments.php:49
msgctxt "noun"
msgid "Comment"
msgstr "Kommentare"
#: inc/customizer.php:36
msgid "Slider Settings"
msgstr "Slider-Einstellungen"
#: inc/customizer.php:45
msgid "Number of slides displaying at once"
msgstr "Anzahl der Slides die auf einmal angezeigt werden"
#: inc/customizer.php:57
msgid "Slider Time (in ms)"
msgstr "Zeit von Slide zu Slide (in ms)"
#: inc/customizer.php:69
msgid "Loop Slider Content"
msgstr "Soll der Slider von vorne anfangen?"
#: inc/customizer.php:81
msgid "Theme Layout Settings"
msgstr "Theme Layout Einstellungen"
#: inc/customizer.php:83
msgid "Container width and sidebar defaults"
msgstr "Container-Breite und Seitenleisten-Einstellungen"
#: inc/customizer.php:98
msgid "Container Width"
msgstr "Container-Breite"
#: inc/customizer.php:104
msgid "Fixed width container"
msgstr "Container mit fester Breite"
#: inc/customizer.php:105
msgid "Full width container"
msgstr "Container mit voller Seitenbreite"
#: inc/customizer.php:122
msgid "Sidebar Positioning"
msgstr "Seitenleisten-Positionierung"
#: inc/customizer.php:123
msgid "Set sidebar's position. Can either be: right, left, both or none"
msgstr ""
"Stelle die Standard-Position der Seitenleiste ein. Zur Auswahl stehen: "
"Rechts, links, beide oder keine."
#: inc/customizer.php:129
msgid "Right sidebar"
msgstr "Rechte Seitenleiste"
#: inc/customizer.php:130
msgid "Left sidebar"
msgstr "Linke Seitenleiste"
#: inc/customizer.php:131
msgid "Left & Right sidebars"
msgstr "Linke und rechte Seitenleiste"
#: inc/customizer.php:132
msgid "No sidebar"
msgstr "Keine Seitenleiste"
#: inc/customizer.php:150
msgid "Posts Index Style"
msgstr "Layout der Beiträge auf der Startseite"
#: woocommerce/single-product/rating.php:39
#, php-format
msgid "based on %s customer rating"
msgid_plural "based on %s customer ratings"
msgstr[0] "basierend auf %s Kundenbewertungen"
msgstr[1] "basierend auf %s Kundenbewertungen"
#: woocommerce/single-product/rating.php:42
#, php-format
msgid "%s customer review"
msgid_plural "%s customer reviews"
msgstr[0] "%s Kundenbewertung"
msgstr[1] "%s Kunden Bewertungen"
#. Name of the theme
msgid "UnderStrap"
msgstr "UnderStrap"
#. Theme URI of the theme
msgid "http://understrap.com"
msgstr "http://understrap.com"
#. Author of the theme
msgid "Holger Koenemann"
msgstr "Holger Koenemann"
#. Author URI of the theme
msgid "http://www.holgerkoenemann.de"
msgstr "http://www.holgerkoenemann.de"

BIN
languages/ja_JP.mo Normal file

Binary file not shown.

784
languages/ja_JP.po Normal file
View File

@ -0,0 +1,784 @@
msgid ""
msgstr ""
"Project-Id-Version: understrap\n"
"Report-Msgid-Bugs-To: http://wordpress.org/support/theme/_s\n"
"POT-Creation-Date: 2016-12-20 05:10+0000\n"
"POT-Revision-Date: Mon Jul 04 2016 09:13:18 GMT+0200 (CEST)\n"
"PO-Revision-Date: 2018-05-22 18:29+0900\n"
"Language-Team: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 2.0.7\n"
"X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
"__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
"_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
"esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
"esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
"X-Poedit-Basepath: ..\n"
"Last-Translator: \n"
"Language: ja_JP\n"
"X-Poedit-SearchPath-0: footer.php\n"
"X-Poedit-SearchPath-1: header.php\n"
"X-Poedit-SearchPath-2: index.php\n"
"X-Poedit-SearchPath-3: statichero.php\n"
"X-Poedit-SearchPath-4: 404.php\n"
"X-Poedit-SearchPath-5: archive.php\n"
"X-Poedit-SearchPath-6: search.php\n"
"X-Poedit-SearchPath-7: sticky.php\n"
"X-Poedit-SearchPath-8: single.php\n"
"X-Poedit-SearchPath-9: sidebar.php\n"
"X-Poedit-SearchPath-10: comment-form.php\n"
"X-Poedit-SearchPath-11: comments.php\n"
"X-Poedit-SearchPath-12: content-none.php\n"
"X-Poedit-SearchPath-13: content-page.php\n"
"X-Poedit-SearchPath-14: content-search.php\n"
"X-Poedit-SearchPath-15: content-single.php\n"
"X-Poedit-SearchPath-16: content.php\n"
"X-Poedit-SearchPath-17: hero.php\n"
"X-Poedit-SearchPath-18: page.php\n"
"X-Poedit-SearchPath-19: functions.php\n"
"X-Poedit-SearchPath-20: page-templates\n"
"X-Poedit-SearchPath-21: inc\n"
#: search.php:29
#, php-format
msgid "Search Results for: %s"
msgstr "検索結果: %s"
#: header.php:34
msgid "Skip to content"
msgstr "コンテンツへスキップ"
#: 404.php:24
msgid "Oops! That page can&rsquo;t be found."
msgstr "おっと!このページは見つかりませんでした。"
#: 404.php:31
msgid ""
"It looks like nothing was found at this location. Maybe try one of the links "
"below or a search?"
msgstr ""
"この場所では何も見つかりませんでした。下のリンクや検索を試してみますか?"
#: 404.php:42
msgid "Most Used Categories"
msgstr "よく使われるカテゴリー"
#. translators: %1$s: smiley
#: 404.php:62
#, php-format
msgid "Try looking in the monthly archives. %1$s"
msgstr "月々のアーカイブを見てみます。 %1$s"
#: author.php:34
msgid "About:"
msgstr "About:"
#: author.php:42 inc/custom-comments.php:30
msgid "Website"
msgstr "Webサイト"
#: author.php:49
msgid "Profile"
msgstr "プロフィール"
#: author.php:54
msgid "Posts by"
msgstr "投稿者"
#: author.php:68
msgid "in"
msgstr "に"
#: comments.php:28
#, php-format
msgctxt "comments title"
msgid "One thought on &ldquo;%2$s&rdquo;"
msgid_plural "%1$s thoughts on &ldquo;%2$s&rdquo;"
msgstr[0] "&ldquo;%2$s&rdquo; へ%1$s件のコメント"
#: comments.php:36 comments.php:59
msgid "Comment navigation"
msgstr "コメントナビゲーション"
#: comments.php:38 comments.php:61
msgid "&larr; Older Comments"
msgstr "&larr; 古いコメント"
#: comments.php:42 comments.php:65
msgid "Newer Comments &rarr;"
msgstr "新しいコメント &rarr;"
#: comments.php:78
msgid "Comments are closed."
msgstr "コメントは閉じられました。"
#: footer.php:27
msgid "http://wordpress.org/"
msgstr "http://wordpress.org/"
#: footer.php:28
#, php-format
msgid "Proudly powered by %s"
msgstr "Proudly powered by %s"
#: footer.php:31
#, php-format
msgid "Theme: %1$s by %2$s."
msgstr "テーマ: %1$s は %2$s によって作られました."
#: footer.php:33
#, php-format
msgid "Version: %1$s"
msgstr "バージョン: %1$s"
#: searchform.php:10 searchform.php:16
msgid "Search"
msgstr "検索"
#: searchform.php:13
msgid "Search &hellip;"
msgstr "検索&hellip;"
#: loop-templates/content-card.php:43 loop-templates/content-page.php:25
#: loop-templates/content.php:37 loop-templates/content-single.php:31
#: loop-templates/content-verticalpage.php:28
msgid "Pages:"
msgstr "ページ:"
#: loop-templates/content-page.php:34
#: loop-templates/content-verticalpage.php:37
msgid "Edit"
msgstr "編集"
#: loop-templates/content-none.php:15
msgid "Nothing Found"
msgstr "何も見つかりませんでした"
#: loop-templates/content-none.php:23
#, php-format
msgid ""
"Ready to publish your first post? <a href=\"%1$s\">Get started here</a>."
msgstr ""
"あなたの最初の投稿を公開する準備ができましたか?<a href=\"%1$s\">ここから始め"
"ます</a>。"
#: loop-templates/content-none.php:28
msgid ""
"Sorry, but nothing matched your search terms. Please try again with some "
"different keywords."
msgstr ""
"申し訳ありません。あなたの検索条件に一致するものがありませんでした。異なる"
"キーワードで試してみてください。"
#: loop-templates/content-none.php:34
msgid ""
"It seems we can&rsquo;t find what you&rsquo;re looking for. Perhaps "
"searching can help."
msgstr "お探しのコンテンツは見つかりませんでした。検索をお試しください。"
#. Name of the template
msgid "Blank Page Template"
msgstr "空ページのテンプレート"
#. Name of the template
msgid "Left and Right Sidebar Layout"
msgstr "左右のサイドバーのレイアウト"
#. Name of the template
msgid "Empty Page Template"
msgstr "空ページのテンプレート"
#. Name of the template
msgid "Full Width Page"
msgstr "全幅ページ"
#. Name of the template
msgid "Left Sidebar Layout"
msgstr "左スライダーのレイアウト"
#. Name of the template
msgid "Vertical One Page"
msgstr "縦1ページ"
# Source text begins with a space.
#: inc/template-tags.php:18
#, php-format
msgid " Edited %4$s"
msgstr " %4$sを編集しました"
#: inc/template-tags.php:29
#, php-format
msgctxt "post date"
msgid "Posted on %s"
msgstr "投稿日時: %s"
#: inc/template-tags.php:34
#, php-format
msgctxt "post author"
msgid "by %s"
msgstr "投稿者: %s"
#. translators: used between list items, there is a space after the comma
#: inc/template-tags.php:51 inc/template-tags.php:57
msgid ", "
msgstr "、 "
#: inc/template-tags.php:53
#, php-format
msgid "Posted in %1$s"
msgstr "%1$s への投稿"
#: inc/template-tags.php:59
#, php-format
msgid "Tagged %1$s"
msgstr "タグ %1$s"
#: inc/template-tags.php:65
msgid "Leave a comment"
msgstr "コメントを残す"
#: inc/template-tags.php:65
msgid "1 Comment"
msgstr "1件のコメント"
# Are you mistaking the formatter?
#: inc/template-tags.php:65
msgid "% Comments"
msgstr "% 件のコメント"
#. translators: %s: Name of current post
#: inc/template-tags.php:72
#, php-format
msgid "Edit %s"
msgstr "%s を編集する"
#: inc/template-tags.php:143
msgid "Post navigation"
msgstr "投稿ナビゲーション"
#: inc/template-tags.php:148
msgctxt "Previous post link"
msgid "<i class=\"fa fa-angle-left\"></i>&nbsp;%title"
msgstr "<i class=\"fa fa-angle-left\"></i>&nbsp;%title"
#: inc/template-tags.php:151
msgctxt "Next post link"
msgid "%title&nbsp;<i class=\"fa fa-angle-right\"></i>"
msgstr "%title&nbsp;<i class=\"fa fa-angle-right\"></i>"
#: inc/setup.php:51
msgid "Primary Menu"
msgstr "メインメニュー"
#: inc/setup.php:122
msgid "Read More..."
msgstr "続きを読む..."
#: inc/widgets.php:14
msgid "Right Sidebar"
msgstr "右サイドバー"
#: inc/widgets.php:24
msgid "Left Sidebar"
msgstr "左サイドバー"
#: inc/widgets.php:34
msgid "Hero Slider"
msgstr "ヒーロースライダー"
#: inc/widgets.php:44
msgid "Hero Static"
msgstr "静的ヒーロー"
#: inc/widgets.php:54
msgid "Footer Full"
msgstr "全幅フッター"
#: inc/custom-comments.php:24
msgid "Name"
msgstr "名前"
#: inc/custom-comments.php:27
msgid "Email"
msgstr "メールアドレス"
#: inc/custom-comments.php:49
msgctxt "noun"
msgid "Comment"
msgstr "コメント"
#: inc/customizer.php:36
msgid "Slider Settings"
msgstr "スライダー設定"
#: inc/customizer.php:45
msgid "Number of slides displaying at once"
msgstr "一度に表示されるスライドの和"
#: inc/customizer.php:57
msgid "Slider Time (in ms)"
msgstr "スライダー時間(ミリ秒)"
#: inc/customizer.php:69
msgid "Loop Slider Content"
msgstr "ループするスライダーのコンテント"
#: inc/customizer.php:81
msgid "Theme Layout Settings"
msgstr "テーマのレイアウト設定"
#: inc/customizer.php:83
msgid "Container width and sidebar defaults"
msgstr "コンテナの幅とサイドバーのデフォルト"
#: inc/customizer.php:98
msgid "Container Width"
msgstr "コンテナーの幅"
#: inc/customizer.php:99
msgid "Choose between Bootstrap's container and container-fluid"
msgstr "Bootstrapの固定幅コンテナと全幅コンテナを選択してください"
#: inc/customizer.php:104
msgid "Fixed width container"
msgstr "固定幅コンテナ"
#: inc/customizer.php:105
msgid "Full width container"
msgstr "全幅コンテナ"
#: inc/customizer.php:122
msgid "Sidebar Positioning"
msgstr "サイドバーポジショニング"
#: inc/customizer.php:123
msgid "Set sidebar's position. Can either be: right, left, both or none"
msgstr "サイドバーの位置。次のいずれかを選択できます: right、left、both、none"
#: inc/customizer.php:129
msgid "Right sidebar"
msgstr "右サイドバー"
#: inc/customizer.php:130
msgid "Left sidebar"
msgstr "左サイドバー"
#: inc/customizer.php:131
msgid "Left & Right sidebars"
msgstr "左右サイドバー"
#: inc/customizer.php:132
msgid "No sidebar"
msgstr "サイドバーなし"
#: inc/customizer.php:150
msgid "Posts Index Style"
msgstr "投稿インデックススタイル"
#: inc/customizer.php:151
msgid "Choose how to display latest posts"
msgstr "最新の投稿をどのように表示するか選択する"
#: inc/customizer.php:156
msgid "Default"
msgstr "デフォルト"
#: inc/customizer.php:157
msgid "Masonry"
msgstr "Masonry"
#: inc/customizer.php:158
msgid "Grid"
msgstr "グリッド"
#: inc/customizer.php:187
msgid "Grid Post Columns"
msgstr "グリッド投稿列"
#: inc/customizer.php:188
msgid "Choose how many columns to use"
msgstr "使用する列の数を選択する"
#: woocommerce/cart/proceed-to-checkout-button.php:27
msgid "Proceed to Checkout"
msgstr "チェックアウトに進む"
#: woocommerce/cart/mini-cart.php:49 woocommerce/cart/cart.php:60
msgid "Remove this item"
msgstr "このアイテムを削除する"
#: woocommerce/cart/mini-cart.php:72
msgid "No products in the cart."
msgstr "カートに商品がありません。"
#: woocommerce/cart/mini-cart.php:80
msgid "Subtotal"
msgstr "小計"
#: woocommerce/cart/mini-cart.php:85
msgid "View Cart"
msgstr "カートを見る"
#: woocommerce/cart/mini-cart.php:86
msgid "Checkout"
msgstr "チェックアウト"
#: woocommerce/cart/cart-empty.php:28
msgid "Your cart is currently empty."
msgstr "カートに商品がありません。"
#: woocommerce/cart/cart-empty.php:36
msgid "Return To Shop"
msgstr "ショップへ戻る"
#: woocommerce/cart/cart.php:36 woocommerce/cart/cart.php:79
#: woocommerce/checkout/form-pay.php:29
msgid "Product"
msgstr "商品"
#: woocommerce/cart/cart.php:37 woocommerce/cart/cart.php:97
msgid "Price"
msgstr "価格"
#: woocommerce/cart/cart.php:38 woocommerce/cart/cart.php:103
msgid "Quantity"
msgstr "数量"
#: woocommerce/cart/cart.php:39 woocommerce/cart/cart.php:120
#: woocommerce/myaccount/my-orders.php:16
msgid "Total"
msgstr "合計"
#: woocommerce/cart/cart.php:92
msgid "Available on backorder"
msgstr "バックオーダーで利用可能"
#: woocommerce/cart/cart.php:138
msgid "Coupon:"
msgstr "クーポン:"
#: woocommerce/cart/cart.php:138 woocommerce/checkout/form-coupon.php:36
msgid "Coupon code"
msgstr "クーポンのコード"
#: woocommerce/cart/cart.php:138 woocommerce/checkout/form-coupon.php:40
msgid "Apply Coupon"
msgstr "クーポンを適用する"
#: woocommerce/cart/cart.php:144
msgid "Update Cart"
msgstr "カートを更新"
#: woocommerce/checkout/payment.php:35
msgid ""
"Sorry, it seems that there are no available payment methods for your state. "
"Please contact us if you require assistance or wish to make alternate "
"arrangements."
msgstr ""
"申し訳ありません。あなたの国に利用可能な支払い方法がないようです。援助が必要"
"な場合や代替案をご希望の場合は、私達までご連絡ください。"
#: woocommerce/checkout/payment.php:35
msgid "Please fill in your details above to see available payment methods."
msgstr ""
"ご利用可能なお支払い方法を参照するために、ご自身の住所などを入力してください."
#: woocommerce/checkout/payment.php:42
msgid ""
"Since your browser does not support JavaScript, or it is disabled, please "
"ensure you click the <em>Update Totals</em> button before placing your "
"order. You may be charged more than the amount stated above if you fail to "
"do so."
msgstr ""
"ブラウザがJavaScriptをサポートしていないか、無効になっているため、注文する前"
"に<em>合計を更新</em>ボタンをクリックしてください。 上記の金額を超えて請求さ"
"れる場合があります。"
#: woocommerce/checkout/payment.php:43
msgid "Update totals"
msgstr "合計を更新する"
#: woocommerce/checkout/form-pay.php:30
msgid "Qty"
msgstr "数量"
#: woocommerce/checkout/form-pay.php:31
msgid "Totals"
msgstr "合計"
#: woocommerce/checkout/form-pay.php:79
msgid ""
"Sorry, it seems that there are no available payment methods for your "
"location. Please contact us if you require assistance or wish to make "
"alternate arrangements."
msgstr ""
"申し訳ありませんがあなたの居住地で利用可能なお支払い方法がないようです。あな"
"たがヘルプを必要とするか、または代替の手段を試したい場合は、運営管理にお問い"
"合わせください。"
#: woocommerce/checkout/form-coupon.php:28
msgid "Have a coupon?"
msgstr "クーポンをお持ちですか?"
#: woocommerce/checkout/form-coupon.php:28
msgid "Click here to enter your code"
msgstr "こちらをクリックしてコードを入力します"
#: woocommerce/global/form-login.php:35
#: woocommerce/myaccount/form-lost-password.php:30
msgid "Username or email"
msgstr "ユーザー名またはメールアドレス"
#: woocommerce/global/form-login.php:39 woocommerce/myaccount/form-login.php:48
#: woocommerce/myaccount/form-login.php:98
msgid "Password"
msgstr "パスワード"
#: woocommerce/global/form-login.php:48 woocommerce/myaccount/form-login.php:37
#: woocommerce/myaccount/form-login.php:56
msgid "Login"
msgstr "ログイン"
#: woocommerce/global/form-login.php:51 woocommerce/myaccount/form-login.php:58
msgid "Remember me"
msgstr "ログイン状態を保存する"
#: woocommerce/global/form-login.php:55 woocommerce/myaccount/form-login.php:62
msgid "Lost your password?"
msgstr "パスワードを忘れましたか?"
#: woocommerce/global/quantity-input.php:24
msgctxt "Product quantity input tooltip"
msgid "Qty"
msgstr "数量"
#: woocommerce/myaccount/form-lost-password.php:27
msgid ""
"Lost your password? Please enter your username or email address. You will "
"receive a link to create a new password via email."
msgstr ""
"パスワードを忘れましたか?あなたのユーザー名またはメールアドレスを入力してく"
"ださい。電子メールで新しいパスワードを作成するためのリンクが表示されます。"
#: woocommerce/myaccount/form-lost-password.php:40
msgid "Reset Password"
msgstr "パスワードをリセットする"
#: woocommerce/myaccount/form-login.php:44
msgid "Username or email address"
msgstr "ユーザー名またはメールアドレス"
#: woocommerce/myaccount/form-login.php:75
#: woocommerce/myaccount/form-login.php:112
msgid "Register"
msgstr "登録"
#: woocommerce/myaccount/form-login.php:84
msgid "Username"
msgstr "ユーザー名"
#: woocommerce/myaccount/form-login.php:91
#: woocommerce/myaccount/form-edit-account.php:40
msgid "Email address"
msgstr "メールアドレス"
#: woocommerce/myaccount/form-login.php:105
msgid "Anti-spam"
msgstr "アンチスパム"
#: woocommerce/myaccount/form-edit-account.php:30
msgid "First name"
msgstr "名前"
#: woocommerce/myaccount/form-edit-account.php:34
msgid "Last name"
msgstr "苗字"
#: woocommerce/myaccount/form-edit-account.php:45
msgid "Password Change"
msgstr "パスワードを変更する"
#: woocommerce/myaccount/form-edit-account.php:48
msgid "Current Password (leave blank to leave unchanged)"
msgstr "現在のパスワード(空白のまま変更しない)"
#: woocommerce/myaccount/form-edit-account.php:52
msgid "New Password (leave blank to leave unchanged)"
msgstr "新しいパスワード(空白のまま変更しない)"
#: woocommerce/myaccount/form-edit-account.php:56
msgid "Confirm New Password"
msgstr "新しいパスワードを確認する"
#: woocommerce/myaccount/form-edit-account.php:66
msgid "Save changes"
msgstr "変更を保存"
#: woocommerce/myaccount/my-orders.php:13
msgid "Order"
msgstr "注文"
#: woocommerce/myaccount/my-orders.php:14
msgid "Date"
msgstr "日付"
#: woocommerce/myaccount/my-orders.php:15
msgid "Status"
msgstr "状態"
#: woocommerce/myaccount/my-orders.php:30
msgid "Recent Orders"
msgstr "最近の注文"
#: woocommerce/myaccount/my-orders.php:55 woocommerce/myaccount/orders.php:51
msgctxt "hash before order number"
msgid "#"
msgstr "#"
#: woocommerce/myaccount/my-orders.php:65 woocommerce/myaccount/orders.php:61
#, php-format
msgid "%s for %s item"
msgid_plural "%s for %s items"
msgstr[0] "%s のうちの %s のアイテム"
#: woocommerce/myaccount/my-orders.php:72 woocommerce/myaccount/orders.php:68
msgid "Pay"
msgstr "支払い"
#: woocommerce/myaccount/my-orders.php:76 woocommerce/myaccount/orders.php:72
msgid "View"
msgstr "表示"
#: woocommerce/myaccount/my-orders.php:80 woocommerce/myaccount/orders.php:76
msgid "Cancel"
msgstr "キャンセル"
#: woocommerce/myaccount/orders.php:107
msgid "Previous"
msgstr "前"
#: woocommerce/myaccount/orders.php:111
msgid "Next"
msgstr "次"
#: woocommerce/myaccount/orders.php:119 woocommerce/myaccount/downloads.php:98
msgid "Go Shop"
msgstr "ショップへ行く"
#: woocommerce/myaccount/orders.php:121
msgid "No order has been made yet."
msgstr "まだ注文はありません。"
#: woocommerce/myaccount/form-edit-address.php:23
msgid "Billing Address"
msgstr "請求先住所"
#: woocommerce/myaccount/form-edit-address.php:23
msgid "Shipping Address"
msgstr "お届け先の住所"
#: woocommerce/myaccount/form-edit-address.php:46
msgid "Save Address"
msgstr "アドレスを保存する"
#: woocommerce/myaccount/form-reset-password.php:27
msgid "Enter a new password below."
msgstr "以下に新しいパスワードを入力してください。"
#: woocommerce/myaccount/form-reset-password.php:30
msgid "New password"
msgstr "新しいパスワード"
#: woocommerce/myaccount/form-reset-password.php:34
msgid "Re-enter new password"
msgstr "新しいパスワードの再入力"
#: woocommerce/myaccount/form-reset-password.php:47
msgid "Save"
msgstr "保存"
#: woocommerce/myaccount/downloads.php:59
msgid "&infin;"
msgstr "&infin;"
#: woocommerce/myaccount/downloads.php:67
msgid "Never"
msgstr "決して"
#: woocommerce/myaccount/downloads.php:75
msgid "Download"
msgstr "ダウンロード"
#: woocommerce/myaccount/downloads.php:100
msgid "No downloads available yet."
msgstr "利用可能なダウンロードはまだありません。"
#: woocommerce/single-product/review-rating.php:28
#, php-format
msgid "Rated %d out of 5"
msgstr "評価 %d/5"
#: woocommerce/single-product/review-rating.php:29
msgid "out of 5"
msgstr "5点満点中"
#: woocommerce/single-product/rating.php:36
#, php-format
msgid "Rated %s out of 5"
msgstr "5点満点中の%s"
#: woocommerce/single-product/rating.php:38
#, php-format
msgid "out of %s5%s"
msgstr "%s5%s点中の"
#: woocommerce/single-product/rating.php:39
#, php-format
msgid "based on %s customer rating"
msgid_plural "based on %s customer ratings"
msgstr[0] "%s の顧客評価に基づく"
#: woocommerce/single-product/rating.php:42
#, php-format
msgid "%s customer review"
msgid_plural "%s customer reviews"
msgstr[0] "%s 件のカスタマーレビュー"
#. Name of the theme
msgid "UnderStrap"
msgstr "UnderStrap"
#. Description of the theme
msgid ""
"Combination of Automattic´s _s theme and Bootstrap 4. Made as a solid "
"starting point for your next theme project and WordPress website. Use it as "
"starter theme or as a parent theme. It is up to you. Including Font Awesome "
"support, built-in widget slider and much more you need for basic websites. "
"IMPORTANT: All developer dependencies are not bundled with this install "
"file. Just download the .zip, extract it and run \"npm install\" and \"gulp "
"copy-assets\" inside the extracted /understrap folder."
msgstr ""
"AutomatticのテーマとBootstrap 4のコンビネーション。あなたの次のテーマプロジェ"
"クトとWordPressのウェブサイトの堅実な出発点として作られています。スターター"
"テーマまたは親テーマとして使用します。それはあなた次第です。Font Awesomeのサ"
"ポート、組み込みのウィジェットスライダーなど、基本的なWebサイトにはるかに必要"
"なものが含まれています。 *重要*: すべての開発者の依存関係は、このインストール"
"ファイルにバンドルされていません。zipファイルをダウンロードして展開し、展開さ"
"れたunderstrapフォルダの中で「npm install」と「gulp copy-assets」を実行するだ"
"けです。"
#. Theme URI of the theme
msgid "http://understrap.com"
msgstr "http://understrap.com"
#. Author of the theme
msgid "Holger Koenemann"
msgstr "ホルガー・ケーネマン"
#. Author URI of the theme
msgid "http://www.holgerkoenemann.de"
msgstr "http://www.holgerkoenemann.de"

BIN
languages/pl_PL.mo Normal file

Binary file not shown.

799
languages/pl_PL.po Normal file
View File

@ -0,0 +1,799 @@
msgid ""
msgstr ""
"Project-Id-Version: understrap\n"
"Report-Msgid-Bugs-To: http://wordpress.org/support/theme/_s\n"
"POT-Creation-Date: 2016-12-20 05:10+0000\n"
"POT-Revision-Date: Mon Jul 04 2016 09:13:18 GMT+0200 (CEST)\n"
"PO-Revision-Date: 2018-04-02 19:11+0100\n"
"Last-Translator: Mirosław Zalewski <mz@miroslaw-zalewski.eu>\n"
"Language-Team: Polish\n"
"Language: pl_PL\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10"
" || n%100>=20) ? 1 : 2);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Lokalize 2.0\n"
"X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;__:"
"1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;_x:1"
",2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;esc_attr__:1;e"
"sc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;esc_html_x:1,2c;comments"
"_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-SearchPath-0: footer.php\n"
"X-Poedit-SearchPath-1: header.php\n"
"X-Poedit-SearchPath-2: index.php\n"
"X-Poedit-SearchPath-3: statichero.php\n"
"X-Poedit-SearchPath-4: 404.php\n"
"X-Poedit-SearchPath-5: archive.php\n"
"X-Poedit-SearchPath-6: search.php\n"
"X-Poedit-SearchPath-7: sticky.php\n"
"X-Poedit-SearchPath-8: single.php\n"
"X-Poedit-SearchPath-9: sidebar.php\n"
"X-Poedit-SearchPath-10: comment-form.php\n"
"X-Poedit-SearchPath-11: comments.php\n"
"X-Poedit-SearchPath-12: content-none.php\n"
"X-Poedit-SearchPath-13: content-page.php\n"
"X-Poedit-SearchPath-14: content-search.php\n"
"X-Poedit-SearchPath-15: content-single.php\n"
"X-Poedit-SearchPath-16: content.php\n"
"X-Poedit-SearchPath-17: hero.php\n"
"X-Poedit-SearchPath-18: page.php\n"
"X-Poedit-SearchPath-19: functions.php\n"
"X-Poedit-SearchPath-20: page-templates\n"
#: search.php:29
#, php-format
msgid "Search Results for: %s"
msgstr "Wyniki wyszukiwania dla frazy: %s"
#: header.php:34
msgid "Skip to content"
msgstr "Przejdź do treści"
#: 404.php:24
msgid "Oops! That page can&rsquo;t be found."
msgstr "Ups! Strona nie została znaleziona."
#: 404.php:31
msgid ""
"It looks like nothing was found at this location. Maybe try one of the links "
"below or a search?"
msgstr ""
"Wygląda na to, że nic tutaj nie znaleziono. Może spróbuj wyszukiwania lub"
"kliknij jeden z odnośników poniżej?"
#: 404.php:42
msgid "Most Used Categories"
msgstr "Najczęściej używane kategorie"
#. translators: %1$s: smiley
#: 404.php:62
#, php-format
msgid "Try looking in the monthly archives. %1$s"
msgstr "Sprawdź w archiwum %1$s"
#: author.php:34
msgid "About:"
msgstr "Autor:"
#: author.php:42 inc/custom-comments.php:30
msgid "Website"
msgstr "Strona internetowa"
#: author.php:49
msgid "Profile"
msgstr "O autorze"
#: author.php:54
msgid "Posts by"
msgstr "Artykuły"
#: author.php:68
msgid "in"
msgstr "w"
#: comments.php:28
#, php-format
msgctxt "comments title"
msgid "One thought on &ldquo;%2$s&rdquo;"
msgid_plural "%1$s thoughts on &ldquo;%2$s&rdquo;"
msgstr[0] "Jedna opinia na temat „%2$s”"
msgstr[1] "%1$s opinie na temat „%2$s”"
msgstr[2] "%1$s opinii na temat „%2$s”"
#: comments.php:36 comments.php:59
msgid "Comment navigation"
msgstr "Nawigacja po komentarzach"
#: comments.php:38 comments.php:61
msgid "&larr; Older Comments"
msgstr "&larr; Starsze komentarze"
#: comments.php:42 comments.php:65
msgid "Newer Comments &rarr;"
msgstr "Nowsze komentarze &rarr;"
#: comments.php:78
msgid "Comments are closed."
msgstr "Komentarze są zamknięte"
#: footer.php:27
msgid "http://wordpress.org/"
msgstr "http://wordpress.org/"
#: footer.php:28
#, php-format
msgid "Proudly powered by %s"
msgstr "Dumnie wspierany przez %s"
#: footer.php:31
#, php-format
msgid "Theme: %1$s by %2$s."
msgstr "Motyw: %1$s od %2$s."
#: footer.php:33
#, php-format
msgid "Version: %1$s"
msgstr "Wersja: %1$s"
#: searchform.php:10 searchform.php:16
msgid "Search"
msgstr "Szukaj"
#: searchform.php:13
msgid "Search &hellip;"
msgstr "Szukaj &hellip;"
#: loop-templates/content-card.php:43 loop-templates/content-page.php:25
#: loop-templates/content.php:37 loop-templates/content-single.php:31
#: loop-templates/content-verticalpage.php:28
msgid "Pages:"
msgstr "Strony:"
#: loop-templates/content-page.php:34
#: loop-templates/content-verticalpage.php:37
msgid "Edit"
msgstr "Edytuj"
#: loop-templates/content-none.php:15
msgid "Nothing Found"
msgstr "Nic nie znaleziono"
#: loop-templates/content-none.php:23
#, php-format
msgid ""
"Ready to publish your first post? <a href=\"%1$s\">Get started here</a>."
msgstr ""
"Gotów do opublikowania pierwszego postu? <a href=\"%1$s\">Zacznij tutaj</a>."
#: loop-templates/content-none.php:28
msgid ""
"Sorry, but nothing matched your search terms. Please try again with some "
"different keywords."
msgstr ""
"Niestety, nie znaleziono niczego, co pasowałoby do Twoich kryteriów "
"wyszukiwania. Spróbuj ponownie używając innych słów kluczowych."
#: loop-templates/content-none.php:34
msgid ""
"It seems we can&rsquo;t find what you&rsquo;re looking for. Perhaps "
"searching can help."
msgstr ""
"Wygląda na to, że nie mogliśmy znaleźć tej strony. Może skorzystaj z"
" wyszukiwarki?"
#. Name of the template
msgid "Blank Page Template"
msgstr "Czysta strona"
#. Name of the template
msgid "Left and Right Sidebar Layout"
msgstr "Lewy i prawy panel boczny"
#. Name of the template
msgid "Empty Page Template"
msgstr "Pusta strona"
#. Name of the template
msgid "Full Width Page"
msgstr "Pełna szerokość"
#. Name of the template
msgid "Left Sidebar Layout"
msgstr "Lewy panel boczny"
#. Name of the template
msgid "Vertical One Page"
msgstr ""
#: inc/template-tags.php:18
#, php-format
msgid " Edited %4$s"
msgstr " Zmiana %4$s"
#: inc/template-tags.php:29
#, php-format
msgctxt "post date"
msgid "Posted on %s"
msgstr "Opublikowano"
#: inc/template-tags.php:34
#, php-format
msgctxt "post author"
msgid "by %s"
msgstr "przez"
#. translators: used between list items, there is a space after the comma
#: inc/template-tags.php:51 inc/template-tags.php:57
msgid ", "
msgstr ","
#: inc/template-tags.php:53
#, php-format
msgid "Posted in %1$s"
msgstr "Opublikowano w %1$s"
#: inc/template-tags.php:59
#, php-format
msgid "Tagged %1$s"
msgstr "Tagi: %1$s"
#: inc/template-tags.php:65
msgid "Leave a comment"
msgstr "Napisz komentarz"
#: inc/template-tags.php:65
msgid "1 Comment"
msgstr "Komentarzy: 1"
#: inc/template-tags.php:65
msgid "% Comments"
msgstr "Komentarzy: %"
#. translators: %s: Name of current post
#: inc/template-tags.php:72
#, php-format
msgid "Edit %s"
msgstr "Edytuj %s"
#: inc/template-tags.php:143
msgid "Post navigation"
msgstr "Nawigacja po artykułach"
#: inc/template-tags.php:148
msgctxt "Previous post link"
msgid "<i class=\"fa fa-angle-left\"></i>&nbsp;%title"
msgstr "<i class=\"fa fa-angle-left\"></i>&nbsp;%title"
#: inc/template-tags.php:151
msgctxt "Next post link"
msgid "%title&nbsp;<i class=\"fa fa-angle-right\"></i>"
msgstr "%title&nbsp;<i class=\"fa fa-angle-right\"></i>"
#: inc/setup.php:51
msgid "Primary Menu"
msgstr "Menu główne"
#: inc/setup.php:122
msgid "Read More..."
msgstr "Czytaj dalej…"
#: inc/widgets.php:14
msgid "Right Sidebar"
msgstr "Prawy panel boczny"
#: inc/widgets.php:24
msgid "Left Sidebar"
msgstr "Lewy panel boczny"
#: inc/widgets.php:34
msgid "Hero Slider"
msgstr "Slider Hero"
#: inc/widgets.php:44
msgid "Hero Static"
msgstr "Nieruchomy Hero"
#: inc/widgets.php:54
msgid "Footer Full"
msgstr "Pełna stopka"
#: inc/custom-comments.php:24
msgid "Name"
msgstr "Imię"
#: inc/custom-comments.php:27
msgid "Email"
msgstr "Email"
#: inc/custom-comments.php:49
msgctxt "noun"
msgid "Comment"
msgstr "Komentarz"
#: inc/customizer.php:36
msgid "Slider Settings"
msgstr "Ustawienia slidera"
#: inc/customizer.php:45
msgid "Number of slides displaying at once"
msgstr "Liczba jednocześnie wyświetlanych slajdów"
#: inc/customizer.php:57
msgid "Slider Time (in ms)"
msgstr "Długość wyświetlania slajdu (w ms)"
#: inc/customizer.php:69
msgid "Loop Slider Content"
msgstr "Zapętlenie"
#: inc/customizer.php:81
msgid "Theme Layout Settings"
msgstr "Ustawienia układu szablonu"
#: inc/customizer.php:83
msgid "Container width and sidebar defaults"
msgstr "Domyślne ustawienia szerokości strony oraz panelu bocznego"
#: inc/customizer.php:98
msgid "Container Width"
msgstr "Szerokość strony"
#: inc/customizer.php:99
msgid "Choose between Bootstrap's container and container-fluid"
msgstr "Wybierz pomiędzy klasami Bootstrapa: container oraz container-fluid"
#: inc/customizer.php:104
msgid "Fixed width container"
msgstr "Stała"
#: inc/customizer.php:105
msgid "Full width container"
msgstr "Zmienna (wypełnia całą dostępną przestrzeń)"
#: inc/customizer.php:122
msgid "Sidebar Positioning"
msgstr "Umiejscowienie panelu bocznego"
#: inc/customizer.php:123
msgid "Set sidebar's position. Can either be: right, left, both or none"
msgstr ""
"Umiejscowienie panelu bocznego. Może znajdować się po prawej stronie, po"
" lewej stronie, "
"po obu stronach lub może w ogóle go nie być"
#: inc/customizer.php:129
msgid "Right sidebar"
msgstr "Panel boczny po prawej"
#: inc/customizer.php:130
msgid "Left sidebar"
msgstr "Panel boczny po lewej"
#: inc/customizer.php:131
msgid "Left & Right sidebars"
msgstr "Panel boczny po lewej i po prawej"
#: inc/customizer.php:132
msgid "No sidebar"
msgstr "Brak panelu bocznego"
#: inc/customizer.php:150
msgid "Posts Index Style"
msgstr ""
#: inc/customizer.php:151
msgid "Choose how to display latest posts"
msgstr ""
#: inc/customizer.php:156
msgid "Default"
msgstr ""
#: inc/customizer.php:157
msgid "Masonry"
msgstr ""
#: inc/customizer.php:158
msgid "Grid"
msgstr ""
#: inc/customizer.php:187
msgid "Grid Post Columns"
msgstr ""
#: inc/customizer.php:188
msgid "Choose how many columns to use"
msgstr ""
#: woocommerce/cart/proceed-to-checkout-button.php:27
msgid "Proceed to Checkout"
msgstr "Przejdź do kasy"
#: woocommerce/cart/mini-cart.php:49 woocommerce/cart/cart.php:60
msgid "Remove this item"
msgstr "Usuń ten przedmiot"
#: woocommerce/cart/mini-cart.php:72
msgid "No products in the cart."
msgstr "Koszyk jest pusty"
#: woocommerce/cart/mini-cart.php:80
msgid "Subtotal"
msgstr "Suma częściowa"
#: woocommerce/cart/mini-cart.php:85
msgid "View Cart"
msgstr "Zobacz koszyk"
#: woocommerce/cart/mini-cart.php:86
msgid "Checkout"
msgstr "Kasa"
#: woocommerce/cart/cart-empty.php:28
msgid "Your cart is currently empty."
msgstr "Twój koszyk jest pusty"
#: woocommerce/cart/cart-empty.php:36
msgid "Return To Shop"
msgstr "Wróć do sklepu"
#: woocommerce/cart/cart.php:36 woocommerce/cart/cart.php:79
#: woocommerce/checkout/form-pay.php:29
msgid "Product"
msgstr "Produkt"
#: woocommerce/cart/cart.php:37 woocommerce/cart/cart.php:97
msgid "Price"
msgstr "Cena"
#: woocommerce/cart/cart.php:38 woocommerce/cart/cart.php:103
msgid "Quantity"
msgstr "Liczba sztuk"
#: woocommerce/cart/cart.php:39 woocommerce/cart/cart.php:120
#: woocommerce/myaccount/my-orders.php:16
msgid "Total"
msgstr "Suma"
#: woocommerce/cart/cart.php:92
msgid "Available on backorder"
msgstr "Dostępny na zamówienie"
#: woocommerce/cart/cart.php:138
msgid "Coupon:"
msgstr "Kupon:"
#: woocommerce/cart/cart.php:138 woocommerce/checkout/form-coupon.php:36
msgid "Coupon code"
msgstr "Kod kuponu"
#: woocommerce/cart/cart.php:138 woocommerce/checkout/form-coupon.php:40
msgid "Apply Coupon"
msgstr "Zastosuj kupon"
#: woocommerce/cart/cart.php:144
msgid "Update Cart"
msgstr "Zaktualizuj koszyk"
#: woocommerce/checkout/payment.php:35
msgid ""
"Sorry, it seems that there are no available payment methods for your state. "
"Please contact us if you require assistance or wish to make alternate "
"arrangements."
msgstr ""
"Przykro nam, ale dla Twojego regionu nie jest udostępniona żadna metoda"
" płatności. Prosimy skontaktuj się z nami, jeśli potrzebujesz wyjaśnień lub"
" chcesz omówić alternatywne sposoby płatności."
#: woocommerce/checkout/payment.php:35
msgid "Please fill in your details above to see available payment methods."
msgstr "Wypełnij powyższe szczegóły aby zobaczyć dostępne metody płatności."
#: woocommerce/checkout/payment.php:42
msgid ""
"Since your browser does not support JavaScript, or it is disabled, please "
"ensure you click the <em>Update Totals</em> button before placing your order."
" You may be charged more than the amount stated above if you fail to do so."
msgstr ""
"Ponieważ Twoja przeglądarka nie wspiera JavaScriptu lub jest on wyłączony,"
" upewnij się, że klikniesz przycisk <em>Zaktualizuj koszyk</em> przed"
" złożeniem zamówienia. Możesz zapłacić więcej niż jest podane powyżej, jeśli"
" tego nie zrobisz."
#: woocommerce/checkout/payment.php:43
msgid "Update totals"
msgstr "Zaktualizuj koszyk"
#: woocommerce/checkout/form-pay.php:30
msgid "Qty"
msgstr "Szt."
#: woocommerce/checkout/form-pay.php:31
msgid "Totals"
msgstr "Łącznie"
#: woocommerce/checkout/form-pay.php:79
msgid ""
"Sorry, it seems that there are no available payment methods for your "
"location. Please contact us if you require assistance or wish to make "
"alternate arrangements."
msgstr ""
"Przykro nam, ale dla Twojej lokalizacji nie jest udostępniona żadna metoda"
" płatności. Prosimy skontaktuj się z nami, jeśli potrzebujesz wyjaśnień lub"
" chcesz omówić alternatywne sposoby płatności."
#: woocommerce/checkout/form-coupon.php:28
msgid "Have a coupon?"
msgstr "Masz kupon?"
#: woocommerce/checkout/form-coupon.php:28
msgid "Click here to enter your code"
msgstr "Kliknij tutaj, aby dodać kod"
#: woocommerce/global/form-login.php:35
#: woocommerce/myaccount/form-lost-password.php:30
msgid "Username or email"
msgstr "Użytkownik lub e-mail"
#: woocommerce/global/form-login.php:39
#: woocommerce/myaccount/form-login.php:48
#: woocommerce/myaccount/form-login.php:98
msgid "Password"
msgstr "Hasło"
#: woocommerce/global/form-login.php:48
#: woocommerce/myaccount/form-login.php:37
#: woocommerce/myaccount/form-login.php:56
msgid "Login"
msgstr "Zaloguj się"
#: woocommerce/global/form-login.php:51 woocommerce/myaccount/form-login.php:58
msgid "Remember me"
msgstr "Zapamiętaj mnie"
#: woocommerce/global/form-login.php:55 woocommerce/myaccount/form-login.php:62
msgid "Lost your password?"
msgstr "Nie pamiętasz hasła?"
#: woocommerce/global/quantity-input.php:24
msgctxt "Product quantity input tooltip"
msgid "Qty"
msgstr "Szt."
#: woocommerce/myaccount/form-lost-password.php:27
msgid ""
"Lost your password? Please enter your username or email address. You will "
"receive a link to create a new password via email."
msgstr ""
"Zapomniałeś hasła? Wpisz swoją nazwę użytkownika lub adres e-mail. Dostaniesz"
" link do stworzenia nowego hasła mailem."
#: woocommerce/myaccount/form-lost-password.php:40
msgid "Reset Password"
msgstr "Resetuj hasło"
#: woocommerce/myaccount/form-login.php:44
msgid "Username or email address"
msgstr "Użytkownik lub e-mail"
#: woocommerce/myaccount/form-login.php:75
#: woocommerce/myaccount/form-login.php:112
msgid "Register"
msgstr "Zarejestruj się"
#: woocommerce/myaccount/form-login.php:84
msgid "Username"
msgstr "Nazwa użytkownika"
#: woocommerce/myaccount/form-login.php:91
#: woocommerce/myaccount/form-edit-account.php:40
msgid "Email address"
msgstr "E-mail"
#: woocommerce/myaccount/form-login.php:105
msgid "Anti-spam"
msgstr "Antyspam"
#: woocommerce/myaccount/form-edit-account.php:30
msgid "First name"
msgstr "Imię"
#: woocommerce/myaccount/form-edit-account.php:34
msgid "Last name"
msgstr "Nazwisko"
#: woocommerce/myaccount/form-edit-account.php:45
msgid "Password Change"
msgstr "Zmiana hasła"
#: woocommerce/myaccount/form-edit-account.php:48
msgid "Current Password (leave blank to leave unchanged)"
msgstr "Aktualne hasło (pozostaw puste, aby nie zmieniać)"
#: woocommerce/myaccount/form-edit-account.php:52
msgid "New Password (leave blank to leave unchanged)"
msgstr "Nowe hasło (pozostaw puste, aby nie zmieniać)"
#: woocommerce/myaccount/form-edit-account.php:56
msgid "Confirm New Password"
msgstr "Potwierdź nowe hasło"
#: woocommerce/myaccount/form-edit-account.php:66
msgid "Save changes"
msgstr "Zapisz zmiany"
#: woocommerce/myaccount/my-orders.php:13
msgid "Order"
msgstr "Zamówienie"
#: woocommerce/myaccount/my-orders.php:14
msgid "Date"
msgstr "Data"
#: woocommerce/myaccount/my-orders.php:15
msgid "Status"
msgstr "Status"
#: woocommerce/myaccount/my-orders.php:30
msgid "Recent Orders"
msgstr "Ostatnie zamówienia"
#: woocommerce/myaccount/my-orders.php:55 woocommerce/myaccount/orders.php:51
msgctxt "hash before order number"
msgid "#"
msgstr "#"
#: woocommerce/myaccount/my-orders.php:65 woocommerce/myaccount/orders.php:61
#, php-format
msgid "%s for %s item"
msgid_plural "%s for %s items"
msgstr[0] "%s za %s pozycję"
msgstr[1] "%s za %s pozycje"
msgstr[2] "%s za %s pozycji"
#: woocommerce/myaccount/my-orders.php:72 woocommerce/myaccount/orders.php:68
msgid "Pay"
msgstr "Zapłać"
#: woocommerce/myaccount/my-orders.php:76 woocommerce/myaccount/orders.php:72
msgid "View"
msgstr "Zobacz"
#: woocommerce/myaccount/my-orders.php:80 woocommerce/myaccount/orders.php:76
msgid "Cancel"
msgstr "Anuluj"
#: woocommerce/myaccount/orders.php:107
msgid "Previous"
msgstr "Poprzednie"
#: woocommerce/myaccount/orders.php:111
msgid "Next"
msgstr "Następne"
#: woocommerce/myaccount/orders.php:119 woocommerce/myaccount/downloads.php:98
msgid "Go Shop"
msgstr "Przejdź do sklepu"
#: woocommerce/myaccount/orders.php:121
msgid "No order has been made yet."
msgstr "Żadne zamówienia nie zostały jeszcze złożone."
#: woocommerce/myaccount/form-edit-address.php:23
msgid "Billing Address"
msgstr "Adres rozliczeniowy."
#: woocommerce/myaccount/form-edit-address.php:23
msgid "Shipping Address"
msgstr "Adres wysyłki."
#: woocommerce/myaccount/form-edit-address.php:46
msgid "Save Address"
msgstr "Zapisz adres"
#: woocommerce/myaccount/form-reset-password.php:27
msgid "Enter a new password below."
msgstr "Wpisz nowe hasło poniżej."
#: woocommerce/myaccount/form-reset-password.php:30
msgid "New password"
msgstr "Nowe hasło"
#: woocommerce/myaccount/form-reset-password.php:34
msgid "Re-enter new password"
msgstr "Powtórz nowe hasło"
#: woocommerce/myaccount/form-reset-password.php:47
msgid "Save"
msgstr "Zapisz"
#: woocommerce/myaccount/downloads.php:59
msgid "&infin;"
msgstr "&infin;"
#: woocommerce/myaccount/downloads.php:67
msgid "Never"
msgstr "Nigdy"
#: woocommerce/myaccount/downloads.php:75
msgid "Download"
msgstr "Pobieranie"
#: woocommerce/myaccount/downloads.php:100
msgid "No downloads available yet."
msgstr "Pliki do pobrania nie są jeszcze dostępne."
#: woocommerce/single-product/review-rating.php:28
#, php-format
msgid "Rated %d out of 5"
msgstr "Oceniony %s na 5."
#: woocommerce/single-product/review-rating.php:29
msgid "out of 5"
msgstr "z 5"
#: woocommerce/single-product/rating.php:36
#, php-format
msgid "Rated %s out of 5"
msgstr "Oceniony %s na 5."
#: woocommerce/single-product/rating.php:38
#, php-format
msgid "out of %s5%s"
msgstr "z %s5%s"
#: woocommerce/single-product/rating.php:39
#, php-format
msgid "based on %s customer rating"
msgid_plural "based on %s customer ratings"
msgstr[0] "na podstawie %s oceny klienta"
msgstr[1] "na podstawie %s ocen klientów"
msgstr[2] "na podstawie %s ocen klientów"
#: woocommerce/single-product/rating.php:42
#, php-format
msgid "%s customer review"
msgid_plural "%s customer reviews"
msgstr[0] "%s opinia klienta"
msgstr[1] "%s opinie klienta"
msgstr[2] "%s opinii klienta"
#. Name of the theme
msgid "UnderStrap"
msgstr "UnderStrap"
#. Description of the theme
msgid ""
"Combination of Automattic´s _s theme and Bootstrap 4. Made as a solid "
"starting point for your next theme project and WordPress website. Use it as "
"starter theme or as a parent theme. It is up to you. Including Font Awesome "
"support, built-in widget slider and much more you need for basic websites. "
"IMPORTANT: All developer dependencies are not bundled with this install file."
" Just download the .zip, extract it and run \"npm install\" and \"gulp copy-"
"assets\" inside the extracted /understrap folder."
msgstr ""
"Połączenie motywu _s od Automattic oraz Bootstrapa 4. Stworzony jako solidna "
"podstawa dla Twojego następnego motywu lub strony opartej na WordPressie. "
"Wykorzystaj go jako motyw startowy lub motyw nadrzędny. Jak chcesz. "
"Zawiera obsługę Font Awesome, wbudowany widżet slidera i wiele innych. "
"WAŻNE: Zależności nie są dołączone do tego pliku instalacyjnego. Po prostu "
"pobierz plik .zip, rozpakuj go, wejdź do katalogu /understrap i uruchom"
" polecenia "
"\"npm install\" i \"gulp copy-assets\"."
#. Theme URI of the theme
msgid "http://understrap.com"
msgstr "http://understrap.com"
#. Author of the theme
msgid "Holger Koenemann"
msgstr "Holger Koenemann"
#. Author URI of the theme
msgid "http://www.holgerkoenemann.de"
msgstr "http://www.holgerkoenemann.de"

View File

@ -1,6 +1,6 @@
{ {
"name": "understrap", "name": "understrap",
"version": "0.8.1", "version": "0.8.2",
"description": "WordPress Theme framework", "description": "WordPress Theme framework",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@ -42,8 +42,6 @@ $container = get_theme_mod( 'understrap_container_type' );
</main><!-- #main --> </main><!-- #main -->
</div><!-- #primary -->
<!-- Do the right sidebar check --> <!-- Do the right sidebar check -->
<?php get_template_part( 'global-templates/right-sidebar-check' ); ?> <?php get_template_part( 'global-templates/right-sidebar-check' ); ?>

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap v4.0.0 (https://getbootstrap.com) * Bootstrap v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

View File

@ -1,7 +1,7 @@
@import "theme/theme_variables"; // <--------- Add your variables into this file. Also add variables to overwrite Bootstrap or UnderStrap variables here @import "theme/theme_variables"; // <--------- Add your variables into this file. Also add variables to overwrite Bootstrap or UnderStrap variables here
@import "assets/bootstrap4";// <--------- Loads Bootstrap3 or Bootstrap4. Change from /bootstrap3 to /bootstrap4 Watch out! just for testing in the moment! @import "assets/bootstrap4";// <--------- Loads Bootstrap3 or Bootstrap4. Change from /bootstrap3 to /bootstrap4 Watch out! just for testing in the moment!
@import "understrap/understrap";// <-------- Loads the UnderStrap defaults. Just a few classes to incorporate BS in WP @import "understrap/understrap";// <-------- Loads the UnderStrap defaults. Just a few classes to incorporate BS in WP
@import "understrap/woocommerce";// <-------- Loads WooCommerce style fixes. Comment out if you aren't using WooCommerce
//Optional files - If you dont use the corresponding scripts/fonts comment em out //Optional files - If you dont use the corresponding scripts/fonts comment em out
@import "assets/font-awesome"; // <------- Font Awesome Icon font @import "assets/font-awesome"; // <------- Font Awesome Icon font

View File

@ -0,0 +1,4 @@
// Fix billing field wrapper
.woocommerce-input-wrapper {
width: 100%;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 365 KiB

After

Width:  |  Height:  |  Size: 356 KiB

View File

@ -58,8 +58,6 @@ $container = get_theme_mod( 'understrap_container_type' );
<!-- The pagination component --> <!-- The pagination component -->
<?php understrap_pagination(); ?> <?php understrap_pagination(); ?>
</div><!-- #primary -->
<!-- Do the right sidebar check --> <!-- Do the right sidebar check -->
<?php get_template_part( 'global-templates/right-sidebar-check' ); ?> <?php get_template_part( 'global-templates/right-sidebar-check' ); ?>

16
sidebar-herocanvas.php Normal file
View File

@ -0,0 +1,16 @@
<?php
/**
* Sidebar - hero canvas setup.
*
* @package understrap
*/
?>
<?php if ( is_active_sidebar( 'herocanvas' ) ) : ?>
<!-- ******************* The Hero Canvas Widget Area ******************* -->
<?php dynamic_sidebar( 'herocanvas' ); ?>
<?php endif; ?>

View File

@ -37,8 +37,6 @@ $container = get_theme_mod( 'understrap_container_type' );
</main><!-- #main --> </main><!-- #main -->
</div><!-- #primary -->
<!-- Do the right sidebar check --> <!-- Do the right sidebar check -->
<?php get_template_part( 'global-templates/right-sidebar-check' ); ?> <?php get_template_part( 'global-templates/right-sidebar-check' ); ?>

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap v4.0.0 (https://getbootstrap.com) * Bootstrap v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
@ -28,22 +28,38 @@ function _createClass(Constructor, protoProps, staticProps) {
return Constructor; return Constructor;
} }
function _extends() { function _defineProperty(obj, key, value) {
_extends = Object.assign || function (target) { if (key in obj) {
for (var i = 1; i < arguments.length; i++) { Object.defineProperty(obj, key, {
var source = arguments[i]; value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
for (var key in source) { return obj;
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
} }
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
} }
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} }
return target; return target;
};
return _extends.apply(this, arguments);
} }
function _inheritsLoose(subClass, superClass) { function _inheritsLoose(subClass, superClass) {
@ -54,7 +70,7 @@ function _inheritsLoose(subClass, superClass) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): util.js * Bootstrap (v4.1.0): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -65,17 +81,18 @@ var Util = function ($$$1) {
* Private TransitionEnd Helpers * Private TransitionEnd Helpers
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var transition = false; var TRANSITION_END = 'transitionend';
var MAX_UID = 1000000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) var MAX_UID = 1000000;
var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
function toType(obj) { function toType(obj) {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
} }
function getSpecialTransitionEndEvent() { function getSpecialTransitionEndEvent() {
return { return {
bindType: transition.end, bindType: TRANSITION_END,
delegateType: transition.end, delegateType: TRANSITION_END,
handle: function handle(event) { handle: function handle(event) {
if ($$$1(event.target).is(this)) { if ($$$1(event.target).is(this)) {
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
@ -86,16 +103,6 @@ var Util = function ($$$1) {
}; };
} }
function transitionEndTest() {
if (typeof window !== 'undefined' && window.QUnit) {
return false;
}
return {
end: 'transitionend'
};
}
function transitionEndEmulator(duration) { function transitionEndEmulator(duration) {
var _this = this; var _this = this;
@ -112,20 +119,9 @@ var Util = function ($$$1) {
} }
function setTransitionEndSupport() { function setTransitionEndSupport() {
transition = transitionEndTest();
$$$1.fn.emulateTransitionEnd = transitionEndEmulator; $$$1.fn.emulateTransitionEnd = transitionEndEmulator;
if (Util.supportsTransitionEnd()) {
$$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
} }
}
function escapeId(selector) {
// We escape IDs in case of special selectors (selector = '#myId:something')
// $.escapeSelector does not exist in jQuery < 3
selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1');
return selector;
}
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Public Util Api * Public Util Api
@ -148,11 +144,6 @@ var Util = function ($$$1) {
if (!selector || selector === '#') { if (!selector || selector === '#') {
selector = element.getAttribute('href') || ''; selector = element.getAttribute('href') || '';
} // If it's an ID
if (selector.charAt(0) === '#') {
selector = escapeId(selector);
} }
try { try {
@ -162,14 +153,32 @@ var Util = function ($$$1) {
return null; return null;
} }
}, },
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
if (!element) {
return 0;
} // Get transition-duration of the element
var transitionDuration = $$$1(element).css('transition-duration');
var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found
if (!floatTransitionDuration) {
return 0;
} // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0];
return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;
},
reflow: function reflow(element) { reflow: function reflow(element) {
return element.offsetHeight; return element.offsetHeight;
}, },
triggerTransitionEnd: function triggerTransitionEnd(element) { triggerTransitionEnd: function triggerTransitionEnd(element) {
$$$1(element).trigger(transition.end); $$$1(element).trigger(TRANSITION_END);
}, },
// TODO: Remove in v5
supportsTransitionEnd: function supportsTransitionEnd() { supportsTransitionEnd: function supportsTransitionEnd() {
return Boolean(transition); return Boolean(TRANSITION_END);
}, },
isElement: function isElement(obj) { isElement: function isElement(obj) {
return (obj[0] || obj).nodeType; return (obj[0] || obj).nodeType;
@ -194,7 +203,7 @@ var Util = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): alert.js * Bootstrap (v4.1.0): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -206,12 +215,11 @@ var Alert = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.alert'; var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var Selector = { var Selector = {
DISMISS: '[data-dismiss="alert"]' DISMISS: '[data-dismiss="alert"]'
}; };
@ -289,15 +297,16 @@ var Alert = function ($$$1) {
$$$1(element).removeClass(ClassName.SHOW); $$$1(element).removeClass(ClassName.SHOW);
if (!Util.supportsTransitionEnd() || !$$$1(element).hasClass(ClassName.FADE)) { if (!$$$1(element).hasClass(ClassName.FADE)) {
this._destroyElement(element); this._destroyElement(element);
return; return;
} }
var transitionDuration = Util.getTransitionDurationFromElement(element);
$$$1(element).one(Util.TRANSITION_END, function (event) { $$$1(element).one(Util.TRANSITION_END, function (event) {
return _this._destroyElement(element, event); return _this._destroyElement(element, event);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
}; };
_proto._destroyElement = function _destroyElement(element) { _proto._destroyElement = function _destroyElement(element) {
@ -337,6 +346,7 @@ var Alert = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Alert; return Alert;
}(); }();
/** /**
@ -366,7 +376,7 @@ var Alert = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): button.js * Bootstrap (v4.1.0): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -378,7 +388,7 @@ var Button = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'button'; var NAME = 'button';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.button'; var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -488,6 +498,7 @@ var Button = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Button; return Button;
}(); }();
/** /**
@ -529,7 +540,7 @@ var Button = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): carousel.js * Bootstrap (v4.1.0): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -541,12 +552,11 @@ var Carousel = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'carousel'; var NAME = 'carousel';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.carousel'; var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 600;
var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
@ -655,7 +665,7 @@ var Carousel = function ($$$1) {
this._isPaused = true; this._isPaused = true;
} }
if ($$$1(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) { if ($$$1(this._element).find(Selector.NEXT_PREV)[0]) {
Util.triggerTransitionEnd(this._element); Util.triggerTransitionEnd(this._element);
this.cycle(true); this.cycle(true);
} }
@ -723,7 +733,7 @@ var Carousel = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -894,11 +904,12 @@ var Carousel = function ($$$1) {
to: nextElementIndex to: nextElementIndex
}); });
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.SLIDE)) { if ($$$1(this._element).hasClass(ClassName.SLIDE)) {
$$$1(nextElement).addClass(orderClassName); $$$1(nextElement).addClass(orderClassName);
Util.reflow(nextElement); Util.reflow(nextElement);
$$$1(activeElement).addClass(directionalClassName); $$$1(activeElement).addClass(directionalClassName);
$$$1(nextElement).addClass(directionalClassName); $$$1(nextElement).addClass(directionalClassName);
var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
$$$1(activeElement).one(Util.TRANSITION_END, function () { $$$1(activeElement).one(Util.TRANSITION_END, function () {
$$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE);
$$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName);
@ -906,7 +917,7 @@ var Carousel = function ($$$1) {
setTimeout(function () { setTimeout(function () {
return $$$1(_this3._element).trigger(slidEvent); return $$$1(_this3._element).trigger(slidEvent);
}, 0); }, 0);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
} else { } else {
$$$1(activeElement).removeClass(ClassName.ACTIVE); $$$1(activeElement).removeClass(ClassName.ACTIVE);
$$$1(nextElement).addClass(ClassName.ACTIVE); $$$1(nextElement).addClass(ClassName.ACTIVE);
@ -924,10 +935,10 @@ var Carousel = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = _extends({}, Default, $$$1(this).data()); var _config = _objectSpread({}, Default, $$$1(this).data());
if (typeof config === 'object') { if (typeof config === 'object') {
_config = _extends({}, _config, config); _config = _objectSpread({}, _config, config);
} }
var action = typeof config === 'string' ? config : _config.slide; var action = typeof config === 'string' ? config : _config.slide;
@ -965,7 +976,8 @@ var Carousel = function ($$$1) {
return; return;
} }
var config = _extends({}, $$$1(target).data(), $$$1(this).data()); var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data());
var slideIndex = this.getAttribute('data-slide-to'); var slideIndex = this.getAttribute('data-slide-to');
if (slideIndex) { if (slideIndex) {
@ -992,6 +1004,7 @@ var Carousel = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Carousel; return Carousel;
}(); }();
/** /**
@ -1028,7 +1041,7 @@ var Carousel = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): collapse.js * Bootstrap (v4.1.0): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1040,12 +1053,11 @@ var Collapse = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'collapse'; var NAME = 'collapse';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.collapse'; var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 600;
var Default = { var Default = {
toggle: true, toggle: true,
parent: '' parent: ''
@ -1187,14 +1199,10 @@ var Collapse = function ($$$1) {
$$$1(_this._element).trigger(Event.SHOWN); $$$1(_this._element).trigger(Event.SHOWN);
}; };
if (!Util.supportsTransitionEnd()) {
complete();
return;
}
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
var scrollSize = "scroll" + capitalizedDimension; var scrollSize = "scroll" + capitalizedDimension;
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
this._element.style[dimension] = this._element[scrollSize] + "px"; this._element.style[dimension] = this._element[scrollSize] + "px";
}; };
@ -1242,13 +1250,8 @@ var Collapse = function ($$$1) {
}; };
this._element.style[dimension] = ''; this._element.style[dimension] = '';
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
if (!Util.supportsTransitionEnd()) { $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
complete();
return;
}
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
}; };
_proto.setTransitioning = function setTransitioning(isTransitioning) { _proto.setTransitioning = function setTransitioning(isTransitioning) {
@ -1266,7 +1269,7 @@ var Collapse = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
config.toggle = Boolean(config.toggle); // Coerce string values config.toggle = Boolean(config.toggle); // Coerce string values
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
@ -1321,7 +1324,7 @@ var Collapse = function ($$$1) {
var $this = $$$1(this); var $this = $$$1(this);
var data = $this.data(DATA_KEY); var data = $this.data(DATA_KEY);
var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config); var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config);
if (!data && _config.toggle && /show|hide/.test(config)) { if (!data && _config.toggle && /show|hide/.test(config)) {
_config.toggle = false; _config.toggle = false;
@ -1353,6 +1356,7 @@ var Collapse = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Collapse; return Collapse;
}(); }();
/** /**
@ -1397,7 +1401,7 @@ var Collapse = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): dropdown.js * Bootstrap (v4.1.0): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1409,7 +1413,7 @@ var Dropdown = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'dropdown'; var NAME = 'dropdown';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.dropdown'; var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1452,7 +1456,7 @@ var Dropdown = function ($$$1) {
FORM_CHILD: '.dropdown form', FORM_CHILD: '.dropdown form',
MENU: '.dropdown-menu', MENU: '.dropdown-menu',
NAVBAR_NAV: '.navbar-nav', NAVBAR_NAV: '.navbar-nav',
VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)' VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
}; };
var AttachmentMap = { var AttachmentMap = {
TOP: 'top-start', TOP: 'top-start',
@ -1467,12 +1471,16 @@ var Dropdown = function ($$$1) {
var Default = { var Default = {
offset: 0, offset: 0,
flip: true, flip: true,
boundary: 'scrollParent' boundary: 'scrollParent',
reference: 'toggle',
display: 'dynamic'
}; };
var DefaultType = { var DefaultType = {
offset: '(number|string|function)', offset: '(number|string|function)',
flip: 'boolean', flip: 'boolean',
boundary: '(string|element)' boundary: '(string|element)',
reference: '(string|element)',
display: 'string'
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
@ -1533,11 +1541,15 @@ var Dropdown = function ($$$1) {
throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
} }
var element = this._element; // For dropup with alignment we use the parent as popper container var referenceElement = this._element;
if ($$$1(parent).hasClass(ClassName.DROPUP)) { if (this._config.reference === 'parent') {
if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) { referenceElement = parent;
element = parent; } else if (Util.isElement(this._config.reference)) {
referenceElement = this._config.reference; // Check if it's jQuery element
if (typeof this._config.reference.jquery !== 'undefined') {
referenceElement = this._config.reference[0];
} }
} // If boundary is not `scrollParent`, then set position to `static` } // If boundary is not `scrollParent`, then set position to `static`
// to allow the menu to "escape" the scroll parent's boundaries // to allow the menu to "escape" the scroll parent's boundaries
@ -1548,7 +1560,7 @@ var Dropdown = function ($$$1) {
$$$1(parent).addClass(ClassName.POSITION_STATIC); $$$1(parent).addClass(ClassName.POSITION_STATIC);
} }
this._popper = new Popper(element, this._menu, this._getPopperConfig()); this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
} // If this is a touch-enabled device we add extra } // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
@ -1556,7 +1568,7 @@ var Dropdown = function ($$$1) {
if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {
$$$1('body').children().on('mouseover', null, $$$1.noop); $$$1(document.body).children().on('mouseover', null, $$$1.noop);
} }
this._element.focus(); this._element.focus();
@ -1601,7 +1613,7 @@ var Dropdown = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, this.constructor.Default, $$$1(this._element).data(), config); config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config);
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
return config; return config;
}; };
@ -1648,7 +1660,7 @@ var Dropdown = function ($$$1) {
if (typeof this._config.offset === 'function') { if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) { offsetConf.fn = function (data) {
data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets) || {}); data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
return data; return data;
}; };
} else { } else {
@ -1665,8 +1677,16 @@ var Dropdown = function ($$$1) {
preventOverflow: { preventOverflow: {
boundariesElement: this._config.boundary boundariesElement: this._config.boundary
} }
} } // Disable Popper.js if we have a static display
}; };
if (this._config.display === 'static') {
popperConfig.modifiers.applyStyle = {
enabled: false
};
}
return popperConfig; return popperConfig;
}; // Static }; // Static
@ -1731,7 +1751,7 @@ var Dropdown = function ($$$1) {
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().off('mouseover', null, $$$1.noop); $$$1(document.body).children().off('mouseover', null, $$$1.noop);
} }
toggles[i].setAttribute('aria-expanded', 'false'); toggles[i].setAttribute('aria-expanded', 'false');
@ -1826,6 +1846,7 @@ var Dropdown = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Dropdown; return Dropdown;
}(); }();
/** /**
@ -1862,7 +1883,7 @@ var Dropdown = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): modal.js * Bootstrap (v4.1.0): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1874,13 +1895,11 @@ var Modal = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'modal'; var NAME = 'modal';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.modal'; var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 300;
var BACKDROP_TRANSITION_DURATION = 150;
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
var Default = { var Default = {
@ -1941,7 +1960,6 @@ var Modal = function ($$$1) {
this._isShown = false; this._isShown = false;
this._isBodyOverflowing = false; this._isBodyOverflowing = false;
this._ignoreBackdropClick = false; this._ignoreBackdropClick = false;
this._originalBodyPadding = 0;
this._scrollbarWidth = 0; this._scrollbarWidth = 0;
} // Getters } // Getters
@ -1960,7 +1978,7 @@ var Modal = function ($$$1) {
return; return;
} }
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { if ($$$1(this._element).hasClass(ClassName.FADE)) {
this._isTransitioning = true; this._isTransitioning = true;
} }
@ -2022,7 +2040,7 @@ var Modal = function ($$$1) {
} }
this._isShown = false; this._isShown = false;
var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); var transition = $$$1(this._element).hasClass(ClassName.FADE);
if (transition) { if (transition) {
this._isTransitioning = true; this._isTransitioning = true;
@ -2038,9 +2056,10 @@ var Modal = function ($$$1) {
$$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS);
if (transition) { if (transition) {
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._element).one(Util.TRANSITION_END, function (event) { $$$1(this._element).one(Util.TRANSITION_END, function (event) {
return _this2._hideModal(event); return _this2._hideModal(event);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
} else { } else {
this._hideModal(); this._hideModal();
} }
@ -2065,7 +2084,7 @@ var Modal = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -2073,7 +2092,7 @@ var Modal = function ($$$1) {
_proto._showElement = function _showElement(relatedTarget) { _proto._showElement = function _showElement(relatedTarget) {
var _this3 = this; var _this3 = this;
var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); var transition = $$$1(this._element).hasClass(ClassName.FADE);
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
// Don't move modal's DOM position // Don't move modal's DOM position
@ -2110,7 +2129,8 @@ var Modal = function ($$$1) {
}; };
if (transition) { if (transition) {
$$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
} else { } else {
transitionComplete(); transitionComplete();
} }
@ -2188,7 +2208,6 @@ var Modal = function ($$$1) {
var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
if (this._isShown && this._config.backdrop) { if (this._isShown && this._config.backdrop) {
var doAnimate = Util.supportsTransitionEnd() && animate;
this._backdrop = document.createElement('div'); this._backdrop = document.createElement('div');
this._backdrop.className = ClassName.BACKDROP; this._backdrop.className = ClassName.BACKDROP;
@ -2214,7 +2233,7 @@ var Modal = function ($$$1) {
} }
}); });
if (doAnimate) { if (animate) {
Util.reflow(this._backdrop); Util.reflow(this._backdrop);
} }
@ -2224,12 +2243,13 @@ var Modal = function ($$$1) {
return; return;
} }
if (!doAnimate) { if (!animate) {
callback(); callback();
return; return;
} }
$$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
$$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
} else if (!this._isShown && this._backdrop) { } else if (!this._isShown && this._backdrop) {
$$$1(this._backdrop).removeClass(ClassName.SHOW); $$$1(this._backdrop).removeClass(ClassName.SHOW);
@ -2241,8 +2261,10 @@ var Modal = function ($$$1) {
} }
}; };
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { if ($$$1(this._element).hasClass(ClassName.FADE)) {
$$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
$$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
} else { } else {
callbackRemove(); callbackRemove();
} }
@ -2304,8 +2326,8 @@ var Modal = function ($$$1) {
}); // Adjust body padding }); // Adjust body padding
var actualPadding = document.body.style.paddingRight; var actualPadding = document.body.style.paddingRight;
var calculatedPadding = $$$1('body').css('padding-right'); var calculatedPadding = $$$1(document.body).css('padding-right');
$$$1('body').data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
} }
}; };
@ -2327,10 +2349,10 @@ var Modal = function ($$$1) {
} }
}); // Restore body padding }); // Restore body padding
var padding = $$$1('body').data('padding-right'); var padding = $$$1(document.body).data('padding-right');
if (typeof padding !== 'undefined') { if (typeof padding !== 'undefined') {
$$$1('body').css('padding-right', padding).removeData('padding-right'); $$$1(document.body).css('padding-right', padding).removeData('padding-right');
} }
}; };
@ -2349,7 +2371,7 @@ var Modal = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = _extends({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config); var _config = _objectSpread({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config);
if (!data) { if (!data) {
data = new Modal(this, _config); data = new Modal(this, _config);
@ -2379,6 +2401,7 @@ var Modal = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Modal; return Modal;
}(); }();
/** /**
@ -2398,7 +2421,7 @@ var Modal = function ($$$1) {
target = $$$1(selector)[0]; target = $$$1(selector)[0];
} }
var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _extends({}, $$$1(target).data(), $$$1(this).data()); var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data());
if (this.tagName === 'A' || this.tagName === 'AREA') { if (this.tagName === 'A' || this.tagName === 'AREA') {
event.preventDefault(); event.preventDefault();
@ -2438,7 +2461,7 @@ var Modal = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): tooltip.js * Bootstrap (v4.1.0): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -2450,11 +2473,10 @@ var Tooltip = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tooltip'; var NAME = 'tooltip';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.tooltip'; var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var CLASS_PREFIX = 'bs-tooltip'; var CLASS_PREFIX = 'bs-tooltip';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var DefaultType = { var DefaultType = {
@ -2700,7 +2722,7 @@ var Tooltip = function ($$$1) {
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().on('mouseover', null, $$$1.noop); $$$1(document.body).children().on('mouseover', null, $$$1.noop);
} }
var complete = function complete() { var complete = function complete() {
@ -2717,8 +2739,9 @@ var Tooltip = function ($$$1) {
} }
}; };
if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { if ($$$1(this.tip).hasClass(ClassName.FADE)) {
$$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
$$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -2761,15 +2784,16 @@ var Tooltip = function ($$$1) {
// empty mouseover listeners we added for iOS support // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().off('mouseover', null, $$$1.noop); $$$1(document.body).children().off('mouseover', null, $$$1.noop);
} }
this._activeTrigger[Trigger.CLICK] = false; this._activeTrigger[Trigger.CLICK] = false;
this._activeTrigger[Trigger.FOCUS] = false; this._activeTrigger[Trigger.FOCUS] = false;
this._activeTrigger[Trigger.HOVER] = false; this._activeTrigger[Trigger.HOVER] = false;
if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { if ($$$1(this.tip).hasClass(ClassName.FADE)) {
$$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(tip);
$$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -2860,7 +2884,7 @@ var Tooltip = function ($$$1) {
}); });
if (this.config.selector) { if (this.config.selector) {
this.config = _extends({}, this.config, { this.config = _objectSpread({}, this.config, {
trigger: 'manual', trigger: 'manual',
selector: '' selector: ''
}); });
@ -2954,7 +2978,7 @@ var Tooltip = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, this.constructor.Default, $$$1(this.element).data(), config); config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), config);
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
config.delay = { config.delay = {
@ -3081,6 +3105,7 @@ var Tooltip = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Tooltip; return Tooltip;
}(); }();
/** /**
@ -3103,7 +3128,7 @@ var Tooltip = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): popover.js * Bootstrap (v4.1.0): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3115,21 +3140,24 @@ var Popover = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'popover'; var NAME = 'popover';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.popover'; var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var CLASS_PREFIX = 'bs-popover'; var CLASS_PREFIX = 'bs-popover';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var Default = _extends({}, Tooltip.Default, {
var Default = _objectSpread({}, Tooltip.Default, {
placement: 'right', placement: 'right',
trigger: 'click', trigger: 'click',
content: '', content: '',
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
}); });
var DefaultType = _extends({}, Tooltip.DefaultType, {
var DefaultType = _objectSpread({}, Tooltip.DefaultType, {
content: '(string|element|function)' content: '(string|element|function)'
}); });
var ClassName = { var ClassName = {
FADE: 'fade', FADE: 'fade',
SHOW: 'show' SHOW: 'show'
@ -3274,6 +3302,7 @@ var Popover = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Popover; return Popover;
}(Tooltip); }(Tooltip);
/** /**
@ -3296,7 +3325,7 @@ var Popover = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): scrollspy.js * Bootstrap (v4.1.0): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3308,7 +3337,7 @@ var ScrollSpy = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'scrollspy'; var NAME = 'scrollspy';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.scrollspy'; var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3435,7 +3464,7 @@ var ScrollSpy = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
if (typeof config.target !== 'string') { if (typeof config.target !== 'string') {
var id = $$$1(config.target).attr('id'); var id = $$$1(config.target).attr('id');
@ -3570,6 +3599,7 @@ var ScrollSpy = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return ScrollSpy; return ScrollSpy;
}(); }();
/** /**
@ -3607,7 +3637,7 @@ var ScrollSpy = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): tab.js * Bootstrap (v4.1.0): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3619,12 +3649,11 @@ var Tab = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tab'; var NAME = 'tab';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.tab'; var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var Event = { var Event = {
HIDE: "hide" + EVENT_KEY, HIDE: "hide" + EVENT_KEY,
HIDDEN: "hidden" + EVENT_KEY, HIDDEN: "hidden" + EVENT_KEY,
@ -3743,14 +3772,15 @@ var Tab = function ($$$1) {
} }
var active = activeElements[0]; var active = activeElements[0];
var isTransitioning = callback && Util.supportsTransitionEnd() && active && $$$1(active).hasClass(ClassName.FADE); var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE);
var complete = function complete() { var complete = function complete() {
return _this2._transitionComplete(element, active, callback); return _this2._transitionComplete(element, active, callback);
}; };
if (active && isTransitioning) { if (active && isTransitioning) {
$$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(active);
$$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -3821,6 +3851,7 @@ var Tab = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Tab; return Tab;
}(); }();
/** /**
@ -3854,7 +3885,7 @@ var Tab = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.6): index.js * Bootstrap (v4.0.0): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */

File diff suppressed because one or more lines are too long

View File

@ -5,17 +5,20 @@
margin-bottom: $breadcrumb-margin-bottom; margin-bottom: $breadcrumb-margin-bottom;
list-style: none; list-style: none;
background-color: $breadcrumb-bg; background-color: $breadcrumb-bg;
@include border-radius($border-radius); @include border-radius($breadcrumb-border-radius);
} }
.breadcrumb-item { .breadcrumb-item {
// The separator between breadcrumbs (by default, a forward-slash: "/") // The separator between breadcrumbs (by default, a forward-slash: "/")
+ .breadcrumb-item::before { + .breadcrumb-item {
padding-left: $breadcrumb-item-padding;
&::before {
display: inline-block; // Suppress underlining of the separator in modern browsers display: inline-block; // Suppress underlining of the separator in modern browsers
padding-right: $breadcrumb-item-padding; padding-right: $breadcrumb-item-padding;
padding-left: $breadcrumb-item-padding;
color: $breadcrumb-divider-color; color: $breadcrumb-divider-color;
content: "#{$breadcrumb-divider}"; content: $breadcrumb-divider;
}
} }
// IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built

View File

@ -76,9 +76,15 @@
padding-right: $btn-padding-x * .75; padding-right: $btn-padding-x * .75;
padding-left: $btn-padding-x * .75; padding-left: $btn-padding-x * .75;
&::after { &::after,
.dropup &::after,
.dropright &::after {
margin-left: 0; margin-left: 0;
} }
.dropleft &::before {
margin-right: 0;
}
} }
.btn-sm + .dropdown-toggle-split { .btn-sm + .dropdown-toggle-split {

View File

@ -100,6 +100,7 @@ fieldset:disabled a.btn {
&:disabled, &:disabled,
&.disabled { &.disabled {
color: $btn-link-disabled-color; color: $btn-link-disabled-color;
pointer-events: none;
} }
// No need for an active state here // No need for an active state here

View File

@ -153,7 +153,7 @@
.card { .card {
display: flex; display: flex;
// Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
flex: 1 0 0%; flex: 1 0 0%;
flex-direction: column; flex-direction: column;
margin-right: $card-deck-margin; margin-right: $card-deck-margin;
@ -183,7 +183,7 @@
// The child selector allows nested `.card` within `.card-group` // The child selector allows nested `.card` within `.card-group`
// to display properly. // to display properly.
> .card { > .card {
// Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
flex: 1 0 0%; flex: 1 0 0%;
margin-bottom: 0; margin-bottom: 0;
@ -261,6 +261,8 @@
@include media-breakpoint-up(sm) { @include media-breakpoint-up(sm) {
column-count: $card-columns-count; column-count: $card-columns-count;
column-gap: $card-columns-gap; column-gap: $card-columns-gap;
orphans: 1;
widows: 1;
.card { .card {
display: inline-block; // Don't let them vertically span multiple columns display: inline-block; // Don't let them vertically span multiple columns
@ -268,3 +270,32 @@
} }
} }
} }
//
// Accordion
//
.accordion {
.card:not(:first-of-type):not(:last-of-type) {
border-bottom: 0;
border-radius: 0;
}
.card:not(:first-of-type) {
.card-header:first-child {
border-radius: 0;
}
}
.card:first-of-type {
border-bottom: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.card:last-of-type {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
}

View File

@ -1,4 +1,13 @@
// Wrapper for the slide container and indicators // Notes on the classes:
//
// 1. The .carousel-item-left and .carousel-item-right is used to indicate where
// the active slide is heading.
// 2. .active.carousel-item is the current slide.
// 3. .active.carousel-item-left and .active.carousel-item-right is the current
// slide in its in-transition state. Only one of these occurs at a time.
// 4. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right
// is the upcoming slide in transition.
.carousel { .carousel {
position: relative; position: relative;
} }
@ -31,7 +40,6 @@
top: 0; top: 0;
} }
// CSS3 transforms when supported by the browser
.carousel-item-next.carousel-item-left, .carousel-item-next.carousel-item-left,
.carousel-item-prev.carousel-item-right { .carousel-item-prev.carousel-item-right {
transform: translateX(0); transform: translateX(0);
@ -60,6 +68,42 @@
} }
//
// Alternate transitions
//
.carousel-fade {
.carousel-item {
opacity: 0;
transition-duration: .6s;
transition-property: opacity;
}
.carousel-item.active,
.carousel-item-next.carousel-item-left,
.carousel-item-prev.carousel-item-right {
opacity: 1;
}
.active.carousel-item-left,
.active.carousel-item-right {
opacity: 0;
}
.carousel-item-next,
.carousel-item-prev,
.carousel-item.active,
.active.carousel-item-left,
.active.carousel-item-prev {
transform: translateX(0);
@supports (transform-style: preserve-3d) {
transform: translate3d(0, 0, 0);
}
}
}
// //
// Left/right controls for nav // Left/right controls for nav
// //
@ -91,13 +135,13 @@
.carousel-control-prev { .carousel-control-prev {
left: 0; left: 0;
@if $enable-gradients { @if $enable-gradients {
background: linear-gradient(90deg, rgba(0, 0, 0, .25), rgba(0, 0, 0, .001)); background: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));
} }
} }
.carousel-control-next { .carousel-control-next {
right: 0; right: 0;
@if $enable-gradients { @if $enable-gradients {
background: linear-gradient(270deg, rgba(0, 0, 0, .25), rgba(0, 0, 0, .001)); background: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));
} }
} }

View File

@ -157,7 +157,7 @@
// Select // Select
// //
// Replaces the browser default select with a custom one, mostly pulled from // Replaces the browser default select with a custom one, mostly pulled from
// http://primercss.io. // https://primer.github.io/.
// //
.custom-select { .custom-select {
@ -247,11 +247,11 @@
margin: 0; margin: 0;
opacity: 0; opacity: 0;
&:focus ~ .custom-file-control { &:focus ~ .custom-file-label {
border-color: $custom-file-focus-border-color; border-color: $custom-file-focus-border-color;
box-shadow: $custom-file-focus-box-shadow; box-shadow: $custom-file-focus-box-shadow;
&::before { &::after {
border-color: $custom-file-focus-border-color; border-color: $custom-file-focus-border-color;
} }
} }
@ -295,3 +295,126 @@
@include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0); @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);
} }
} }
// Range
//
// Style range inputs the same across browsers. Vendor-specific rules for psuedo
// elements cannot be mixed. As such, there are no shared styles for focus or
// active states on prefixed selectors.
.custom-range {
width: 100%;
padding-left: 0; // Firefox specific
background-color: transparent;
appearance: none;
&:focus {
outline: none;
}
&::-moz-focus-outer {
border: 0;
}
&::-webkit-slider-thumb {
width: $custom-range-thumb-width;
height: $custom-range-thumb-height;
margin-top: -($custom-range-thumb-width * .25); // Webkit specific?
@include gradient-bg($custom-range-thumb-bg);
border: $custom-range-thumb-border;
@include border-radius($custom-range-thumb-border-radius);
@include box-shadow($custom-range-thumb-box-shadow);
appearance: none;
&:focus {
outline: none;
box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility
}
&:active {
@include gradient-bg($custom-range-thumb-active-bg);
}
}
&::-webkit-slider-runnable-track {
width: $custom-range-track-width;
height: $custom-range-track-height;
color: transparent; // Why?
cursor: $custom-range-track-cursor;
background-color: $custom-range-track-bg;
border-color: transparent;
@include border-radius($custom-range-track-border-radius);
@include box-shadow($custom-range-track-box-shadow);
}
&::-moz-range-thumb {
width: $custom-range-thumb-width;
height: $custom-range-thumb-height;
@include gradient-bg($custom-range-thumb-bg);
border: $custom-range-thumb-border;
@include border-radius($custom-range-thumb-border-radius);
@include box-shadow($custom-range-thumb-box-shadow);
appearance: none;
&:focus {
outline: none;
box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility
}
&:active {
@include gradient-bg($custom-range-thumb-active-bg);
}
}
&::-moz-range-track {
width: $custom-range-track-width;
height: $custom-range-track-height;
color: transparent;
cursor: $custom-range-track-cursor;
background-color: $custom-range-track-bg;
border-color: transparent; // Firefox specific?
@include border-radius($custom-range-track-border-radius);
@include box-shadow($custom-range-track-box-shadow);
}
&::-ms-thumb {
width: $custom-range-thumb-width;
height: $custom-range-thumb-height;
@include gradient-bg($custom-range-thumb-bg);
border: $custom-range-thumb-border;
@include border-radius($custom-range-thumb-border-radius);
@include box-shadow($custom-range-thumb-box-shadow);
appearance: none;
&:focus {
outline: none;
box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility
}
&:active {
@include gradient-bg($custom-range-thumb-active-bg);
}
}
&::-ms-track {
width: $custom-range-track-width;
height: $custom-range-track-height;
color: transparent;
cursor: $custom-range-track-cursor;
background-color: transparent;
border-color: transparent;
border-width: ($custom-range-thumb-height * .5);
@include box-shadow($custom-range-track-box-shadow);
}
&::-ms-fill-lower {
background-color: $custom-range-track-bg;
@include border-radius($custom-range-track-border-radius);
}
&::-ms-fill-upper {
margin-right: 15px; // arbitrary?
background-color: $custom-range-track-bg;
@include border-radius($custom-range-track-border-radius);
}
}

View File

@ -1,6 +1,8 @@
// The dropdown wrapper (`<div>`) // The dropdown wrapper (`<div>`)
.dropup, .dropup,
.dropdown { .dropright,
.dropdown,
.dropleft {
position: relative; position: relative;
} }
@ -31,10 +33,17 @@
@include box-shadow($dropdown-box-shadow); @include box-shadow($dropdown-box-shadow);
} }
.dropdown-menu-right {
right: 0;
left: auto;
}
// Allow for dropdowns to go bottom up (aka, dropup-menu) // Allow for dropdowns to go bottom up (aka, dropup-menu)
// Just add .dropup after the standard .dropdown class and you're set. // Just add .dropup after the standard .dropdown class and you're set.
.dropup { .dropup {
.dropdown-menu { .dropdown-menu {
top: auto;
bottom: 100%;
margin-top: 0; margin-top: 0;
margin-bottom: $dropdown-spacer; margin-bottom: $dropdown-spacer;
} }
@ -46,6 +55,9 @@
.dropright { .dropright {
.dropdown-menu { .dropdown-menu {
top: 0;
right: auto;
left: 100%;
margin-top: 0; margin-top: 0;
margin-left: $dropdown-spacer; margin-left: $dropdown-spacer;
} }
@ -60,6 +72,9 @@
.dropleft { .dropleft {
.dropdown-menu { .dropdown-menu {
top: 0;
right: 100%;
left: auto;
margin-top: 0; margin-top: 0;
margin-right: $dropdown-spacer; margin-right: $dropdown-spacer;
} }
@ -72,6 +87,19 @@
} }
} }
// When enabled Popper.js, reset basic dropdown position
// stylelint-disable no-duplicate-selectors
.dropdown-menu {
&[x-placement^="top"],
&[x-placement^="right"],
&[x-placement^="bottom"],
&[x-placement^="left"] {
right: auto;
bottom: auto;
}
}
// stylelint-enable no-duplicate-selectors
// Dividers (basically an `<hr>`) within the dropdown // Dividers (basically an `<hr>`) within the dropdown
.dropdown-divider { .dropdown-divider {
@include nav-divider($dropdown-divider-bg); @include nav-divider($dropdown-divider-bg);
@ -129,3 +157,10 @@
color: $dropdown-header-color; color: $dropdown-header-color;
white-space: nowrap; // as with > li > a white-space: nowrap; // as with > li > a
} }
// Dropdown text
.dropdown-item-text {
display: block;
padding: $dropdown-item-padding-y $dropdown-item-padding-x;
color: $dropdown-link-color;
}

View File

@ -121,6 +121,7 @@ select.form-control {
padding-bottom: $input-padding-y; padding-bottom: $input-padding-y;
margin-bottom: 0; // match inputs if this class comes on inputs with default margins margin-bottom: 0; // match inputs if this class comes on inputs with default margins
line-height: $input-line-height; line-height: $input-line-height;
color: $input-plaintext-color;
background-color: transparent; background-color: transparent;
border: solid transparent; border: solid transparent;
border-width: $input-border-width 0; border-width: $input-border-width 0;
@ -302,7 +303,8 @@ select.form-control-lg {
display: inline-block; display: inline-block;
} }
.input-group { .input-group,
.custom-select {
width: auto; width: auto;
} }

View File

@ -79,7 +79,7 @@
// Request a theme color level // Request a theme color level
@function theme-color-level($color-name: "primary", $level: 0) { @function theme-color-level($color-name: "primary", $level: 0) {
$color: theme-color($color-name); $color: theme-color($color-name);
$color-base: if($level > 0, #000, #fff); $color-base: if($level > 0, $black, $white);
$level: abs($level); $level: abs($level);
@return mix($color-base, $color, $level * $theme-color-interval); @return mix($color-base, $color, $level * $theme-color-interval);

View File

@ -46,9 +46,9 @@
align-items: center; align-items: center;
&:not(:last-child) .custom-file-label, &:not(:last-child) .custom-file-label,
&:not(:last-child) .custom-file-label::before { @include border-right-radius(0); } &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }
&:not(:first-child) .custom-file-label, &:not(:first-child) .custom-file-label,
&:not(:first-child) .custom-file-label::before { @include border-left-radius(0); } &:not(:first-child) .custom-file-label::after { @include border-left-radius(0); }
} }
} }

View File

@ -36,7 +36,6 @@
// // Layout // // Layout
@import "mixins/clearfix"; @import "mixins/clearfix";
// @import "mixins/navbar-align";
@import "mixins/grid-framework"; @import "mixins/grid-framework";
@import "mixins/grid"; @import "mixins/grid";
@import "mixins/float"; @import "mixins/float";

View File

@ -67,7 +67,7 @@
background-color: $modal-content-bg; background-color: $modal-content-bg;
background-clip: padding-box; background-clip: padding-box;
border: $modal-content-border-width solid $modal-content-border-color; border: $modal-content-border-width solid $modal-content-border-color;
@include border-radius($border-radius-lg); @include border-radius($modal-content-border-radius);
@include box-shadow($modal-content-box-shadow-xs); @include box-shadow($modal-content-box-shadow-xs);
// Remove focus outline from opened modal // Remove focus outline from opened modal
outline: 0; outline: 0;
@ -96,7 +96,7 @@
justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
padding: $modal-header-padding; padding: $modal-header-padding;
border-bottom: $modal-header-border-width solid $modal-header-border-color; border-bottom: $modal-header-border-width solid $modal-header-border-color;
@include border-top-radius($border-radius-lg); @include border-top-radius($modal-content-border-radius);
.close { .close {
padding: $modal-header-padding; padding: $modal-header-padding;

View File

@ -162,11 +162,6 @@
position: absolute; position: absolute;
} }
.dropdown-menu-right {
right: 0;
left: auto; // Reset the default from `.dropdown-menu`
}
.nav-link { .nav-link {
padding-right: $navbar-nav-link-padding-x; padding-right: $navbar-nav-link-padding-x;
padding-left: $navbar-nav-link-padding-x; padding-left: $navbar-nav-link-padding-x;
@ -189,13 +184,6 @@
.navbar-toggler { .navbar-toggler {
display: none; display: none;
} }
.dropup {
.dropdown-menu {
top: auto;
bottom: 100%;
}
}
} }
} }
} }

View File

@ -15,6 +15,7 @@
border: $pagination-border-width solid $pagination-border-color; border: $pagination-border-width solid $pagination-border-color;
&:hover { &:hover {
z-index: 2;
color: $pagination-hover-color; color: $pagination-hover-color;
text-decoration: none; text-decoration: none;
background-color: $pagination-hover-bg; background-color: $pagination-hover-bg;
@ -23,7 +24,7 @@
&:focus { &:focus {
z-index: 2; z-index: 2;
outline: 0; outline: $pagination-focus-outline;
box-shadow: $pagination-focus-box-shadow; box-shadow: $pagination-focus-box-shadow;
} }

View File

@ -5,7 +5,7 @@
// ========================================================================== // ==========================================================================
// Print styles. // Print styles.
// Inlined to avoid the additional HTTP request: // Inlined to avoid the additional HTTP request:
// http://www.phpied.com/delay-loading-your-print-css/ // https://www.phpied.com/delay-loading-your-print-css/
// ========================================================================== // ==========================================================================
@if $enable-print-styles { @if $enable-print-styles {
@ -14,7 +14,7 @@
*::before, *::before,
*::after { *::after {
// Bootstrap specific; comment out `color` and `background` // Bootstrap specific; comment out `color` and `background`
//color: #000 !important; // Black prints faster: http://www.sanbeiji.com/archives/953 //color: $black !important; // Black prints faster
text-shadow: none !important; text-shadow: none !important;
//background: transparent !important; //background: transparent !important;
box-shadow: none !important; box-shadow: none !important;
@ -51,7 +51,7 @@
} }
pre, pre,
blockquote { blockquote {
border: $border-width solid #999; // Bootstrap custom code; using `$border-width` instead of 1px border: $border-width solid $gray-500; // Bootstrap custom code; using `$border-width` instead of 1px
page-break-inside: avoid; page-break-inside: avoid;
} }
@ -101,7 +101,7 @@
display: none; display: none;
} }
.badge { .badge {
border: $border-width solid #000; border: $border-width solid $black;
} }
.table { .table {
@ -109,13 +109,13 @@
td, td,
th { th {
background-color: #fff !important; background-color: $white !important;
} }
} }
.table-bordered { .table-bordered {
th, th,
td { td {
border: 1px solid #ddd !important; border: 1px solid $gray-300 !important;
} }
} }

View File

@ -19,6 +19,7 @@
justify-content: center; justify-content: center;
color: $progress-bar-color; color: $progress-bar-color;
text-align: center; text-align: center;
white-space: nowrap;
background-color: $progress-bar-bg; background-color: $progress-bar-bg;
@include transition($progress-bar-transition); @include transition($progress-bar-transition);
} }

View File

@ -30,7 +30,7 @@ html {
-webkit-text-size-adjust: 100%; // 4 -webkit-text-size-adjust: 100%; // 4
-ms-text-size-adjust: 100%; // 4 -ms-text-size-adjust: 100%; // 4
-ms-overflow-style: scrollbar; // 5 -ms-overflow-style: scrollbar; // 5
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); // 6 -webkit-tap-highlight-color: rgba($black, 0); // 6
} }
// IE10+ doesn't honor `<meta name="viewport">` in some cases. // IE10+ doesn't honor `<meta name="viewport">` in some cases.
@ -290,7 +290,7 @@ table {
caption { caption {
padding-top: $table-cell-padding; padding-top: $table-cell-padding;
padding-bottom: $table-cell-padding; padding-bottom: $table-cell-padding;
color: $text-muted; color: $table-caption-color;
text-align: left; text-align: left;
caption-side: bottom; caption-side: bottom;
} }
@ -309,7 +309,7 @@ th {
label { label {
// Allow labels to use `margin` for spacing. // Allow labels to use `margin` for spacing.
display: inline-block; display: inline-block;
margin-bottom: .5rem; margin-bottom: $label-margin-bottom;
} }
// Remove the default `border-radius` that macOS Chrome adds. // Remove the default `border-radius` that macOS Chrome adds.

View File

@ -42,9 +42,9 @@
} }
// Bordered version // Border versions
// //
// Add borders all around the table and between all the columns. // Add or remove borders all around the table and between all the columns.
.table-bordered { .table-bordered {
border: $table-border-width solid $table-border-color; border: $table-border-width solid $table-border-color;
@ -62,13 +62,21 @@
} }
} }
.table-borderless {
th,
td,
thead th,
tbody + tbody {
border: 0;
}
}
// Zebra-striping // Zebra-striping
// //
// Default zebra-stripe styles (alternating gray and transparent backgrounds) // Default zebra-stripe styles (alternating gray and transparent backgrounds)
.table-striped { .table-striped {
tbody tr:nth-of-type(odd) { tbody tr:nth-of-type(#{$table-striped-order}) {
background-color: $table-accent-bg; background-color: $table-accent-bg;
} }
} }

View File

@ -1,30 +1,16 @@
// stylelint-disable selector-no-qualifying-type // stylelint-disable selector-no-qualifying-type
.fade { .fade {
opacity: 0;
@include transition($transition-fade); @include transition($transition-fade);
&.show { &:not(.show) {
opacity: 1; opacity: 0;
} }
} }
.collapse { .collapse {
&:not(.show) {
display: none; display: none;
&.show {
display: block;
}
}
tr {
&.collapse.show {
display: table-row;
}
}
tbody {
&.collapse.show {
display: table-row-group;
} }
} }

View File

@ -8,6 +8,7 @@
@import "utilities/float"; @import "utilities/float";
@import "utilities/position"; @import "utilities/position";
@import "utilities/screenreaders"; @import "utilities/screenreaders";
@import "utilities/shadows";
@import "utilities/sizing"; @import "utilities/sizing";
@import "utilities/spacing"; @import "utilities/spacing";
@import "utilities/text"; @import "utilities/text";

View File

@ -132,7 +132,8 @@ $sizes: map-merge((
25: 25%, 25: 25%,
50: 50%, 50: 50%,
75: 75%, 75: 75%,
100: 100% 100: 100%,
auto: auto
), $sizes); ), $sizes);
// stylelint-enable // stylelint-enable
@ -211,6 +212,10 @@ $border-radius: .25rem !default;
$border-radius-lg: .3rem !default; $border-radius-lg: .3rem !default;
$border-radius-sm: .2rem !default; $border-radius-sm: .2rem !default;
$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;
$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;
$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;
$component-active-color: $white !default; $component-active-color: $white !default;
$component-active-bg: theme-color("primary") !default; $component-active-bg: theme-color("primary") !default;
@ -317,6 +322,9 @@ $table-dark-hover-bg: rgba($white, .075) !default;
$table-dark-border-color: lighten($gray-900, 7.5%) !default; $table-dark-border-color: lighten($gray-900, 7.5%) !default;
$table-dark-color: $body-bg !default; $table-dark-color: $body-bg !default;
$table-striped-order: odd !default;
$table-caption-color: $text-muted !default;
// Buttons + Forms // Buttons + Forms
// //
@ -380,6 +388,8 @@ $btn-transition: color .15s ease-in-out, background-color .15s ease
// Forms // Forms
$label-margin-bottom: .5rem !default;
$input-padding-y: $input-btn-padding-y !default; $input-padding-y: $input-btn-padding-y !default;
$input-padding-x: $input-btn-padding-x !default; $input-padding-x: $input-btn-padding-x !default;
$input-line-height: $input-btn-line-height !default; $input-line-height: $input-btn-line-height !default;
@ -411,6 +421,7 @@ $input-focus-width: $input-btn-focus-width !default;
$input-focus-box-shadow: $input-btn-focus-box-shadow !default; $input-focus-box-shadow: $input-btn-focus-box-shadow !default;
$input-placeholder-color: $gray-600 !default; $input-placeholder-color: $gray-600 !default;
$input-plaintext-color: $body-color !default;
$input-height-border: $input-border-width * 2 !default; $input-height-border: $input-border-width * 2 !default;
@ -480,7 +491,7 @@ $custom-select-indicator-padding: 1rem !default; // Extra padding to account f
$custom-select-line-height: $input-btn-line-height !default; $custom-select-line-height: $input-btn-line-height !default;
$custom-select-color: $input-color !default; $custom-select-color: $input-color !default;
$custom-select-disabled-color: $gray-600 !default; $custom-select-disabled-color: $gray-600 !default;
$custom-select-bg: $white !default; $custom-select-bg: $input-bg !default;
$custom-select-disabled-bg: $gray-200 !default; $custom-select-disabled-bg: $gray-200 !default;
$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions $custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions
$custom-select-indicator-color: $gray-800 !default; $custom-select-indicator-color: $gray-800 !default;
@ -498,6 +509,22 @@ $custom-select-height-sm: $input-height-sm !default;
$custom-select-font-size-lg: 125% !default; $custom-select-font-size-lg: 125% !default;
$custom-select-height-lg: $input-height-lg !default; $custom-select-height-lg: $input-height-lg !default;
$custom-range-track-width: 100% !default;
$custom-range-track-height: .5rem !default;
$custom-range-track-cursor: pointer !default;
$custom-range-track-bg: $gray-300 !default;
$custom-range-track-border-radius: 1rem !default;
$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;
$custom-range-thumb-width: 1rem !default;
$custom-range-thumb-height: $custom-range-thumb-width !default;
$custom-range-thumb-bg: $component-active-bg !default;
$custom-range-thumb-border: 0 !default;
$custom-range-thumb-border-radius: 1rem !default;
$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;
$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;
$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;
$custom-file-height: $input-height !default; $custom-file-height: $input-height !default;
$custom-file-focus-border-color: $input-focus-border-color !default; $custom-file-focus-border-color: $input-focus-border-color !default;
$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default; $custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;
@ -585,6 +612,9 @@ $nav-pills-border-radius: $border-radius !default;
$nav-pills-link-active-color: $component-active-color !default; $nav-pills-link-active-color: $component-active-color !default;
$nav-pills-link-active-bg: $component-active-bg !default; $nav-pills-link-active-bg: $component-active-bg !default;
$nav-divider-color: $gray-200 !default;
$nav-divider-margin-y: ($spacer / 2) !default;
// Navbar // Navbar
$navbar-padding-y: ($spacer / 2) !default; $navbar-padding-y: ($spacer / 2) !default;
@ -633,6 +663,7 @@ $pagination-border-width: $border-width !default;
$pagination-border-color: $gray-300 !default; $pagination-border-color: $gray-300 !default;
$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default; $pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;
$pagination-focus-outline: 0 !default;
$pagination-hover-color: $link-hover-color !default; $pagination-hover-color: $link-hover-color !default;
$pagination-hover-bg: $gray-200 !default; $pagination-hover-bg: $gray-200 !default;
@ -744,6 +775,7 @@ $modal-title-line-height: $line-height-base !default;
$modal-content-bg: $white !default; $modal-content-bg: $white !default;
$modal-content-border-color: rgba($black, .2) !default; $modal-content-border-color: rgba($black, .2) !default;
$modal-content-border-width: $border-width !default; $modal-content-border-width: $border-width !default;
$modal-content-border-radius: $border-radius-lg !default;
$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default; $modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;
$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default; $modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;
@ -842,7 +874,9 @@ $breadcrumb-margin-bottom: 1rem !default;
$breadcrumb-bg: $gray-200 !default; $breadcrumb-bg: $gray-200 !default;
$breadcrumb-divider-color: $gray-600 !default; $breadcrumb-divider-color: $gray-600 !default;
$breadcrumb-active-color: $gray-600 !default; $breadcrumb-active-color: $gray-600 !default;
$breadcrumb-divider: "/" !default; $breadcrumb-divider: quote("/") !default;
$breadcrumb-border-radius: $border-radius !default;
// Carousel // Carousel
@ -864,7 +898,7 @@ $carousel-control-icon-width: 20px !default;
$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), "#", "%23") !default; $carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), "#", "%23") !default;
$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), "#", "%23") !default; $carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), "#", "%23") !default;
$carousel-transition: transform .6s ease !default; $carousel-transition: transform .6s ease !default; // Define transform transition first if using multiple transitons (e.g., `transform 2s ease, opacity .5s ease-out`)
// Close // Close

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap Grid v4.0.0 (https://getbootstrap.com) * Bootstrap Grid v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap Reboot v4.0.0 (https://getbootstrap.com) * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap v4.0.0 (https://getbootstrap.com) * Bootstrap v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

View File

@ -14,6 +14,7 @@
@mixin caret-right { @mixin caret-right {
border-top: $caret-width solid transparent; border-top: $caret-width solid transparent;
border-right: 0;
border-bottom: $caret-width solid transparent; border-bottom: $caret-width solid transparent;
border-left: $caret-width solid; border-left: $caret-width solid;
} }

View File

@ -45,7 +45,7 @@
margin-top: .1rem; margin-top: .1rem;
font-size: .875rem; font-size: .875rem;
line-height: 1; line-height: 1;
color: #fff; color: $white;
background-color: rgba($color, .8); background-color: rgba($color, .8);
border-radius: .2rem; border-radius: .2rem;
} }

View File

@ -11,7 +11,7 @@
// Horizontal gradient, from left to right // Horizontal gradient, from left to right
// //
// Creates two color stops, start and end, by specifying a color and position for each color stop. // Creates two color stops, start and end, by specifying a color and position for each color stop.
@mixin gradient-x($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) { @mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);
background-repeat: repeat-x; background-repeat: repeat-x;
} }
@ -19,27 +19,27 @@
// Vertical gradient, from top to bottom // Vertical gradient, from top to bottom
// //
// Creates two color stops, start and end, by specifying a color and position for each color stop. // Creates two color stops, start and end, by specifying a color and position for each color stop.
@mixin gradient-y($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) { @mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);
background-repeat: repeat-x; background-repeat: repeat-x;
} }
@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) { @mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {
background-image: linear-gradient($deg, $start-color, $end-color); background-image: linear-gradient($deg, $start-color, $end-color);
background-repeat: repeat-x; background-repeat: repeat-x;
} }
@mixin gradient-x-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) { @mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
background-image: linear-gradient(to right, $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; background-repeat: no-repeat;
} }
@mixin gradient-y-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) { @mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
background-image: 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; background-repeat: no-repeat;
} }
@mixin gradient-radial($inner-color: #555, $outer-color: #333) { @mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {
background-image: radial-gradient(circle, $inner-color, $outer-color); background-image: radial-gradient(circle, $inner-color, $outer-color);
background-repeat: no-repeat; background-repeat: no-repeat;
} }
@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) { @mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {
background-image: 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);
} }

View File

@ -1,9 +1,7 @@
// stylelint-disable indentation
// Hover mixin and `$enable-hover-media-query` are deprecated. // Hover mixin and `$enable-hover-media-query` are deprecated.
// //
// Origally added during our alphas and maintained during betas, this mixin was // Origally added during our alphas and maintained during betas, this mixin was
// designed to prevent `:hover` stickiness on iOSan issue where hover styles // designed to prevent `:hover` stickiness on iOS-an issue where hover styles
// would persist after initial touch. // would persist after initial touch.
// //
// For backward compatibility, we've kept these mixins and updated them to // For backward compatibility, we've kept these mixins and updated them to

View File

@ -12,7 +12,7 @@
} }
&.active { &.active {
color: #fff; color: $white;
background-color: $color; background-color: $color;
border-color: $color; border-color: $color;
} }

View File

@ -2,9 +2,9 @@
// //
// Dividers (basically an hr) within dropdowns and nav lists // Dividers (basically an hr) within dropdowns and nav lists
@mixin nav-divider($color: #e5e5e5) { @mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y) {
height: 0; height: 0;
margin: ($spacer / 2) 0; margin: $margin-y 0;
overflow: hidden; overflow: hidden;
border-top: 1px solid $color; border-top: 1px solid $color;
} }

View File

@ -1,6 +1,6 @@
// Only display content to screen readers // Only display content to screen readers
// //
// See: http://a11yproject.com/posts/how-to-hide-content/ // See: https://a11yproject.com/posts/how-to-hide-content/
// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ // See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
@mixin sr-only { @mixin sr-only {
@ -11,7 +11,6 @@
overflow: hidden; overflow: hidden;
clip: rect(0, 0, 0, 0); clip: rect(0, 0, 0, 0);
white-space: nowrap; white-space: nowrap;
clip-path: inset(50%);
border: 0; border: 0;
} }
@ -30,6 +29,5 @@
overflow: visible; overflow: visible;
clip: auto; clip: auto;
white-space: normal; white-space: normal;
clip-path: none;
} }
} }

View File

@ -6,4 +6,6 @@
text-shadow: none; text-shadow: none;
background-color: transparent; background-color: transparent;
border: 0; border: 0;
@warn "The `text-hide()` mixin has been deprecated as of v4.1.0. It will be removed entirely in v5.";
} }

View File

@ -6,4 +6,8 @@
transition: $transition; transition: $transition;
} }
} }
@media screen and (prefers-reduced-motion: reduce) {
transition: none;
}
} }

View File

@ -16,6 +16,11 @@
.flex#{$infix}-wrap { flex-wrap: wrap !important; } .flex#{$infix}-wrap { flex-wrap: wrap !important; }
.flex#{$infix}-nowrap { flex-wrap: nowrap !important; } .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }
.flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; } .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }
.flex#{$infix}-fill { flex: 1 1 auto !important; }
.flex#{$infix}-grow-0 { flex-grow: 0 !important; }
.flex#{$infix}-grow-1 { flex-grow: 1 !important; }
.flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }
.flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }
.justify-content#{$infix}-start { justify-content: flex-start !important; } .justify-content#{$infix}-start { justify-content: flex-start !important; }
.justify-content#{$infix}-end { justify-content: flex-end !important; } .justify-content#{$infix}-end { justify-content: flex-end !important; }

View File

@ -3,6 +3,7 @@
// Common values // Common values
// Sass list not in variables since it's not intended for customization. // Sass list not in variables since it's not intended for customization.
// stylelint-disable-next-line scss/dollar-variable-default
$positions: static, relative, absolute, fixed, sticky; $positions: static, relative, absolute, fixed, sticky;
@each $position in $positions { @each $position in $positions {

View File

@ -0,0 +1,6 @@
// stylelint-disable declaration-no-important
.shadow-sm { box-shadow: $box-shadow-sm !important; }
.shadow { box-shadow: $box-shadow !important; }
.shadow-lg { box-shadow: $box-shadow-lg !important; }
.shadow-none { box-shadow: none !important; }

View File

@ -4,6 +4,8 @@
// Text // Text
// //
.text-monospace { font-family: $font-family-monospace; }
// Alignment // Alignment
.text-justify { text-align: justify !important; } .text-justify { text-align: justify !important; }
@ -37,14 +39,18 @@
// Contextual colors // Contextual colors
.text-white { color: #fff !important; } .text-white { color: $white !important; }
@each $color, $value in $theme-colors { @each $color, $value in $theme-colors {
@include text-emphasis-variant(".text-#{$color}", $value); @include text-emphasis-variant(".text-#{$color}", $value);
} }
.text-body { color: $body-color !important; }
.text-muted { color: $text-muted !important; } .text-muted { color: $text-muted !important; }
.text-black-50 { color: rgba($black, .5) !important; }
.text-white-50 { color: rgba($white, .5) !important; }
// Misc // Misc
.text-hide { .text-hide {

View File

@ -3,12 +3,12 @@ Theme Name: UnderStrap
Theme URI: http://understrap.com Theme URI: http://understrap.com
Author: Holger Koenemann Author: Holger Koenemann
Author URI: http://www.holgerkoenemann.de Author URI: http://www.holgerkoenemann.de
GitHub Theme URI: holger1411/understrap GitHub Theme URI: https://github.com/understrap/understrap
Description: Combination of Automattic´s _s theme and Bootstrap 4. Made as a solid starting point for your next theme project and WordPress website. Use it as starter theme or as a parent theme. It is up to you. Including Font Awesome support, built-in widget slider and much more you need for basic websites. IMPORTANT: All developer dependencies are not bundled with this install file. Just download the .zip, extract it and run "npm install" and "gulp copy-assets" inside the extracted /understrap folder. Description: Combination of Automattic´s _s theme and Bootstrap 4. Made as a solid starting point for your next theme project and WordPress website. Use it as starter theme or as a parent theme. It is up to you. Including Font Awesome support, built-in widget slider and much more you need for basic websites. IMPORTANT: All developer dependencies are not bundled with this install file. Just download the .zip, extract it and run "npm install" and "gulp copy-assets" inside the extracted /understrap folder.
That downloads everything and moves it in place so that you can recompile your CSS and JS files; That downloads everything and moves it in place so that you can recompile your CSS and JS files;
A developer version (with Gulp/node and Sass sources) is available on gitHub: https://github.com/holger1411/understrap A developer version (with Gulp/node and Sass sources) is available on gitHub: https://github.com/understrap/understrap
A child theme is available on Github, too: https://github.com/holger1411/understrap-child; A child theme is available on Github, too: https://github.com/understrap/understrap-child;
Version: 0.8.1 Version: 0.8.2
License: UnderStrap WordPress Theme, Copyright 2013-2017 Holger Koenemann License: UnderStrap WordPress Theme, Copyright 2013-2017 Holger Koenemann
UnderStrap is distributed under the terms of the GNU GPL version 2 UnderStrap is distributed under the terms of the GNU GPL version 2
License URI: http://www.gnu.org/licenses/gpl-2.0.html License URI: http://www.gnu.org/licenses/gpl-2.0.html

View File

@ -44,7 +44,7 @@ wc_print_notices(); ?>
<p class="woocommerce-form-row form-row"> <p class="woocommerce-form-row form-row">
<input type="hidden" name="wc_reset_password" value="true" /> <input type="hidden" name="wc_reset_password" value="true" />
<button type="submit" class="btn btn-outline-primary" value="<?php esc_attr_e( 'Save', 'understrap' ); ?>"><?php esc_html_e( 'Save', 'woocommerce' ); ?></button> <button type="submit" class="btn btn-outline-primary" value="<?php esc_attr_e( 'Save', 'understrap' ); ?>"><?php esc_html_e( 'Save', 'understrap' ); ?></button>
</p> </p>
<?php wp_nonce_field( 'reset_password' ); ?> <?php wp_nonce_field( 'reset_password' ); ?>

View File

@ -23,7 +23,7 @@ if ( ! defined( 'ABSPATH' ) ) {
?> ?>
<form role="search" method="get" class="woocommerce-product-search" action="<?php echo esc_url( home_url( '/' ) ); ?>"> <form role="search" method="get" class="woocommerce-product-search" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<div class="input-group"> <div class="input-group">
<label class="sr-only" for="woocommerce-product-search-field-<?php echo isset( $index ) ? absint( $index ) : 0; ?>"><?php esc_html_e( 'Search for:', 'woocommerce' ); ?></label> <label class="sr-only" for="woocommerce-product-search-field-<?php echo isset( $index ) ? absint( $index ) : 0; ?>"><?php esc_html_e( 'Search for:', 'understrap' ); ?></label>
<input type="search" id="woocommerce-product-search-field-<?php echo isset( $index ) ? absint( $index ) : 0; ?>" class="search-field field form-control" placeholder="<?php echo esc_attr__( 'Search products&hellip;', 'understrap' ); ?>" value="<?php echo get_search_query(); ?>" name="s" /> <input type="search" id="woocommerce-product-search-field-<?php echo isset( $index ) ? absint( $index ) : 0; ?>" class="search-field field form-control" placeholder="<?php echo esc_attr__( 'Search products&hellip;', 'understrap' ); ?>" value="<?php echo get_search_query(); ?>" name="s" />
<input type="hidden" name="post_type" value="product" /> <input type="hidden" name="post_type" value="product" />
<span class="input-group-append"> <span class="input-group-append">