172 lines
4.7 KiB
JavaScript
172 lines
4.7 KiB
JavaScript
|
/* global NexT, CONFIG, Velocity */
|
||
|
|
||
|
if (window.$ && window.$.Velocity) window.Velocity = window.$.Velocity;
|
||
|
|
||
|
NexT.motion = {};
|
||
|
|
||
|
NexT.motion.integrator = {
|
||
|
queue : [],
|
||
|
cursor: -1,
|
||
|
init : function() {
|
||
|
this.queue = [];
|
||
|
this.cursor = -1;
|
||
|
return this;
|
||
|
},
|
||
|
add: function(fn) {
|
||
|
this.queue.push(fn);
|
||
|
return this;
|
||
|
},
|
||
|
next: function() {
|
||
|
this.cursor++;
|
||
|
var fn = this.queue[this.cursor];
|
||
|
typeof fn === 'function' && fn(NexT.motion.integrator);
|
||
|
},
|
||
|
bootstrap: function() {
|
||
|
this.next();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
NexT.motion.middleWares = {
|
||
|
logo: function(integrator) {
|
||
|
var sequence = [];
|
||
|
var brand = document.querySelector('.brand');
|
||
|
var image = document.querySelector('.custom-logo-image');
|
||
|
var title = document.querySelector('.site-title');
|
||
|
var subtitle = document.querySelector('.site-subtitle');
|
||
|
var logoLineTop = document.querySelector('.logo-line-before i');
|
||
|
var logoLineBottom = document.querySelector('.logo-line-after i');
|
||
|
|
||
|
brand && sequence.push({
|
||
|
e: brand,
|
||
|
p: {opacity: 1},
|
||
|
o: {duration: 200}
|
||
|
});
|
||
|
|
||
|
function getMistLineSettings(element, translateX) {
|
||
|
return {
|
||
|
e: element,
|
||
|
p: {translateX: translateX},
|
||
|
o: {
|
||
|
duration : 500,
|
||
|
sequenceQueue: false
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function pushImageToSequence() {
|
||
|
sequence.push({
|
||
|
e: image,
|
||
|
p: {opacity: 1, top: 0},
|
||
|
o: {duration: 200}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
NexT.utils.isMist() && logoLineTop && logoLineBottom
|
||
|
&& sequence.push(
|
||
|
getMistLineSettings(logoLineTop, '100%'),
|
||
|
getMistLineSettings(logoLineBottom, '-100%')
|
||
|
);
|
||
|
|
||
|
NexT.utils.isMuse() && image && pushImageToSequence();
|
||
|
|
||
|
title && sequence.push({
|
||
|
e: title,
|
||
|
p: {opacity: 1, top: 0},
|
||
|
o: {duration: 200}
|
||
|
});
|
||
|
|
||
|
subtitle && sequence.push({
|
||
|
e: subtitle,
|
||
|
p: {opacity: 1, top: 0},
|
||
|
o: {duration: 200}
|
||
|
});
|
||
|
|
||
|
(NexT.utils.isPisces() || NexT.utils.isGemini()) && image && pushImageToSequence();
|
||
|
|
||
|
if (sequence.length > 0) {
|
||
|
sequence[sequence.length - 1].o.complete = function() {
|
||
|
integrator.next();
|
||
|
};
|
||
|
Velocity.RunSequence(sequence);
|
||
|
} else {
|
||
|
integrator.next();
|
||
|
}
|
||
|
|
||
|
if (CONFIG.motion.async) {
|
||
|
integrator.next();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
menu: function(integrator) {
|
||
|
|
||
|
Velocity(document.querySelectorAll('.menu-item'), 'transition.slideDownIn', {
|
||
|
display : null,
|
||
|
duration: 200,
|
||
|
complete: function() {
|
||
|
integrator.next();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (CONFIG.motion.async) {
|
||
|
integrator.next();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
postList: function(integrator) {
|
||
|
|
||
|
var postBlock = document.querySelectorAll('.post-block, .pagination, .comments');
|
||
|
var postBlockTransition = CONFIG.motion.transition.post_block;
|
||
|
var postHeader = document.querySelectorAll('.post-header');
|
||
|
var postHeaderTransition = CONFIG.motion.transition.post_header;
|
||
|
var postBody = document.querySelectorAll('.post-body');
|
||
|
var postBodyTransition = CONFIG.motion.transition.post_body;
|
||
|
var collHeader = document.querySelectorAll('.collection-header');
|
||
|
var collHeaderTransition = CONFIG.motion.transition.coll_header;
|
||
|
var hasPost = postBlock.length > 0;
|
||
|
|
||
|
if (hasPost) {
|
||
|
var postMotionOptions = window.postMotionOptions || {
|
||
|
stagger : 100,
|
||
|
drag : true,
|
||
|
complete: function() {
|
||
|
integrator.next();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
if (CONFIG.motion.transition.post_block) {
|
||
|
Velocity(postBlock, 'transition.' + postBlockTransition, postMotionOptions);
|
||
|
}
|
||
|
if (CONFIG.motion.transition.post_header) {
|
||
|
Velocity(postHeader, 'transition.' + postHeaderTransition, postMotionOptions);
|
||
|
}
|
||
|
if (CONFIG.motion.transition.post_body) {
|
||
|
Velocity(postBody, 'transition.' + postBodyTransition, postMotionOptions);
|
||
|
}
|
||
|
if (CONFIG.motion.transition.coll_header) {
|
||
|
Velocity(collHeader, 'transition.' + collHeaderTransition, postMotionOptions);
|
||
|
}
|
||
|
}
|
||
|
if (NexT.utils.isPisces() || NexT.utils.isGemini()) {
|
||
|
integrator.next();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
sidebar: function(integrator) {
|
||
|
NexT.utils.updateSidebarPosition();
|
||
|
var sidebarAffix = document.querySelector('.sidebar-inner');
|
||
|
var sidebarAffixTransition = CONFIG.motion.transition.sidebar;
|
||
|
// Only for Pisces | Gemini.
|
||
|
if (CONFIG.motion.transition.sidebar && (NexT.utils.isPisces() || NexT.utils.isGemini())) {
|
||
|
Velocity(sidebarAffix, 'transition.' + sidebarAffixTransition, {
|
||
|
display : null,
|
||
|
duration: 200,
|
||
|
complete: function() {
|
||
|
// After motion complete need to remove transform from sidebar to let affix work on Pisces | Gemini.
|
||
|
sidebarAffix.style.transform = 'initial';
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
integrator.next();
|
||
|
}
|
||
|
};
|