init
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
( function ( $ ) {
|
||||
/**
|
||||
* Ready, set, go!
|
||||
*/
|
||||
$( document ).ready( function () {
|
||||
// Integrate with Selective Refresh in the Customizer.
|
||||
if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) {
|
||||
/**
|
||||
* Handle rendering of selective refresh partials.
|
||||
*
|
||||
* Make sure that when a partial is rendered, the Jetpack post-load event
|
||||
* will be triggered so that any dynamic elements will be re-constructed,
|
||||
* such as ME.js elements, Photon replacements, social sharing, and more.
|
||||
* Note that this is applying here not strictly to posts being loaded.
|
||||
* If a widget contains a ME.js element and it is previewed via selective
|
||||
* refresh, the post-load would get triggered allowing any dynamic elements
|
||||
* therein to also be re-constructed.
|
||||
*
|
||||
* @param {wp.customize.selectiveRefresh.Placement} placement
|
||||
*/
|
||||
wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function ( placement ) {
|
||||
var content;
|
||||
if ( 'string' === typeof placement.addedContent ) {
|
||||
content = placement.addedContent;
|
||||
} else if ( placement.container ) {
|
||||
content = $( placement.container ).html();
|
||||
}
|
||||
|
||||
if ( content ) {
|
||||
$( document.body ).trigger( 'post-load', { html: content } );
|
||||
}
|
||||
} );
|
||||
|
||||
/*
|
||||
* Add partials for posts added via infinite scroll.
|
||||
*
|
||||
* This is unnecessary when MutationObserver is supported by the browser
|
||||
* since then this will be handled by Selective Refresh in core.
|
||||
*/
|
||||
if ( 'undefined' === typeof MutationObserver ) {
|
||||
$( document.body ).on( 'post-load', function ( e, response ) {
|
||||
var rootElement = null;
|
||||
if ( response.html && -1 !== response.html.indexOf( 'data-customize-partial' ) ) {
|
||||
if ( window.infiniteScroll.settings.id ) {
|
||||
rootElement = $( '#' + window.infiniteScroll.settings.id );
|
||||
}
|
||||
wp.customize.selectiveRefresh.addPartials( rootElement );
|
||||
}
|
||||
} );
|
||||
}
|
||||
}
|
||||
} );
|
||||
} )( jQuery ); // Close closure
|
||||
@@ -0,0 +1,278 @@
|
||||
/* =Infinity Styles
|
||||
-------------------------------------------------------------- */
|
||||
|
||||
.infinite-loader {
|
||||
color: #000;
|
||||
display: block;
|
||||
height: 28px;
|
||||
text-align: center;
|
||||
}
|
||||
#infinite-handle span {
|
||||
background: #333;
|
||||
border-radius: 1px;
|
||||
color: #f0f0f1;
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
padding: 6px 16px;
|
||||
}
|
||||
|
||||
/**
|
||||
* CSS Spinner Styles
|
||||
*/
|
||||
@keyframes spinner-inner {
|
||||
0% { opacity: 1 }
|
||||
100% { opacity: 0 }
|
||||
}
|
||||
.infinite-loader .spinner-inner div {
|
||||
left: 47px;
|
||||
top: 24px;
|
||||
position: absolute;
|
||||
animation: spinner-inner linear 1s infinite;
|
||||
background: #000000;
|
||||
outline: 1px solid white;
|
||||
width: 6px;
|
||||
height: 12px;
|
||||
border-radius: 3px / 6px;
|
||||
transform-origin: 3px 26px;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(1) {
|
||||
transform: rotate(0deg);
|
||||
animation-delay: -0.9166666666666666s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(2) {
|
||||
transform: rotate(30deg);
|
||||
animation-delay: -0.8333333333333334s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(3) {
|
||||
transform: rotate(60deg);
|
||||
animation-delay: -0.75s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(4) {
|
||||
transform: rotate(90deg);
|
||||
animation-delay: -0.6666666666666666s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(5) {
|
||||
transform: rotate(120deg);
|
||||
animation-delay: -0.5833333333333334s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(6) {
|
||||
transform: rotate(150deg);
|
||||
animation-delay: -0.5s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(7) {
|
||||
transform: rotate(180deg);
|
||||
animation-delay: -0.4166666666666667s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(8) {
|
||||
transform: rotate(210deg);
|
||||
animation-delay: -0.3333333333333333s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(9) {
|
||||
transform: rotate(240deg);
|
||||
animation-delay: -0.25s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(10) {
|
||||
transform: rotate(270deg);
|
||||
animation-delay: -0.16666666666666666s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(11) {
|
||||
transform: rotate(300deg);
|
||||
animation-delay: -0.08333333333333333s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner-inner div:nth-child(12) {
|
||||
transform: rotate(330deg);
|
||||
animation-delay: 0s;
|
||||
background: #000000;
|
||||
}
|
||||
.infinite-loader .spinner {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
background: none;
|
||||
}
|
||||
.infinite-loader .spinner-inner {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
transform: translateZ(0) scale(0.28);
|
||||
backface-visibility: hidden;
|
||||
transform-origin: 0 0; /* see note above */
|
||||
}
|
||||
.infinite-loader .spinner-inner div {
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Using a highly-specific rule to make sure that all button styles
|
||||
* will be reset
|
||||
*/
|
||||
#infinite-handle span button,
|
||||
#infinite-handle span button:hover,
|
||||
#infinite-handle span button:focus {
|
||||
display: inline;
|
||||
position: static;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: none;
|
||||
line-height: inherit;
|
||||
background: transparent;
|
||||
color: inherit;
|
||||
cursor: inherit;
|
||||
font-size: inherit;
|
||||
font-weight: inherit;
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is used to avoid unnecessary inner button spacing in Firefox
|
||||
*/
|
||||
#infinite-handle span button::-moz-focus-inner {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* For smaller viewports, remove the down-arrow icon and turn
|
||||
* the button into a block element, spanning the content's full width.
|
||||
*/
|
||||
@media (max-width: 800px) {
|
||||
#infinite-handle span:before {
|
||||
display: none;
|
||||
}
|
||||
#infinite-handle span {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Footer
|
||||
*/
|
||||
#infinite-footer {
|
||||
position: fixed;
|
||||
bottom: -50px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
#infinite-footer a {
|
||||
text-decoration: none;
|
||||
}
|
||||
#infinite-footer .blog-info a:hover,
|
||||
#infinite-footer .blog-credits a:hover {
|
||||
color: #444;
|
||||
text-decoration: underline;
|
||||
}
|
||||
#infinite-footer .container {
|
||||
background: rgba( 255, 255, 255, 0.8 );
|
||||
border-color: #ccc;
|
||||
border-color: rgba( 0, 0, 0, 0.1 );
|
||||
border-style: solid;
|
||||
border-width: 1px 0 0;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
padding: 1px 20px;
|
||||
width: 780px;
|
||||
}
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
line-height: 25px;
|
||||
}
|
||||
#infinite-footer .blog-info {
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
text-align: left;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 40%;
|
||||
}
|
||||
#infinite-footer .blog-credits {
|
||||
font-weight: normal;
|
||||
float: right;
|
||||
width: 60%;
|
||||
}
|
||||
#infinite-footer .blog-info a {
|
||||
color: #111;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
#infinite-footer .blog-credits {
|
||||
color: #888;
|
||||
font-size: 12px;
|
||||
text-align: right;
|
||||
}
|
||||
#infinite-footer .blog-credits a {
|
||||
color: #646970;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hooks to infinity-end body class to restore footer
|
||||
*/
|
||||
.infinity-end.neverending #infinite-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Responsive structure for the footer
|
||||
*/
|
||||
@media (max-width: 640px) {
|
||||
#infinite-footer .container {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
}
|
||||
#infinite-footer .blog-info {
|
||||
width: 30%;
|
||||
}
|
||||
#infinite-footer .blog-credits {
|
||||
width: 70%;
|
||||
}
|
||||
#infinite-footer .blog-info a,
|
||||
#infinite-footer .blog-credits {
|
||||
font-size: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* No fixed footer on small viewports
|
||||
*/
|
||||
@media ( max-width: 640px ) {
|
||||
#infinite-footer {
|
||||
position: static;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide infinite aria feedback visually
|
||||
*/
|
||||
#infinite-aria {
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
clip: rect(0 0 0 0);
|
||||
height: 1px; width: 1px;
|
||||
margin: -1px; padding: 0; border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide focus on infinite wrappers
|
||||
*/
|
||||
.infinite-wrap:focus {
|
||||
outline: 0 !important;
|
||||
}
|
||||
@@ -0,0 +1,916 @@
|
||||
/* globals infiniteScroll, _wpmejsSettings, ga, _gaq, WPCOM_sharing_counts, MediaElementPlayer */
|
||||
( function () {
|
||||
// Open closure.
|
||||
// Local vars.
|
||||
var Scroller, stats, type, text, totop, loading_text;
|
||||
|
||||
// IE requires special handling
|
||||
var isIE = -1 !== navigator.userAgent.search( 'MSIE' );
|
||||
if ( isIE ) {
|
||||
var IEVersion = navigator.userAgent.match( /MSIE\s?(\d+)\.?\d*;/ );
|
||||
IEVersion = parseInt( IEVersion[ 1 ] );
|
||||
}
|
||||
|
||||
// HTTP ajaxurl when site is HTTPS causes Access-Control-Allow-Origin failure in Desktop and iOS Safari
|
||||
if ( 'https:' === document.location.protocol ) {
|
||||
infiniteScroll.settings.ajaxurl = infiniteScroll.settings.ajaxurl.replace(
|
||||
'http://',
|
||||
'https://'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads new posts when users scroll near the bottom of the page.
|
||||
*/
|
||||
Scroller = function ( settings ) {
|
||||
var self = this;
|
||||
|
||||
// Initialize our variables
|
||||
this.id = settings.id;
|
||||
this.body = document.body;
|
||||
this.window = window;
|
||||
this.element = document.getElementById( settings.id );
|
||||
this.wrapperClass = settings.wrapper_class;
|
||||
this.ready = true;
|
||||
this.disabled = false;
|
||||
this.page = 1;
|
||||
this.offset = settings.offset;
|
||||
this.currentday = settings.currentday;
|
||||
this.order = settings.order;
|
||||
this.throttle = false;
|
||||
this.click_handle = settings.click_handle;
|
||||
this.google_analytics = settings.google_analytics;
|
||||
this.history = settings.history;
|
||||
this.origURL = window.location.href;
|
||||
|
||||
// Handle element
|
||||
this.handle = document.createElement( 'div' );
|
||||
this.handle.setAttribute( 'id', 'infinite-handle' );
|
||||
this.handle.innerHTML = '<span><button>' + text.replace( '\\', '' ) + '</button></span>';
|
||||
|
||||
// Footer settings
|
||||
this.footer = {
|
||||
el: document.getElementById( 'infinite-footer' ),
|
||||
wrap: settings.footer,
|
||||
};
|
||||
|
||||
// Bind methods used as callbacks
|
||||
this.checkViewportOnLoadBound = self.checkViewportOnLoad.bind( this );
|
||||
|
||||
// Core's native MediaElement.js implementation needs special handling
|
||||
this.wpMediaelement = null;
|
||||
|
||||
// We have two type of infinite scroll
|
||||
// cases 'scroll' and 'click'
|
||||
|
||||
if ( type === 'scroll' ) {
|
||||
// Bind refresh to the scroll event
|
||||
// Throttle to check for such case every 300ms
|
||||
|
||||
// On event the case becomes a fact
|
||||
this.window.addEventListener( 'scroll', function () {
|
||||
self.throttle = true;
|
||||
} );
|
||||
|
||||
// Go back top method
|
||||
self.gotop();
|
||||
|
||||
setInterval( function () {
|
||||
if ( self.throttle ) {
|
||||
// Once the case is the case, the action occurs and the fact is no more
|
||||
self.throttle = false;
|
||||
// Reveal or hide footer
|
||||
self.thefooter();
|
||||
// Fire the refresh
|
||||
self.refresh();
|
||||
self.determineURL(); // determine the url
|
||||
}
|
||||
}, 250 );
|
||||
|
||||
// Ensure that enough posts are loaded to fill the initial viewport, to compensate for short posts and large displays.
|
||||
self.ensureFilledViewport();
|
||||
this.body.addEventListener( 'is.post-load', self.checkViewportOnLoadBound );
|
||||
} else if ( type === 'click' ) {
|
||||
if ( this.click_handle ) {
|
||||
this.element.appendChild( this.handle );
|
||||
}
|
||||
|
||||
this.handle.addEventListener( 'click', function () {
|
||||
// Handle the handle
|
||||
if ( self.click_handle ) {
|
||||
self.handle.parentNode.removeChild( self.handle );
|
||||
}
|
||||
|
||||
// Fire the refresh
|
||||
self.refresh();
|
||||
} );
|
||||
}
|
||||
|
||||
// Initialize any Core audio or video players loaded via IS
|
||||
this.body.addEventListener( 'is.post-load', self.initializeMejs );
|
||||
};
|
||||
|
||||
/**
|
||||
* Normalize the access to the document scrollTop value.
|
||||
*/
|
||||
Scroller.prototype.getScrollTop = function () {
|
||||
return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Polyfill jQuery.extend.
|
||||
*/
|
||||
Scroller.prototype.extend = function ( out ) {
|
||||
out = out || {};
|
||||
|
||||
for ( var i = 1; i < arguments.length; i++ ) {
|
||||
if ( ! arguments[ i ] ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for ( var key in arguments[ i ] ) {
|
||||
if ( Object.hasOwn( arguments[ i ], key ) ) {
|
||||
out[ key ] = arguments[ i ][ key ];
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check whether we should fetch any additional posts.
|
||||
*/
|
||||
Scroller.prototype.check = function () {
|
||||
var wrapperMeasurements = this.measure( this.element, [ this.wrapperClass ] );
|
||||
|
||||
// Fetch more posts when we're less than 2 screens away from the bottom.
|
||||
return wrapperMeasurements.bottom < 2 * this.window.innerHeight;
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the results from a successful response.
|
||||
*/
|
||||
Scroller.prototype.render = function ( response ) {
|
||||
var childrenToAppend = Array.prototype.slice.call( response.fragment.childNodes );
|
||||
this.body.classList.add( 'infinity-success' );
|
||||
|
||||
// Render the retrieved nodes.
|
||||
while ( childrenToAppend.length > 0 ) {
|
||||
var currentNode = childrenToAppend.shift();
|
||||
this.element.appendChild( currentNode );
|
||||
}
|
||||
|
||||
this.trigger( this.body, 'is.post-load', {
|
||||
jqueryEventName: 'post-load',
|
||||
data: response,
|
||||
} );
|
||||
|
||||
this.ready = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the object used to query for new posts.
|
||||
*/
|
||||
Scroller.prototype.query = function () {
|
||||
return {
|
||||
page: this.page + this.offset, // Load the next page.
|
||||
currentday: this.currentday,
|
||||
order: this.order,
|
||||
scripts: window.infiniteScroll.settings.scripts,
|
||||
styles: window.infiniteScroll.settings.styles,
|
||||
query_args: window.infiniteScroll.settings.query_args,
|
||||
query_before: window.infiniteScroll.settings.query_before,
|
||||
last_post_date: window.infiniteScroll.settings.last_post_date,
|
||||
};
|
||||
};
|
||||
|
||||
Scroller.prototype.animate = function ( cb, duration ) {
|
||||
var start = performance.now();
|
||||
|
||||
requestAnimationFrame( function animate( time ) {
|
||||
var timeFraction = Math.min( 1, ( time - start ) / duration );
|
||||
cb( timeFraction );
|
||||
|
||||
if ( timeFraction < 1 ) {
|
||||
requestAnimationFrame( animate );
|
||||
}
|
||||
} );
|
||||
};
|
||||
|
||||
/**
|
||||
* Scroll back to top.
|
||||
*/
|
||||
Scroller.prototype.gotop = function () {
|
||||
var blog = document.getElementById( 'infinity-blog-title' );
|
||||
var self = this;
|
||||
|
||||
if ( ! blog ) {
|
||||
return;
|
||||
}
|
||||
|
||||
blog.setAttribute( 'title', totop );
|
||||
blog.addEventListener( 'click', function ( e ) {
|
||||
var sourceScroll = self.window.pageYOffset;
|
||||
e.preventDefault();
|
||||
|
||||
self.animate( function ( progress ) {
|
||||
var currentScroll = sourceScroll - sourceScroll * progress;
|
||||
document.documentElement.scrollTop = document.body.scrollTop = currentScroll;
|
||||
}, 200 );
|
||||
} );
|
||||
};
|
||||
|
||||
/**
|
||||
* The infinite footer.
|
||||
*/
|
||||
Scroller.prototype.thefooter = function () {
|
||||
var self = this,
|
||||
pageWrapper,
|
||||
footerContainer,
|
||||
width,
|
||||
sourceBottom,
|
||||
targetBottom,
|
||||
footerEnabled = this.footer && this.footer.el;
|
||||
|
||||
if ( ! footerEnabled ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if we have an id for the page wrapper
|
||||
if ( 'string' === typeof this.footer.wrap ) {
|
||||
try {
|
||||
pageWrapper = document.getElementById( this.footer.wrap );
|
||||
width = pageWrapper.getBoundingClientRect();
|
||||
width = width.width;
|
||||
} catch {
|
||||
width = 0;
|
||||
}
|
||||
|
||||
// Make the footer match the width of the page
|
||||
if ( width > 479 ) {
|
||||
footerContainer = this.footer.el.querySelector( '.container' );
|
||||
if ( footerContainer ) {
|
||||
footerContainer.style.width = width + 'px';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Reveal footer
|
||||
sourceBottom = parseInt( self.footer.el.style.bottom || -50, 10 );
|
||||
targetBottom = this.window.pageYOffset >= 350 ? 0 : -50;
|
||||
|
||||
if ( sourceBottom !== targetBottom ) {
|
||||
self.animate( function ( progress ) {
|
||||
var currentBottom = sourceBottom + ( targetBottom - sourceBottom ) * progress;
|
||||
self.footer.el.style.bottom = currentBottom + 'px';
|
||||
|
||||
if ( 1 === progress ) {
|
||||
sourceBottom = targetBottom;
|
||||
}
|
||||
}, 200 );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Recursively convert a JS object into URL encoded data.
|
||||
*/
|
||||
Scroller.prototype.urlEncodeJSON = function ( obj, prefix ) {
|
||||
var params = [],
|
||||
encodedKey,
|
||||
newPrefix;
|
||||
|
||||
for ( var key in obj ) {
|
||||
encodedKey = encodeURIComponent( key );
|
||||
newPrefix = prefix ? prefix + '[' + encodedKey + ']' : encodedKey;
|
||||
|
||||
if ( 'object' === typeof obj[ key ] ) {
|
||||
if ( ! Array.isArray( obj[ key ] ) || obj[ key ].length > 0 ) {
|
||||
params.push( this.urlEncodeJSON( obj[ key ], newPrefix ) );
|
||||
} else {
|
||||
// Explicitly expose empty arrays with no values
|
||||
params.push( newPrefix + '[]=' );
|
||||
}
|
||||
} else {
|
||||
params.push( newPrefix + '=' + encodeURIComponent( obj[ key ] ) );
|
||||
}
|
||||
}
|
||||
return params.join( '&' );
|
||||
};
|
||||
|
||||
/**
|
||||
* Controls the flow of the refresh. Don't mess.
|
||||
*/
|
||||
Scroller.prototype.refresh = function () {
|
||||
var self = this,
|
||||
query,
|
||||
xhr,
|
||||
loader,
|
||||
customized;
|
||||
|
||||
// If we're disabled, ready, or don't pass the check, bail.
|
||||
if ( this.disabled || ! this.ready || ! this.check() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Let's get going -- set ready to false to prevent
|
||||
// multiple refreshes from occurring at once.
|
||||
this.ready = false;
|
||||
|
||||
// Create a loader element to show it's working.
|
||||
if ( this.click_handle ) {
|
||||
if ( ! loader ) {
|
||||
document.getElementById( 'infinite-aria' ).textContent = loading_text;
|
||||
loader = document.createElement( 'div' );
|
||||
loader.classList.add( 'infinite-loader' );
|
||||
loader.setAttribute( 'role', 'progress' );
|
||||
loader.innerHTML =
|
||||
'<div class="spinner"><div class="spinner-inner"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div></div>';
|
||||
}
|
||||
this.element.appendChild( loader );
|
||||
}
|
||||
|
||||
// Generate our query vars.
|
||||
query = self.extend(
|
||||
{
|
||||
action: 'infinite_scroll',
|
||||
},
|
||||
this.query()
|
||||
);
|
||||
|
||||
// Inject Customizer state.
|
||||
if ( 'undefined' !== typeof wp && wp.customize && wp.customize.settings.theme ) {
|
||||
customized = {};
|
||||
query.wp_customize = 'on';
|
||||
query.theme = wp.customize.settings.theme.stylesheet;
|
||||
wp.customize.each( function ( setting ) {
|
||||
if ( setting._dirty ) {
|
||||
customized[ setting.id ] = setting();
|
||||
}
|
||||
} );
|
||||
query.customized = JSON.stringify( customized );
|
||||
query.nonce = wp.customize.settings.nonce.preview;
|
||||
}
|
||||
|
||||
// Fire the ajax request.
|
||||
xhr = new XMLHttpRequest();
|
||||
xhr.open( 'POST', infiniteScroll.settings.ajaxurl, true );
|
||||
xhr.setRequestHeader( 'X-Requested-With', 'XMLHttpRequest' );
|
||||
xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8' );
|
||||
xhr.send( self.urlEncodeJSON( query ) );
|
||||
|
||||
// Allow refreshes to occur again if an error is triggered.
|
||||
xhr.onerror = function () {
|
||||
if ( self.click_handle && loader.parentNode ) {
|
||||
loader.parentNode.removeChild( loader );
|
||||
}
|
||||
|
||||
self.ready = true;
|
||||
};
|
||||
|
||||
// Success handler
|
||||
xhr.onload = function () {
|
||||
var response = JSON.parse( xhr.responseText ),
|
||||
httpCheck = xhr.status >= 200 && xhr.status < 300,
|
||||
responseCheck = 'undefined' !== typeof response.html;
|
||||
|
||||
if ( ! response || ! httpCheck || ! responseCheck ) {
|
||||
if ( self.click_handle && loader.parentNode ) {
|
||||
loader.parentNode.removeChild( loader );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// On success, let's hide the loader circle.
|
||||
if ( self.click_handle && loader.parentNode ) {
|
||||
loader.parentNode.removeChild( loader );
|
||||
}
|
||||
|
||||
// If additional scripts are required by the incoming set of posts, parse them
|
||||
if ( response.scripts && Array.isArray( response.scripts ) ) {
|
||||
response.scripts.forEach( function ( item ) {
|
||||
var elementToAppendTo = item.footer ? 'body' : 'head';
|
||||
|
||||
// Add script handle to list of those already parsed
|
||||
window.infiniteScroll.settings.scripts.push( item.handle );
|
||||
|
||||
// Output extra data, if present
|
||||
if ( item.extra_data ) {
|
||||
self.appendInlineScript( item.extra_data, elementToAppendTo );
|
||||
}
|
||||
|
||||
if ( item.before_handle ) {
|
||||
self.appendInlineScript( item.before_handle, elementToAppendTo );
|
||||
}
|
||||
|
||||
// Build script tag and append to DOM in requested location
|
||||
var script = document.createElement( 'script' );
|
||||
script.type = 'text/javascript';
|
||||
script.src = item.src;
|
||||
script.id = item.handle;
|
||||
|
||||
// Dynamically loaded scripts are async by default.
|
||||
// We don't want that, it breaks stuff, e.g. wp-mediaelement init.
|
||||
script.async = false;
|
||||
|
||||
if ( item.after_handle ) {
|
||||
script.onload = function () {
|
||||
self.appendInlineScript( item.after_handle, elementToAppendTo );
|
||||
};
|
||||
}
|
||||
|
||||
// If MediaElement.js is loaded in by item set of posts, don't initialize the players a second time as it breaks them all
|
||||
if ( 'wp-mediaelement' === item.handle ) {
|
||||
self.body.removeEventListener( 'is.post-load', self.initializeMejs );
|
||||
}
|
||||
|
||||
if ( 'wp-mediaelement' === item.handle && 'undefined' === typeof mejs ) {
|
||||
self.wpMediaelement = {};
|
||||
self.wpMediaelement.tag = script;
|
||||
self.wpMediaelement.element = elementToAppendTo;
|
||||
setTimeout( self.maybeLoadMejs.bind( self ), 250 );
|
||||
} else {
|
||||
document.getElementsByTagName( elementToAppendTo )[ 0 ].appendChild( script );
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
// If additional stylesheets are required by the incoming set of posts, parse them
|
||||
if ( response.styles && Array.isArray( response.styles ) ) {
|
||||
response.styles.forEach( function ( item ) {
|
||||
// Add stylesheet handle to list of those already parsed
|
||||
window.infiniteScroll.settings.styles.push( item.handle );
|
||||
|
||||
// Build link tag
|
||||
var style = document.createElement( 'link' );
|
||||
style.rel = 'stylesheet';
|
||||
style.href = item.src;
|
||||
style.id = item.handle + '-css';
|
||||
|
||||
// Destroy link tag if a conditional statement is present and either the browser isn't IE, or the conditional doesn't evaluate true
|
||||
if (
|
||||
item.conditional &&
|
||||
( ! isIE || ! eval( item.conditional.replace( /%ver/g, IEVersion ) ) )
|
||||
) {
|
||||
style = false;
|
||||
}
|
||||
|
||||
// Append link tag if necessary
|
||||
if ( style ) {
|
||||
document.getElementsByTagName( 'head' )[ 0 ].appendChild( style );
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
// Convert the response.html to a fragment element.
|
||||
// Using a div instead of DocumentFragment, because the latter doesn't support innerHTML.
|
||||
response.fragment = document.createElement( 'div' );
|
||||
response.fragment.innerHTML = response.html;
|
||||
|
||||
// Increment the page number
|
||||
self.page++;
|
||||
|
||||
// Record pageview in WP Stats, if available.
|
||||
if ( stats ) {
|
||||
new Image().src =
|
||||
document.location.protocol +
|
||||
'//pixel.wp.com/g.gif?' +
|
||||
stats +
|
||||
'&post=0&baba=' +
|
||||
Math.random();
|
||||
}
|
||||
|
||||
// Add new posts to the postflair object
|
||||
if ( 'object' === typeof response.postflair && 'object' === typeof WPCOM_sharing_counts ) {
|
||||
WPCOM_sharing_counts = self.extend( WPCOM_sharing_counts, response.postflair ); // eslint-disable-line no-global-assign
|
||||
}
|
||||
|
||||
// Render the results
|
||||
self.render.call( self, response );
|
||||
|
||||
// If 'click' type and there are still posts to fetch, add back the handle
|
||||
if ( type === 'click' ) {
|
||||
// add focus to new posts, only in button mode as we know where page focus currently is and only if we have a wrapper
|
||||
if ( infiniteScroll.settings.wrapper ) {
|
||||
document
|
||||
.querySelector(
|
||||
'#infinite-view-' + ( self.page + self.offset - 1 ) + ' a:first-of-type'
|
||||
)
|
||||
.focus( {
|
||||
preventScroll: true,
|
||||
} );
|
||||
}
|
||||
|
||||
if ( response.lastbatch ) {
|
||||
if ( self.click_handle ) {
|
||||
// Update body classes
|
||||
self.body.classList.add( 'infinity-end' );
|
||||
self.body.classList.remove( 'infinity-success' );
|
||||
} else {
|
||||
self.trigger( this.body, 'infinite-scroll-posts-end' );
|
||||
}
|
||||
} else if ( self.click_handle ) {
|
||||
self.element.appendChild( self.handle );
|
||||
} else {
|
||||
self.trigger( this.body, 'infinite-scroll-posts-more' );
|
||||
}
|
||||
} else if ( response.lastbatch ) {
|
||||
self.disabled = true;
|
||||
|
||||
self.body.classList.add( 'infinity-end' );
|
||||
self.body.classList.remove( 'infinity-success' );
|
||||
}
|
||||
|
||||
// Update currentday to the latest value returned from the server
|
||||
if ( response.currentday ) {
|
||||
self.currentday = response.currentday;
|
||||
}
|
||||
|
||||
// Fire Google Analytics pageview
|
||||
if ( self.google_analytics ) {
|
||||
var ga_url = self.history.path.replace( /%d/, self.page );
|
||||
if ( 'object' === typeof _gaq ) {
|
||||
_gaq.push( [ '_trackPageview', ga_url ] );
|
||||
}
|
||||
if ( 'function' === typeof ga ) {
|
||||
ga( 'send', 'pageview', ga_url );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return xhr;
|
||||
};
|
||||
|
||||
/**
|
||||
* Given JavaScript blob and the name of a parent tag, this helper function will
|
||||
* generate a script tag, insert the JavaScript blob, and append it to the parent.
|
||||
*
|
||||
* It's important to note that the JavaScript blob will be evaluated immediately. If
|
||||
* you need a parent script to load first, use that script element's onload handler.
|
||||
*
|
||||
* @param {string} script The blob of JavaScript to run.
|
||||
* @param {string} parentTag The tag name of the parent element.
|
||||
*/
|
||||
Scroller.prototype.appendInlineScript = function ( script, parentTag ) {
|
||||
var element = document.createElement( 'script' ),
|
||||
scriptContent = document.createTextNode( '//<![CDATA[ \n' + script + '\n//]]>' );
|
||||
|
||||
element.type = 'text/javascript';
|
||||
element.appendChild( scriptContent );
|
||||
|
||||
document.getElementsByTagName( parentTag )[ 0 ].appendChild( element );
|
||||
};
|
||||
|
||||
/**
|
||||
* Core's native media player uses MediaElement.js
|
||||
* The library's size is sufficient that it may not be loaded in time for Core's helper to invoke it, so we need to delay until `mejs` exists.
|
||||
*/
|
||||
Scroller.prototype.maybeLoadMejs = function () {
|
||||
if ( null === this.wpMediaelement ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( 'undefined' === typeof mejs ) {
|
||||
setTimeout( this.maybeLoadMejs.bind( this ), 250 );
|
||||
} else {
|
||||
document
|
||||
.getElementsByTagName( this.wpMediaelement.element )[ 0 ]
|
||||
.appendChild( this.wpMediaelement.tag );
|
||||
this.wpMediaelement = null;
|
||||
|
||||
// Ensure any subsequent IS loads initialize the players
|
||||
this.body.addEventListener( 'is.post-load', this.initializeMejs );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize the MediaElement.js player for any posts not previously initialized
|
||||
*/
|
||||
Scroller.prototype.initializeMejs = function ( e ) {
|
||||
// Are there media players in the incoming set of posts?
|
||||
if (
|
||||
! e.detail ||
|
||||
! e.detail.html ||
|
||||
( -1 === e.detail.html.indexOf( 'wp-audio-shortcode' ) &&
|
||||
-1 === e.detail.html.indexOf( 'wp-video-shortcode' ) )
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't bother if mejs isn't loaded for some reason
|
||||
if ( 'undefined' === typeof mejs ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Adapted from wp-includes/js/mediaelement/wp-mediaelement.js
|
||||
// Modified to not initialize already-initialized players, as Mejs doesn't handle that well
|
||||
var settings = {};
|
||||
var audioVideoElements;
|
||||
|
||||
if ( typeof _wpmejsSettings !== 'undefined' ) {
|
||||
settings.pluginPath = _wpmejsSettings.pluginPath;
|
||||
}
|
||||
|
||||
settings.success = function ( mejs ) {
|
||||
var autoplay = mejs.attributes.autoplay && 'false' !== mejs.attributes.autoplay;
|
||||
if ( 'flash' === mejs.pluginType && autoplay ) {
|
||||
mejs.addEventListener(
|
||||
'canplay',
|
||||
function () {
|
||||
mejs.play();
|
||||
},
|
||||
false
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
audioVideoElements = document.querySelectorAll( '.wp-audio-shortcode, .wp-video-shortcode' );
|
||||
audioVideoElements = Array.prototype.slice.call( audioVideoElements );
|
||||
|
||||
// Only process already unprocessed shortcodes.
|
||||
audioVideoElements = audioVideoElements.filter( function ( el ) {
|
||||
while ( el.parentNode ) {
|
||||
if ( el.classList.contains( 'mejs-container' ) ) {
|
||||
return false;
|
||||
}
|
||||
el = el.parentNode;
|
||||
}
|
||||
return true;
|
||||
} );
|
||||
|
||||
for ( var i = 0; i < audioVideoElements.length; i++ ) {
|
||||
new MediaElementPlayer( audioVideoElements[ i ], settings );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get element measurements relative to the viewport.
|
||||
*
|
||||
* @return {object}
|
||||
*/
|
||||
Scroller.prototype.measure = function ( element, expandClasses ) {
|
||||
expandClasses = expandClasses || [];
|
||||
|
||||
var childrenToTest = Array.prototype.slice.call( element.children );
|
||||
var currentChild,
|
||||
minTop = Number.MAX_VALUE,
|
||||
maxBottom = 0,
|
||||
currentChildRect,
|
||||
i;
|
||||
|
||||
while ( childrenToTest.length > 0 ) {
|
||||
currentChild = childrenToTest.shift();
|
||||
|
||||
for ( i = 0; i < expandClasses.length; i++ ) {
|
||||
// Expand (= measure) child elements of nodes with class names from expandClasses.
|
||||
if ( currentChild.classList.contains( expandClasses[ i ] ) ) {
|
||||
childrenToTest = childrenToTest.concat(
|
||||
Array.prototype.slice.call( currentChild.children )
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
currentChildRect = currentChild.getBoundingClientRect();
|
||||
|
||||
minTop = Math.min( minTop, currentChildRect.top );
|
||||
maxBottom = Math.max( maxBottom, currentChildRect.bottom );
|
||||
}
|
||||
|
||||
var viewportMiddle = Math.round( window.innerHeight / 2 );
|
||||
|
||||
// isActive = does the middle of the viewport cross the element?
|
||||
var isActive = minTop <= viewportMiddle && maxBottom >= viewportMiddle;
|
||||
|
||||
/**
|
||||
* Factor = percentage of viewport above the middle line occupied by the element.
|
||||
*
|
||||
* Negative factors are assigned for elements below the middle line. That's on purpose
|
||||
* to only allow "page 2" to change the URL once it's in the middle of the viewport.
|
||||
*/
|
||||
var factor = ( Math.min( maxBottom, viewportMiddle ) - Math.max( minTop, 0 ) ) / viewportMiddle;
|
||||
|
||||
return {
|
||||
top: minTop,
|
||||
bottom: maxBottom,
|
||||
height: maxBottom - minTop,
|
||||
factor: factor,
|
||||
isActive: isActive,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Trigger IS to load additional posts if the initial posts don't fill the window.
|
||||
*
|
||||
* On large displays, or when posts are very short, the viewport may not be filled with posts,
|
||||
* so we overcome this by loading additional posts when IS initializes.
|
||||
*/
|
||||
Scroller.prototype.ensureFilledViewport = function () {
|
||||
var self = this,
|
||||
windowHeight = self.window.innerHeight,
|
||||
wrapperMeasurements = self.measure( self.element, [ self.wrapperClass ] );
|
||||
|
||||
// Only load more posts once. This prevents infinite loops when there are no more posts.
|
||||
self.body.removeEventListener( 'is.post-load', self.checkViewportOnLoadBound );
|
||||
|
||||
// Load more posts if space permits, otherwise stop checking for a full viewport.
|
||||
if ( wrapperMeasurements.bottom !== 0 && wrapperMeasurements.bottom < windowHeight ) {
|
||||
self.ready = true;
|
||||
self.refresh();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Event handler for ensureFilledViewport(), tied to the post-load trigger.
|
||||
* Necessary to ensure that the variable `this` contains the scroller when used in ensureFilledViewport(). Since this function is tied to an event, `this` becomes the DOM element the event is tied to.
|
||||
*/
|
||||
Scroller.prototype.checkViewportOnLoad = function () {
|
||||
this.ensureFilledViewport();
|
||||
};
|
||||
|
||||
function fullscreenState() {
|
||||
return document.fullscreenElement ||
|
||||
document.mozFullScreenElement ||
|
||||
document.webkitFullscreenElement ||
|
||||
document.msFullscreenElement
|
||||
? 1
|
||||
: 0;
|
||||
}
|
||||
|
||||
var previousFullScrenState = fullscreenState();
|
||||
|
||||
/**
|
||||
* Identify archive page that corresponds to majority of posts shown in the current browser window.
|
||||
*/
|
||||
Scroller.prototype.determineURL = function () {
|
||||
var self = this,
|
||||
pageNum = -1,
|
||||
currentFullScreenState = fullscreenState(),
|
||||
wrapperEls,
|
||||
maxFactor = 0;
|
||||
|
||||
// xor - check if the state has changed
|
||||
// eslint-disable-next-line no-bitwise
|
||||
if ( previousFullScrenState ^ currentFullScreenState ) {
|
||||
// If we just switched to/from fullscreen,
|
||||
// don't do the div clearing/caching or the
|
||||
// URL setting. Doing so can break video playback
|
||||
// if the video goes to fullscreen.
|
||||
|
||||
previousFullScrenState = currentFullScreenState;
|
||||
return;
|
||||
}
|
||||
previousFullScrenState = currentFullScreenState;
|
||||
wrapperEls = document.querySelectorAll( '.' + self.wrapperClass );
|
||||
|
||||
for ( var i = 0; i < wrapperEls.length; i++ ) {
|
||||
var setMeasurements = self.measure( wrapperEls[ i ] );
|
||||
|
||||
// If it exists, pick a set that is crossed by the middle of the viewport.
|
||||
if ( setMeasurements.isActive ) {
|
||||
pageNum = parseInt( wrapperEls[ i ].dataset.pageNum, 10 );
|
||||
break;
|
||||
}
|
||||
|
||||
// If there is such a set, pick the one that occupies the most space
|
||||
// above the middle of the viewport.
|
||||
if ( setMeasurements.factor > maxFactor ) {
|
||||
pageNum = parseInt( wrapperEls[ i ].dataset.pageNum, 10 );
|
||||
maxFactor = setMeasurements.factor;
|
||||
}
|
||||
|
||||
// Otherwise default to -1
|
||||
}
|
||||
|
||||
self.updateURL( pageNum );
|
||||
};
|
||||
|
||||
/**
|
||||
* Update address bar to reflect archive page URL for a given page number.
|
||||
* Checks if URL is different to prevent pollution of browser history.
|
||||
*/
|
||||
Scroller.prototype.updateURL = function ( page ) {
|
||||
// IE only supports pushState() in v10 and above, so don't bother if those conditions aren't met.
|
||||
if ( ! window.history.pushState ) {
|
||||
return;
|
||||
}
|
||||
var self = this,
|
||||
pageSlug = self.origURL;
|
||||
|
||||
if ( -1 !== page ) {
|
||||
pageSlug =
|
||||
window.location.protocol +
|
||||
'//' +
|
||||
self.history.host +
|
||||
self.history.path.replace( /%d/, page ) +
|
||||
self.history.parameters;
|
||||
}
|
||||
|
||||
if ( window.location.href !== pageSlug ) {
|
||||
history.pushState( null, null, pageSlug );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Pause scrolling.
|
||||
*/
|
||||
Scroller.prototype.pause = function () {
|
||||
this.disabled = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Resume scrolling.
|
||||
*/
|
||||
Scroller.prototype.resume = function () {
|
||||
this.disabled = false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Emits custom JS events.
|
||||
*
|
||||
* @param {Node} el
|
||||
* @param {string} eventName
|
||||
* @param {*} data
|
||||
*/
|
||||
Scroller.prototype.trigger = function ( el, eventName, opts ) {
|
||||
opts = opts || {};
|
||||
|
||||
/**
|
||||
* Emit the event in a jQuery way for backwards compatibility where necessary.
|
||||
*/
|
||||
if ( opts.jqueryEventName && 'undefined' !== typeof jQuery ) {
|
||||
jQuery( el ).trigger( opts.jqueryEventName, opts.data || null );
|
||||
}
|
||||
|
||||
/**
|
||||
* Emit the event in a standard way.
|
||||
*/
|
||||
var e;
|
||||
try {
|
||||
e = new CustomEvent( eventName, {
|
||||
bubbles: true,
|
||||
cancelable: true,
|
||||
detail: opts.data || null,
|
||||
} );
|
||||
} catch {
|
||||
e = document.createEvent( 'CustomEvent' );
|
||||
e.initCustomEvent( eventName, true, true, opts.data || null );
|
||||
}
|
||||
el.dispatchEvent( e );
|
||||
};
|
||||
|
||||
/**
|
||||
* Ready, set, go!
|
||||
*/
|
||||
var jetpackInfinityModule = function () {
|
||||
// Check for our variables
|
||||
if ( 'object' !== typeof infiniteScroll ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var bodyClasses = infiniteScroll.settings.body_class.split( ' ' );
|
||||
bodyClasses.forEach( function ( className ) {
|
||||
if ( className ) {
|
||||
document.body.classList.add( className );
|
||||
}
|
||||
} );
|
||||
|
||||
// Set stats, used for tracking stats
|
||||
stats = infiniteScroll.settings.stats;
|
||||
|
||||
// Define what type of infinity we have, grab text for click-handle
|
||||
type = infiniteScroll.settings.type;
|
||||
text = infiniteScroll.settings.text;
|
||||
totop = infiniteScroll.settings.totop;
|
||||
|
||||
// aria text
|
||||
loading_text = infiniteScroll.settings.loading_text;
|
||||
|
||||
// Initialize the scroller (with the ID of the element from the theme)
|
||||
infiniteScroll.scroller = new Scroller( infiniteScroll.settings );
|
||||
|
||||
/**
|
||||
* Monitor user scroll activity to update URL to correspond to archive page for current set of IS posts
|
||||
*/
|
||||
if ( type === 'click' ) {
|
||||
var timer = null;
|
||||
window.addEventListener( 'scroll', function () {
|
||||
// run the real scroll handler once every 250 ms.
|
||||
if ( timer ) {
|
||||
return;
|
||||
}
|
||||
timer = setTimeout( function () {
|
||||
infiniteScroll.scroller.determineURL();
|
||||
timer = null;
|
||||
}, 250 );
|
||||
} );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Ready, set, go!
|
||||
*/
|
||||
if ( document.readyState === 'interactive' || document.readyState === 'complete' ) {
|
||||
jetpackInfinityModule();
|
||||
} else {
|
||||
document.addEventListener( 'DOMContentLoaded', jetpackInfinityModule );
|
||||
}
|
||||
} )(); // Close closure
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,45 @@
|
||||
/* =Infinity Styles
|
||||
-------------------------------------------------------------- */
|
||||
.infinite-scroll #main:after {
|
||||
clear: both;
|
||||
content: '';
|
||||
display: block;
|
||||
}
|
||||
.infinite-scroll #content {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.infinite-scroll.neverending #content {
|
||||
margin-bottom: 70px;
|
||||
}
|
||||
.infinite-scroll .infinite-wrap {
|
||||
border-top: none;
|
||||
padding-top: 0;
|
||||
}
|
||||
.infinite-scroll .infinite-wrap .hentry:last-child {
|
||||
border-bottom: 1px solid #dcdcde;
|
||||
}
|
||||
.infinite-scroll .infinite-wrap:last-of-type .hentry:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Elements to hide:
|
||||
* (footer widgets, post navigation, regular footer)
|
||||
*/
|
||||
.infinite-scroll.neverending #colophon #supplementary,
|
||||
.infinite-scroll #nav-below,
|
||||
.infinite-scroll.neverending #colophon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Hooks to infinity-end body class to restore footer */
|
||||
.infinity-end.neverending #colophon {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* For responsive CSS */
|
||||
@media (max-width: 800px) {
|
||||
.infinite-scroll #infinite-handle {
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* Infinite Scroll Theme Assets
|
||||
*
|
||||
* Register support for @Twenty Eleven and enqueue relevant styles.
|
||||
*
|
||||
* @package jetpack
|
||||
*/
|
||||
|
||||
/**
|
||||
* Add theme support for infinity scroll
|
||||
*/
|
||||
function jetpack_twentyeleven_infinite_scroll_init() {
|
||||
add_theme_support(
|
||||
'infinite-scroll',
|
||||
array(
|
||||
'container' => 'content',
|
||||
'footer' => 'page',
|
||||
'footer_widgets' => jetpack_twentyeleven_has_footer_widgets(),
|
||||
)
|
||||
);
|
||||
}
|
||||
add_action( 'init', 'jetpack_twentyeleven_infinite_scroll_init' );
|
||||
|
||||
/**
|
||||
* Enqueue CSS stylesheet with theme styles for infinity.
|
||||
*/
|
||||
function jetpack_twentyeleven_infinite_scroll_enqueue_styles() {
|
||||
if ( wp_script_is( 'the-neverending-homepage' ) ) {
|
||||
// Add theme specific styles.
|
||||
wp_enqueue_style( 'infinity-twentyeleven', plugins_url( 'twentyeleven.css', __FILE__ ), array( 'the-neverending-homepage' ), '20121002' );
|
||||
}
|
||||
}
|
||||
add_action( 'wp_enqueue_scripts', 'jetpack_twentyeleven_infinite_scroll_enqueue_styles', 25 );
|
||||
|
||||
/**
|
||||
* Do we have footer widgets?
|
||||
*/
|
||||
function jetpack_twentyeleven_has_footer_widgets() {
|
||||
// Are any of the "Footer Area" sidebars active?
|
||||
if ( is_active_sidebar( 'sidebar-3' ) || is_active_sidebar( 'sidebar-4' ) || is_active_sidebar( 'sidebar-5' ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If we're on mobile and the Main Sidebar has widgets, it falls below the content, so we have footer widgets.
|
||||
if ( function_exists( 'jetpack_is_mobile' ) && jetpack_is_mobile() && is_active_sidebar( 'sidebar-1' ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -0,0 +1,216 @@
|
||||
/**
|
||||
* Infinite Scroll
|
||||
*/
|
||||
|
||||
.infinite-scroll .pagination,
|
||||
.infinite-scroll.neverending .site-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.infinity-end.neverending .site-footer {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Spinner */
|
||||
.infinite-loader {
|
||||
clear: both;
|
||||
height: 24px;
|
||||
margin: 24px 0;
|
||||
}
|
||||
|
||||
.infinite-loader .spinner {
|
||||
top: 50% !important;
|
||||
right: 50% !important;
|
||||
}
|
||||
|
||||
/* Click-to-load */
|
||||
#infinite-handle {
|
||||
clear: both;
|
||||
margin: 7.6923%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#infinite-handle span {
|
||||
background-color: #333;
|
||||
font-family: "Noto Sans", sans-serif;
|
||||
font-size: 12px;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.04em;
|
||||
line-height: normal;
|
||||
padding: 0.7917em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#infinite-handle span:hover,
|
||||
#infinite-handle span:focus {
|
||||
background-color: #707070;
|
||||
background-color: rgba(51, 51, 51, 0.7);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
#infinite-footer {
|
||||
display: none;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
#infinite-footer .container {
|
||||
background-color: #fff;
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
border-color: #eaeaea;
|
||||
border-color: rgba(51, 51, 51, 0.1);
|
||||
padding: 0 0.8em;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info {
|
||||
font-family: "Noto Sans", sans-serif;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a,
|
||||
#infinite-footer .blog-credits {
|
||||
font-size: 12px;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a,
|
||||
#infinite-footer .blog-credits a:hover,
|
||||
#infinite-footer .blog-credits a:focus {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a:hover,
|
||||
#infinite-footer .blog-info a:focus,
|
||||
#infinite-footer .blog-credits,
|
||||
#infinite-footer .blog-credits a {
|
||||
color: #707070;
|
||||
color: rgba(51, 51, 51, 0.7);
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a:hover,
|
||||
#infinite-footer .blog-info a:focus,
|
||||
#infinite-footer .blog-credits a:hover,
|
||||
#infinite-footer .blog-credits a:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 38.75em) {
|
||||
.infinite-loader {
|
||||
margin: 7.6923% 0;
|
||||
}
|
||||
|
||||
.infinite-wrap {
|
||||
margin-top: 7.6923%;
|
||||
}
|
||||
|
||||
#infinite-handle {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 46.25em) {
|
||||
#infinite-handle span {
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
font-size: 1.4rem;
|
||||
padding: 0.8214em
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 55em) {
|
||||
#infinite-handle span {
|
||||
font-size: 16px;
|
||||
font-size: 1.6rem;
|
||||
padding: 0.8125em;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 59.6875em) {
|
||||
.infinite-loader {
|
||||
margin: 8.3333% 0;
|
||||
}
|
||||
|
||||
.infinite-wrap {
|
||||
margin-top: 8.3333%;
|
||||
}
|
||||
|
||||
#infinite-handle {
|
||||
margin: 8.3333% 8.3333% 0;
|
||||
}
|
||||
|
||||
#infinite-handle span {
|
||||
display: inline-block;
|
||||
font-size: 12px;
|
||||
font-size: 1.2rem;
|
||||
padding: 0.7917em 1.5833em;
|
||||
}
|
||||
|
||||
#infinite-footer {
|
||||
display: block;
|
||||
position: fixed;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 68.75em) {
|
||||
#infinite-handle span {
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
font-size: 1.4rem;
|
||||
padding: 0.8214em 1.5714em;
|
||||
}
|
||||
|
||||
#infinite-footer .container {
|
||||
padding: 0 0.8235em;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
height: 27px;
|
||||
line-height: 27px;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a {
|
||||
font-size: 14px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-credits {
|
||||
font-size: 12px;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 77.5em) {
|
||||
#infinite-handle span {
|
||||
font-size: 16px;
|
||||
font-size: 1.6rem;
|
||||
padding: 0.8125em 1.625em;
|
||||
}
|
||||
|
||||
#infinite-footer .container {
|
||||
padding: 0 0.8421em;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a {
|
||||
font-size: 16px;
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-credits {
|
||||
font-size: 13px;
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,216 @@
|
||||
/**
|
||||
* Infinite Scroll
|
||||
*/
|
||||
|
||||
.infinite-scroll .pagination,
|
||||
.infinite-scroll.neverending .site-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.infinity-end.neverending .site-footer {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Spinner */
|
||||
.infinite-loader {
|
||||
clear: both;
|
||||
height: 24px;
|
||||
margin: 24px 0;
|
||||
}
|
||||
|
||||
.infinite-loader .spinner {
|
||||
top: 50% !important;
|
||||
left: 50% !important;
|
||||
}
|
||||
|
||||
/* Click-to-load */
|
||||
#infinite-handle {
|
||||
clear: both;
|
||||
margin: 7.6923%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#infinite-handle span {
|
||||
background-color: #333;
|
||||
font-family: "Noto Sans", sans-serif;
|
||||
font-size: 12px;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.04em;
|
||||
line-height: normal;
|
||||
padding: 0.7917em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#infinite-handle span:hover,
|
||||
#infinite-handle span:focus {
|
||||
background-color: #707070;
|
||||
background-color: rgba(51, 51, 51, 0.7);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
#infinite-footer {
|
||||
display: none;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
#infinite-footer .container {
|
||||
background-color: #fff;
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
border-color: #eaeaea;
|
||||
border-color: rgba(51, 51, 51, 0.1);
|
||||
padding: 0 0.8em;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info {
|
||||
font-family: "Noto Sans", sans-serif;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a,
|
||||
#infinite-footer .blog-credits {
|
||||
font-size: 12px;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a,
|
||||
#infinite-footer .blog-credits a:hover,
|
||||
#infinite-footer .blog-credits a:focus {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a:hover,
|
||||
#infinite-footer .blog-info a:focus,
|
||||
#infinite-footer .blog-credits,
|
||||
#infinite-footer .blog-credits a {
|
||||
color: #707070;
|
||||
color: rgba(51, 51, 51, 0.7);
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a:hover,
|
||||
#infinite-footer .blog-info a:focus,
|
||||
#infinite-footer .blog-credits a:hover,
|
||||
#infinite-footer .blog-credits a:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 38.75em) {
|
||||
.infinite-loader {
|
||||
margin: 7.6923% 0;
|
||||
}
|
||||
|
||||
.infinite-wrap {
|
||||
margin-top: 7.6923%;
|
||||
}
|
||||
|
||||
#infinite-handle {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 46.25em) {
|
||||
#infinite-handle span {
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
font-size: 1.4rem;
|
||||
padding: 0.8214em
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 55em) {
|
||||
#infinite-handle span {
|
||||
font-size: 16px;
|
||||
font-size: 1.6rem;
|
||||
padding: 0.8125em;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 59.6875em) {
|
||||
.infinite-loader {
|
||||
margin: 8.3333% 0;
|
||||
}
|
||||
|
||||
.infinite-wrap {
|
||||
margin-top: 8.3333%;
|
||||
}
|
||||
|
||||
#infinite-handle {
|
||||
margin: 8.3333% 8.3333% 0;
|
||||
}
|
||||
|
||||
#infinite-handle span {
|
||||
display: inline-block;
|
||||
font-size: 12px;
|
||||
font-size: 1.2rem;
|
||||
padding: 0.7917em 1.5833em;
|
||||
}
|
||||
|
||||
#infinite-footer {
|
||||
display: block;
|
||||
position: fixed;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 68.75em) {
|
||||
#infinite-handle span {
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
font-size: 1.4rem;
|
||||
padding: 0.8214em 1.5714em;
|
||||
}
|
||||
|
||||
#infinite-footer .container {
|
||||
padding: 0 0.8235em;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
height: 27px;
|
||||
line-height: 27px;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a {
|
||||
font-size: 14px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-credits {
|
||||
font-size: 12px;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 77.5em) {
|
||||
#infinite-handle span {
|
||||
font-size: 16px;
|
||||
font-size: 1.6rem;
|
||||
padding: 0.8125em 1.625em;
|
||||
}
|
||||
|
||||
#infinite-footer .container {
|
||||
padding: 0 0.8421em;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a {
|
||||
font-size: 16px;
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-credits {
|
||||
font-size: 13px;
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Infinite Scroll Theme Assets
|
||||
*
|
||||
* Register support for Twenty Fifteen.
|
||||
*
|
||||
* @package jetpack
|
||||
*/
|
||||
|
||||
/**
|
||||
* Add theme support for infinite scroll
|
||||
*/
|
||||
function jetpack_twentyfifteen_infinite_scroll_init() {
|
||||
add_theme_support(
|
||||
'infinite-scroll',
|
||||
array(
|
||||
'container' => 'main',
|
||||
'footer' => 'page',
|
||||
)
|
||||
);
|
||||
}
|
||||
add_action( 'after_setup_theme', 'jetpack_twentyfifteen_infinite_scroll_init' );
|
||||
|
||||
/**
|
||||
* Enqueue CSS stylesheet with theme styles for Infinite Scroll.
|
||||
*/
|
||||
function jetpack_twentyfifteen_infinite_scroll_enqueue_styles() {
|
||||
if ( wp_script_is( 'the-neverending-homepage' ) ) {
|
||||
wp_enqueue_style( 'infinity-twentyfifteen', plugins_url( 'twentyfifteen.css', __FILE__ ), array( 'the-neverending-homepage' ), '20141022' );
|
||||
wp_style_add_data( 'infinity-twentyfifteen', 'rtl', 'replace' );
|
||||
}
|
||||
}
|
||||
add_action( 'wp_enqueue_scripts', 'jetpack_twentyfifteen_infinite_scroll_enqueue_styles', 25 );
|
||||
@@ -0,0 +1,111 @@
|
||||
/* Spinner */
|
||||
|
||||
.infinite-loader {
|
||||
height: 36px;
|
||||
padding: 24px 0;
|
||||
}
|
||||
|
||||
.infinite-loader .spinner {
|
||||
margin: 0 auto;
|
||||
top: 18px !important;
|
||||
left: 0 !important;
|
||||
}
|
||||
|
||||
.rtl .infinite-loader .spinner {
|
||||
right: 0 !important;
|
||||
left: auto !important;
|
||||
}
|
||||
|
||||
/* Click-to-load */
|
||||
|
||||
#infinite-handle {
|
||||
padding: 24px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#infinite-handle span {
|
||||
background: #24890d;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
line-height: 1;
|
||||
padding: 12px 30px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#infinite-handle span:hover {
|
||||
background-color: #41a62a;
|
||||
}
|
||||
|
||||
#infinite-handle span:active {
|
||||
background-color: #55d737;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
|
||||
#infinite-footer {
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#infinite-footer .container {
|
||||
margin: 0;
|
||||
padding: 4px 20px;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a {
|
||||
color: #2b2b2b;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-credits,
|
||||
#infinite-footer .blog-credits a {
|
||||
color: #767676;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a:hover,
|
||||
#infinite-footer .blog-credits a:hover {
|
||||
color: #41a62a;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Elements to hide: post navigation, normal footer. */
|
||||
|
||||
.infinite-scroll .paging-navigation,
|
||||
.infinite-scroll.neverending #colophon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
#infinite-footer {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Hooks to infinity-end body class to restore footer. */
|
||||
|
||||
.infinity-end.neverending #colophon {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Reset top margin adjustment for subsequent posts added by Infinite Scroll */
|
||||
.full-width .site-content .infinite-wrap .hentry.has-post-thumbnail:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 401px) {
|
||||
.infinite-loader,
|
||||
#infinite-handle {
|
||||
padding: 0 0 48px;
|
||||
}
|
||||
|
||||
.list-view .site-content .infinite-wrap .hentry:first-of-type {
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
||||
padding-top: 48px;
|
||||
}
|
||||
|
||||
.list-view .site-content .infinite-wrap .hentry.has-post-thumbnail {
|
||||
border-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
/**
|
||||
* Infinite Scroll Theme Assets
|
||||
*
|
||||
* Register support for Twenty Fourteen.
|
||||
*
|
||||
* @package jetpack
|
||||
*/
|
||||
|
||||
use Automattic\Jetpack\Device_Detection\User_Agent_Info;
|
||||
|
||||
/**
|
||||
* Add theme support for infinite scroll
|
||||
*/
|
||||
function jetpack_twentyfourteen_infinite_scroll_init() {
|
||||
add_theme_support(
|
||||
'infinite-scroll',
|
||||
array(
|
||||
'container' => 'content',
|
||||
'footer' => 'page',
|
||||
'footer_widgets' => jetpack_twentyfourteen_has_footer_widgets(),
|
||||
)
|
||||
);
|
||||
}
|
||||
add_action( 'after_setup_theme', 'jetpack_twentyfourteen_infinite_scroll_init' );
|
||||
|
||||
/**
|
||||
* Switch to the "click to load" type IS with the following cases
|
||||
* 1. Viewed from iPad and the primary sidebar is active.
|
||||
* 2. Viewed from mobile and either the primary or the content sidebar is active.
|
||||
* 3. The footer widget is active.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
function jetpack_twentyfourteen_has_footer_widgets() {
|
||||
if ( function_exists( 'jetpack_is_mobile' ) ) {
|
||||
if ( ( User_Agent_Info::is_ipad() && is_active_sidebar( 'sidebar-1' ) )
|
||||
|| ( jetpack_is_mobile( '', true ) && ( is_active_sidebar( 'sidebar-1' ) || is_active_sidebar( 'sidebar-2' ) ) )
|
||||
|| is_active_sidebar( 'sidebar-3' ) ) {
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue CSS stylesheet with theme styles for Infinite Scroll.
|
||||
*/
|
||||
function jetpack_twentyfourteen_infinite_scroll_enqueue_styles() {
|
||||
if ( wp_script_is( 'the-neverending-homepage' ) ) {
|
||||
wp_enqueue_style( 'infinity-twentyfourteen', plugins_url( 'twentyfourteen.css', __FILE__ ), array( 'the-neverending-homepage' ), '20131118' );
|
||||
}
|
||||
}
|
||||
add_action( 'wp_enqueue_scripts', 'jetpack_twentyfourteen_infinite_scroll_enqueue_styles', 25 );
|
||||
@@ -0,0 +1,168 @@
|
||||
.infinite-scroll .pagination {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.infinite-wrap > article:before,
|
||||
.infinite-wrap > article:after {
|
||||
content: "";
|
||||
display: table;
|
||||
}
|
||||
|
||||
.infinite-wrap > article:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.infinite-wrap > article {
|
||||
padding-bottom: 2em;
|
||||
}
|
||||
|
||||
/* Spinner */
|
||||
.site-main .infinite-loader {
|
||||
clear: both;
|
||||
color: currentColor;
|
||||
height: 42px;
|
||||
margin-bottom: 3.5em;
|
||||
}
|
||||
|
||||
.blog:not(.has-sidebar) .infinite-loader {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.site-main .infinite-loader .spinner {
|
||||
right: 50%!important;
|
||||
}
|
||||
|
||||
/* Click-to-load */
|
||||
#infinite-handle {
|
||||
clear: both;
|
||||
margin: 0 7.6923% 2em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Style "Load More" button */
|
||||
.site-main #infinite-handle span {
|
||||
background: #1a1a1a;
|
||||
border-radius: 2px;
|
||||
color: #fff;
|
||||
font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
|
||||
font-size: inherit;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.046875em;
|
||||
line-height: 1;
|
||||
padding: 0.84375em 0.875em 0.78125em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#infinite-handle span:hover,
|
||||
#infinite-handle span:focus {
|
||||
background: #767676;
|
||||
}
|
||||
|
||||
/* Style "Load More" button when dark color scheme is used */
|
||||
.colors-dark .site-main #infinite-handle span {
|
||||
background: #f8f8f8;
|
||||
border-radius: 2px;
|
||||
color: #222;
|
||||
font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
|
||||
font-size: inherit;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.046875em;
|
||||
line-height: 1;
|
||||
padding: 0.84375em 0.875em 0.78125em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.colors-dark #infinite-handle span:hover,
|
||||
.colors-dark #infinite-handle span:focus {
|
||||
background: #bbb;
|
||||
columns: #222;
|
||||
}
|
||||
|
||||
/* Style Infinite Footer */
|
||||
#infinite-footer {
|
||||
position: fixed !important;
|
||||
}
|
||||
|
||||
#infinite-footer .container {
|
||||
background-color: #fff;
|
||||
border-color: #d1d1d1;
|
||||
padding: 0 7.6923%;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
|
||||
text-align: center;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a,
|
||||
#infinite-footer .blog-credits,
|
||||
#infinite-footer .blog-credits a {
|
||||
color: #222222;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a:hover,
|
||||
#infinite-footer .blog-info a:focus,
|
||||
#infinite-footer .blog-credits a:hover,
|
||||
#infinite-footer .blog-credits a:focus {
|
||||
color: #767676;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.infinite-scroll #navigation,
|
||||
.infinite-scroll.neverending .jetpack-mobile-link,
|
||||
.infinite-scroll.neverending .site-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Shows the footer & mobile link again in case all posts have been loaded */
|
||||
.infinity-end.neverending .jetpack-mobile-link,
|
||||
.infinity-end.neverending .site-footer {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 44.375em) {
|
||||
#infinite-handle {
|
||||
margin: 0 0 1em 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.has-sidebar #infinite-handle {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.site-main #infinite-handle span {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 48em) {
|
||||
.infinite-wrap > article {
|
||||
padding-bottom: 4em;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 48em) {
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
line-height: 35px;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-credits {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.blog:not(.has-sidebar) .infinite-loader {
|
||||
float: left;
|
||||
width: 58%;
|
||||
}
|
||||
|
||||
.site-main .infinite-loader .spinner {
|
||||
margin-right: -17px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
.infinite-scroll .pagination {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.infinite-wrap > article:before,
|
||||
.infinite-wrap > article:after {
|
||||
content: "";
|
||||
display: table;
|
||||
}
|
||||
|
||||
.infinite-wrap > article:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.infinite-wrap > article {
|
||||
padding-bottom: 2em;
|
||||
}
|
||||
|
||||
/* Spinner */
|
||||
.site-main .infinite-loader {
|
||||
clear: both;
|
||||
color: currentColor;
|
||||
height: 42px;
|
||||
margin-bottom: 3.5em;
|
||||
}
|
||||
|
||||
.blog:not(.has-sidebar) .infinite-loader {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.site-main .infinite-loader .spinner {
|
||||
left: 50%!important;
|
||||
}
|
||||
|
||||
/* Click-to-load */
|
||||
#infinite-handle {
|
||||
clear: both;
|
||||
margin: 0 7.6923% 2em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Style "Load More" button */
|
||||
.site-main #infinite-handle span {
|
||||
background: #1a1a1a;
|
||||
border-radius: 2px;
|
||||
color: #fff;
|
||||
font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
|
||||
font-size: inherit;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.046875em;
|
||||
line-height: 1;
|
||||
padding: 0.84375em 0.875em 0.78125em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#infinite-handle span:hover,
|
||||
#infinite-handle span:focus {
|
||||
background: #767676;
|
||||
}
|
||||
|
||||
/* Style "Load More" button when dark color scheme is used */
|
||||
.colors-dark .site-main #infinite-handle span {
|
||||
background: #f8f8f8;
|
||||
border-radius: 2px;
|
||||
color: #222;
|
||||
font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
|
||||
font-size: inherit;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.046875em;
|
||||
line-height: 1;
|
||||
padding: 0.84375em 0.875em 0.78125em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.colors-dark #infinite-handle span:hover,
|
||||
.colors-dark #infinite-handle span:focus {
|
||||
background: #bbb;
|
||||
columns: #222;
|
||||
}
|
||||
|
||||
/* Style Infinite Footer */
|
||||
#infinite-footer {
|
||||
position: fixed !important;
|
||||
}
|
||||
|
||||
#infinite-footer .container {
|
||||
background-color: #fff;
|
||||
border-color: #d1d1d1;
|
||||
padding: 0 7.6923%;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
|
||||
text-align: center;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a,
|
||||
#infinite-footer .blog-credits,
|
||||
#infinite-footer .blog-credits a {
|
||||
color: #222222;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info a:hover,
|
||||
#infinite-footer .blog-info a:focus,
|
||||
#infinite-footer .blog-credits a:hover,
|
||||
#infinite-footer .blog-credits a:focus {
|
||||
color: #767676;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.infinite-scroll #navigation,
|
||||
.infinite-scroll.neverending .jetpack-mobile-link,
|
||||
.infinite-scroll.neverending .site-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Shows the footer & mobile link again in case all posts have been loaded */
|
||||
.infinity-end.neverending .jetpack-mobile-link,
|
||||
.infinity-end.neverending .site-footer {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 44.375em) {
|
||||
#infinite-handle {
|
||||
margin: 0 0 1em 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.has-sidebar #infinite-handle {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.site-main #infinite-handle span {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 48em) {
|
||||
.infinite-wrap > article {
|
||||
padding-bottom: 4em;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 48em) {
|
||||
#infinite-footer .blog-info,
|
||||
#infinite-footer .blog-credits {
|
||||
line-height: 35px;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-info {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
#infinite-footer .blog-credits {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.blog:not(.has-sidebar) .infinite-loader {
|
||||
float: right;
|
||||
width: 58%;
|
||||
}
|
||||
|
||||
.site-main .infinite-loader .spinner {
|
||||
margin-left: -17px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
/**
|
||||
* Infinite Scroll Theme Assets
|
||||
*
|
||||
* Register support for Twenty Seventeen.
|
||||
*
|
||||
* @package jetpack
|
||||
*/
|
||||
|
||||
/**
|
||||
* Add theme support for infinite scroll
|
||||
*/
|
||||
function jetpack_twentyseventeen_infinite_scroll_init() {
|
||||
add_theme_support(
|
||||
'infinite-scroll',
|
||||
array(
|
||||
'container' => 'main',
|
||||
'render' => 'jetpack_twentyseventeen_infinite_scroll_render',
|
||||
'footer' => 'content',
|
||||
'footer_widgets' => jetpack_twentyseventeen_has_footer_widgets(),
|
||||
)
|
||||
);
|
||||
}
|
||||
add_action( 'init', 'jetpack_twentyseventeen_infinite_scroll_init' );
|
||||
|
||||
/**
|
||||
* Custom render function for Infinite Scroll.
|
||||
*/
|
||||
function jetpack_twentyseventeen_infinite_scroll_render() {
|
||||
while ( have_posts() ) {
|
||||
the_post();
|
||||
if ( is_search() ) {
|
||||
get_template_part( 'template-parts/post/content', 'search' );
|
||||
} else {
|
||||
get_template_part( 'template-parts/post/content', get_post_format() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom function to check for the presence of footer widgets or the social links menu
|
||||
*/
|
||||
function jetpack_twentyseventeen_has_footer_widgets() {
|
||||
if ( is_active_sidebar( 'sidebar-2' ) ||
|
||||
is_active_sidebar( 'sidebar-3' ) ||
|
||||
has_nav_menu( 'social' ) ) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue CSS stylesheet with theme styles for Infinite Scroll.
|
||||
*/
|
||||
function jetpack_twentyseventeen_infinite_scroll_enqueue_styles() {
|
||||
if ( wp_script_is( 'the-neverending-homepage' ) ) {
|
||||
wp_enqueue_style( 'infinity-twentyseventeen', plugins_url( 'twentyseventeen.css', __FILE__ ), array( 'the-neverending-homepage' ), '20161219' );
|
||||
wp_style_add_data( 'infinity-twentyseventeen', 'rtl', 'replace' );
|
||||
}
|
||||
}
|
||||
add_action( 'wp_enqueue_scripts', 'jetpack_twentyseventeen_infinite_scroll_enqueue_styles', 25 );
|
||||
@@ -0,0 +1,161 @@
|
||||
.infinite-scroll .pagination {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.infinite-wrap > article:before,
|
||||
.infinite-wrap > article:after {
|
||||
content: "";
|
||||
display: table;
|
||||
}
|
||||
|
||||
.infinite-wrap > article:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.infinite-wrap > article {
|
||||
margin-bottom: 3.5em;
|
||||
}
|
||||
|
||||
/* Spinner */
|
||||
.site-main .infinite-loader {
|
||||
clear: both;
|
||||
color: currentColor;
|
||||
height: 42px;
|
||||
margin-bottom: 3.5em;
|
||||
}
|
||||
|
||||
.infinite-loader .spinner {
|
||||
right: 50% !important;
|
||||
top: 50% !important;
|
||||
}
|
||||
|
||||
/* Click-to-load */
|
||||
#infinite-handle {
|
||||
clear: both;
|
||||
margin-right: 7.6923%;
|
||||
margin-left: 7.6923%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.site-main #infinite-handle span {
|
||||
background: #1a1a1a;
|
||||
border-radius: 2px;
|
||||
color: #fff;
|
||||
font-family: Montserrat, "Helvetica Neue", sans-serif;
|
||||
font-size: inherit;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.046875em;
|
||||
line-height: 1;
|
||||
padding: 0.84375em 0.875em 0.78125em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#infinite-handle span:hover,
|
||||
#infinite-handle span:focus {
|
||||
background: #007acc;
|
||||
}
|
||||
|
||||
#infinite-handle button:focus {
|
||||
outline-offset: 0.375em;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
body #infinite-footer {
|
||||
display: none;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
body #infinite-footer .container {
|
||||
background-color: #fff;
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
border-color: #d1d1d1;
|
||||
padding: 0 7.6923%;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
body #infinite-footer .blog-info {
|
||||
font-family: Montserrat, "Helvetica Neue", sans-serif;
|
||||
height: 2.1875em;
|
||||
line-height: 2.1875em;
|
||||
}
|
||||
|
||||
body #infinite-footer .blog-info a {
|
||||
color: #1a1a1a;
|
||||
font-size: inherit
|
||||
}
|
||||
|
||||
body #infinite-footer .blog-credits {
|
||||
font-size: 13px;
|
||||
font-size: 0.8125rem;
|
||||
height: 2.692307692em;
|
||||
line-height: 2.692307692em;
|
||||
}
|
||||
|
||||
body #infinite-footer .blog-credits,
|
||||
body #infinite-footer .blog-credits a {
|
||||
color: #686868;
|
||||
}
|
||||
|
||||
body #infinite-footer .blog-info a:hover,
|
||||
body #infinite-footer .blog-info a:focus,
|
||||
body #infinite-footer .blog-credits a:hover,
|
||||
body #infinite-footer .blog-credits a:focus {
|
||||
color: #007acc;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 44.375em) {
|
||||
.infinite-wrap > article,
|
||||
.site-main .infinite-loader {
|
||||
margin-bottom: 5.25em;
|
||||
}
|
||||
|
||||
.infinite-loader .spinner {
|
||||
right: 7.6923% !important;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
#infinite-handle {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.site-main #infinite-handle span {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
body #infinite-footer .container {
|
||||
padding: 0 0.761904762em;
|
||||
width: -webkit-calc(100% - 42px) !important;
|
||||
width: calc(100% - 42px) !important;
|
||||
}
|
||||
|
||||
body:not(.custom-background-image) #infinite-footer {
|
||||
bottom: 21px !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 56.875em) {
|
||||
.infinite-loader .spinner {
|
||||
right: 0 !important;
|
||||
}
|
||||
|
||||
#infinite-handle {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.no-sidebar .infinite-loader .spinner {
|
||||
right: 50% !important;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.no-sidebar #infinite-handle {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 61.5625em) {
|
||||
.infinite-wrap > article,
|
||||
.site-main .infinite-loader {
|
||||
margin-bottom: 7.0em;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
.infinite-scroll .pagination {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.infinite-wrap > article:before,
|
||||
.infinite-wrap > article:after {
|
||||
content: "";
|
||||
display: table;
|
||||
}
|
||||
|
||||
.infinite-wrap > article:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.infinite-wrap > article {
|
||||
margin-bottom: 3.5em;
|
||||
}
|
||||
|
||||
/* Spinner */
|
||||
.site-main .infinite-loader {
|
||||
clear: both;
|
||||
color: currentColor;
|
||||
height: 42px;
|
||||
margin-bottom: 3.5em;
|
||||
}
|
||||
|
||||
.infinite-loader .spinner {
|
||||
left: 50% !important;
|
||||
top: 50% !important;
|
||||
}
|
||||
|
||||
/* Click-to-load */
|
||||
#infinite-handle {
|
||||
clear: both;
|
||||
margin-right: 7.6923%;
|
||||
margin-left: 7.6923%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.site-main #infinite-handle span {
|
||||
background: #1a1a1a;
|
||||
border-radius: 2px;
|
||||
color: #fff;
|
||||
font-family: Montserrat, "Helvetica Neue", sans-serif;
|
||||
font-size: inherit;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.046875em;
|
||||
line-height: 1;
|
||||
padding: 0.84375em 0.875em 0.78125em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#infinite-handle span:hover,
|
||||
#infinite-handle span:focus {
|
||||
background: #007acc;
|
||||
}
|
||||
|
||||
#infinite-handle button:focus {
|
||||
outline-offset: 0.375em;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
body #infinite-footer {
|
||||
display: none;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
body #infinite-footer .container {
|
||||
background-color: #fff;
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
border-color: #d1d1d1;
|
||||
padding: 0 7.6923%;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
body #infinite-footer .blog-info {
|
||||
font-family: Montserrat, "Helvetica Neue", sans-serif;
|
||||
height: 2.1875em;
|
||||
line-height: 2.1875em;
|
||||
}
|
||||
|
||||
body #infinite-footer .blog-info a {
|
||||
color: #1a1a1a;
|
||||
font-size: inherit
|
||||
}
|
||||
|
||||
body #infinite-footer .blog-credits {
|
||||
font-size: 13px;
|
||||
font-size: 0.8125rem;
|
||||
height: 2.692307692em;
|
||||
line-height: 2.692307692em;
|
||||
}
|
||||
|
||||
body #infinite-footer .blog-credits,
|
||||
body #infinite-footer .blog-credits a {
|
||||
color: #686868;
|
||||
}
|
||||
|
||||
body #infinite-footer .blog-info a:hover,
|
||||
body #infinite-footer .blog-info a:focus,
|
||||
body #infinite-footer .blog-credits a:hover,
|
||||
body #infinite-footer .blog-credits a:focus {
|
||||
color: #007acc;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 44.375em) {
|
||||
.infinite-wrap > article,
|
||||
.site-main .infinite-loader {
|
||||
margin-bottom: 5.25em;
|
||||
}
|
||||
|
||||
.infinite-loader .spinner {
|
||||
left: 7.6923% !important;
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
#infinite-handle {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.site-main #infinite-handle span {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
body #infinite-footer .container {
|
||||
padding: 0 0.761904762em;
|
||||
width: -webkit-calc(100% - 42px) !important;
|
||||
width: calc(100% - 42px) !important;
|
||||
}
|
||||
|
||||
body:not(.custom-background-image) #infinite-footer {
|
||||
bottom: 21px !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 56.875em) {
|
||||
.infinite-loader .spinner {
|
||||
left: 0 !important;
|
||||
}
|
||||
|
||||
#infinite-handle {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.no-sidebar .infinite-loader .spinner {
|
||||
left: 50% !important;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.no-sidebar #infinite-handle {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 61.5625em) {
|
||||
.infinite-wrap > article,
|
||||
.site-main .infinite-loader {
|
||||
margin-bottom: 7.0em;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
/**
|
||||
* Infinite Scroll Theme Assets
|
||||
*
|
||||
* Register support for Twenty Sixteen.
|
||||
*
|
||||
* @package jetpack
|
||||
*/
|
||||
|
||||
/**
|
||||
* Add theme support for infinite scroll
|
||||
*/
|
||||
function jetpack_twentysixteen_infinite_scroll_init() {
|
||||
add_theme_support(
|
||||
'infinite-scroll',
|
||||
array(
|
||||
'container' => 'main',
|
||||
'render' => 'jetpack_twentysixteen_infinite_scroll_render',
|
||||
'footer' => 'content',
|
||||
)
|
||||
);
|
||||
}
|
||||
add_action( 'after_setup_theme', 'jetpack_twentysixteen_infinite_scroll_init' );
|
||||
|
||||
/**
|
||||
* Custom render function for Infinite Scroll.
|
||||
*/
|
||||
function jetpack_twentysixteen_infinite_scroll_render() {
|
||||
while ( have_posts() ) {
|
||||
the_post();
|
||||
if ( is_search() ) {
|
||||
get_template_part( 'template-parts/content', 'search' );
|
||||
} else {
|
||||
get_template_part( 'template-parts/content', get_post_format() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue CSS stylesheet with theme styles for Infinite Scroll.
|
||||
*/
|
||||
function jetpack_twentysixteen_infinite_scroll_enqueue_styles() {
|
||||
if ( wp_script_is( 'the-neverending-homepage' ) ) {
|
||||
wp_enqueue_style( 'infinity-twentysixteen', plugins_url( 'twentysixteen.css', __FILE__ ), array( 'the-neverending-homepage' ), '20151102' );
|
||||
wp_style_add_data( 'infinity-twentysixteen', 'rtl', 'replace' );
|
||||
}
|
||||
}
|
||||
add_action( 'wp_enqueue_scripts', 'jetpack_twentysixteen_infinite_scroll_enqueue_styles', 25 );
|
||||
@@ -0,0 +1,25 @@
|
||||
/* =Infinity Styles
|
||||
-------------------------------------------------------------- */
|
||||
.infinite-scroll #wrapper {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.infinite-scroll #content {
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
.infinite-scroll #content .infinite-wrap {
|
||||
padding-top: 0;
|
||||
border-top: 0;
|
||||
}
|
||||
/* Elements to hide */
|
||||
.infinite-scroll #nav-above,
|
||||
.infinite-scroll #nav-below,
|
||||
.infinite-scroll.neverending #footer {
|
||||
display: none;
|
||||
}
|
||||
/* Restore the footer when IS is finished */
|
||||
.infinity-end.neverending #footer {
|
||||
display: block;
|
||||
}
|
||||
#infinite-footer .blog-info a {
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
/**
|
||||
* Infinite Scroll Theme Assets
|
||||
*
|
||||
* Register support for @Twenty Ten and enqueue relevant styles.
|
||||
*
|
||||
* @package jetpack
|
||||
*/
|
||||
|
||||
/**
|
||||
* Add theme support for infinity scroll
|
||||
*/
|
||||
function jetpack_twentyten_infinite_scroll_init() {
|
||||
add_theme_support(
|
||||
'infinite-scroll',
|
||||
array(
|
||||
'container' => 'content',
|
||||
'render' => 'jetpack_twentyten_infinite_scroll_render',
|
||||
'footer' => 'wrapper',
|
||||
'footer_widgets' => jetpack_twentyten_has_footer_widgets(),
|
||||
)
|
||||
);
|
||||
}
|
||||
add_action( 'init', 'jetpack_twentyten_infinite_scroll_init' );
|
||||
|
||||
/**
|
||||
* Set the code to be rendered on for calling posts,
|
||||
* hooked to template parts when possible.
|
||||
*
|
||||
* Note: must define a loop.
|
||||
*/
|
||||
function jetpack_twentyten_infinite_scroll_render() {
|
||||
get_template_part( 'loop' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue CSS stylesheet with theme styles for infinity.
|
||||
*/
|
||||
function jetpack_twentyten_infinite_scroll_enqueue_styles() {
|
||||
if ( wp_script_is( 'the-neverending-homepage' ) ) {
|
||||
// Add theme specific styles.
|
||||
wp_enqueue_style( 'infinity-twentyten', plugins_url( 'twentyten.css', __FILE__ ), array( 'the-neverending-homepage' ), '20121002' );
|
||||
}
|
||||
}
|
||||
add_action( 'wp_enqueue_scripts', 'jetpack_twentyten_infinite_scroll_enqueue_styles', 25 );
|
||||
|
||||
/**
|
||||
* Do we have footer widgets?
|
||||
*/
|
||||
function jetpack_twentyten_has_footer_widgets() {
|
||||
if ( is_active_sidebar( 'first-footer-widget-area' ) ||
|
||||
is_active_sidebar( 'second-footer-widget-area' ) ||
|
||||
is_active_sidebar( 'third-footer-widget-area' ) ||
|
||||
is_active_sidebar( 'fourth-footer-widget-area' ) ) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
/* =Infinite Scroll
|
||||
-------------------------------------------------------------- */
|
||||
|
||||
.infinite-wrap {
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
/* Spinner */
|
||||
.infinite-loader {
|
||||
background-color: #e8e5ce;
|
||||
padding: 40px 0;
|
||||
}
|
||||
.infinite-loader .spinner {
|
||||
margin: 0 auto;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
}
|
||||
.sidebar .infinite-loader .spinner {
|
||||
padding-right: 376px;
|
||||
}
|
||||
.rtl.sidebar .infinite-loader .spinner {
|
||||
padding-left: 376px;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
/* Click-to-load */
|
||||
#infinite-handle {
|
||||
background-color: #e8e5ce;
|
||||
padding: 40px 0;
|
||||
text-align: center;
|
||||
}
|
||||
.sidebar #infinite-handle {
|
||||
padding-right: 376px;
|
||||
}
|
||||
.rtl.sidebar #infinite-handle {
|
||||
padding-left: 376px;
|
||||
padding-right: 0;
|
||||
}
|
||||
#infinite-handle span {
|
||||
background: #e05d22; /* Old browsers */
|
||||
background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */
|
||||
background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */
|
||||
border: none;
|
||||
border-bottom: 3px solid #b93207;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
color: #fff;
|
||||
font-size: 100%;
|
||||
padding: 11px 24px 10px;
|
||||
text-decoration: none;
|
||||
}
|
||||
#infinite-handle span:hover {
|
||||
background: #ed6a31; /* Old browsers */
|
||||
background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome 10+, Safari 5.1+ */
|
||||
background: linear-gradient(to bottom, #ed6a31 0%, #e55627 100%); /* W3C */
|
||||
outline: none;
|
||||
}
|
||||
#infinite-handle span:active {
|
||||
background: #d94412; /* Old browsers */
|
||||
background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome 10+, Safari 5.1+ */
|
||||
background: linear-gradient(to bottom, #d94412 0%, #e05d22 100%); /* W3C */
|
||||
border: none;
|
||||
border-top: 3px solid #b93207;
|
||||
padding: 10px 24px 11px;
|
||||
}
|
||||
|
||||
/* Elements to hide: post navigation, normal footer. */
|
||||
.infinite-scroll .paging-navigation,
|
||||
.infinite-scroll.neverending #colophon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Hooks to infinity-end body class to restore footer. */
|
||||
.infinity-end.neverending #colophon {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* For small viewports. */
|
||||
@media (max-width: 999px) {
|
||||
.sidebar .infinite-loader .spinner,
|
||||
.rtl.sidebar .infinite-loader .spinner {
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
.infinite-scroll #infinite-handle,
|
||||
.rtl.sidebar #infinite-handle {
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Infinite Scroll Theme Assets
|
||||
*
|
||||
* Register support for Twenty Thirteen.
|
||||
*
|
||||
* @package jetpack
|
||||
*/
|
||||
|
||||
/**
|
||||
* Add theme support for infinite scroll
|
||||
*/
|
||||
function jetpack_twentythirteen_infinite_scroll_init() {
|
||||
add_theme_support(
|
||||
'infinite-scroll',
|
||||
array(
|
||||
'container' => 'content',
|
||||
'footer' => 'page',
|
||||
'footer_widgets' => array( 'sidebar-1' ),
|
||||
)
|
||||
);
|
||||
}
|
||||
add_action( 'after_setup_theme', 'jetpack_twentythirteen_infinite_scroll_init' );
|
||||
|
||||
/**
|
||||
* Enqueue CSS stylesheet with theme styles for Infinite Scroll.
|
||||
*/
|
||||
function jetpack_twentythirteen_infinite_scroll_enqueue_styles() {
|
||||
if ( wp_script_is( 'the-neverending-homepage' ) ) {
|
||||
wp_enqueue_style( 'infinity-twentythirteen', plugins_url( 'twentythirteen.css', __FILE__ ), array( 'the-neverending-homepage' ), '20130409' );
|
||||
}
|
||||
}
|
||||
add_action( 'wp_enqueue_scripts', 'jetpack_twentythirteen_infinite_scroll_enqueue_styles', 25 );
|
||||
@@ -0,0 +1,33 @@
|
||||
/* =Infinity Styles
|
||||
-------------------------------------------------------------- */
|
||||
.infinite-scroll .site-content:after {
|
||||
clear: both;
|
||||
content: '';
|
||||
display: block;
|
||||
}
|
||||
.infinite-wrap {
|
||||
border-top: 0;
|
||||
}
|
||||
.infinite-scroll.neverending .site-content {
|
||||
margin-bottom: 48px;
|
||||
margin-bottom: 3.428571429rem;
|
||||
}
|
||||
|
||||
/* Elements to hide: post navigation, regular footer */
|
||||
.infinite-scroll #nav-below,
|
||||
.infinite-scroll.neverending #colophon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Hooks to infinity-end body class to restore footer */
|
||||
.infinity-end.neverending #colophon {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* For responsive CSS */
|
||||
@media (max-width: 599px) {
|
||||
.infinite-scroll #infinite-handle {
|
||||
padding-bottom: 48px;
|
||||
padding-bottom: 3.428571429rem;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
/**
|
||||
* Infinite Scroll Theme Assets
|
||||
*
|
||||
* Register support for Twenty Twelve and enqueue relevant styles.
|
||||
*
|
||||
* @package jetpack
|
||||
*/
|
||||
|
||||
/**
|
||||
* Add theme support for infinite scroll
|
||||
*/
|
||||
function jetpack_twentytwelve_infinite_scroll_init() {
|
||||
add_theme_support(
|
||||
'infinite-scroll',
|
||||
array(
|
||||
'container' => 'content',
|
||||
'footer' => 'page',
|
||||
'footer_widgets' => jetpack_twentytwelve_has_footer_widgets(),
|
||||
)
|
||||
);
|
||||
}
|
||||
add_action( 'after_setup_theme', 'jetpack_twentytwelve_infinite_scroll_init' );
|
||||
|
||||
/**
|
||||
* Enqueue CSS stylesheet with theme styles for infinity.
|
||||
*/
|
||||
function jetpack_twentytwelve_infinite_scroll_enqueue_styles() {
|
||||
if ( wp_script_is( 'the-neverending-homepage' ) ) {
|
||||
// Add theme specific styles.
|
||||
wp_enqueue_style( 'infinity-twentytwelve', plugins_url( 'twentytwelve.css', __FILE__ ), array( 'the-neverending-homepage' ), '20120817' );
|
||||
}
|
||||
}
|
||||
add_action( 'wp_enqueue_scripts', 'jetpack_twentytwelve_infinite_scroll_enqueue_styles', 25 );
|
||||
|
||||
/**
|
||||
* Do we have footer widgets?
|
||||
*/
|
||||
function jetpack_twentytwelve_has_footer_widgets() {
|
||||
if ( function_exists( 'jetpack_is_mobile' ) && jetpack_is_mobile() ) {
|
||||
if ( is_front_page() && ( is_active_sidebar( 'sidebar-2' ) || is_active_sidebar( 'sidebar-3' ) ) ) {
|
||||
return true;
|
||||
} elseif ( is_active_sidebar( 'sidebar-1' ) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user