update to 0.5.1
This commit is contained in:
parent
ec61c7ff86
commit
724c9ed0a2
1896
css/child-theme.css
1896
css/child-theme.css
File diff suppressed because it is too large
Load diff
4
css/child-theme.min.css
vendored
4
css/child-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
File diff suppressed because it is too large
Load diff
BIN
fonts/fontawesome-webfont.eot
Normal file
BIN
fonts/fontawesome-webfont.eot
Normal file
Binary file not shown.
24
gulpconfig.json
Normal file
24
gulpconfig.json
Normal file
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"browserSyncOptions" : {
|
||||
"proxy": "localhost/wordpress/",
|
||||
"notify": false
|
||||
},
|
||||
"browserSyncWatchFiles" : [
|
||||
"./css/*.min.css",
|
||||
"./js/*.min.js",
|
||||
"./**/*.php"
|
||||
],
|
||||
"paths" : {
|
||||
"js": "./js",
|
||||
"css": "./css",
|
||||
"img": "./img",
|
||||
"imgsrc": "./src/img",
|
||||
"sass": "./sass",
|
||||
"node": "./node_modules/",
|
||||
"bower": "./bower_components/",
|
||||
"dev": "./src",
|
||||
"dist": "./dist",
|
||||
"distprod": "./dist-product",
|
||||
"vendor": ""
|
||||
}
|
||||
}
|
355
gulpfile.js
355
gulpfile.js
|
@ -1,200 +1,192 @@
|
|||
// Defining base pathes
|
||||
var basePaths = {
|
||||
js: './js/',
|
||||
node: './node_modules/',
|
||||
dev: './src/'
|
||||
};
|
||||
|
||||
// browser-sync watched files
|
||||
// automatically reloads the page when files changed
|
||||
var browserSyncWatchFiles = [
|
||||
'./css/*.min.css',
|
||||
'./js/*.min.js',
|
||||
'./*.php'
|
||||
];
|
||||
// browser-sync options
|
||||
// see: https://www.browsersync.io/docs/options/
|
||||
var browserSyncOptions = {
|
||||
proxy: "localhost/understrap/",
|
||||
notify: false
|
||||
};
|
||||
|
||||
// Defining requirements
|
||||
var gulp = require('gulp');
|
||||
var plumber = require('gulp-plumber');
|
||||
var sass = require('gulp-sass');
|
||||
var watch = require('gulp-watch');
|
||||
var cssnano = require('gulp-cssnano');
|
||||
var rename = require('gulp-rename');
|
||||
var concat = require('gulp-concat');
|
||||
var uglify = require('gulp-uglify');
|
||||
var merge2 = require('merge2');
|
||||
var imagemin = require('gulp-imagemin');
|
||||
var ignore = require('gulp-ignore');
|
||||
var rimraf = require('gulp-rimraf');
|
||||
var clone = require('gulp-clone');
|
||||
var merge = require('gulp-merge');
|
||||
var sourcemaps = require('gulp-sourcemaps');
|
||||
var browserSync = require('browser-sync').create();
|
||||
var del = require('del');
|
||||
var cleanCSS = require('gulp-clean-css');
|
||||
var gulpSequence = require('gulp-sequence')
|
||||
var gulp = require( 'gulp' );
|
||||
var plumber = require( 'gulp-plumber' );
|
||||
var sass = require( 'gulp-sass' );
|
||||
var watch = require( 'gulp-watch' );
|
||||
var cssnano = require( 'gulp-cssnano' );
|
||||
var rename = require( 'gulp-rename' );
|
||||
var concat = require( 'gulp-concat' );
|
||||
var uglify = require( 'gulp-uglify' );
|
||||
var merge2 = require( 'merge2' );
|
||||
var imagemin = require( 'gulp-imagemin' );
|
||||
var ignore = require( 'gulp-ignore' );
|
||||
var rimraf = require( 'gulp-rimraf' );
|
||||
var clone = require( 'gulp-clone' );
|
||||
var merge = require( 'gulp-merge' );
|
||||
var sourcemaps = require( 'gulp-sourcemaps' );
|
||||
var browserSync = require( 'browser-sync' ).create();
|
||||
var del = require( 'del' );
|
||||
var cleanCSS = require( 'gulp-clean-css' );
|
||||
var gulpSequence = require( 'gulp-sequence' );
|
||||
var replace = require( 'gulp-replace' );
|
||||
var autoprefixer = require( 'gulp-autoprefixer' );
|
||||
|
||||
function swallowError(self, error) {
|
||||
console.log(error.toString())
|
||||
|
||||
self.emit('end')
|
||||
}
|
||||
// Configuration file to keep your code DRY
|
||||
var cfg = require( './gulpconfig.json' );
|
||||
var paths = cfg.paths;
|
||||
|
||||
// Run:
|
||||
// gulp sass + cssnano + rename
|
||||
// Prepare the min.css for production (with 2 pipes to be sure that "child-theme.css" == "child-theme.min.css")
|
||||
gulp.task('scss-for-prod', function() {
|
||||
var source = gulp.src('./sass/*.scss')
|
||||
.pipe(plumber({ errorHandler: function (error) { swallowError(this, error); } }))
|
||||
.pipe(sourcemaps.init({loadMaps: true}))
|
||||
.pipe(sass());
|
||||
// Prepare the min.css for production (with 2 pipes to be sure that "theme.css" == "theme.min.css")
|
||||
gulp.task( 'scss-for-prod', function() {
|
||||
var source = gulp.src( paths.sass + '/*.scss' )
|
||||
.pipe( plumber({
|
||||
errorHandler: function( err ) {
|
||||
console.log( err );
|
||||
this.emit( 'end' );
|
||||
}
|
||||
}) )
|
||||
.pipe( sourcemaps.init({ loadMaps: true }) )
|
||||
.pipe( sass() );
|
||||
|
||||
var pipe1 = source.pipe(clone())
|
||||
.pipe(sourcemaps.write(undefined, { sourceRoot: null }))
|
||||
.pipe(gulp.dest('./css'))
|
||||
.pipe(rename('custom-editor-style.css'))
|
||||
.pipe(gulp.dest('./css'));
|
||||
var pipe1 = source.pipe( clone() )
|
||||
.pipe( sourcemaps.write( undefined, { sourceRoot: null } ) )
|
||||
.pipe( gulp.dest( paths.css ) )
|
||||
.pipe( rename( 'custom-editor-style.css' ) );
|
||||
|
||||
var pipe2 = source.pipe(clone())
|
||||
.pipe(plumber({ errorHandler: function (error) { swallowError(this, error); } }))
|
||||
.pipe(cssnano())
|
||||
.pipe(rename({suffix: '.min'}))
|
||||
.pipe(gulp.dest('./css'));
|
||||
|
||||
return merge(pipe1, pipe2);
|
||||
var pipe2 = source.pipe( clone() )
|
||||
.pipe( minifycss() )
|
||||
.pipe( rename( { suffix: '.min' } ) )
|
||||
.pipe( gulp.dest( paths.css ) );
|
||||
return merge( pipe1, pipe2 );
|
||||
});
|
||||
|
||||
|
||||
// Run:
|
||||
// gulp sourcemaps + sass + reload(browserSync)
|
||||
// Prepare the child-theme.css for the development environment
|
||||
gulp.task('scss-for-dev', function() {
|
||||
gulp.src('./sass/*.scss')
|
||||
.pipe(plumber({ errorHandler: function (error) { swallowError(this, error); } }))
|
||||
.pipe(sourcemaps.init({loadMaps: true}))
|
||||
.pipe(sass())
|
||||
.pipe(sourcemaps.write(undefined, { sourceRoot: null }))
|
||||
.pipe(gulp.dest('./css'))
|
||||
gulp.task( 'scss-for-dev', function() {
|
||||
gulp.src( paths.sass + '/*.scss' )
|
||||
.pipe( plumber( {
|
||||
errorHandler: function( err ) {
|
||||
console.log( err );
|
||||
this.emit( 'end' );
|
||||
}
|
||||
} ) )
|
||||
.pipe( sourcemaps.init({ loadMaps: true }) )
|
||||
.pipe( sass() )
|
||||
.pipe( sourcemaps.write( undefined, { sourceRoot: null } ) )
|
||||
.pipe( gulp.dest( paths.css ) );
|
||||
});
|
||||
|
||||
gulp.task('watch-scss', ['browser-sync'], function () {
|
||||
gulp.watch('./sass/**/*.scss', ['scss-for-dev']);
|
||||
gulp.task( 'watch-scss', ['browser-sync'], function() {
|
||||
gulp.watch( paths.sass + '/**/*.scss', ['scss-for-dev'] );
|
||||
});
|
||||
|
||||
// Run:
|
||||
// gulp sass
|
||||
// Compiles SCSS files in CSS
|
||||
gulp.task('sass', function () {
|
||||
var stream = gulp.src('./sass/*.scss')
|
||||
.pipe(plumber({
|
||||
errorHandler: function (err) {
|
||||
console.log(err);
|
||||
this.emit('end');
|
||||
gulp.task( 'sass', function() {
|
||||
var stream = gulp.src( paths.sass + '/*.scss' )
|
||||
.pipe( plumber( {
|
||||
errorHandler: function( err ) {
|
||||
console.log( err );
|
||||
this.emit( 'end' );
|
||||
}
|
||||
}))
|
||||
.pipe(sass())
|
||||
.pipe(gulp.dest('./css'))
|
||||
.pipe(rename('custom-editor-style.css'))
|
||||
} ) )
|
||||
.pipe( sass( { errLogToConsole: true } ) )
|
||||
.pipe( autoprefixer( 'last 2 versions' ) )
|
||||
.pipe( gulp.dest( paths.css ) )
|
||||
.pipe( rename( 'custom-editor-style.css' ) );
|
||||
return stream;
|
||||
});
|
||||
|
||||
// Run:
|
||||
// gulp watch
|
||||
// Starts watcher. Watcher runs gulp sass task on changes
|
||||
gulp.task('watch', function () {
|
||||
gulp.watch('./sass/**/*.scss', ['styles']);
|
||||
gulp.watch([basePaths.dev + 'js/**/*.js','js/**/*.js','!js/child-theme.js','!js/child-theme.min.js'], ['scripts']);
|
||||
gulp.task( 'watch', function() {
|
||||
gulp.watch( paths.sass + '/**/*.scss', ['styles'] );
|
||||
gulp.watch( [paths.dev + '/js/**/*.js', 'js/**/*.js', '!js/theme.js', '!js/theme.min.js'], ['scripts'] );
|
||||
|
||||
//Inside the watch task.
|
||||
gulp.watch('./img/**', ['imagemin'])
|
||||
gulp.watch( paths.imgsrc + '/**', ['imagemin-watch'] );
|
||||
});
|
||||
|
||||
// Run:
|
||||
// gulp imagemin
|
||||
// Running image optimizing task
|
||||
gulp.task('imagemin', function(){
|
||||
gulp.src('img/src/**')
|
||||
.pipe(imagemin())
|
||||
.pipe(gulp.dest('img'))
|
||||
gulp.task( 'imagemin', function() {
|
||||
gulp.src( paths.imgsrc + '/**' )
|
||||
.pipe( imagemin() )
|
||||
.pipe( gulp.dest( paths.img ) );
|
||||
});
|
||||
|
||||
// Run:
|
||||
// gulp nanocss
|
||||
// gulp cssnano
|
||||
// Minifies CSS files
|
||||
gulp.task('cssnano', ['cleancss'], function(){
|
||||
return gulp.src('./css/*.css')
|
||||
.pipe(sourcemaps.init({loadMaps: true}))
|
||||
.pipe(plumber({ errorHandler: function (error) { swallowError(self, error); } }))
|
||||
.pipe(rename({suffix: '.min'}))
|
||||
.pipe(cssnano({discardComments: {removeAll: true}}))
|
||||
.pipe(sourcemaps.write('./'))
|
||||
.pipe(gulp.dest('./css/'));
|
||||
});
|
||||
|
||||
gulp.task('minify-css', function() {
|
||||
return gulp.src('./css/child-theme.css')
|
||||
.pipe(sourcemaps.init({loadMaps: true}))
|
||||
.pipe(cleanCSS({compatibility: '*'}))
|
||||
.pipe(plumber({
|
||||
errorHandler: function (err) {
|
||||
console.log(err);
|
||||
this.emit('end');
|
||||
gulp.task( 'cssnano', function() {
|
||||
return gulp.src( paths.css + '/child-theme.css' )
|
||||
.pipe( sourcemaps.init( { loadMaps: true } ) )
|
||||
.pipe( plumber( {
|
||||
errorHandler: function( err ) {
|
||||
console.log( err );
|
||||
this.emit( 'end' );
|
||||
}
|
||||
}))
|
||||
.pipe(rename({suffix: '.min'}))
|
||||
.pipe(sourcemaps.write('./'))
|
||||
.pipe(gulp.dest('./css/'));
|
||||
} ) )
|
||||
.pipe( rename( { suffix: '.min' } ) )
|
||||
.pipe( cssnano( { discardComments: { removeAll: true } } ) )
|
||||
.pipe( sourcemaps.write( './' ) )
|
||||
.pipe( gulp.dest( paths.css ) );
|
||||
});
|
||||
|
||||
gulp.task('cleancss', function() {
|
||||
return gulp.src('./css/*.min.css', { read: false }) // much faster
|
||||
.pipe(ignore('child-theme.css'))
|
||||
.pipe(rimraf());
|
||||
gulp.task( 'minifycss', function() {
|
||||
return gulp.src( paths.css + '/child-theme.css' )
|
||||
.pipe( sourcemaps.init( { loadMaps: true } ) )
|
||||
.pipe( cleanCSS( { compatibility: '*' } ) )
|
||||
.pipe( plumber( {
|
||||
errorHandler: function( err ) {
|
||||
console.log( err ) ;
|
||||
this.emit( 'end' );
|
||||
}
|
||||
} ) )
|
||||
.pipe( rename( { suffix: '.min' } ) )
|
||||
.pipe( sourcemaps.write( './' ) )
|
||||
.pipe( gulp.dest( paths.css ) );
|
||||
});
|
||||
|
||||
gulp.task('styles', function(callback){ gulpSequence('sass', 'minify-css')(callback) });
|
||||
gulp.task( 'cleancss', function() {
|
||||
return gulp.src( paths.css + '/*.min.css', { read: false } ) // Much faster
|
||||
.pipe( ignore( 'child-theme.css' ) )
|
||||
.pipe( rimraf() );
|
||||
});
|
||||
|
||||
gulp.task( 'styles', function( callback ) {
|
||||
gulpSequence( 'sass', 'minifycss' )( callback );
|
||||
} );
|
||||
|
||||
// Run:
|
||||
// gulp browser-sync
|
||||
// Starts browser-sync task for starting the server.
|
||||
gulp.task('browser-sync', function() {
|
||||
browserSync.init(browserSyncWatchFiles, browserSyncOptions);
|
||||
});
|
||||
gulp.task( 'browser-sync', function() {
|
||||
browserSync.init( cfg.browserSyncWatchFiles, cfg.browserSyncOptions );
|
||||
} );
|
||||
|
||||
// Run:
|
||||
// gulp watch-bs
|
||||
// Starts watcher with browser-sync. Browser-sync reloads page automatically on your browser
|
||||
gulp.task('watch-bs', ['browser-sync', 'watch', 'scripts'], function () { });
|
||||
gulp.task( 'watch-bs', ['browser-sync', 'watch', 'scripts'], function() {
|
||||
} );
|
||||
|
||||
// Run:
|
||||
// gulp scripts.
|
||||
// Run:
|
||||
// gulp scripts.
|
||||
// Uglifies and concat all JS files into one
|
||||
gulp.task('scripts', function() {
|
||||
gulp.task( 'scripts', function() {
|
||||
var scripts = [
|
||||
|
||||
// Start - All BS4 stuff
|
||||
basePaths.dev + 'js/bootstrap4/bootstrap.js',
|
||||
paths.dev + '/js/bootstrap4/bootstrap.js',
|
||||
|
||||
// End - All BS4 stuff
|
||||
|
||||
basePaths.dev + 'js/skip-link-focus-fix.js'
|
||||
paths.dev + '/js/skip-link-focus-fix.js'
|
||||
];
|
||||
gulp.src(scripts)
|
||||
.pipe(concat('child-theme.min.js'))
|
||||
.pipe(uglify().on('error', function(e){
|
||||
console.log(e);
|
||||
}))
|
||||
.pipe(gulp.dest('./js/'));
|
||||
gulp.src( scripts )
|
||||
.pipe( concat( 'child-theme.min.js' ) )
|
||||
.pipe( uglify() )
|
||||
.pipe( gulp.dest( paths.js ) );
|
||||
|
||||
gulp.src(scripts)
|
||||
.pipe(concat('child-theme.js'))
|
||||
.pipe(gulp.dest('./js/'));
|
||||
gulp.src( scripts )
|
||||
.pipe( concat( 'child-theme.js' ) )
|
||||
.pipe( gulp.dest( paths.js ) );
|
||||
});
|
||||
|
||||
// Deleting any file inside the /src folder
|
||||
|
@ -206,74 +198,83 @@ gulp.task('clean-source', function () {
|
|||
// gulp copy-assets.
|
||||
// Copy all needed dependency assets files from bower_component assets to themes /js, /scss and /fonts folder. Run this task after bower install or bower update
|
||||
|
||||
|
||||
// Copy all Bootstrap JS files
|
||||
gulp.task('copy-assets', function() {
|
||||
////////////////// All Bootstrap SASS Assets /////////////////////////
|
||||
gulp.task( 'copy-assets', function() {
|
||||
|
||||
////////////////// All Bootstrap 4 Assets /////////////////////////
|
||||
// Copy all Bootstrap JS files
|
||||
gulp.src(basePaths.node + 'bootstrap/dist/js/**/*.js')
|
||||
.pipe(gulp.dest(basePaths.dev + '/js/bootstrap4'));
|
||||
// Copy all JS files
|
||||
var stream = gulp.src( paths.node + 'bootstrap/dist/js/**/*.js' )
|
||||
.pipe( gulp.dest( paths.dev + '/js/bootstrap4' ) );
|
||||
|
||||
// Copy all Bootstrap SCSS files
|
||||
gulp.src(basePaths.node + 'bootstrap/scss/**/*.scss')
|
||||
.pipe(gulp.dest(basePaths.dev + '/sass/bootstrap4'));
|
||||
gulp.src( paths.node + 'bootstrap/scss/**/*.scss' )
|
||||
.pipe( gulp.dest( paths.dev + '/sass/bootstrap4' ) );
|
||||
|
||||
////////////////// End Bootstrap 4 Assets /////////////////////////
|
||||
|
||||
// Copy all UnderStrap SCSS files
|
||||
gulp.src(basePaths.node + 'understrap/sass/**/*.scss')
|
||||
.pipe(gulp.dest(basePaths.dev + '/sass/understrap'));
|
||||
|
||||
// Copy all Font Awesome Fonts
|
||||
gulp.src(basePaths.node + 'font-awesome/fonts/**/*.{ttf,woff,woff2,eof,svg}')
|
||||
.pipe(gulp.dest('./fonts'));
|
||||
gulp.src( paths.node + 'font-awesome/fonts/**/*.{ttf,woff,woff2,eot,svg}' )
|
||||
.pipe( gulp.dest( './fonts' ) );
|
||||
|
||||
// Copy all Font Awesome SCSS files
|
||||
gulp.src(basePaths.node + 'font-awesome/scss/*.scss')
|
||||
.pipe(gulp.dest(basePaths.dev + '/sass/fontawesome'));
|
||||
gulp.src( paths.node + 'font-awesome/scss/*.scss' )
|
||||
.pipe( gulp.dest( paths.dev + '/sass/fontawesome' ) );
|
||||
|
||||
|
||||
// _s SCSS files
|
||||
gulp.src(basePaths.node + 'undescores-for-npm/sass/**/*.scss')
|
||||
.pipe(gulp.dest(basePaths.dev + '/sass/underscores'));
|
||||
gulp.src( paths.node + 'undescores-for-npm/sass/media/*.scss' )
|
||||
.pipe( gulp.dest( paths.dev + '/sass/underscores' ) );
|
||||
|
||||
// _s JS files into /src/js
|
||||
gulp.src(basePaths.node + 'undescores-for-npm/js/*.js')
|
||||
.pipe(gulp.dest(basePaths.dev + '/js'));
|
||||
gulp.src( paths.node + 'undescores-for-npm/js/skip-link-focus-fix.js' )
|
||||
.pipe( gulp.dest( paths.dev + '/js' ) );
|
||||
|
||||
// _s JS files into /js
|
||||
gulp.src(basePaths.node + 'undescores-for-npm/js/*.js')
|
||||
.pipe(gulp.dest(basePaths.js));
|
||||
gulp.src( paths.node + 'undescores-for-npm/js/skip-link-focus-fix.js' )
|
||||
.pipe( gulp.dest( paths.js + paths.vendor ) );
|
||||
|
||||
// Copy Popper JS files
|
||||
gulp.src(basePaths.node + 'popper.js/dist/umd/popper.min.js')
|
||||
.pipe(gulp.dest(basePaths.js));
|
||||
gulp.src( paths.node + 'popper.js/dist/umd/popper.min.js' )
|
||||
.pipe( gulp.dest( paths.js + paths.vendor ) );
|
||||
gulp.src( paths.node + 'popper.js/dist/umd/popper.js' )
|
||||
.pipe( gulp.dest( paths.js + paths.vendor ) );
|
||||
return stream;
|
||||
|
||||
gulp.src(basePaths.node + 'popper.js/dist/umd/popper.js')
|
||||
.pipe(gulp.dest(basePaths.js));
|
||||
// UnderStrap SCSS files
|
||||
gulp.src( paths.node + 'understrap/sass/**/*.scss' )
|
||||
.pipe( gulp.dest( paths.dev + '/sass/understrap' ) );
|
||||
});
|
||||
|
||||
// Deleting the files distributed by the copy-assets task
|
||||
gulp.task( 'clean-vendor-assets', function() {
|
||||
return del( [paths.dev + '/js/bootstrap4/**', paths.dev + '/sass/bootstrap4/**', './fonts/*wesome*.{ttf,woff,woff2,eot,svg}', paths.dev + '/sass/fontawesome/**', paths.dev + '/sass/underscores/**', paths.dev + '/js/skip-link-focus-fix.js', paths.js + '/**/skip-link-focus-fix.js', paths.js + '/**/popper.min.js', paths.js + '/**/popper.js', ( paths.vendor !== ''?( paths.js + paths.vendor + '/**' ):'' )] );
|
||||
});
|
||||
|
||||
// Run
|
||||
// gulp dist
|
||||
// Copies the files to the /dist folder for distributon
|
||||
gulp.task('dist', ['clean-dist'], function() {
|
||||
gulp.src(['**/*','!bower_components','!bower_components/**','!node_modules','!node_modules/**','!src','!src/**','!dist','!dist/**','!sass','!sass/**','!readme.txt','!readme.md','!package.json','!gulpfile.js','!CHANGELOG.md','!.travis.yml','!jshintignore', '!codesniffer.ruleset.xml', '*'])
|
||||
.pipe(gulp.dest('dist/'))
|
||||
// Copies the files to the /dist folder for distribution as simple theme
|
||||
gulp.task( 'dist', ['clean-dist'], function() {
|
||||
return gulp.src( ['**/*', '!' + paths.bower, '!' + paths.bower + '/**', '!' + paths.node, '!' + paths.node + '/**', '!' + paths.dev, '!' + paths.dev + '/**', '!' + paths.dist, '!' + paths.dist + '/**', '!' + paths.distprod, '!' + paths.distprod + '/**', '!' + paths.sass, '!' + paths.sass + '/**', '!readme.txt', '!readme.md', '!package.json', '!package-lock.json', '!gulpfile.js', '!gulpconfig.json', '!CHANGELOG.md', '!.travis.yml', '!jshintignore', '!codesniffer.ruleset.xml', '*'], { 'buffer': false } )
|
||||
.pipe( replace( '/js/jquery.slim.min.js', '/js' + paths.vendor + '/jquery.slim.min.js', { 'skipBinary': true } ) )
|
||||
.pipe( replace( '/js/popper.min.js', '/js' + paths.vendor + '/popper.min.js', { 'skipBinary': true } ) )
|
||||
.pipe( replace( '/js/skip-link-focus-fix.js', '/js' + paths.vendor + '/skip-link-focus-fix.js', { 'skipBinary': true } ) )
|
||||
.pipe( gulp.dest( paths.dist ) );
|
||||
});
|
||||
|
||||
// Deleting any file inside the /dist folder
|
||||
gulp.task('clean-dist', function () {
|
||||
return del(['dist/**/*',]);
|
||||
gulp.task( 'clean-dist', function() {
|
||||
return del( [paths.dist + '/**'] );
|
||||
});
|
||||
|
||||
// Run
|
||||
// gulp dist-product
|
||||
// Copies the files to the /dist folder for distributon
|
||||
gulp.task('dist-product', ['clean-dist-product'], function() {
|
||||
gulp.src(['**/*','!bower_components','!bower_components/**','!node_modules','!node_modules/**','!dist','!dist/**', '*'])
|
||||
.pipe(gulp.dest('dist-product/'))
|
||||
});
|
||||
// Copies the files to the /dist-prod folder for distribution as theme with all assets
|
||||
gulp.task( 'dist-product', ['clean-dist-product'], function() {
|
||||
return gulp.src( ['**/*', '!' + paths.bower, '!' + paths.bower + '/**', '!' + paths.node, '!' + paths.node + '/**', '!' + paths.dist, '!' + paths.dist +'/**', '!' + paths.distprod, '!' + paths.distprod + '/**', '*'] )
|
||||
.pipe( gulp.dest( paths.distprod ) );
|
||||
} );
|
||||
|
||||
// Deleting any file inside the /dist-product folder
|
||||
gulp.task('clean-dist-product', function () {
|
||||
return del(['dist-product/**/*',]);
|
||||
});
|
||||
gulp.task( 'clean-dist-product', function() {
|
||||
return del( [paths.distprod + '/**'] );
|
||||
} );
|
||||
|
|
2
js/child-theme.min.js
vendored
2
js/child-theme.min.js
vendored
File diff suppressed because one or more lines are too long
476
js/core.js
476
js/core.js
|
@ -1,476 +0,0 @@
|
|||
/* global Symbol */
|
||||
// Defining this global in .eslintrc.json would create a danger of using the global
|
||||
// unguarded in another place, it seems safer to define global only for this module
|
||||
|
||||
define( [
|
||||
"./var/arr",
|
||||
"./var/document",
|
||||
"./var/getProto",
|
||||
"./var/slice",
|
||||
"./var/concat",
|
||||
"./var/push",
|
||||
"./var/indexOf",
|
||||
"./var/class2type",
|
||||
"./var/toString",
|
||||
"./var/hasOwn",
|
||||
"./var/fnToString",
|
||||
"./var/ObjectFunctionString",
|
||||
"./var/support",
|
||||
"./core/DOMEval"
|
||||
], function( arr, document, getProto, slice, concat, push, indexOf,
|
||||
class2type, toString, hasOwn, fnToString, ObjectFunctionString,
|
||||
support, DOMEval ) {
|
||||
|
||||
"use strict";
|
||||
|
||||
var
|
||||
version = "3.2.1",
|
||||
|
||||
// Define a local copy of jQuery
|
||||
jQuery = function( selector, context ) {
|
||||
|
||||
// The jQuery object is actually just the init constructor 'enhanced'
|
||||
// Need init if jQuery is called (just allow error to be thrown if not included)
|
||||
return new jQuery.fn.init( selector, context );
|
||||
},
|
||||
|
||||
// Support: Android <=4.0 only
|
||||
// Make sure we trim BOM and NBSP
|
||||
rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
|
||||
|
||||
// Matches dashed string for camelizing
|
||||
rmsPrefix = /^-ms-/,
|
||||
rdashAlpha = /-([a-z])/g,
|
||||
|
||||
// Used by jQuery.camelCase as callback to replace()
|
||||
fcamelCase = function( all, letter ) {
|
||||
return letter.toUpperCase();
|
||||
};
|
||||
|
||||
jQuery.fn = jQuery.prototype = {
|
||||
|
||||
// The current version of jQuery being used
|
||||
jquery: version,
|
||||
|
||||
constructor: jQuery,
|
||||
|
||||
// The default length of a jQuery object is 0
|
||||
length: 0,
|
||||
|
||||
toArray: function() {
|
||||
return slice.call( this );
|
||||
},
|
||||
|
||||
// Get the Nth element in the matched element set OR
|
||||
// Get the whole matched element set as a clean array
|
||||
get: function( num ) {
|
||||
|
||||
// Return all the elements in a clean array
|
||||
if ( num == null ) {
|
||||
return slice.call( this );
|
||||
}
|
||||
|
||||
// Return just the one element from the set
|
||||
return num < 0 ? this[ num + this.length ] : this[ num ];
|
||||
},
|
||||
|
||||
// Take an array of elements and push it onto the stack
|
||||
// (returning the new matched element set)
|
||||
pushStack: function( elems ) {
|
||||
|
||||
// Build a new jQuery matched element set
|
||||
var ret = jQuery.merge( this.constructor(), elems );
|
||||
|
||||
// Add the old object onto the stack (as a reference)
|
||||
ret.prevObject = this;
|
||||
|
||||
// Return the newly-formed element set
|
||||
return ret;
|
||||
},
|
||||
|
||||
// Execute a callback for every element in the matched set.
|
||||
each: function( callback ) {
|
||||
return jQuery.each( this, callback );
|
||||
},
|
||||
|
||||
map: function( callback ) {
|
||||
return this.pushStack( jQuery.map( this, function( elem, i ) {
|
||||
return callback.call( elem, i, elem );
|
||||
} ) );
|
||||
},
|
||||
|
||||
slice: function() {
|
||||
return this.pushStack( slice.apply( this, arguments ) );
|
||||
},
|
||||
|
||||
first: function() {
|
||||
return this.eq( 0 );
|
||||
},
|
||||
|
||||
last: function() {
|
||||
return this.eq( -1 );
|
||||
},
|
||||
|
||||
eq: function( i ) {
|
||||
var len = this.length,
|
||||
j = +i + ( i < 0 ? len : 0 );
|
||||
return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
|
||||
},
|
||||
|
||||
end: function() {
|
||||
return this.prevObject || this.constructor();
|
||||
},
|
||||
|
||||
// For internal use only.
|
||||
// Behaves like an Array's method, not like a jQuery method.
|
||||
push: push,
|
||||
sort: arr.sort,
|
||||
splice: arr.splice
|
||||
};
|
||||
|
||||
jQuery.extend = jQuery.fn.extend = function() {
|
||||
var options, name, src, copy, copyIsArray, clone,
|
||||
target = arguments[ 0 ] || {},
|
||||
i = 1,
|
||||
length = arguments.length,
|
||||
deep = false;
|
||||
|
||||
// Handle a deep copy situation
|
||||
if ( typeof target === "boolean" ) {
|
||||
deep = target;
|
||||
|
||||
// Skip the boolean and the target
|
||||
target = arguments[ i ] || {};
|
||||
i++;
|
||||
}
|
||||
|
||||
// Handle case when target is a string or something (possible in deep copy)
|
||||
if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
|
||||
target = {};
|
||||
}
|
||||
|
||||
// Extend jQuery itself if only one argument is passed
|
||||
if ( i === length ) {
|
||||
target = this;
|
||||
i--;
|
||||
}
|
||||
|
||||
for ( ; i < length; i++ ) {
|
||||
|
||||
// Only deal with non-null/undefined values
|
||||
if ( ( options = arguments[ i ] ) != null ) {
|
||||
|
||||
// Extend the base object
|
||||
for ( name in options ) {
|
||||
src = target[ name ];
|
||||
copy = options[ name ];
|
||||
|
||||
// Prevent never-ending loop
|
||||
if ( target === copy ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Recurse if we're merging plain objects or arrays
|
||||
if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
|
||||
( copyIsArray = Array.isArray( copy ) ) ) ) {
|
||||
|
||||
if ( copyIsArray ) {
|
||||
copyIsArray = false;
|
||||
clone = src && Array.isArray( src ) ? src : [];
|
||||
|
||||
} else {
|
||||
clone = src && jQuery.isPlainObject( src ) ? src : {};
|
||||
}
|
||||
|
||||
// Never move original objects, clone them
|
||||
target[ name ] = jQuery.extend( deep, clone, copy );
|
||||
|
||||
// Don't bring in undefined values
|
||||
} else if ( copy !== undefined ) {
|
||||
target[ name ] = copy;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Return the modified object
|
||||
return target;
|
||||
};
|
||||
|
||||
jQuery.extend( {
|
||||
|
||||
// Unique for each copy of jQuery on the page
|
||||
expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
|
||||
|
||||
// Assume jQuery is ready without the ready module
|
||||
isReady: true,
|
||||
|
||||
error: function( msg ) {
|
||||
throw new Error( msg );
|
||||
},
|
||||
|
||||
noop: function() {},
|
||||
|
||||
isFunction: function( obj ) {
|
||||
return jQuery.type( obj ) === "function";
|
||||
},
|
||||
|
||||
isWindow: function( obj ) {
|
||||
return obj != null && obj === obj.window;
|
||||
},
|
||||
|
||||
isNumeric: function( obj ) {
|
||||
|
||||
// As of jQuery 3.0, isNumeric is limited to
|
||||
// strings and numbers (primitives or objects)
|
||||
// that can be coerced to finite numbers (gh-2662)
|
||||
var type = jQuery.type( obj );
|
||||
return ( type === "number" || type === "string" ) &&
|
||||
|
||||
// parseFloat NaNs numeric-cast false positives ("")
|
||||
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
|
||||
// subtraction forces infinities to NaN
|
||||
!isNaN( obj - parseFloat( obj ) );
|
||||
},
|
||||
|
||||
isPlainObject: function( obj ) {
|
||||
var proto, Ctor;
|
||||
|
||||
// Detect obvious negatives
|
||||
// Use toString instead of jQuery.type to catch host objects
|
||||
if ( !obj || toString.call( obj ) !== "[object Object]" ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
proto = getProto( obj );
|
||||
|
||||
// Objects with no prototype (e.g., `Object.create( null )`) are plain
|
||||
if ( !proto ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Objects with prototype are plain iff they were constructed by a global Object function
|
||||
Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
|
||||
return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
|
||||
},
|
||||
|
||||
isEmptyObject: function( obj ) {
|
||||
|
||||
/* eslint-disable no-unused-vars */
|
||||
// See https://github.com/eslint/eslint/issues/6125
|
||||
var name;
|
||||
|
||||
for ( name in obj ) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
type: function( obj ) {
|
||||
if ( obj == null ) {
|
||||
return obj + "";
|
||||
}
|
||||
|
||||
// Support: Android <=2.3 only (functionish RegExp)
|
||||
return typeof obj === "object" || typeof obj === "function" ?
|
||||
class2type[ toString.call( obj ) ] || "object" :
|
||||
typeof obj;
|
||||
},
|
||||
|
||||
// Evaluates a script in a global context
|
||||
globalEval: function( code ) {
|
||||
DOMEval( code );
|
||||
},
|
||||
|
||||
// Convert dashed to camelCase; used by the css and data modules
|
||||
// Support: IE <=9 - 11, Edge 12 - 13
|
||||
// Microsoft forgot to hump their vendor prefix (#9572)
|
||||
camelCase: function( string ) {
|
||||
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
|
||||
},
|
||||
|
||||
each: function( obj, callback ) {
|
||||
var length, i = 0;
|
||||
|
||||
if ( isArrayLike( obj ) ) {
|
||||
length = obj.length;
|
||||
for ( ; i < length; i++ ) {
|
||||
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for ( i in obj ) {
|
||||
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return obj;
|
||||
},
|
||||
|
||||
// Support: Android <=4.0 only
|
||||
trim: function( text ) {
|
||||
return text == null ?
|
||||
"" :
|
||||
( text + "" ).replace( rtrim, "" );
|
||||
},
|
||||
|
||||
// results is for internal usage only
|
||||
makeArray: function( arr, results ) {
|
||||
var ret = results || [];
|
||||
|
||||
if ( arr != null ) {
|
||||
if ( isArrayLike( Object( arr ) ) ) {
|
||||
jQuery.merge( ret,
|
||||
typeof arr === "string" ?
|
||||
[ arr ] : arr
|
||||
);
|
||||
} else {
|
||||
push.call( ret, arr );
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
},
|
||||
|
||||
inArray: function( elem, arr, i ) {
|
||||
return arr == null ? -1 : indexOf.call( arr, elem, i );
|
||||
},
|
||||
|
||||
// Support: Android <=4.0 only, PhantomJS 1 only
|
||||
// push.apply(_, arraylike) throws on ancient WebKit
|
||||
merge: function( first, second ) {
|
||||
var len = +second.length,
|
||||
j = 0,
|
||||
i = first.length;
|
||||
|
||||
for ( ; j < len; j++ ) {
|
||||
first[ i++ ] = second[ j ];
|
||||
}
|
||||
|
||||
first.length = i;
|
||||
|
||||
return first;
|
||||
},
|
||||
|
||||
grep: function( elems, callback, invert ) {
|
||||
var callbackInverse,
|
||||
matches = [],
|
||||
i = 0,
|
||||
length = elems.length,
|
||||
callbackExpect = !invert;
|
||||
|
||||
// Go through the array, only saving the items
|
||||
// that pass the validator function
|
||||
for ( ; i < length; i++ ) {
|
||||
callbackInverse = !callback( elems[ i ], i );
|
||||
if ( callbackInverse !== callbackExpect ) {
|
||||
matches.push( elems[ i ] );
|
||||
}
|
||||
}
|
||||
|
||||
return matches;
|
||||
},
|
||||
|
||||
// arg is for internal usage only
|
||||
map: function( elems, callback, arg ) {
|
||||
var length, value,
|
||||
i = 0,
|
||||
ret = [];
|
||||
|
||||
// Go through the array, translating each of the items to their new values
|
||||
if ( isArrayLike( elems ) ) {
|
||||
length = elems.length;
|
||||
for ( ; i < length; i++ ) {
|
||||
value = callback( elems[ i ], i, arg );
|
||||
|
||||
if ( value != null ) {
|
||||
ret.push( value );
|
||||
}
|
||||
}
|
||||
|
||||
// Go through every key on the object,
|
||||
} else {
|
||||
for ( i in elems ) {
|
||||
value = callback( elems[ i ], i, arg );
|
||||
|
||||
if ( value != null ) {
|
||||
ret.push( value );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Flatten any nested arrays
|
||||
return concat.apply( [], ret );
|
||||
},
|
||||
|
||||
// A global GUID counter for objects
|
||||
guid: 1,
|
||||
|
||||
// Bind a function to a context, optionally partially applying any
|
||||
// arguments.
|
||||
proxy: function( fn, context ) {
|
||||
var tmp, args, proxy;
|
||||
|
||||
if ( typeof context === "string" ) {
|
||||
tmp = fn[ context ];
|
||||
context = fn;
|
||||
fn = tmp;
|
||||
}
|
||||
|
||||
// Quick check to determine if target is callable, in the spec
|
||||
// this throws a TypeError, but we will just return undefined.
|
||||
if ( !jQuery.isFunction( fn ) ) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// Simulated bind
|
||||
args = slice.call( arguments, 2 );
|
||||
proxy = function() {
|
||||
return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
|
||||
};
|
||||
|
||||
// Set the guid of unique handler to the same of original handler, so it can be removed
|
||||
proxy.guid = fn.guid = fn.guid || jQuery.guid++;
|
||||
|
||||
return proxy;
|
||||
},
|
||||
|
||||
now: Date.now,
|
||||
|
||||
// jQuery.support is not used in Core but other projects attach their
|
||||
// properties to it so it needs to exist.
|
||||
support: support
|
||||
} );
|
||||
|
||||
if ( typeof Symbol === "function" ) {
|
||||
jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
|
||||
}
|
||||
|
||||
// Populate the class2type map
|
||||
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
|
||||
function( i, name ) {
|
||||
class2type[ "[object " + name + "]" ] = name.toLowerCase();
|
||||
} );
|
||||
|
||||
function isArrayLike( obj ) {
|
||||
|
||||
// Support: real iOS 8.2 only (not reproducible in simulator)
|
||||
// `in` check used to prevent JIT error (gh-2145)
|
||||
// hasOwn isn't used here due to false negatives
|
||||
// regarding Nodelist length in IE
|
||||
var length = !!obj && "length" in obj && obj.length,
|
||||
type = jQuery.type( obj );
|
||||
|
||||
if ( type === "function" || jQuery.isWindow( obj ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return type === "array" || length === 0 ||
|
||||
typeof length === "number" && length > 0 && ( length - 1 ) in obj;
|
||||
}
|
||||
|
||||
return jQuery;
|
||||
} );
|
|
@ -1,42 +0,0 @@
|
|||
/**
|
||||
* File customizer.js.
|
||||
*
|
||||
* Theme Customizer enhancements for a better user experience.
|
||||
*
|
||||
* Contains handlers to make Theme Customizer preview reload changes asynchronously.
|
||||
*/
|
||||
|
||||
( function( $ ) {
|
||||
|
||||
// Site title and description.
|
||||
wp.customize( 'blogname', function( value ) {
|
||||
value.bind( function( to ) {
|
||||
$( '.site-title a' ).text( to );
|
||||
} );
|
||||
} );
|
||||
wp.customize( 'blogdescription', function( value ) {
|
||||
value.bind( function( to ) {
|
||||
$( '.site-description' ).text( to );
|
||||
} );
|
||||
} );
|
||||
|
||||
// Header text color.
|
||||
wp.customize( 'header_textcolor', function( value ) {
|
||||
value.bind( function( to ) {
|
||||
if ( 'blank' === to ) {
|
||||
$( '.site-title a, .site-description' ).css( {
|
||||
'clip': 'rect(1px, 1px, 1px, 1px)',
|
||||
'position': 'absolute'
|
||||
} );
|
||||
} else {
|
||||
$( '.site-title a, .site-description' ).css( {
|
||||
'clip': 'auto',
|
||||
'position': 'relative'
|
||||
} );
|
||||
$( '.site-title a, .site-description' ).css( {
|
||||
'color': to
|
||||
} );
|
||||
}
|
||||
} );
|
||||
} );
|
||||
} )( jQuery );
|
112
js/navigation.js
112
js/navigation.js
|
@ -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 ) );
|
||||
} )();
|
172
js/popper.js
172
js/popper.js
|
@ -1,6 +1,6 @@
|
|||
/**!
|
||||
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
||||
* @version 1.13.0
|
||||
* @version 1.14.1
|
||||
* @license
|
||||
* Copyright (c) 2016 Federico Zivolo and contributors
|
||||
*
|
||||
|
@ -148,13 +148,48 @@ function getScrollParent(element) {
|
|||
overflowX = _getStyleComputedProp.overflowX,
|
||||
overflowY = _getStyleComputedProp.overflowY;
|
||||
|
||||
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
|
||||
if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
|
||||
return element;
|
||||
}
|
||||
|
||||
return getScrollParent(getParentNode(element));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells if you are running Internet Explorer
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @argument {number} version to check
|
||||
* @returns {Boolean} isIE
|
||||
*/
|
||||
var cache = {};
|
||||
|
||||
var isIE = function () {
|
||||
var version = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all';
|
||||
|
||||
version = version.toString();
|
||||
if (cache.hasOwnProperty(version)) {
|
||||
return cache[version];
|
||||
}
|
||||
switch (version) {
|
||||
case '11':
|
||||
cache[version] = navigator.userAgent.indexOf('Trident') !== -1;
|
||||
break;
|
||||
case '10':
|
||||
cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;
|
||||
break;
|
||||
case 'all':
|
||||
cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;
|
||||
break;
|
||||
}
|
||||
|
||||
//Set IE
|
||||
cache.all = cache.all || Object.keys(cache).some(function (key) {
|
||||
return cache[key];
|
||||
});
|
||||
return cache[version];
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the offset parent of the given element
|
||||
* @method
|
||||
|
@ -163,16 +198,23 @@ function getScrollParent(element) {
|
|||
* @returns {Element} offset parent
|
||||
*/
|
||||
function getOffsetParent(element) {
|
||||
if (!element) {
|
||||
return document.documentElement;
|
||||
}
|
||||
|
||||
var noOffsetParent = isIE(10) ? document.body : null;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
var offsetParent = element && element.offsetParent;
|
||||
var offsetParent = element.offsetParent;
|
||||
// Skip hidden elements which don't have an offsetParent
|
||||
while (offsetParent === noOffsetParent && element.nextElementSibling) {
|
||||
offsetParent = (element = element.nextElementSibling).offsetParent;
|
||||
}
|
||||
|
||||
var nodeName = offsetParent && offsetParent.nodeName;
|
||||
|
||||
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
|
||||
if (element) {
|
||||
return element.ownerDocument.documentElement;
|
||||
}
|
||||
|
||||
return document.documentElement;
|
||||
return element ? element.ownerDocument.documentElement : document.documentElement;
|
||||
}
|
||||
|
||||
// .offsetParent will return the closest TD or TABLE in case
|
||||
|
@ -314,29 +356,14 @@ function getBordersSize(styles, axis) {
|
|||
return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells if you are running Internet Explorer 10
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @returns {Boolean} isIE10
|
||||
*/
|
||||
var isIE10 = undefined;
|
||||
|
||||
var isIE10$1 = function () {
|
||||
if (isIE10 === undefined) {
|
||||
isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;
|
||||
}
|
||||
return isIE10;
|
||||
};
|
||||
|
||||
function getSize(axis, body, html, computedStyle) {
|
||||
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE10$1() ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
||||
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
||||
}
|
||||
|
||||
function getWindowSizes() {
|
||||
var body = document.body;
|
||||
var html = document.documentElement;
|
||||
var computedStyle = isIE10$1() && getComputedStyle(html);
|
||||
var computedStyle = isIE(10) && getComputedStyle(html);
|
||||
|
||||
return {
|
||||
height: getSize('Height', body, html, computedStyle),
|
||||
|
@ -428,8 +455,8 @@ function getBoundingClientRect(element) {
|
|||
// IE10 10 FIX: Please, don't ask, the element isn't
|
||||
// considered in DOM in some circumstances...
|
||||
// This isn't reproducible in IE10 compatibility mode of IE11
|
||||
if (isIE10$1()) {
|
||||
try {
|
||||
try {
|
||||
if (isIE(10)) {
|
||||
rect = element.getBoundingClientRect();
|
||||
var scrollTop = getScroll(element, 'top');
|
||||
var scrollLeft = getScroll(element, 'left');
|
||||
|
@ -437,10 +464,10 @@ function getBoundingClientRect(element) {
|
|||
rect.left += scrollLeft;
|
||||
rect.bottom += scrollTop;
|
||||
rect.right += scrollLeft;
|
||||
} catch (err) {}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
var result = {
|
||||
left: rect.left,
|
||||
|
@ -472,7 +499,9 @@ function getBoundingClientRect(element) {
|
|||
}
|
||||
|
||||
function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
var isIE10 = isIE10$1();
|
||||
var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
||||
|
||||
var isIE10 = isIE(10);
|
||||
var isHTML = parent.nodeName === 'HTML';
|
||||
var childrenRect = getBoundingClientRect(children);
|
||||
var parentRect = getBoundingClientRect(parent);
|
||||
|
@ -482,6 +511,11 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|||
var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
|
||||
var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
|
||||
|
||||
// In cases where the parent is fixed, we must ignore negative scroll in offset calc
|
||||
if (fixedPosition && parent.nodeName === 'HTML') {
|
||||
parentRect.top = Math.max(parentRect.top, 0);
|
||||
parentRect.left = Math.max(parentRect.left, 0);
|
||||
}
|
||||
var offsets = getClientRect({
|
||||
top: childrenRect.top - parentRect.top - borderTopWidth,
|
||||
left: childrenRect.left - parentRect.left - borderLeftWidth,
|
||||
|
@ -509,7 +543,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|||
offsets.marginLeft = marginLeft;
|
||||
}
|
||||
|
||||
if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
offsets = includeScroll(offsets, parent);
|
||||
}
|
||||
|
||||
|
@ -517,13 +551,15 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|||
}
|
||||
|
||||
function getViewportOffsetRectRelativeToArtbitraryNode(element) {
|
||||
var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||||
|
||||
var html = element.ownerDocument.documentElement;
|
||||
var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
||||
var width = Math.max(html.clientWidth, window.innerWidth || 0);
|
||||
var height = Math.max(html.clientHeight, window.innerHeight || 0);
|
||||
|
||||
var scrollTop = getScroll(html);
|
||||
var scrollLeft = getScroll(html, 'left');
|
||||
var scrollTop = !excludeScroll ? getScroll(html) : 0;
|
||||
var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
|
||||
|
||||
var offset = {
|
||||
top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
|
||||
|
@ -554,6 +590,26 @@ function isFixed(element) {
|
|||
return isFixed(getParentNode(element));
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the first parent of an element that has a transformed property defined
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @argument {Element} element
|
||||
* @returns {Element} first transformed parent or documentElement
|
||||
*/
|
||||
|
||||
function getFixedPositionOffsetParent(element) {
|
||||
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
||||
if (!element || !element.parentElement || isIE()) {
|
||||
return document.documentElement;
|
||||
}
|
||||
var el = element.parentElement;
|
||||
while (el && getStyleComputedProperty(el, 'transform') === 'none') {
|
||||
el = el.parentElement;
|
||||
}
|
||||
return el || document.documentElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computed the boundaries limits and return them
|
||||
* @method
|
||||
|
@ -562,16 +618,20 @@ function isFixed(element) {
|
|||
* @param {HTMLElement} reference
|
||||
* @param {number} padding
|
||||
* @param {HTMLElement} boundariesElement - Element used to define the boundaries
|
||||
* @param {Boolean} fixedPosition - Is in fixed position mode
|
||||
* @returns {Object} Coordinates of the boundaries
|
||||
*/
|
||||
function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
|
||||
var boundaries = { top: 0, left: 0 };
|
||||
var offsetParent = findCommonOffsetParent(popper, reference);
|
||||
var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
|
||||
// Handle viewport case
|
||||
if (boundariesElement === 'viewport') {
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
|
||||
} else {
|
||||
// Handle other cases based on DOM element used as boundaries
|
||||
var boundariesNode = void 0;
|
||||
|
@ -586,7 +646,7 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
|
|||
boundariesNode = boundariesElement;
|
||||
}
|
||||
|
||||
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);
|
||||
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
|
||||
|
||||
// In case of HTML, we need a different computation
|
||||
if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
|
||||
|
@ -687,11 +747,14 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
|
|||
* @param {Object} state
|
||||
* @param {Element} popper - the popper element
|
||||
* @param {Element} reference - the reference element (the popper will be relative to this)
|
||||
* @param {Element} fixedPosition - is in fixed position mode
|
||||
* @returns {Object} An object containing the offsets which will be applied to the popper
|
||||
*/
|
||||
function getReferenceOffsets(state, popper, reference) {
|
||||
var commonOffsetParent = findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);
|
||||
var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
||||
|
||||
var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -864,7 +927,7 @@ function update() {
|
|||
};
|
||||
|
||||
// compute reference element offsets
|
||||
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference);
|
||||
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
|
||||
|
||||
// compute auto placement, store placement inside the data object,
|
||||
// modifiers will be able to edit `placement` if needed
|
||||
|
@ -874,9 +937,11 @@ function update() {
|
|||
// store the computed placement inside `originalPlacement`
|
||||
data.originalPlacement = data.placement;
|
||||
|
||||
data.positionFixed = this.options.positionFixed;
|
||||
|
||||
// compute the popper offsets
|
||||
data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
|
||||
data.offsets.popper.position = 'absolute';
|
||||
data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
|
||||
|
||||
// run the modifiers
|
||||
data = runModifiers(this.modifiers, data);
|
||||
|
@ -916,7 +981,7 @@ function getSupportedPropertyName(property) {
|
|||
var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
|
||||
var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
||||
|
||||
for (var i = 0; i < prefixes.length - 1; i++) {
|
||||
for (var i = 0; i < prefixes.length; i++) {
|
||||
var prefix = prefixes[i];
|
||||
var toCheck = prefix ? '' + prefix + upperProp : property;
|
||||
if (typeof document.body.style[toCheck] !== 'undefined') {
|
||||
|
@ -937,9 +1002,12 @@ function destroy() {
|
|||
// touch DOM only if `applyStyle` modifier is enabled
|
||||
if (isModifierEnabled(this.modifiers, 'applyStyle')) {
|
||||
this.popper.removeAttribute('x-placement');
|
||||
this.popper.style.left = '';
|
||||
this.popper.style.position = '';
|
||||
this.popper.style.top = '';
|
||||
this.popper.style.left = '';
|
||||
this.popper.style.right = '';
|
||||
this.popper.style.bottom = '';
|
||||
this.popper.style.willChange = '';
|
||||
this.popper.style[getSupportedPropertyName('transform')] = '';
|
||||
}
|
||||
|
||||
|
@ -1127,12 +1195,12 @@ function applyStyle(data) {
|
|||
* @method
|
||||
* @memberof Popper.modifiers
|
||||
* @param {HTMLElement} reference - The reference element used to position the popper
|
||||
* @param {HTMLElement} popper - The HTML element used as popper.
|
||||
* @param {HTMLElement} popper - The HTML element used as popper
|
||||
* @param {Object} options - Popper.js options
|
||||
*/
|
||||
function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
||||
// compute reference element offsets
|
||||
var referenceOffsets = getReferenceOffsets(state, popper, reference);
|
||||
var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
|
||||
|
||||
// compute auto placement, store placement inside the data object,
|
||||
// modifiers will be able to edit `placement` if needed
|
||||
|
@ -1143,7 +1211,7 @@ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
|||
|
||||
// Apply `position` to popper before anything else because
|
||||
// without the position applied we can't guarantee correct computations
|
||||
setStyles(popper, { position: 'absolute' });
|
||||
setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
|
||||
|
||||
return options;
|
||||
}
|
||||
|
@ -1446,7 +1514,7 @@ function flip(data, options) {
|
|||
return data;
|
||||
}
|
||||
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
|
||||
|
||||
var placement = data.placement.split('-')[0];
|
||||
var placementOpposite = getOppositePlacement(placement);
|
||||
|
@ -1738,7 +1806,7 @@ function preventOverflow(data, options) {
|
|||
boundariesElement = getOffsetParent(boundariesElement);
|
||||
}
|
||||
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
|
||||
options.boundaries = boundaries;
|
||||
|
||||
var order = options.priority;
|
||||
|
@ -2235,6 +2303,12 @@ var Defaults = {
|
|||
*/
|
||||
placement: 'bottom',
|
||||
|
||||
/**
|
||||
* Set this to true if you want popper to position it self in 'fixed' mode
|
||||
* @prop {Boolean} positionFixed=false
|
||||
*/
|
||||
positionFixed: false,
|
||||
|
||||
/**
|
||||
* Whether events (resize, scroll) are initially enabled
|
||||
* @prop {Boolean} eventsEnabled=true
|
||||
|
|
4
js/popper.min.js
vendored
4
js/popper.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,24 +0,0 @@
|
|||
|
||||
jQuery(document).ready(function() {
|
||||
var owl = jQuery('.owl-carousel');
|
||||
owl.owlCarousel({
|
||||
items:1,
|
||||
loop:true,
|
||||
autoplay:true,
|
||||
autoplayTimeout:5000,
|
||||
animateOut: 'fadeOut',
|
||||
animateIn: 'fadeIn',
|
||||
nav: false,
|
||||
dots: true,
|
||||
autoplayHoverPause:true,
|
||||
margin:0,
|
||||
autoHeight:true
|
||||
});
|
||||
|
||||
jQuery('.play').on('click',function(){
|
||||
owl.trigger('autoplay.play.owl',[1000])
|
||||
});
|
||||
jQuery('.stop').on('click',function(){
|
||||
owl.trigger('autoplay.stop.owl')
|
||||
});
|
||||
});
|
21
package.json
21
package.json
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "understrap-child",
|
||||
"version": "0.5.0",
|
||||
"version": "0.5.1",
|
||||
"description": "Basic Child Theme for UnderStrap Theme Framework: https://github.com/holger1411/understrap",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
|
@ -26,31 +26,32 @@
|
|||
"homepage": "https://understrap.com",
|
||||
"dependencies": {
|
||||
"bootstrap": "4.0.0",
|
||||
"browser-sync": "^2.22.0",
|
||||
"browser-sync": "^2.23.6",
|
||||
"del": "^3.0.0",
|
||||
"font-awesome": "^4.7.0",
|
||||
"gulp": "^3.9.1",
|
||||
"gulp-clean-css": "^3.9.1",
|
||||
"gulp-clone": "^1.1.4",
|
||||
"gulp": "3.9.1",
|
||||
"gulp-clean-css": "^3.9.2",
|
||||
"gulp-clone": "2.0.1",
|
||||
"gulp-concat": "^2.6.1",
|
||||
"gulp-cssnano": "^2.1.2",
|
||||
"gulp-ignore": "^2.0.2",
|
||||
"gulp-imagemin": "^4.0.0",
|
||||
"gulp-imagemin": "^4.1.0",
|
||||
"gulp-merge": "^0.1.1",
|
||||
"gulp-plumber": "^1.2.0",
|
||||
"gulp-rename": "^1.2.2",
|
||||
"gulp-replace": "^0.6.1",
|
||||
"gulp-rimraf": "^0.2.2",
|
||||
"gulp-sass": "^3.1.0",
|
||||
"gulp-sequence": "^0.4.6",
|
||||
"gulp-sequence": "1.0.0",
|
||||
"gulp-sourcemaps": "2.6.2",
|
||||
"gulp-uglify": "^3.0.0",
|
||||
"gulp-watch": "^4.3.11",
|
||||
"gulp-watch": "5.0.0",
|
||||
"merge2": "^1.2.1",
|
||||
"popper.js": "^1.13.0",
|
||||
"popper.js": "^1.12.9",
|
||||
"run-sequence": "^2.2.1",
|
||||
"undescores-for-npm": "^1.0.0",
|
||||
"understrap": "^0.8.0"
|
||||
"gulp-autoprefixer": "^5.0.0",
|
||||
"understrap": "^0.8.1"
|
||||
}
|
||||
|
||||
}
|
||||
|
|
16
src/sass/underscores/_captions.scss
Normal file
16
src/sass/underscores/_captions.scss
Normal file
|
@ -0,0 +1,16 @@
|
|||
.wp-caption {
|
||||
margin-bottom: 1.5em;
|
||||
max-width: 100%;
|
||||
|
||||
img[class*="wp-image-"] {
|
||||
@include center-block;
|
||||
}
|
||||
|
||||
.wp-caption-text {
|
||||
margin: 0.8075em 0;
|
||||
}
|
||||
}
|
||||
|
||||
.wp-caption-text {
|
||||
text-align: center;
|
||||
}
|
46
src/sass/underscores/_galleries.scss
Normal file
46
src/sass/underscores/_galleries.scss
Normal file
|
@ -0,0 +1,46 @@
|
|||
.gallery {
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.gallery-item {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
width: 100%;
|
||||
|
||||
.gallery-columns-2 & {
|
||||
max-width: 50%;
|
||||
}
|
||||
|
||||
.gallery-columns-3 & {
|
||||
max-width: 33.33%;
|
||||
}
|
||||
|
||||
.gallery-columns-4 & {
|
||||
max-width: 25%;
|
||||
}
|
||||
|
||||
.gallery-columns-5 & {
|
||||
max-width: 20%;
|
||||
}
|
||||
|
||||
.gallery-columns-6 & {
|
||||
max-width: 16.66%;
|
||||
}
|
||||
|
||||
.gallery-columns-7 & {
|
||||
max-width: 14.28%;
|
||||
}
|
||||
|
||||
.gallery-columns-8 & {
|
||||
max-width: 12.5%;
|
||||
}
|
||||
|
||||
.gallery-columns-9 & {
|
||||
max-width: 11.11%;
|
||||
}
|
||||
}
|
||||
|
||||
.gallery-caption {
|
||||
display: block;
|
||||
}
|
25
src/sass/underscores/_media.scss
Normal file
25
src/sass/underscores/_media.scss
Normal file
|
@ -0,0 +1,25 @@
|
|||
.page-content .wp-smiley,
|
||||
.entry-content .wp-smiley,
|
||||
.comment-content .wp-smiley {
|
||||
border: none;
|
||||
margin-bottom: 0;
|
||||
margin-top: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Make sure embeds and iframes fit their containers. */
|
||||
embed,
|
||||
iframe,
|
||||
object {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
## Captions
|
||||
--------------------------------------------------------------*/
|
||||
@import "captions";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
## Galleries
|
||||
--------------------------------------------------------------*/
|
||||
@import "galleries";
|
Loading…
Reference in a new issue