103 lines
2.3 KiB
JavaScript
103 lines
2.3 KiB
JavaScript
// Flickity.Cell
|
|
( function( window, factory ) {
|
|
// universal module definition
|
|
/* jshint strict: false */
|
|
if ( typeof define == 'function' && define.amd ) {
|
|
// AMD
|
|
define( [
|
|
'get-size/get-size'
|
|
], function( getSize ) {
|
|
return factory( window, getSize );
|
|
});
|
|
} else if ( typeof module == 'object' && module.exports ) {
|
|
// CommonJS
|
|
module.exports = factory(
|
|
window,
|
|
require('get-size')
|
|
);
|
|
} else {
|
|
// browser global
|
|
window.Flickity = window.Flickity || {};
|
|
window.Flickity.Cell = factory(
|
|
window,
|
|
window.getSize
|
|
);
|
|
}
|
|
|
|
}( window, function factory( window, getSize ) {
|
|
|
|
'use strict';
|
|
|
|
function Cell( elem, parent ) {
|
|
this.element = elem;
|
|
this.parent = parent;
|
|
|
|
this.create();
|
|
}
|
|
|
|
var proto = Cell.prototype;
|
|
|
|
proto.create = function() {
|
|
this.element.style.position = 'absolute';
|
|
this.element.setAttribute( 'aria-hidden', 'true' );
|
|
this.x = 0;
|
|
this.shift = 0;
|
|
};
|
|
|
|
proto.destroy = function() {
|
|
// reset style
|
|
this.unselect();
|
|
this.element.style.position = '';
|
|
var side = this.parent.originSide;
|
|
this.element.style[ side ] = '';
|
|
};
|
|
|
|
proto.getSize = function() {
|
|
this.size = getSize( this.element );
|
|
};
|
|
|
|
proto.setPosition = function( x ) {
|
|
this.x = x;
|
|
this.updateTarget();
|
|
this.renderPosition( x );
|
|
};
|
|
|
|
// setDefaultTarget v1 method, backwards compatibility, remove in v3
|
|
proto.updateTarget = proto.setDefaultTarget = function() {
|
|
var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';
|
|
this.target = this.x + this.size[ marginProperty ] +
|
|
this.size.width * this.parent.cellAlign;
|
|
};
|
|
|
|
proto.renderPosition = function( x ) {
|
|
// render position of cell with in slider
|
|
var side = this.parent.originSide;
|
|
this.element.style[ side ] = this.parent.getPositionValue( x );
|
|
};
|
|
|
|
proto.select = function() {
|
|
this.element.classList.add('is-selected');
|
|
this.element.removeAttribute('aria-hidden');
|
|
};
|
|
|
|
proto.unselect = function() {
|
|
this.element.classList.remove('is-selected');
|
|
this.element.setAttribute( 'aria-hidden', 'true' );
|
|
};
|
|
|
|
/**
|
|
* @param {Integer} factor - 0, 1, or -1
|
|
**/
|
|
proto.wrapShift = function( shift ) {
|
|
this.shift = shift;
|
|
this.renderPosition( this.x + this.parent.slideableWidth * shift );
|
|
};
|
|
|
|
proto.remove = function() {
|
|
this.element.parentNode.removeChild( this.element );
|
|
};
|
|
|
|
return Cell;
|
|
|
|
}));
|