Файл: src/javascript/features/ajax/index.js
Строк: 77
<?php
var AJAX = require('./-lib');
module.exports = function () {
var self = this,
opts = self.options.ajax,
buffer = opts.when, // when 2nd to last slide from end
path = opts.path, // URL to query
remaining = opts.maxFetches, // cache # of times to query Path
builder = opts.builder;
var slides = self.el.slides,
length = slides.length,
slideClass = self.options.selector.substring(1), // bee3D selector, without the '.'
addItem = function (item) {
self.el.parent.appendChild(item);
self.el.slides.push(item);
},
buildSlides = function (data) {
var added = data.map(function (obj) {
var item = document.createElement('section');
item.className = slideClass;
item.innerHTML = '<div class="bee3D--inner">' + builder(obj) + '</div>';
// append new item to parent
addItem(item);
// add item to new array of items
return item;
});
// now update our cached length var
length = self.el.slides.length;
// attach events to new slides
self.slideEvents(added);
// decrease number of 'remaining' we have left
if (opts.maxFetches) remaining--;
// fire a fake 'activate' event, to trigger classes() plugin
return self.el.touch();
},
fetchNew = function () {
AJAX.init(path, function (statusCode, response) {
return (statusCode === 200) ? buildSlides(JSON.parse(response).data) : console.error('Error fetching new items!');
});
},
handleActivate = function (event) {
if (length - buffer === event.index) {
if (opts.maxFetches) {
if (remaining && remaining > 0) return fetchNew();
} else {
return fetchNew();
}
}
};
// listen to slide changes...
this.el.on('activate', handleActivate);
};
?>