Файл: src/javascript/core/index.js
Строк: 102
<?php
module.exports = function (items) {
var slides = [].slice.call(items),
activeSlide = slides[-1],
listeners = {},
getActiveIndex = function () {
return slides.indexOf(activeSlide);
},
createEventData = function (el, eventData) {
eventData = eventData || {};
eventData.index = slides.indexOf(el);
eventData.slide = el;
return eventData;
},
fire = function (eventName, eventData) {
return (listeners[eventName] || []).reduce(function (notCancelled, callback) {
return notCancelled && callback(eventData) !== false;
}, true);
},
touch = function (customData) {
return fire('activate', createEventData(activeSlide, customData));
},
activate = function (index, customData) {
if (!slides[index]) return;
fire('deactivate', createEventData(activeSlide, customData));
activeSlide = slides[index];
touch(customData);
},
slide = function (index, customData) {
var activeIndex = getActiveIndex();
// if already on this slideIndex, do nothing
if (activeIndex === index) return;
if (arguments.length) {
fire('slide', createEventData(slides[index], customData));
activate(index, customData);
} else {
return activeIndex;
}
},
step = function (offset, customData) {
var slideIndex = slides.indexOf(activeSlide) + offset;
fire(offset > 0 ? 'next' : 'prev', createEventData(activeSlide, customData));
activate(slideIndex, customData);
},
on = function (eventName, callback) {
(listeners[eventName] || (listeners[eventName] = [])).push(callback);
return function () {
listeners[eventName] = listeners[eventName].filter(function (listener) {
return listener !== callback;
});
};
};
// return the slider object
return {
on: on,
fire: fire,
touch: touch,
slide: slide,
next: step.bind(null, 1),
prev: step.bind(null, -1),
slides: slides
};
};
?>