| 5 |
lars |
1 |
/*!
|
|
|
2 |
* Cube Portfolio - Responsive jQuery Grid Plugin
|
|
|
3 |
*
|
|
|
4 |
* version: 3.5.2 (11 February, 2016)
|
|
|
5 |
* require: jQuery v1.7+
|
|
|
6 |
*
|
|
|
7 |
* Copyright 2013-2016, Mihai Buricea (http://scriptpie.com/cubeportfolio/live-preview/)
|
|
|
8 |
* Licensed under CodeCanyon License (http://codecanyon.net/licenses)
|
|
|
9 |
*
|
|
|
10 |
*/
|
|
|
11 |
|
|
|
12 |
(function($, window, document, undefined) {
|
|
|
13 |
'use strict';
|
|
|
14 |
|
|
|
15 |
function CubePortfolio(obj, options, callback) {
|
|
|
16 |
/*jshint validthis: true */
|
|
|
17 |
var t = this,
|
|
|
18 |
initialCls = 'cbp',
|
|
|
19 |
children;
|
|
|
20 |
|
|
|
21 |
if ($.data(obj, 'cubeportfolio')) {
|
|
|
22 |
throw new Error('cubeportfolio is already initialized. Destroy it before initialize again!');
|
|
|
23 |
}
|
|
|
24 |
|
|
|
25 |
// attached this instance to obj
|
|
|
26 |
$.data(obj, 'cubeportfolio', t);
|
|
|
27 |
|
|
|
28 |
// extend options
|
|
|
29 |
t.options = $.extend({}, $.fn.cubeportfolio.options, options);
|
|
|
30 |
|
|
|
31 |
// store the state of the animation used for filters
|
|
|
32 |
t.isAnimating = true;
|
|
|
33 |
|
|
|
34 |
// default filter for plugin
|
|
|
35 |
t.defaultFilter = t.options.defaultFilter;
|
|
|
36 |
|
|
|
37 |
// registered events (observator & publisher pattern)
|
|
|
38 |
t.registeredEvents = [];
|
|
|
39 |
|
|
|
40 |
// queue for this plugin
|
|
|
41 |
t.queue = [];
|
|
|
42 |
|
|
|
43 |
// has wrapper
|
|
|
44 |
t.addedWrapp = false;
|
|
|
45 |
|
|
|
46 |
// register callback function
|
|
|
47 |
if ($.isFunction(callback)) {
|
|
|
48 |
t.registerEvent('initFinish', callback, true);
|
|
|
49 |
}
|
|
|
50 |
|
|
|
51 |
// js element
|
|
|
52 |
t.obj = obj;
|
|
|
53 |
|
|
|
54 |
// jquery element
|
|
|
55 |
t.$obj = $(obj);
|
|
|
56 |
|
|
|
57 |
// when there are no .cbp-item
|
|
|
58 |
children = t.$obj.children();
|
|
|
59 |
|
|
|
60 |
// if caption is active
|
|
|
61 |
if (t.options.caption) {
|
|
|
62 |
if (t.options.caption !== 'expand' && !CubePortfolio.private.modernBrowser) {
|
|
|
63 |
t.options.caption = 'minimal';
|
|
|
64 |
}
|
|
|
65 |
|
|
|
66 |
// .cbp-caption-active is used only for css
|
|
|
67 |
// so it will not generate a big css from sass if a caption is set
|
|
|
68 |
initialCls += ' cbp-caption-active cbp-caption-' + t.options.caption;
|
|
|
69 |
}
|
|
|
70 |
|
|
|
71 |
t.$obj.addClass(initialCls);
|
|
|
72 |
|
|
|
73 |
if (children.length === 0 || children.first().hasClass('cbp-item')) {
|
|
|
74 |
t.wrapInner(t.obj, 'cbp-wrapper');
|
|
|
75 |
t.addedWrapp = true;
|
|
|
76 |
}
|
|
|
77 |
|
|
|
78 |
// jquery wrapper element
|
|
|
79 |
t.$ul = t.$obj.children().addClass('cbp-wrapper');
|
|
|
80 |
|
|
|
81 |
// wrap the $ul in a outside wrapper
|
|
|
82 |
t.wrapInner(t.obj, 'cbp-wrapper-outer');
|
|
|
83 |
|
|
|
84 |
t.wrapper = t.$obj.children('.cbp-wrapper-outer');
|
|
|
85 |
|
|
|
86 |
t.blocks = t.$ul.children('.cbp-item');
|
|
|
87 |
t.blocksOn = t.blocks;
|
|
|
88 |
|
|
|
89 |
// wrap .cbp-item-wrap div inside .cbp-item
|
|
|
90 |
t.wrapInner(t.blocks, 'cbp-item-wrapper');
|
|
|
91 |
|
|
|
92 |
// register and initialize plugins
|
|
|
93 |
t.plugins = $.map(CubePortfolio.plugins, function(pluginName) {
|
|
|
94 |
return pluginName(t);
|
|
|
95 |
});
|
|
|
96 |
|
|
|
97 |
// used by the filters plugin. @todo - remove from here and create proper API with position for plugins
|
|
|
98 |
t.triggerEvent('afterPlugins');
|
|
|
99 |
|
|
|
100 |
// wait to load all images and then go further
|
|
|
101 |
t.loadImages(t.$obj, t.display);
|
|
|
102 |
}
|
|
|
103 |
|
|
|
104 |
|
|
|
105 |
$.extend(CubePortfolio.prototype, {
|
|
|
106 |
storeData: function(blocks, indexStart) {
|
|
|
107 |
var t = this;
|
|
|
108 |
|
|
|
109 |
indexStart = indexStart || 0; // used by loadMore
|
|
|
110 |
|
|
|
111 |
blocks.each(function(index, el) {
|
|
|
112 |
var item = $(el),
|
|
|
113 |
width = item.width(),
|
|
|
114 |
height = item.height();
|
|
|
115 |
|
|
|
116 |
item.data('cbp', {
|
|
|
117 |
index: indexStart + index, // used when I sort the items and I need them to revert that sorting
|
|
|
118 |
wrapper: item.children('.cbp-item-wrapper'),
|
|
|
119 |
|
|
|
120 |
widthInitial: width,
|
|
|
121 |
heightInitial: height,
|
|
|
122 |
|
|
|
123 |
width: width, // used by drag & drop wp @todo - maybe I will use widthAndGap
|
|
|
124 |
height: height,
|
|
|
125 |
|
|
|
126 |
widthAndGap: width + t.options.gapVertical,
|
|
|
127 |
heightAndGap: height + t.options.gapHorizontal,
|
|
|
128 |
|
|
|
129 |
left: null,
|
|
|
130 |
leftNew: null,
|
|
|
131 |
top: null,
|
|
|
132 |
topNew: null,
|
|
|
133 |
|
|
|
134 |
pack: false,
|
|
|
135 |
});
|
|
|
136 |
});
|
|
|
137 |
},
|
|
|
138 |
|
|
|
139 |
|
|
|
140 |
// http://bit.ly/pure-js-wrap
|
|
|
141 |
wrapInner: function(items, classAttr) {
|
|
|
142 |
var t = this,
|
|
|
143 |
item, i, div;
|
|
|
144 |
|
|
|
145 |
classAttr = classAttr || '';
|
|
|
146 |
|
|
|
147 |
if (items.length && items.length < 1) {
|
|
|
148 |
return; // there are no .cbp-item
|
|
|
149 |
} else if (items.length === undefined) {
|
|
|
150 |
items = [items];
|
|
|
151 |
}
|
|
|
152 |
|
|
|
153 |
for (i = items.length - 1; i >= 0; i--) {
|
|
|
154 |
item = items[i];
|
|
|
155 |
|
|
|
156 |
div = document.createElement('div');
|
|
|
157 |
|
|
|
158 |
div.setAttribute('class', classAttr);
|
|
|
159 |
|
|
|
160 |
while (item.childNodes.length) {
|
|
|
161 |
div.appendChild(item.childNodes[0]);
|
|
|
162 |
}
|
|
|
163 |
|
|
|
164 |
item.appendChild(div);
|
|
|
165 |
}
|
|
|
166 |
},
|
|
|
167 |
|
|
|
168 |
removeAttrImage: function(img) {
|
|
|
169 |
img.removeAttribute('width');
|
|
|
170 |
img.removeAttribute('height');
|
|
|
171 |
img.removeAttribute('style');
|
|
|
172 |
},
|
|
|
173 |
|
|
|
174 |
|
|
|
175 |
/**
|
|
|
176 |
* Wait to load all images
|
|
|
177 |
*/
|
|
|
178 |
loadImages: function(elems, callback) {
|
|
|
179 |
var t = this;
|
|
|
180 |
|
|
|
181 |
// wait a frame (Safari bug)
|
|
|
182 |
requestAnimationFrame(function() {
|
|
|
183 |
var src = elems.find('img').map(function(index, el) {
|
|
|
184 |
// don't wait for images that have a width & height defined
|
|
|
185 |
if (el.hasAttribute('width') && el.hasAttribute('height')) {
|
|
|
186 |
el.style.width = el.getAttribute('width') + 'px';
|
|
|
187 |
el.style.height = el.getAttribute('height') + 'px';
|
|
|
188 |
|
|
|
189 |
if (el.hasAttribute('data-cbp-src')) {
|
|
|
190 |
return null;
|
|
|
191 |
}
|
|
|
192 |
|
|
|
193 |
if (t.checkSrc(el.src) === null) {
|
|
|
194 |
t.removeAttrImage(el);
|
|
|
195 |
} else {
|
|
|
196 |
$('<img>').on('load.cbp error.cbp', function() {
|
|
|
197 |
t.removeAttrImage(el);
|
|
|
198 |
}).attr('src', el.src); // for ie8
|
|
|
199 |
}
|
|
|
200 |
|
|
|
201 |
return null;
|
|
|
202 |
} else {
|
|
|
203 |
return t.checkSrc(el.src);
|
|
|
204 |
}
|
|
|
205 |
});
|
|
|
206 |
|
|
|
207 |
var srcLength = src.length;
|
|
|
208 |
|
|
|
209 |
if (srcLength === 0) {
|
|
|
210 |
callback.call(t);
|
|
|
211 |
return;
|
|
|
212 |
}
|
|
|
213 |
|
|
|
214 |
$.each(src, function(i, el) {
|
|
|
215 |
$('<img>').on('load.cbp error.cbp', function() {
|
|
|
216 |
srcLength--;
|
|
|
217 |
|
|
|
218 |
if (srcLength === 0) {
|
|
|
219 |
callback.call(t);
|
|
|
220 |
}
|
|
|
221 |
}).attr('src', el); // for ie8
|
|
|
222 |
});
|
|
|
223 |
});
|
|
|
224 |
},
|
|
|
225 |
|
|
|
226 |
|
|
|
227 |
checkSrc: function(src) {
|
|
|
228 |
if (src === '') {
|
|
|
229 |
return null;
|
|
|
230 |
}
|
|
|
231 |
|
|
|
232 |
var img = new Image();
|
|
|
233 |
img.src = src;
|
|
|
234 |
|
|
|
235 |
if (img.complete && img.naturalWidth !== undefined && img.naturalWidth !== 0) {
|
|
|
236 |
return null;
|
|
|
237 |
}
|
|
|
238 |
|
|
|
239 |
return src;
|
|
|
240 |
},
|
|
|
241 |
|
|
|
242 |
|
|
|
243 |
/**
|
|
|
244 |
* Show the plugin
|
|
|
245 |
*/
|
|
|
246 |
display: function() {
|
|
|
247 |
var t = this;
|
|
|
248 |
|
|
|
249 |
// store main container width
|
|
|
250 |
t.width = t.$obj.outerWidth();
|
|
|
251 |
|
|
|
252 |
// store to data values of t.blocks
|
|
|
253 |
t.storeData(t.blocks);
|
|
|
254 |
|
|
|
255 |
t.triggerEvent('initStartRead');
|
|
|
256 |
t.triggerEvent('initStartWrite');
|
|
|
257 |
|
|
|
258 |
// make layout
|
|
|
259 |
t.layoutAndAdjustment();
|
|
|
260 |
|
|
|
261 |
t.triggerEvent('initEndRead');
|
|
|
262 |
t.triggerEvent('initEndWrite');
|
|
|
263 |
|
|
|
264 |
// plugin is ready to show and interact
|
|
|
265 |
t.$obj.addClass('cbp-ready');
|
|
|
266 |
|
|
|
267 |
t.runQueue('delayFrame', t.delayFrame);
|
|
|
268 |
},
|
|
|
269 |
|
|
|
270 |
|
|
|
271 |
delayFrame: function() {
|
|
|
272 |
var t = this;
|
|
|
273 |
|
|
|
274 |
requestAnimationFrame(function() {
|
|
|
275 |
t.resizeEvent();
|
|
|
276 |
|
|
|
277 |
t.triggerEvent('initFinish');
|
|
|
278 |
|
|
|
279 |
// animating is now false
|
|
|
280 |
t.isAnimating = false;
|
|
|
281 |
|
|
|
282 |
// trigger public event initComplete
|
|
|
283 |
t.$obj.trigger('initComplete.cbp');
|
|
|
284 |
});
|
|
|
285 |
},
|
|
|
286 |
|
|
|
287 |
|
|
|
288 |
/**
|
|
|
289 |
* Add resize event when browser width changes
|
|
|
290 |
*/
|
|
|
291 |
resizeEvent: function() {
|
|
|
292 |
var t = this,
|
|
|
293 |
gridWidth;
|
|
|
294 |
|
|
|
295 |
CubePortfolio.private.initResizeEvent({
|
|
|
296 |
instance: t,
|
|
|
297 |
fn: function() {
|
|
|
298 |
var tt = this;
|
|
|
299 |
|
|
|
300 |
// used by wp fullWidth force option
|
|
|
301 |
tt.triggerEvent('beforeResizeGrid');
|
|
|
302 |
|
|
|
303 |
gridWidth = tt.$obj.outerWidth();
|
|
|
304 |
|
|
|
305 |
if (tt.width !== gridWidth) {
|
|
|
306 |
|
|
|
307 |
if (tt.options.gridAdjustment === 'alignCenter') {
|
|
|
308 |
tt.wrapper[0].style.maxWidth = '';
|
|
|
309 |
}
|
|
|
310 |
|
|
|
311 |
// update the current grid width
|
|
|
312 |
tt.width = gridWidth;
|
|
|
313 |
|
|
|
314 |
// reposition the blocks with gridAdjustment set to true
|
|
|
315 |
tt.layoutAndAdjustment();
|
|
|
316 |
|
|
|
317 |
tt.triggerEvent('resizeGrid');
|
|
|
318 |
}
|
|
|
319 |
|
|
|
320 |
tt.triggerEvent('resizeWindow');
|
|
|
321 |
}
|
|
|
322 |
});
|
|
|
323 |
},
|
|
|
324 |
|
|
|
325 |
|
|
|
326 |
gridAdjust: function() {
|
|
|
327 |
var t = this;
|
|
|
328 |
|
|
|
329 |
// if responsive
|
|
|
330 |
if (t.options.gridAdjustment === 'responsive') {
|
|
|
331 |
t.responsiveLayout();
|
|
|
332 |
} else {
|
|
|
333 |
// reset the style attribute for all blocks so I can read a new width & height
|
|
|
334 |
// for the current grid width. This is usefull for the styles defined in css
|
|
|
335 |
// to create a custom responsive system.
|
|
|
336 |
// Note: reset height if it was set for addHeightToBlocks
|
|
|
337 |
t.blocks.removeAttr('style');
|
|
|
338 |
|
|
|
339 |
t.blocks.each(function(index, el) {
|
|
|
340 |
var data = $(el).data('cbp'),
|
|
|
341 |
bound = el.getBoundingClientRect(),
|
|
|
342 |
width = t.columnWidthTruncate(bound.right - bound.left),
|
|
|
343 |
height = Math.round(bound.bottom - bound.top);
|
|
|
344 |
|
|
|
345 |
data.height = height;
|
|
|
346 |
data.heightAndGap = height + t.options.gapHorizontal;
|
|
|
347 |
|
|
|
348 |
data.width = width;
|
|
|
349 |
data.widthAndGap = width + t.options.gapVertical;
|
|
|
350 |
});
|
|
|
351 |
|
|
|
352 |
t.widthAvailable = t.width + t.options.gapVertical;
|
|
|
353 |
}
|
|
|
354 |
|
|
|
355 |
// used by slider layoutMode
|
|
|
356 |
t.triggerEvent('gridAdjust');
|
|
|
357 |
},
|
|
|
358 |
|
|
|
359 |
|
|
|
360 |
layoutAndAdjustment: function() {
|
|
|
361 |
var t = this;
|
|
|
362 |
|
|
|
363 |
t.gridAdjust();
|
|
|
364 |
|
|
|
365 |
t.layout();
|
|
|
366 |
},
|
|
|
367 |
|
|
|
368 |
|
|
|
369 |
/**
|
|
|
370 |
* Build the layout
|
|
|
371 |
*/
|
|
|
372 |
layout: function() {
|
|
|
373 |
var t = this;
|
|
|
374 |
|
|
|
375 |
t.computeBlocks(t.filterConcat(t.defaultFilter));
|
|
|
376 |
|
|
|
377 |
if (t.options.layoutMode === 'slider') {
|
|
|
378 |
t.sliderLayoutReset();
|
|
|
379 |
t.sliderLayout();
|
|
|
380 |
} else {
|
|
|
381 |
t.mosaicLayoutReset();
|
|
|
382 |
t.mosaicLayout();
|
|
|
383 |
}
|
|
|
384 |
|
|
|
385 |
|
|
|
386 |
// positionate the blocks
|
|
|
387 |
t.positionateItems();
|
|
|
388 |
|
|
|
389 |
// resize main container height
|
|
|
390 |
t.resizeMainContainer();
|
|
|
391 |
},
|
|
|
392 |
|
|
|
393 |
|
|
|
394 |
computeFilter: function(expression) {
|
|
|
395 |
var t = this;
|
|
|
396 |
|
|
|
397 |
t.computeBlocks(expression);
|
|
|
398 |
|
|
|
399 |
t.mosaicLayoutReset();
|
|
|
400 |
t.mosaicLayout();
|
|
|
401 |
|
|
|
402 |
// filter call layout
|
|
|
403 |
t.filterLayout();
|
|
|
404 |
},
|
|
|
405 |
|
|
|
406 |
|
|
|
407 |
/**
|
|
|
408 |
* Default filter layout if nothing overrides
|
|
|
409 |
*/
|
|
|
410 |
filterLayout: function() {
|
|
|
411 |
var t = this;
|
|
|
412 |
|
|
|
413 |
t.blocksOff.addClass('cbp-item-off');
|
|
|
414 |
|
|
|
415 |
t.blocksOn.removeClass('cbp-item-off')
|
|
|
416 |
.each(function(index, el) {
|
|
|
417 |
var data = $(el).data('cbp');
|
|
|
418 |
|
|
|
419 |
data.left = data.leftNew;
|
|
|
420 |
data.top = data.topNew;
|
|
|
421 |
|
|
|
422 |
el.style.left = data.left + 'px';
|
|
|
423 |
el.style.top = data.top + 'px';
|
|
|
424 |
});
|
|
|
425 |
|
|
|
426 |
// resize main container height
|
|
|
427 |
t.resizeMainContainer();
|
|
|
428 |
|
|
|
429 |
t.filterFinish();
|
|
|
430 |
},
|
|
|
431 |
|
|
|
432 |
|
|
|
433 |
/**
|
|
|
434 |
* Trigger when a filter is finished
|
|
|
435 |
*/
|
|
|
436 |
filterFinish: function() {
|
|
|
437 |
var t = this;
|
|
|
438 |
|
|
|
439 |
// if blocks are sorted (the index ascending is broken) revert
|
|
|
440 |
// this state so the index is ascending again
|
|
|
441 |
if (t.blocksAreSorted) {
|
|
|
442 |
t.sortBlocks(t.blocks, 'index');
|
|
|
443 |
}
|
|
|
444 |
|
|
|
445 |
t.isAnimating = false;
|
|
|
446 |
|
|
|
447 |
t.$obj.trigger('filterComplete.cbp');
|
|
|
448 |
t.triggerEvent('filterFinish');
|
|
|
449 |
},
|
|
|
450 |
|
|
|
451 |
|
|
|
452 |
computeBlocks: function(expression) {
|
|
|
453 |
var t = this;
|
|
|
454 |
|
|
|
455 |
// blocks that are visible before applying the filter
|
|
|
456 |
t.blocksOnInitial = t.blocksOn;
|
|
|
457 |
|
|
|
458 |
// blocks visible after applying the filter
|
|
|
459 |
t.blocksOn = t.blocks.filter(expression);
|
|
|
460 |
|
|
|
461 |
// blocks off after applying the filter
|
|
|
462 |
t.blocksOff = t.blocks.not(expression);
|
|
|
463 |
|
|
|
464 |
t.triggerEvent('computeBlocksFinish', expression);
|
|
|
465 |
},
|
|
|
466 |
|
|
|
467 |
|
|
|
468 |
/**
|
|
|
469 |
* Make this plugin responsive
|
|
|
470 |
*/
|
|
|
471 |
responsiveLayout: function() {
|
|
|
472 |
var t = this;
|
|
|
473 |
|
|
|
474 |
// calculate numbers of cols
|
|
|
475 |
t.cols = t[($.isArray(t.options.mediaQueries) ? 'getColumnsBreakpoints' : 'getColumnsAuto')]();
|
|
|
476 |
|
|
|
477 |
t.columnWidth = t.columnWidthTruncate((t.width + t.options.gapVertical) / t.cols);
|
|
|
478 |
|
|
|
479 |
t.widthAvailable = t.columnWidth * t.cols;
|
|
|
480 |
|
|
|
481 |
if (t.options.layoutMode === 'mosaic') {
|
|
|
482 |
t.getMosaicWidthReference();
|
|
|
483 |
}
|
|
|
484 |
|
|
|
485 |
t.blocks.each(function(index, el) {
|
|
|
486 |
var data = $(el).data('cbp'),
|
|
|
487 |
cols = 1, // grid & slider layoutMode must be 1
|
|
|
488 |
width;
|
|
|
489 |
|
|
|
490 |
if (t.options.layoutMode === 'mosaic') {
|
|
|
491 |
cols = t.getColsMosaic(data.widthInitial);
|
|
|
492 |
}
|
|
|
493 |
|
|
|
494 |
width = t.columnWidth * cols - t.options.gapVertical;
|
|
|
495 |
|
|
|
496 |
el.style.width = width + 'px';
|
|
|
497 |
data.width = width;
|
|
|
498 |
data.widthAndGap = width + t.options.gapVertical;
|
|
|
499 |
|
|
|
500 |
// reset height if it was set for addHeightToBlocks
|
|
|
501 |
el.style.height = '';
|
|
|
502 |
});
|
|
|
503 |
|
|
|
504 |
var imgs = [];
|
|
|
505 |
|
|
|
506 |
t.blocks.each(function(index, el) {
|
|
|
507 |
var block = $(el),
|
|
|
508 |
width = block.data('cbp').width;
|
|
|
509 |
|
|
|
510 |
$.each(block.find('img').filter('[width][height]'), function(index, el) {
|
|
|
511 |
var procent = width / parseInt(el.getAttribute('width'), 10);
|
|
|
512 |
|
|
|
513 |
imgs.push({
|
|
|
514 |
el: el,
|
|
|
515 |
width: width,
|
|
|
516 |
height: Math.floor(parseInt(el.getAttribute('height'), 10) * procent),
|
|
|
517 |
});
|
|
|
518 |
});
|
|
|
519 |
});
|
|
|
520 |
|
|
|
521 |
$.each(imgs, function(index, item) {
|
|
|
522 |
item.el.width = item.width;
|
|
|
523 |
item.el.height = item.height;
|
|
|
524 |
item.el.style.width = item.width + 'px';
|
|
|
525 |
item.el.style.height = item.height + 'px';
|
|
|
526 |
});
|
|
|
527 |
|
|
|
528 |
t.blocks.each(function(index, el) {
|
|
|
529 |
var data = $(el).data('cbp'),
|
|
|
530 |
bound = el.getBoundingClientRect(),
|
|
|
531 |
height = Math.round(bound.bottom - bound.top);
|
|
|
532 |
|
|
|
533 |
data.height = height;
|
|
|
534 |
data.heightAndGap = height + t.options.gapHorizontal;
|
|
|
535 |
});
|
|
|
536 |
},
|
|
|
537 |
|
|
|
538 |
|
|
|
539 |
getMosaicWidthReference: function() {
|
|
|
540 |
var t = this,
|
|
|
541 |
arrWidth = [];
|
|
|
542 |
|
|
|
543 |
t.blocks.each(function(index, el) {
|
|
|
544 |
var data = $(el).data('cbp');
|
|
|
545 |
arrWidth.push(data.widthInitial);
|
|
|
546 |
});
|
|
|
547 |
|
|
|
548 |
arrWidth.sort(function(a, b) {
|
|
|
549 |
return a - b;
|
|
|
550 |
});
|
|
|
551 |
|
|
|
552 |
if (arrWidth[0]) {
|
|
|
553 |
t.mosaicWidthReference = arrWidth[0];
|
|
|
554 |
} else {
|
|
|
555 |
t.mosaicWidthReference = t.columnWidth;
|
|
|
556 |
}
|
|
|
557 |
},
|
|
|
558 |
|
|
|
559 |
|
|
|
560 |
getColsMosaic: function(widthInitial) {
|
|
|
561 |
var t = this;
|
|
|
562 |
|
|
|
563 |
if (widthInitial === t.width) {
|
|
|
564 |
return t.cols;
|
|
|
565 |
}
|
|
|
566 |
|
|
|
567 |
var ratio = widthInitial / t.mosaicWidthReference;
|
|
|
568 |
|
|
|
569 |
if (ratio % 1 >= 0.79) {
|
|
|
570 |
ratio = Math.ceil(ratio);
|
|
|
571 |
} else {
|
|
|
572 |
ratio = Math.floor(ratio);
|
|
|
573 |
}
|
|
|
574 |
|
|
|
575 |
return Math.min(Math.max(ratio, 1), t.cols);
|
|
|
576 |
},
|
|
|
577 |
|
|
|
578 |
|
|
|
579 |
/**
|
|
|
580 |
* Get numbers of columns when t.options.mediaQueries is not an array
|
|
|
581 |
*/
|
|
|
582 |
getColumnsAuto: function() {
|
|
|
583 |
var t = this;
|
|
|
584 |
|
|
|
585 |
if (t.blocks.length === 0) {
|
|
|
586 |
return 1;
|
|
|
587 |
}
|
|
|
588 |
|
|
|
589 |
var columnWidth = t.blocks.first().data('cbp').widthInitial + t.options.gapVertical;
|
|
|
590 |
|
|
|
591 |
return Math.max(Math.round(t.width / columnWidth), 1);
|
|
|
592 |
},
|
|
|
593 |
|
|
|
594 |
|
|
|
595 |
/**
|
|
|
596 |
* Get numbers of columns if t.options.mediaQueries is an array
|
|
|
597 |
*/
|
|
|
598 |
getColumnsBreakpoints: function() {
|
|
|
599 |
var t = this,
|
|
|
600 |
gridWidth = t.width,
|
|
|
601 |
columns;
|
|
|
602 |
|
|
|
603 |
$.each(t.options.mediaQueries, function(index, val) {
|
|
|
604 |
if (gridWidth >= val.width) {
|
|
|
605 |
columns = val.cols;
|
|
|
606 |
return false;
|
|
|
607 |
}
|
|
|
608 |
});
|
|
|
609 |
|
|
|
610 |
if (columns === undefined) {
|
|
|
611 |
columns = t.options.mediaQueries[t.options.mediaQueries.length - 1].cols;
|
|
|
612 |
}
|
|
|
613 |
|
|
|
614 |
return columns;
|
|
|
615 |
},
|
|
|
616 |
|
|
|
617 |
|
|
|
618 |
/**
|
|
|
619 |
* Defines how the columns dimension & position (width, left) will be truncated
|
|
|
620 |
*
|
|
|
621 |
* If you use `Math.*` there could be some issues with the items on the right side
|
|
|
622 |
* that can have some pixels hidden(1 or 2, depends on the number of columns)
|
|
|
623 |
* but this is a known limitation.
|
|
|
624 |
*
|
|
|
625 |
* If you don't use the built-in captions effects (overlay at hover over an item) returning
|
|
|
626 |
* the possibly floated values may be a solution for the pixels hidden on the right side.
|
|
|
627 |
*
|
|
|
628 |
* The column width must be an integer because browsers have some visual issues
|
|
|
629 |
* with transform properties for caption effects.
|
|
|
630 |
*
|
|
|
631 |
* The initial behaviour was return Math.floor
|
|
|
632 |
*
|
|
|
633 |
*/
|
|
|
634 |
columnWidthTruncate: function(value) {
|
|
|
635 |
return Math.floor(value);
|
|
|
636 |
},
|
|
|
637 |
|
|
|
638 |
|
|
|
639 |
positionateItems: function() {
|
|
|
640 |
var t = this,
|
|
|
641 |
data;
|
|
|
642 |
|
|
|
643 |
t.blocksOn.removeClass('cbp-item-off')
|
|
|
644 |
.each(function(index, el) {
|
|
|
645 |
data = $(el).data('cbp');
|
|
|
646 |
|
|
|
647 |
data.left = data.leftNew;
|
|
|
648 |
data.top = data.topNew;
|
|
|
649 |
|
|
|
650 |
el.style.left = data.left + 'px';
|
|
|
651 |
el.style.top = data.top + 'px';
|
|
|
652 |
});
|
|
|
653 |
|
|
|
654 |
t.blocksOff.addClass('cbp-item-off');
|
|
|
655 |
|
|
|
656 |
// if blocks are sorted (the index ascending is broken) revert
|
|
|
657 |
// this state so the index is ascending again
|
|
|
658 |
if (t.blocksAreSorted) {
|
|
|
659 |
t.sortBlocks(t.blocks, 'index');
|
|
|
660 |
}
|
|
|
661 |
},
|
|
|
662 |
|
|
|
663 |
|
|
|
664 |
/**
|
|
|
665 |
* Resize main container vertically
|
|
|
666 |
*/
|
|
|
667 |
resizeMainContainer: function() {
|
|
|
668 |
var t = this,
|
|
|
669 |
height = Math.max(t.freeSpaces.slice(-1)[0].topStart - t.options.gapHorizontal, 0),
|
|
|
670 |
maxWidth;
|
|
|
671 |
|
|
|
672 |
// set max-width to center the grid if I need to
|
|
|
673 |
if (t.options.gridAdjustment === 'alignCenter') {
|
|
|
674 |
maxWidth = 0;
|
|
|
675 |
|
|
|
676 |
t.blocksOn.each(function(index, el) {
|
|
|
677 |
var data = $(el).data('cbp'),
|
|
|
678 |
rightEdge = data.left + data.width;
|
|
|
679 |
|
|
|
680 |
if (rightEdge > maxWidth) {
|
|
|
681 |
maxWidth = rightEdge;
|
|
|
682 |
}
|
|
|
683 |
});
|
|
|
684 |
|
|
|
685 |
t.wrapper[0].style.maxWidth = maxWidth + 'px';
|
|
|
686 |
}
|
|
|
687 |
|
|
|
688 |
// set container height for `overflow: hidden` to be applied
|
|
|
689 |
if (height === t.height) {
|
|
|
690 |
t.triggerEvent('resizeMainContainer');
|
|
|
691 |
return;
|
|
|
692 |
}
|
|
|
693 |
|
|
|
694 |
t.obj.style.height = height + 'px';
|
|
|
695 |
|
|
|
696 |
// if resizeMainContainer is called for the first time skip this event trigger
|
|
|
697 |
if (t.height !== undefined) {
|
|
|
698 |
if (CubePortfolio.private.modernBrowser) {
|
|
|
699 |
t.$obj.one(CubePortfolio.private.transitionend, function() {
|
|
|
700 |
t.$obj.trigger('pluginResize.cbp');
|
|
|
701 |
});
|
|
|
702 |
} else {
|
|
|
703 |
t.$obj.trigger('pluginResize.cbp');
|
|
|
704 |
}
|
|
|
705 |
}
|
|
|
706 |
|
|
|
707 |
t.height = height;
|
|
|
708 |
|
|
|
709 |
t.triggerEvent('resizeMainContainer');
|
|
|
710 |
},
|
|
|
711 |
|
|
|
712 |
|
|
|
713 |
filterConcat: function(filter) {
|
|
|
714 |
return filter.replace(/\|/gi, '');
|
|
|
715 |
},
|
|
|
716 |
|
|
|
717 |
|
|
|
718 |
pushQueue: function(name, deferred) {
|
|
|
719 |
var t = this;
|
|
|
720 |
|
|
|
721 |
t.queue[name] = t.queue[name] || [];
|
|
|
722 |
t.queue[name].push(deferred);
|
|
|
723 |
},
|
|
|
724 |
|
|
|
725 |
|
|
|
726 |
runQueue: function(name, fn) {
|
|
|
727 |
var t = this,
|
|
|
728 |
queue = t.queue[name] || [];
|
|
|
729 |
|
|
|
730 |
$.when.apply($, queue).then($.proxy(fn, t));
|
|
|
731 |
},
|
|
|
732 |
|
|
|
733 |
|
|
|
734 |
clearQueue: function(name) {
|
|
|
735 |
var t = this;
|
|
|
736 |
|
|
|
737 |
t.queue[name] = [];
|
|
|
738 |
},
|
|
|
739 |
|
|
|
740 |
|
|
|
741 |
/**
|
|
|
742 |
* Register event
|
|
|
743 |
*/
|
|
|
744 |
registerEvent: function(name, callbackFunction, oneTime) {
|
|
|
745 |
var t = this;
|
|
|
746 |
|
|
|
747 |
if (!t.registeredEvents[name]) {
|
|
|
748 |
t.registeredEvents[name] = [];
|
|
|
749 |
}
|
|
|
750 |
|
|
|
751 |
t.registeredEvents[name].push({
|
|
|
752 |
func: callbackFunction,
|
|
|
753 |
oneTime: oneTime || false
|
|
|
754 |
});
|
|
|
755 |
},
|
|
|
756 |
|
|
|
757 |
|
|
|
758 |
/**
|
|
|
759 |
* Trigger event
|
|
|
760 |
*/
|
|
|
761 |
triggerEvent: function(name, param) {
|
|
|
762 |
var t = this,
|
|
|
763 |
i, len;
|
|
|
764 |
|
|
|
765 |
if (t.registeredEvents[name]) {
|
|
|
766 |
for (i = 0, len = t.registeredEvents[name].length; i < len; i++) {
|
|
|
767 |
t.registeredEvents[name][i].func.call(t, param);
|
|
|
768 |
|
|
|
769 |
if (t.registeredEvents[name][i].oneTime) {
|
|
|
770 |
t.registeredEvents[name].splice(i, 1);
|
|
|
771 |
// function splice change the t.registeredEvents[name] array
|
|
|
772 |
// if event is one time you must set the i to the same value
|
|
|
773 |
// next time and set the length lower
|
|
|
774 |
i--;
|
|
|
775 |
len--;
|
|
|
776 |
}
|
|
|
777 |
}
|
|
|
778 |
}
|
|
|
779 |
},
|
|
|
780 |
|
|
|
781 |
|
|
|
782 |
addItems: function(items, callback) {
|
|
|
783 |
var t = this;
|
|
|
784 |
|
|
|
785 |
// wrap .cbp-item-wrap div inside .cbp-item
|
|
|
786 |
t.wrapInner(items, 'cbp-item-wrapper');
|
|
|
787 |
|
|
|
788 |
items.addClass('cbp-item-loading').css({
|
|
|
789 |
top: '100%',
|
|
|
790 |
left: 0
|
|
|
791 |
}).appendTo(t.$ul);
|
|
|
792 |
|
|
|
793 |
if (CubePortfolio.private.modernBrowser) {
|
|
|
794 |
items.last().one(CubePortfolio.private.animationend, function() {
|
|
|
795 |
t.addItemsFinish(items, callback);
|
|
|
796 |
});
|
|
|
797 |
} else {
|
|
|
798 |
t.addItemsFinish(items, callback); // @todo - on ie8 & ie9 callback trigger to early
|
|
|
799 |
}
|
|
|
800 |
|
|
|
801 |
t.loadImages(items, function() {
|
|
|
802 |
t.$obj.addClass('cbp-addItems');
|
|
|
803 |
|
|
|
804 |
// push to data values of items
|
|
|
805 |
t.storeData(items, t.blocks.length);
|
|
|
806 |
|
|
|
807 |
// push the new items to t.blocks
|
|
|
808 |
$.merge(t.blocks, items);
|
|
|
809 |
|
|
|
810 |
t.triggerEvent('addItemsToDOM', items);
|
|
|
811 |
|
|
|
812 |
t.layoutAndAdjustment();
|
|
|
813 |
|
|
|
814 |
// if show count was actived, call show count function again
|
|
|
815 |
if (t.elems) {
|
|
|
816 |
CubePortfolio.public.showCounter.call(t.obj, t.elems);
|
|
|
817 |
}
|
|
|
818 |
|
|
|
819 |
t.triggerEvent('appendItemsFinish');
|
|
|
820 |
});
|
|
|
821 |
},
|
|
|
822 |
|
|
|
823 |
|
|
|
824 |
addItemsFinish: function(items, callback) {
|
|
|
825 |
var t = this;
|
|
|
826 |
|
|
|
827 |
t.isAnimating = false;
|
|
|
828 |
|
|
|
829 |
t.$obj.removeClass('cbp-addItems');
|
|
|
830 |
items.removeClass('cbp-item-loading');
|
|
|
831 |
|
|
|
832 |
if ($.isFunction(callback)) {
|
|
|
833 |
callback.call(t, items);
|
|
|
834 |
}
|
|
|
835 |
}
|
|
|
836 |
});
|
|
|
837 |
|
|
|
838 |
|
|
|
839 |
/**
|
|
|
840 |
* jQuery plugin initializer
|
|
|
841 |
*/
|
|
|
842 |
$.fn.cubeportfolio = function(method, options, callback) {
|
|
|
843 |
return this.each(function() {
|
|
|
844 |
if (typeof method === 'object' || !method) {
|
|
|
845 |
return CubePortfolio.public.init.call(this, method, options);
|
|
|
846 |
} else if (CubePortfolio.public[method]) {
|
|
|
847 |
return CubePortfolio.public[method].call(this, options, callback);
|
|
|
848 |
}
|
|
|
849 |
|
|
|
850 |
throw new Error('Method ' + method + ' does not exist on jquery.cubeportfolio.js');
|
|
|
851 |
});
|
|
|
852 |
};
|
|
|
853 |
|
|
|
854 |
CubePortfolio.plugins = {};
|
|
|
855 |
$.fn.cubeportfolio.constructor = CubePortfolio;
|
|
|
856 |
})(jQuery, window, document);
|
|
|
857 |
|
|
|
858 |
(function($, window, document, undefined) {
|
|
|
859 |
'use strict';
|
|
|
860 |
|
|
|
861 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
862 |
|
|
|
863 |
$.extend(CubePortfolio.prototype, {
|
|
|
864 |
mosaicLayoutReset: function() {
|
|
|
865 |
var t = this;
|
|
|
866 |
|
|
|
867 |
// flag to be set after the blocks sorting is done
|
|
|
868 |
t.blocksAreSorted = false;
|
|
|
869 |
|
|
|
870 |
// when I start layout all blocks must not be positionated
|
|
|
871 |
t.blocksOn.each(function(index, el) {
|
|
|
872 |
$(el).data('cbp').pack = false;
|
|
|
873 |
});
|
|
|
874 |
},
|
|
|
875 |
|
|
|
876 |
|
|
|
877 |
mosaicLayout: function() {
|
|
|
878 |
var t = this,
|
|
|
879 |
blocksLen = t.blocksOn.length,
|
|
|
880 |
i, spaceIndexAndBlock = {},
|
|
|
881 |
leftEnd;
|
|
|
882 |
|
|
|
883 |
// array of objects where I keep the spaces available in the grid
|
|
|
884 |
t.freeSpaces = [{
|
|
|
885 |
leftStart: 0,
|
|
|
886 |
leftEnd: t.widthAvailable,
|
|
|
887 |
topStart: 0,
|
|
|
888 |
topEnd: Math.pow(2, 18) // @todo - optimize
|
|
|
889 |
}];
|
|
|
890 |
|
|
|
891 |
for (i = 0; i < blocksLen; i++) {
|
|
|
892 |
spaceIndexAndBlock = t.getSpaceIndexAndBlock();
|
|
|
893 |
|
|
|
894 |
// if space or block are null then the sorting must be done
|
|
|
895 |
if (spaceIndexAndBlock === null) {
|
|
|
896 |
// sort blocks
|
|
|
897 |
t.sortBlocksToPreventGaps();
|
|
|
898 |
|
|
|
899 |
// after the sort is done start the layout again
|
|
|
900 |
t.mosaicLayout();
|
|
|
901 |
|
|
|
902 |
return;
|
|
|
903 |
}
|
|
|
904 |
|
|
|
905 |
t.generateF1F2(spaceIndexAndBlock.spaceIndex, spaceIndexAndBlock.dataBlock);
|
|
|
906 |
|
|
|
907 |
t.generateG1G2G3G4(spaceIndexAndBlock.dataBlock);
|
|
|
908 |
|
|
|
909 |
t.cleanFreeSpaces();
|
|
|
910 |
|
|
|
911 |
t.addHeightToBlocks();
|
|
|
912 |
}
|
|
|
913 |
|
|
|
914 |
// sort the blocks from top to bottom to add properly displayAnimation and animationType
|
|
|
915 |
if (t.blocksAreSorted) {
|
|
|
916 |
t.sortBlocks(t.blocksOn, 'topNew');
|
|
|
917 |
}
|
|
|
918 |
},
|
|
|
919 |
|
|
|
920 |
|
|
|
921 |
/**
|
|
|
922 |
* Chose from freeSpaces the best space available
|
|
|
923 |
* Find block by verifying if it can fit in bestSpace(top-left space available)
|
|
|
924 |
* If block don't fit in the first space available & t.options.sortToPreventGaps
|
|
|
925 |
* is set to true then sort the blocks and start the layout once again
|
|
|
926 |
* Decide the free rectangle Fi from F to pack the rectangle R into.
|
|
|
927 |
*/
|
|
|
928 |
getSpaceIndexAndBlock: function() {
|
|
|
929 |
var t = this,
|
|
|
930 |
spaceIndexAndBlock = null;
|
|
|
931 |
|
|
|
932 |
$.each(t.freeSpaces, function(index1, space) {
|
|
|
933 |
var widthSpace = space.leftEnd - space.leftStart,
|
|
|
934 |
heightSpace = space.topEnd - space.topStart;
|
|
|
935 |
|
|
|
936 |
t.blocksOn.each(function(index2, block) {
|
|
|
937 |
var data = $(block).data('cbp');
|
|
|
938 |
|
|
|
939 |
if (data.pack === true) {
|
|
|
940 |
return;
|
|
|
941 |
}
|
|
|
942 |
|
|
|
943 |
if (data.widthAndGap <= widthSpace && data.heightAndGap <= heightSpace) {
|
|
|
944 |
// now the rectagle can be positioned
|
|
|
945 |
data.pack = true;
|
|
|
946 |
|
|
|
947 |
spaceIndexAndBlock = {
|
|
|
948 |
spaceIndex: index1,
|
|
|
949 |
dataBlock: data
|
|
|
950 |
};
|
|
|
951 |
|
|
|
952 |
data.leftNew = space.leftStart;
|
|
|
953 |
data.topNew = space.topStart;
|
|
|
954 |
|
|
|
955 |
// if the block is founded => return from this loop
|
|
|
956 |
return false;
|
|
|
957 |
}
|
|
|
958 |
});
|
|
|
959 |
|
|
|
960 |
// if first space don't have a block and sortToPreventGaps is true => return from loop
|
|
|
961 |
if (!t.blocksAreSorted && t.options.sortToPreventGaps && index1 > 0) {
|
|
|
962 |
spaceIndexAndBlock = null;
|
|
|
963 |
|
|
|
964 |
return false;
|
|
|
965 |
}
|
|
|
966 |
|
|
|
967 |
// if space & block is founded => return from loop
|
|
|
968 |
if (spaceIndexAndBlock !== null) {
|
|
|
969 |
return false;
|
|
|
970 |
}
|
|
|
971 |
});
|
|
|
972 |
|
|
|
973 |
return spaceIndexAndBlock;
|
|
|
974 |
},
|
|
|
975 |
|
|
|
976 |
|
|
|
977 |
/**
|
|
|
978 |
* Use the MAXRECTS split scheme to subdivide Fi(space) into F1 and F2 and
|
|
|
979 |
* then remove that space from spaces
|
|
|
980 |
* Insert F1 & F2 in F in place of Fi
|
|
|
981 |
*/
|
|
|
982 |
generateF1F2: function(spaceIndex, block) {
|
|
|
983 |
var t = this,
|
|
|
984 |
space = t.freeSpaces[spaceIndex];
|
|
|
985 |
|
|
|
986 |
var F1 = {
|
|
|
987 |
leftStart: space.leftStart + block.widthAndGap,
|
|
|
988 |
leftEnd: space.leftEnd,
|
|
|
989 |
topStart: space.topStart,
|
|
|
990 |
topEnd: space.topEnd
|
|
|
991 |
};
|
|
|
992 |
|
|
|
993 |
var F2 = {
|
|
|
994 |
leftStart: space.leftStart,
|
|
|
995 |
leftEnd: space.leftEnd,
|
|
|
996 |
topStart: space.topStart + block.heightAndGap,
|
|
|
997 |
topEnd: space.topEnd
|
|
|
998 |
};
|
|
|
999 |
|
|
|
1000 |
// remove Fi from F
|
|
|
1001 |
t.freeSpaces.splice(spaceIndex, 1);
|
|
|
1002 |
|
|
|
1003 |
if (F1.leftEnd > F1.leftStart && F1.topEnd > F1.topStart) {
|
|
|
1004 |
t.freeSpaces.splice(spaceIndex, 0, F1);
|
|
|
1005 |
spaceIndex++;
|
|
|
1006 |
}
|
|
|
1007 |
|
|
|
1008 |
if (F2.leftEnd > F2.leftStart && F2.topEnd > F2.topStart) {
|
|
|
1009 |
t.freeSpaces.splice(spaceIndex, 0, F2);
|
|
|
1010 |
}
|
|
|
1011 |
},
|
|
|
1012 |
|
|
|
1013 |
|
|
|
1014 |
/**
|
|
|
1015 |
* Generate G1, G2, G3, G4 from intersaction of t.freeSpaces with block
|
|
|
1016 |
*/
|
|
|
1017 |
generateG1G2G3G4: function(block) {
|
|
|
1018 |
var t = this;
|
|
|
1019 |
|
|
|
1020 |
var spaces = [];
|
|
|
1021 |
|
|
|
1022 |
$.each(t.freeSpaces, function(index, space) {
|
|
|
1023 |
var intersectSpace = t.intersectSpaces(space, block);
|
|
|
1024 |
|
|
|
1025 |
// if block & space are the same push space in spaces and return
|
|
|
1026 |
if (intersectSpace === null) {
|
|
|
1027 |
spaces.push(space);
|
|
|
1028 |
return;
|
|
|
1029 |
}
|
|
|
1030 |
|
|
|
1031 |
t.generateG1(space, intersectSpace, spaces);
|
|
|
1032 |
t.generateG2(space, intersectSpace, spaces);
|
|
|
1033 |
t.generateG3(space, intersectSpace, spaces);
|
|
|
1034 |
t.generateG4(space, intersectSpace, spaces);
|
|
|
1035 |
});
|
|
|
1036 |
|
|
|
1037 |
t.freeSpaces = spaces;
|
|
|
1038 |
},
|
|
|
1039 |
|
|
|
1040 |
|
|
|
1041 |
/**
|
|
|
1042 |
* Return the intersected rectagle of Fi and block
|
|
|
1043 |
* If the two spaces don't intersect or are the same return null
|
|
|
1044 |
*/
|
|
|
1045 |
intersectSpaces: function(space1, block) {
|
|
|
1046 |
var t = this,
|
|
|
1047 |
space2 = {
|
|
|
1048 |
leftStart: block.leftNew,
|
|
|
1049 |
leftEnd: block.leftNew + block.widthAndGap,
|
|
|
1050 |
topStart: block.topNew,
|
|
|
1051 |
topEnd: block.topNew + block.heightAndGap,
|
|
|
1052 |
};
|
|
|
1053 |
|
|
|
1054 |
if (space1.leftStart === space2.leftStart &&
|
|
|
1055 |
space1.leftEnd === space2.leftEnd &&
|
|
|
1056 |
space1.topStart === space2.topStart &&
|
|
|
1057 |
space1.topEnd === space2.topEnd) {
|
|
|
1058 |
return null;
|
|
|
1059 |
}
|
|
|
1060 |
|
|
|
1061 |
var leftStart = Math.max(space1.leftStart, space2.leftStart),
|
|
|
1062 |
leftEnd = Math.min(space1.leftEnd, space2.leftEnd),
|
|
|
1063 |
topStart = Math.max(space1.topStart, space2.topStart),
|
|
|
1064 |
topEnd = Math.min(space1.topEnd, space2.topEnd);
|
|
|
1065 |
|
|
|
1066 |
if (leftEnd <= leftStart || topEnd <= topStart) {
|
|
|
1067 |
return null;
|
|
|
1068 |
}
|
|
|
1069 |
|
|
|
1070 |
return {
|
|
|
1071 |
leftStart: leftStart,
|
|
|
1072 |
leftEnd: leftEnd,
|
|
|
1073 |
topStart: topStart,
|
|
|
1074 |
topEnd: topEnd
|
|
|
1075 |
};
|
|
|
1076 |
},
|
|
|
1077 |
|
|
|
1078 |
|
|
|
1079 |
/**
|
|
|
1080 |
* The top subdivide space
|
|
|
1081 |
*/
|
|
|
1082 |
generateG1: function(space, intersectSpace, spaces) {
|
|
|
1083 |
if (space.topStart === intersectSpace.topStart) {
|
|
|
1084 |
return;
|
|
|
1085 |
}
|
|
|
1086 |
|
|
|
1087 |
spaces.push({
|
|
|
1088 |
leftStart: space.leftStart,
|
|
|
1089 |
leftEnd: space.leftEnd,
|
|
|
1090 |
topStart: space.topStart,
|
|
|
1091 |
topEnd: intersectSpace.topStart
|
|
|
1092 |
});
|
|
|
1093 |
},
|
|
|
1094 |
|
|
|
1095 |
|
|
|
1096 |
/**
|
|
|
1097 |
* The right subdivide space
|
|
|
1098 |
*/
|
|
|
1099 |
generateG2: function(space, intersectSpace, spaces) {
|
|
|
1100 |
if (space.leftEnd === intersectSpace.leftEnd) {
|
|
|
1101 |
return;
|
|
|
1102 |
}
|
|
|
1103 |
|
|
|
1104 |
spaces.push({
|
|
|
1105 |
leftStart: intersectSpace.leftEnd,
|
|
|
1106 |
leftEnd: space.leftEnd,
|
|
|
1107 |
topStart: space.topStart,
|
|
|
1108 |
topEnd: space.topEnd
|
|
|
1109 |
});
|
|
|
1110 |
},
|
|
|
1111 |
|
|
|
1112 |
|
|
|
1113 |
/**
|
|
|
1114 |
* The bottom subdivide space
|
|
|
1115 |
*/
|
|
|
1116 |
generateG3: function(space, intersectSpace, spaces) {
|
|
|
1117 |
if (space.topEnd === intersectSpace.topEnd) {
|
|
|
1118 |
return;
|
|
|
1119 |
}
|
|
|
1120 |
|
|
|
1121 |
spaces.push({
|
|
|
1122 |
leftStart: space.leftStart,
|
|
|
1123 |
leftEnd: space.leftEnd,
|
|
|
1124 |
topStart: intersectSpace.topEnd,
|
|
|
1125 |
topEnd: space.topEnd
|
|
|
1126 |
});
|
|
|
1127 |
},
|
|
|
1128 |
|
|
|
1129 |
|
|
|
1130 |
/**
|
|
|
1131 |
* The left subdivide space
|
|
|
1132 |
*/
|
|
|
1133 |
generateG4: function(space, intersectSpace, spaces) {
|
|
|
1134 |
if (space.leftStart === intersectSpace.leftStart) {
|
|
|
1135 |
return;
|
|
|
1136 |
}
|
|
|
1137 |
|
|
|
1138 |
spaces.push({
|
|
|
1139 |
leftStart: space.leftStart,
|
|
|
1140 |
leftEnd: intersectSpace.leftStart,
|
|
|
1141 |
topStart: space.topStart,
|
|
|
1142 |
topEnd: space.topEnd
|
|
|
1143 |
});
|
|
|
1144 |
},
|
|
|
1145 |
|
|
|
1146 |
|
|
|
1147 |
/**
|
|
|
1148 |
* For every Fi check if is another Fj so Fj contains Fi
|
|
|
1149 |
* @todo - refactor
|
|
|
1150 |
*/
|
|
|
1151 |
cleanFreeSpaces: function() {
|
|
|
1152 |
var t = this;
|
|
|
1153 |
|
|
|
1154 |
// sort space from top to bottom and left to right
|
|
|
1155 |
t.freeSpaces.sort(function(space1, space2) {
|
|
|
1156 |
if (space1.topStart > space2.topStart) {
|
|
|
1157 |
return 1;
|
|
|
1158 |
} else if (space1.topStart < space2.topStart) {
|
|
|
1159 |
return -1;
|
|
|
1160 |
} else {
|
|
|
1161 |
if (space1.leftStart > space2.leftStart) {
|
|
|
1162 |
return 1;
|
|
|
1163 |
} else if (space1.leftStart < space2.leftStart) {
|
|
|
1164 |
return -1;
|
|
|
1165 |
} else {
|
|
|
1166 |
return 0;
|
|
|
1167 |
}
|
|
|
1168 |
}
|
|
|
1169 |
});
|
|
|
1170 |
|
|
|
1171 |
t.correctSubPixelValues();
|
|
|
1172 |
|
|
|
1173 |
t.removeNonMaximalFreeSpaces();
|
|
|
1174 |
},
|
|
|
1175 |
|
|
|
1176 |
|
|
|
1177 |
/**
|
|
|
1178 |
* If topStart values for spaces are <= 1px then align those spaces
|
|
|
1179 |
*/
|
|
|
1180 |
correctSubPixelValues: function() {
|
|
|
1181 |
var t = this,
|
|
|
1182 |
i, len, diff, space1, space2;
|
|
|
1183 |
|
|
|
1184 |
for (i = 0, len = t.freeSpaces.length - 1; i < len; i++) {
|
|
|
1185 |
space1 = t.freeSpaces[i];
|
|
|
1186 |
space2 = t.freeSpaces[i + 1];
|
|
|
1187 |
|
|
|
1188 |
if ((space2.topStart - space1.topStart) <= 1) {
|
|
|
1189 |
space2.topStart = space1.topStart;
|
|
|
1190 |
}
|
|
|
1191 |
}
|
|
|
1192 |
},
|
|
|
1193 |
|
|
|
1194 |
|
|
|
1195 |
/**
|
|
|
1196 |
* Remove spaces that are not maximal
|
|
|
1197 |
* If Fi contains Fj then remove Fj from F
|
|
|
1198 |
*/
|
|
|
1199 |
removeNonMaximalFreeSpaces: function() {
|
|
|
1200 |
var t = this;
|
|
|
1201 |
|
|
|
1202 |
t.uniqueFreeSpaces();
|
|
|
1203 |
|
|
|
1204 |
t.freeSpaces = $.map(t.freeSpaces, function(space1, index1) {
|
|
|
1205 |
$.each(t.freeSpaces, function(index2, space2) {
|
|
|
1206 |
// don't compare the same free spaces
|
|
|
1207 |
if (index1 === index2) {
|
|
|
1208 |
return;
|
|
|
1209 |
}
|
|
|
1210 |
|
|
|
1211 |
if (space2.leftStart <= space1.leftStart &&
|
|
|
1212 |
space2.leftEnd >= space1.leftEnd &&
|
|
|
1213 |
space2.topStart <= space1.topStart &&
|
|
|
1214 |
space2.topEnd >= space1.topEnd) {
|
|
|
1215 |
|
|
|
1216 |
space1 = null;
|
|
|
1217 |
return false;
|
|
|
1218 |
}
|
|
|
1219 |
});
|
|
|
1220 |
|
|
|
1221 |
return space1;
|
|
|
1222 |
});
|
|
|
1223 |
},
|
|
|
1224 |
|
|
|
1225 |
|
|
|
1226 |
/**
|
|
|
1227 |
* Remove duplicates spaces from freeSpaces
|
|
|
1228 |
*/
|
|
|
1229 |
uniqueFreeSpaces: function() {
|
|
|
1230 |
var t = this,
|
|
|
1231 |
result = [];
|
|
|
1232 |
|
|
|
1233 |
$.each(t.freeSpaces, function(index1, space1) {
|
|
|
1234 |
$.each(result, function(index2, space2) {
|
|
|
1235 |
if (space2.leftStart === space1.leftStart &&
|
|
|
1236 |
space2.leftEnd === space1.leftEnd &&
|
|
|
1237 |
space2.topStart === space1.topStart &&
|
|
|
1238 |
space2.topEnd === space1.topEnd) {
|
|
|
1239 |
|
|
|
1240 |
space1 = null;
|
|
|
1241 |
return false;
|
|
|
1242 |
}
|
|
|
1243 |
});
|
|
|
1244 |
|
|
|
1245 |
if (space1 !== null) {
|
|
|
1246 |
result.push(space1);
|
|
|
1247 |
}
|
|
|
1248 |
});
|
|
|
1249 |
|
|
|
1250 |
t.freeSpaces = result;
|
|
|
1251 |
},
|
|
|
1252 |
|
|
|
1253 |
|
|
|
1254 |
/**
|
|
|
1255 |
* If freeSpaces have only one space and that space overlap the
|
|
|
1256 |
* height of the bottom blocks with 1px cut those blocks
|
|
|
1257 |
*/
|
|
|
1258 |
addHeightToBlocks: function() {
|
|
|
1259 |
var t = this;
|
|
|
1260 |
|
|
|
1261 |
if (t.freeSpaces.length > 1) {
|
|
|
1262 |
return;
|
|
|
1263 |
}
|
|
|
1264 |
|
|
|
1265 |
var topStart = t.freeSpaces[0].topStart;
|
|
|
1266 |
|
|
|
1267 |
t.blocksOn.each(function(index, block) {
|
|
|
1268 |
var data = $(block).data('cbp');
|
|
|
1269 |
|
|
|
1270 |
if (data.pack !== true) {
|
|
|
1271 |
return;
|
|
|
1272 |
}
|
|
|
1273 |
|
|
|
1274 |
var diff = topStart - data.topNew - data.heightAndGap;
|
|
|
1275 |
|
|
|
1276 |
if (diff < 0) {
|
|
|
1277 |
block.style.height = (data.height + diff) + 'px';
|
|
|
1278 |
}
|
|
|
1279 |
});
|
|
|
1280 |
},
|
|
|
1281 |
|
|
|
1282 |
|
|
|
1283 |
/**
|
|
|
1284 |
* Sort by the longer width first, followed by a comparison of the shorter height
|
|
|
1285 |
*/
|
|
|
1286 |
sortBlocksToPreventGaps: function() {
|
|
|
1287 |
var t = this;
|
|
|
1288 |
|
|
|
1289 |
t.blocksAreSorted = true;
|
|
|
1290 |
|
|
|
1291 |
// sort based on timestamp attribute
|
|
|
1292 |
t.blocksOn.sort(function(block1, block2) {
|
|
|
1293 |
var data1 = $(block1).data('cbp'),
|
|
|
1294 |
data2 = $(block2).data('cbp');
|
|
|
1295 |
|
|
|
1296 |
// order desc by width
|
|
|
1297 |
if (data1.widthAndGap < data2.widthAndGap) {
|
|
|
1298 |
return 1;
|
|
|
1299 |
} else if (data1.widthAndGap > data2.widthAndGap) {
|
|
|
1300 |
return -1;
|
|
|
1301 |
} else {
|
|
|
1302 |
// order desc by height
|
|
|
1303 |
if (data1.heightAndGap < data2.heightAndGap) {
|
|
|
1304 |
return 1;
|
|
|
1305 |
} else if (data1.heightAndGap > data2.heightAndGap) {
|
|
|
1306 |
return -1;
|
|
|
1307 |
} else {
|
|
|
1308 |
// order asc by index
|
|
|
1309 |
if (data1.index > data2.index) {
|
|
|
1310 |
return 1;
|
|
|
1311 |
} else if (data1.index < data2.index) {
|
|
|
1312 |
return -1;
|
|
|
1313 |
}
|
|
|
1314 |
}
|
|
|
1315 |
}
|
|
|
1316 |
});
|
|
|
1317 |
|
|
|
1318 |
// when I start the layout again all blocks must not be positionated
|
|
|
1319 |
// reset height if it was set for addHeightToBlocks
|
|
|
1320 |
t.blocksOn.each(function(index, el) {
|
|
|
1321 |
$(el).data('cbp').pack = false;
|
|
|
1322 |
el.style.height = '';
|
|
|
1323 |
});
|
|
|
1324 |
},
|
|
|
1325 |
|
|
|
1326 |
|
|
|
1327 |
/**
|
|
|
1328 |
* Generic sort block function from lower to highest values
|
|
|
1329 |
*/
|
|
|
1330 |
sortBlocks: function(blocks, compare) {
|
|
|
1331 |
var t = this;
|
|
|
1332 |
|
|
|
1333 |
blocks.sort(function(block1, block2) {
|
|
|
1334 |
var data1 = $(block1).data('cbp'),
|
|
|
1335 |
data2 = $(block2).data('cbp');
|
|
|
1336 |
|
|
|
1337 |
// if the items are equally order them from left to right
|
|
|
1338 |
if (data1[compare] > data2[compare]) {
|
|
|
1339 |
return 1;
|
|
|
1340 |
} else if (data1[compare] < data2[compare]) {
|
|
|
1341 |
return -1;
|
|
|
1342 |
} else {
|
|
|
1343 |
if (data1.leftNew > data2.leftNew) {
|
|
|
1344 |
return 1;
|
|
|
1345 |
} else if (data1.leftNew < data2.leftNew) {
|
|
|
1346 |
return -1;
|
|
|
1347 |
} else {
|
|
|
1348 |
return 0;
|
|
|
1349 |
}
|
|
|
1350 |
}
|
|
|
1351 |
});
|
|
|
1352 |
}
|
|
|
1353 |
});
|
|
|
1354 |
})(jQuery, window, document);
|
|
|
1355 |
|
|
|
1356 |
// Plugin default options
|
|
|
1357 |
jQuery.fn.cubeportfolio.options = {
|
|
|
1358 |
/**
|
|
|
1359 |
* Define the wrapper for filters
|
|
|
1360 |
* Values: strings that represent the elements in the document (DOM selector).
|
|
|
1361 |
*/
|
|
|
1362 |
filters: '',
|
|
|
1363 |
|
|
|
1364 |
/**
|
|
|
1365 |
* Define the wrapper for loadMore
|
|
|
1366 |
* Values: strings that represent the elements in the document (DOM selector).
|
|
|
1367 |
*/
|
|
|
1368 |
loadMore: '',
|
|
|
1369 |
|
|
|
1370 |
/**
|
|
|
1371 |
* How the loadMore functionality should behave. Load on click on the button or
|
|
|
1372 |
* automatically when you scroll the page
|
|
|
1373 |
* Values: - click
|
|
|
1374 |
* - auto
|
|
|
1375 |
*/
|
|
|
1376 |
loadMoreAction: 'click',
|
|
|
1377 |
|
|
|
1378 |
/**
|
|
|
1379 |
* Define the search input element
|
|
|
1380 |
* Values: strings that represent the element in the document (DOM selector).
|
|
|
1381 |
*/
|
|
|
1382 |
search: '',
|
|
|
1383 |
|
|
|
1384 |
/**
|
|
|
1385 |
* Layout Mode for this instance
|
|
|
1386 |
* Values: 'grid', 'mosaic' or 'slider'
|
|
|
1387 |
*/
|
|
|
1388 |
layoutMode: 'grid',
|
|
|
1389 |
|
|
|
1390 |
/**
|
|
|
1391 |
* Sort the items (bigger to smallest) if there are gaps in grid
|
|
|
1392 |
* Option available only for `layoutMode: 'mosaic'`
|
|
|
1393 |
* Values: true or false
|
|
|
1394 |
*/
|
|
|
1395 |
sortToPreventGaps: false,
|
|
|
1396 |
|
|
|
1397 |
/**
|
|
|
1398 |
* Mouse and touch drag support
|
|
|
1399 |
* Option available only for `layoutMode: 'slider'`
|
|
|
1400 |
* Values: true or false
|
|
|
1401 |
*/
|
|
|
1402 |
drag: true,
|
|
|
1403 |
|
|
|
1404 |
/**
|
|
|
1405 |
* Autoplay the slider
|
|
|
1406 |
* Option available only for `layoutMode: 'slider'`
|
|
|
1407 |
* Values: true or false
|
|
|
1408 |
*/
|
|
|
1409 |
auto: false,
|
|
|
1410 |
|
|
|
1411 |
/**
|
|
|
1412 |
* Autoplay interval timeout. Time is set in milisecconds
|
|
|
1413 |
* 1000 milliseconds equals 1 second.
|
|
|
1414 |
* Option available only for `layoutMode: 'slider'`
|
|
|
1415 |
* Values: only integers (ex: 1000, 2000, 5000)
|
|
|
1416 |
*/
|
|
|
1417 |
autoTimeout: 5000,
|
|
|
1418 |
|
|
|
1419 |
/**
|
|
|
1420 |
* Stops autoplay when user hover the slider
|
|
|
1421 |
* Option available only for `layoutMode: 'slider'`
|
|
|
1422 |
* Values: true or false
|
|
|
1423 |
*/
|
|
|
1424 |
autoPauseOnHover: true,
|
|
|
1425 |
|
|
|
1426 |
/**
|
|
|
1427 |
* Show `next` and `prev` buttons for slider
|
|
|
1428 |
* Option available only for `layoutMode: 'slider'`
|
|
|
1429 |
* Values: true or false
|
|
|
1430 |
*/
|
|
|
1431 |
showNavigation: true,
|
|
|
1432 |
|
|
|
1433 |
/**
|
|
|
1434 |
* Show pagination for slider
|
|
|
1435 |
* Option available only for `layoutMode: 'slider'`
|
|
|
1436 |
* Values: true or false
|
|
|
1437 |
*/
|
|
|
1438 |
showPagination: true,
|
|
|
1439 |
|
|
|
1440 |
/**
|
|
|
1441 |
* Enable slide to first item (last item)
|
|
|
1442 |
* Option available only for `layoutMode: 'slider'`
|
|
|
1443 |
* Values: true or false
|
|
|
1444 |
*/
|
|
|
1445 |
rewindNav: true,
|
|
|
1446 |
|
|
|
1447 |
/**
|
|
|
1448 |
* Scroll by page and not by item. This option affect next/prev buttons and drag support
|
|
|
1449 |
* Option available only for `layoutMode: 'slider'`
|
|
|
1450 |
* Values: true or false
|
|
|
1451 |
*/
|
|
|
1452 |
scrollByPage: false,
|
|
|
1453 |
|
|
|
1454 |
/**
|
|
|
1455 |
* Default filter for plugin
|
|
|
1456 |
* Option available only for `layoutMode: 'grid'`
|
|
|
1457 |
* Values: strings that represent the filter name(ex: *, .logo, .web-design, .design)
|
|
|
1458 |
*/
|
|
|
1459 |
defaultFilter: '*',
|
|
|
1460 |
|
|
|
1461 |
/**
|
|
|
1462 |
* Enable / disable the deeplinking feature when you click on filters
|
|
|
1463 |
* Option available only for `layoutMode: 'grid'`
|
|
|
1464 |
* Values: true or false
|
|
|
1465 |
*/
|
|
|
1466 |
filterDeeplinking: false,
|
|
|
1467 |
|
|
|
1468 |
/**
|
|
|
1469 |
* Defines which animation to use for items that will be shown or hidden after a filter has been activated.
|
|
|
1470 |
* Option available only for `layoutMode: 'grid'`
|
|
|
1471 |
* The plugin use the best browser features available (css3 transitions and transform, GPU acceleration).
|
|
|
1472 |
* Values: - fadeOut
|
|
|
1473 |
* - quicksand
|
|
|
1474 |
* - bounceLeft
|
|
|
1475 |
* - bounceTop
|
|
|
1476 |
* - bounceBottom
|
|
|
1477 |
* - moveLeft
|
|
|
1478 |
* - slideLeft
|
|
|
1479 |
* - fadeOutTop
|
|
|
1480 |
* - sequentially
|
|
|
1481 |
* - skew
|
|
|
1482 |
* - slideDelay
|
|
|
1483 |
* - rotateSides
|
|
|
1484 |
* - flipOutDelay
|
|
|
1485 |
* - flipOut
|
|
|
1486 |
* - unfold
|
|
|
1487 |
* - foldLeft
|
|
|
1488 |
* - scaleDown
|
|
|
1489 |
* - scaleSides
|
|
|
1490 |
* - frontRow
|
|
|
1491 |
* - flipBottom
|
|
|
1492 |
* - rotateRoom
|
|
|
1493 |
*/
|
|
|
1494 |
animationType: 'fadeOut',
|
|
|
1495 |
|
|
|
1496 |
/**
|
|
|
1497 |
* Adjust the layout grid
|
|
|
1498 |
* Values: - default (no adjustment applied)
|
|
|
1499 |
* - alignCenter (align the grid on center of the page)
|
|
|
1500 |
* - responsive (use a fluid algorithm to resize the grid)
|
|
|
1501 |
*/
|
|
|
1502 |
gridAdjustment: 'responsive',
|
|
|
1503 |
|
|
|
1504 |
/**
|
|
|
1505 |
* Define `media queries` for columns layout.
|
|
|
1506 |
* Format: [{width: a, cols: d}, {width: b, cols: e}, {width: c, cols: f}],
|
|
|
1507 |
* where a, b, c are the grid width and d, e, f are the columns displayed.
|
|
|
1508 |
* e.g. [{width: 1100, cols: 4}, {width: 800, cols: 3}, {width: 480, cols: 2}] means
|
|
|
1509 |
* if (gridWidth >= 1100) => show 4 columns,
|
|
|
1510 |
* if (gridWidth >= 800 && gridWidth < 1100) => show 3 columns,
|
|
|
1511 |
* if (gridWidth >= 480 && gridWidth < 800) => show 2 columns,
|
|
|
1512 |
* if (gridWidth < 480) => show 2 columns
|
|
|
1513 |
* Keep in mind that a > b > c
|
|
|
1514 |
* This option is available only when `gridAdjustment: 'responsive'`
|
|
|
1515 |
* Values: - array of objects of format: [{width: a, cols: d}, {width: b, cols: e}]
|
|
|
1516 |
* - you can define as many objects as you want
|
|
|
1517 |
* - if this option is `false` Cube Portfolio will adjust the items
|
|
|
1518 |
* width automatically (default option for backward compatibility)
|
|
|
1519 |
*/
|
|
|
1520 |
mediaQueries: false,
|
|
|
1521 |
|
|
|
1522 |
/**
|
|
|
1523 |
* Horizontal gap between items
|
|
|
1524 |
* Values: only integers (ex: 1, 5, 10)
|
|
|
1525 |
*/
|
|
|
1526 |
gapHorizontal: 10,
|
|
|
1527 |
|
|
|
1528 |
/**
|
|
|
1529 |
* Vertical gap between items
|
|
|
1530 |
* Values: only integers (ex: 1, 5, 10)
|
|
|
1531 |
*/
|
|
|
1532 |
gapVertical: 10,
|
|
|
1533 |
|
|
|
1534 |
/**
|
|
|
1535 |
* Caption - the overlay that is shown when you put the mouse over an item
|
|
|
1536 |
* NOTE: If you don't want to have captions set this option to an empty string ( caption: '')
|
|
|
1537 |
* Values: - pushTop
|
|
|
1538 |
* - pushDown
|
|
|
1539 |
* - revealBottom
|
|
|
1540 |
* - revealTop
|
|
|
1541 |
* - revealLeft
|
|
|
1542 |
* - moveRight
|
|
|
1543 |
* - overlayBottom
|
|
|
1544 |
* - overlayBottomPush
|
|
|
1545 |
* - overlayBottomReveal
|
|
|
1546 |
* - overlayBottomAlong
|
|
|
1547 |
* - overlayRightAlong
|
|
|
1548 |
* - minimal
|
|
|
1549 |
* - fadeIn
|
|
|
1550 |
* - zoom
|
|
|
1551 |
* - opacity
|
|
|
1552 |
* - ''
|
|
|
1553 |
*/
|
|
|
1554 |
caption: 'pushTop',
|
|
|
1555 |
|
|
|
1556 |
/**
|
|
|
1557 |
* The plugin will display his content based on the following values.
|
|
|
1558 |
* Values: - default (the content will be displayed without any animation)
|
|
|
1559 |
* - fadeIn (the plugin will fully preload the images before displaying the items with a fadeIn effect)
|
|
|
1560 |
* - fadeInToTop (the plugin will fully preload the images before displaying the items with a fadeIn effect from bottom to top)
|
|
|
1561 |
* - sequentially (the plugin will fully preload the images before displaying the items with a sequentially effect)
|
|
|
1562 |
* - bottomToTop (the plugin will fully preload the images before displaying the items with an animation from bottom to top)
|
|
|
1563 |
*/
|
|
|
1564 |
displayType: 'fadeIn',
|
|
|
1565 |
|
|
|
1566 |
/**
|
|
|
1567 |
* Defines the speed of displaying the items (when `displayType == default` this option will have no effect)
|
|
|
1568 |
* Values: only integers, values in ms (ex: 200, 300, 500)
|
|
|
1569 |
*/
|
|
|
1570 |
displayTypeSpeed: 400,
|
|
|
1571 |
|
|
|
1572 |
/**
|
|
|
1573 |
* This is used to define any clickable elements you wish to use to trigger lightbox popup on click.
|
|
|
1574 |
* Values: strings that represent the elements in the document (DOM selector)
|
|
|
1575 |
*/
|
|
|
1576 |
lightboxDelegate: '.cbp-lightbox',
|
|
|
1577 |
|
|
|
1578 |
/**
|
|
|
1579 |
* Enable / disable gallery mode
|
|
|
1580 |
* Values: true or false
|
|
|
1581 |
*/
|
|
|
1582 |
lightboxGallery: true,
|
|
|
1583 |
|
|
|
1584 |
/**
|
|
|
1585 |
* Attribute of the delegate item that contains caption for lightbox
|
|
|
1586 |
* Values: html atributte
|
|
|
1587 |
*/
|
|
|
1588 |
lightboxTitleSrc: 'data-title',
|
|
|
1589 |
|
|
|
1590 |
/**
|
|
|
1591 |
* Markup of the lightbox counter
|
|
|
1592 |
* Values: html markup
|
|
|
1593 |
*/
|
|
|
1594 |
lightboxCounter: '<div class="cbp-popup-lightbox-counter">{{current}} of {{total}}</div>',
|
|
|
1595 |
|
|
|
1596 |
/**
|
|
|
1597 |
* This is used to define any clickable elements you wish to use to trigger singlePage popup on click.
|
|
|
1598 |
* Values: strings that represent the elements in the document (DOM selector)
|
|
|
1599 |
*/
|
|
|
1600 |
singlePageDelegate: '.cbp-singlePage',
|
|
|
1601 |
|
|
|
1602 |
/**
|
|
|
1603 |
* Enable / disable the deeplinking feature for singlePage popup
|
|
|
1604 |
* Values: true or false
|
|
|
1605 |
*/
|
|
|
1606 |
singlePageDeeplinking: true,
|
|
|
1607 |
|
|
|
1608 |
/**
|
|
|
1609 |
* Enable / disable the sticky navigation for singlePage popup
|
|
|
1610 |
* Values: true or false
|
|
|
1611 |
*/
|
|
|
1612 |
singlePageStickyNavigation: true,
|
|
|
1613 |
|
|
|
1614 |
/**
|
|
|
1615 |
* Markup of the singlePage counter
|
|
|
1616 |
* Values: html markup
|
|
|
1617 |
*/
|
|
|
1618 |
singlePageCounter: '<div class="cbp-popup-singlePage-counter">{{current}} of {{total}}</div>',
|
|
|
1619 |
|
|
|
1620 |
/**
|
|
|
1621 |
* Defines which animation to use when singlePage appear
|
|
|
1622 |
* Values: - left
|
|
|
1623 |
* - fade
|
|
|
1624 |
* - right
|
|
|
1625 |
*/
|
|
|
1626 |
singlePageAnimation: 'left',
|
|
|
1627 |
|
|
|
1628 |
/**
|
|
|
1629 |
* Use this callback to update singlePage content.
|
|
|
1630 |
* The callback will trigger after the singlePage popup will open.
|
|
|
1631 |
* @param url = the href attribute of the item clicked
|
|
|
1632 |
* @param element = the item clicked
|
|
|
1633 |
* Values: function
|
|
|
1634 |
*/
|
|
|
1635 |
singlePageCallback: function(url, element) {
|
|
|
1636 |
// to update singlePage content use the following method: this.updateSinglePage(yourContent)
|
|
|
1637 |
},
|
|
|
1638 |
|
|
|
1639 |
/**
|
|
|
1640 |
* This is used to define any clickable elements you wish to use to trigger singlePage Inline on click.
|
|
|
1641 |
* Values: strings that represent the elements in the document (DOM selector)
|
|
|
1642 |
*/
|
|
|
1643 |
singlePageInlineDelegate: '.cbp-singlePageInline',
|
|
|
1644 |
|
|
|
1645 |
/**
|
|
|
1646 |
* Enable / disable the deeplinking feature for singlePageInline
|
|
|
1647 |
* Values: true or false
|
|
|
1648 |
*/
|
|
|
1649 |
singlePageInlineDeeplinking: false,
|
|
|
1650 |
|
|
|
1651 |
/**
|
|
|
1652 |
* This is used to define the position of singlePage Inline block
|
|
|
1653 |
* Values: - above ( above current element )
|
|
|
1654 |
* - below ( below current elemnet)
|
|
|
1655 |
* - top ( positon top )
|
|
|
1656 |
* - bottom ( positon bottom )
|
|
|
1657 |
*/
|
|
|
1658 |
singlePageInlinePosition: 'top',
|
|
|
1659 |
|
|
|
1660 |
/**
|
|
|
1661 |
* Push the open panel in focus and at close go back to the former stage
|
|
|
1662 |
* Values: true or false
|
|
|
1663 |
*/
|
|
|
1664 |
singlePageInlineInFocus: true,
|
|
|
1665 |
|
|
|
1666 |
/**
|
|
|
1667 |
* Use this callback to update singlePage Inline content.
|
|
|
1668 |
* The callback will trigger after the singlePage Inline will open.
|
|
|
1669 |
* @param url = the href attribute of the item clicked
|
|
|
1670 |
* @param element = the item clicked
|
|
|
1671 |
* Values: function
|
|
|
1672 |
*/
|
|
|
1673 |
singlePageInlineCallback: function(url, element) {
|
|
|
1674 |
// to update singlePage Inline content use the following method: this.updateSinglePageInline(yourContent)
|
|
|
1675 |
},
|
|
|
1676 |
|
|
|
1677 |
/**
|
|
|
1678 |
* Used by the plugins registered to set local options for the current instance
|
|
|
1679 |
* Values: object
|
|
|
1680 |
*/
|
|
|
1681 |
plugins: {},
|
|
|
1682 |
};
|
|
|
1683 |
|
|
|
1684 |
(function($, window, document, undefined) {
|
|
|
1685 |
'use strict';
|
|
|
1686 |
|
|
|
1687 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
1688 |
|
|
|
1689 |
CubePortfolio.private = {
|
|
|
1690 |
// array or objects: {instance: instance, fn: fn}
|
|
|
1691 |
resizeEventArray: [],
|
|
|
1692 |
|
|
|
1693 |
initResizeEvent: function(obj) {
|
|
|
1694 |
var t = CubePortfolio.private;
|
|
|
1695 |
|
|
|
1696 |
if (t.resizeEventArray.length === 0) {
|
|
|
1697 |
t.resizeEvent();
|
|
|
1698 |
}
|
|
|
1699 |
|
|
|
1700 |
t.resizeEventArray.push(obj);
|
|
|
1701 |
},
|
|
|
1702 |
|
|
|
1703 |
destroyResizeEvent: function(instance) {
|
|
|
1704 |
var t = CubePortfolio.private;
|
|
|
1705 |
|
|
|
1706 |
var newResizeEvent = $.map(t.resizeEventArray, function(val, index) {
|
|
|
1707 |
if (val.instance !== instance) {
|
|
|
1708 |
return val;
|
|
|
1709 |
}
|
|
|
1710 |
});
|
|
|
1711 |
|
|
|
1712 |
t.resizeEventArray = newResizeEvent;
|
|
|
1713 |
|
|
|
1714 |
if (t.resizeEventArray.length === 0) {
|
|
|
1715 |
// remove off resize event
|
|
|
1716 |
$(window).off('resize.cbp');
|
|
|
1717 |
}
|
|
|
1718 |
},
|
|
|
1719 |
|
|
|
1720 |
resizeEvent: function() {
|
|
|
1721 |
var t = CubePortfolio.private,
|
|
|
1722 |
timeout;
|
|
|
1723 |
|
|
|
1724 |
// resize
|
|
|
1725 |
$(window).on('resize.cbp', function() {
|
|
|
1726 |
clearTimeout(timeout);
|
|
|
1727 |
|
|
|
1728 |
timeout = setTimeout(function() {
|
|
|
1729 |
if (window.innerHeight == screen.height) {
|
|
|
1730 |
// this is fulll screen mode. don't need to trigger a resize
|
|
|
1731 |
return;
|
|
|
1732 |
}
|
|
|
1733 |
|
|
|
1734 |
$.each(t.resizeEventArray, function(index, val) {
|
|
|
1735 |
val.fn.call(val.instance);
|
|
|
1736 |
});
|
|
|
1737 |
}, 50);
|
|
|
1738 |
});
|
|
|
1739 |
},
|
|
|
1740 |
|
|
|
1741 |
/**
|
|
|
1742 |
* Check if cubeportfolio instance exists on current element
|
|
|
1743 |
*/
|
|
|
1744 |
checkInstance: function(method) {
|
|
|
1745 |
var t = $.data(this, 'cubeportfolio');
|
|
|
1746 |
|
|
|
1747 |
if (!t) {
|
|
|
1748 |
throw new Error('cubeportfolio is not initialized. Initialize it before calling ' + method + ' method!');
|
|
|
1749 |
}
|
|
|
1750 |
|
|
|
1751 |
t.triggerEvent('publicMethod');
|
|
|
1752 |
|
|
|
1753 |
return t;
|
|
|
1754 |
},
|
|
|
1755 |
|
|
|
1756 |
/**
|
|
|
1757 |
* Get info about client browser
|
|
|
1758 |
*/
|
|
|
1759 |
browserInfo: function() {
|
|
|
1760 |
var t = CubePortfolio.private,
|
|
|
1761 |
appVersion = navigator.appVersion,
|
|
|
1762 |
transition, animation, perspective;
|
|
|
1763 |
|
|
|
1764 |
if (appVersion.indexOf('MSIE 8.') !== -1) { // ie8
|
|
|
1765 |
t.browser = 'ie8';
|
|
|
1766 |
} else if (appVersion.indexOf('MSIE 9.') !== -1) { // ie9
|
|
|
1767 |
t.browser = 'ie9';
|
|
|
1768 |
} else if (appVersion.indexOf('MSIE 10.') !== -1) { // ie10
|
|
|
1769 |
t.browser = 'ie10';
|
|
|
1770 |
} else if (window.ActiveXObject || 'ActiveXObject' in window) { // ie11
|
|
|
1771 |
t.browser = 'ie11';
|
|
|
1772 |
} else if ((/android/gi).test(appVersion)) { // android
|
|
|
1773 |
t.browser = 'android';
|
|
|
1774 |
} else if ((/iphone|ipad|ipod/gi).test(appVersion)) { // ios
|
|
|
1775 |
t.browser = 'ios';
|
|
|
1776 |
} else if ((/chrome/gi).test(appVersion)) {
|
|
|
1777 |
t.browser = 'chrome';
|
|
|
1778 |
} else {
|
|
|
1779 |
t.browser = '';
|
|
|
1780 |
}
|
|
|
1781 |
|
|
|
1782 |
// check if perspective is available
|
|
|
1783 |
perspective = t.styleSupport('perspective');
|
|
|
1784 |
|
|
|
1785 |
// if perspective is not available => no modern browser
|
|
|
1786 |
if (typeof perspective === undefined) {
|
|
|
1787 |
return;
|
|
|
1788 |
}
|
|
|
1789 |
|
|
|
1790 |
transition = t.styleSupport('transition');
|
|
|
1791 |
|
|
|
1792 |
t.transitionend = {
|
|
|
1793 |
WebkitTransition: 'webkitTransitionEnd',
|
|
|
1794 |
transition: 'transitionend'
|
|
|
1795 |
}[transition];
|
|
|
1796 |
|
|
|
1797 |
animation = t.styleSupport('animation');
|
|
|
1798 |
|
|
|
1799 |
t.animationend = {
|
|
|
1800 |
WebkitAnimation: 'webkitAnimationEnd',
|
|
|
1801 |
animation: 'animationend'
|
|
|
1802 |
}[animation];
|
|
|
1803 |
|
|
|
1804 |
t.animationDuration = {
|
|
|
1805 |
WebkitAnimation: 'webkitAnimationDuration',
|
|
|
1806 |
animation: 'animationDuration'
|
|
|
1807 |
}[animation];
|
|
|
1808 |
|
|
|
1809 |
t.animationDelay = {
|
|
|
1810 |
WebkitAnimation: 'webkitAnimationDelay',
|
|
|
1811 |
animation: 'animationDelay'
|
|
|
1812 |
}[animation];
|
|
|
1813 |
|
|
|
1814 |
t.transform = t.styleSupport('transform');
|
|
|
1815 |
|
|
|
1816 |
if (transition && animation && t.transform) {
|
|
|
1817 |
t.modernBrowser = true;
|
|
|
1818 |
}
|
|
|
1819 |
|
|
|
1820 |
},
|
|
|
1821 |
|
|
|
1822 |
|
|
|
1823 |
/**
|
|
|
1824 |
* Feature testing for css3
|
|
|
1825 |
*/
|
|
|
1826 |
styleSupport: function(prop) {
|
|
|
1827 |
var supportedProp,
|
|
|
1828 |
// capitalize first character of the prop to test vendor prefix
|
|
|
1829 |
webkitProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.slice(1),
|
|
|
1830 |
div = document.createElement('div');
|
|
|
1831 |
|
|
|
1832 |
// browser supports standard CSS property name
|
|
|
1833 |
if (prop in div.style) {
|
|
|
1834 |
supportedProp = prop;
|
|
|
1835 |
} else if (webkitProp in div.style) {
|
|
|
1836 |
supportedProp = webkitProp;
|
|
|
1837 |
}
|
|
|
1838 |
|
|
|
1839 |
// avoid memory leak in IE
|
|
|
1840 |
div = null;
|
|
|
1841 |
|
|
|
1842 |
return supportedProp;
|
|
|
1843 |
},
|
|
|
1844 |
|
|
|
1845 |
};
|
|
|
1846 |
|
|
|
1847 |
CubePortfolio.private.browserInfo();
|
|
|
1848 |
|
|
|
1849 |
})(jQuery, window, document);
|
|
|
1850 |
|
|
|
1851 |
(function($, window, document, undefined) {
|
|
|
1852 |
'use strict';
|
|
|
1853 |
|
|
|
1854 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
1855 |
|
|
|
1856 |
CubePortfolio.public = {
|
|
|
1857 |
|
|
|
1858 |
/*
|
|
|
1859 |
* Init the plugin
|
|
|
1860 |
*/
|
|
|
1861 |
init: function(options, callback) {
|
|
|
1862 |
new CubePortfolio(this, options, callback);
|
|
|
1863 |
},
|
|
|
1864 |
|
|
|
1865 |
/*
|
|
|
1866 |
* Destroy the plugin
|
|
|
1867 |
*/
|
|
|
1868 |
destroy: function(callback) {
|
|
|
1869 |
var t = CubePortfolio.private.checkInstance.call(this, 'destroy');
|
|
|
1870 |
|
|
|
1871 |
t.triggerEvent('beforeDestroy');
|
|
|
1872 |
|
|
|
1873 |
// remove data
|
|
|
1874 |
$.removeData(this, 'cubeportfolio');
|
|
|
1875 |
|
|
|
1876 |
// remove data from blocks
|
|
|
1877 |
t.blocks.removeData('cbp');
|
|
|
1878 |
|
|
|
1879 |
// remove loading class and .cbp on container
|
|
|
1880 |
t.$obj.removeClass('cbp-ready').removeAttr('style');
|
|
|
1881 |
|
|
|
1882 |
// remove class from ul
|
|
|
1883 |
t.$ul.removeClass('cbp-wrapper');
|
|
|
1884 |
|
|
|
1885 |
// remove resize event
|
|
|
1886 |
CubePortfolio.private.destroyResizeEvent(t);
|
|
|
1887 |
|
|
|
1888 |
t.$obj.off('.cbp');
|
|
|
1889 |
|
|
|
1890 |
// reset blocks
|
|
|
1891 |
t.blocks.removeClass('cbp-item-off').removeAttr('style');
|
|
|
1892 |
|
|
|
1893 |
t.blocks.find('.cbp-item-wrapper').children().unwrap();
|
|
|
1894 |
|
|
|
1895 |
if (t.options.caption) {
|
|
|
1896 |
t.$obj.removeClass('cbp-caption-active cbp-caption-' + t.options.caption);
|
|
|
1897 |
}
|
|
|
1898 |
|
|
|
1899 |
t.destroySlider();
|
|
|
1900 |
|
|
|
1901 |
// remove .cbp-wrapper-outer
|
|
|
1902 |
t.$ul.unwrap();
|
|
|
1903 |
|
|
|
1904 |
// remove .cbp-wrapper
|
|
|
1905 |
if (t.addedWrapp) {
|
|
|
1906 |
t.blocks.unwrap();
|
|
|
1907 |
}
|
|
|
1908 |
|
|
|
1909 |
$.each(t.plugins, function(i, item) {
|
|
|
1910 |
if (typeof item.destroy === 'function') {
|
|
|
1911 |
item.destroy();
|
|
|
1912 |
}
|
|
|
1913 |
});
|
|
|
1914 |
|
|
|
1915 |
if ($.isFunction(callback)) {
|
|
|
1916 |
callback.call(t);
|
|
|
1917 |
}
|
|
|
1918 |
|
|
|
1919 |
t.triggerEvent('afterDestroy');
|
|
|
1920 |
},
|
|
|
1921 |
|
|
|
1922 |
/*
|
|
|
1923 |
* Filter the plugin by filterName
|
|
|
1924 |
*/
|
|
|
1925 |
filter: function(param, callback) {
|
|
|
1926 |
var t = CubePortfolio.private.checkInstance.call(this, 'filter'),
|
|
|
1927 |
expression;
|
|
|
1928 |
|
|
|
1929 |
if (t.isAnimating) {
|
|
|
1930 |
return;
|
|
|
1931 |
}
|
|
|
1932 |
|
|
|
1933 |
t.isAnimating = true;
|
|
|
1934 |
|
|
|
1935 |
// register callback function
|
|
|
1936 |
if ($.isFunction(callback)) {
|
|
|
1937 |
t.registerEvent('filterFinish', callback, true);
|
|
|
1938 |
}
|
|
|
1939 |
|
|
|
1940 |
if ($.isFunction(param)) {
|
|
|
1941 |
expression = param.call(t, t.blocks);
|
|
|
1942 |
|
|
|
1943 |
if(expression === undefined) {
|
|
|
1944 |
throw new Error('When you call cubeportfolio API `filter` method with a param of type function you must return the blocks that will be visible.');
|
|
|
1945 |
}
|
|
|
1946 |
} else {
|
|
|
1947 |
if (t.options.filterDeeplinking) {
|
|
|
1948 |
var url = location.href.replace(/#cbpf=(.*?)([#\?&]|$)/gi, '');
|
|
|
1949 |
location.href = url + '#cbpf=' + encodeURIComponent(param);
|
|
|
1950 |
|
|
|
1951 |
if (t.singlePage && t.singlePage.url) {
|
|
|
1952 |
t.singlePage.url = location.href;
|
|
|
1953 |
}
|
|
|
1954 |
}
|
|
|
1955 |
|
|
|
1956 |
t.defaultFilter = param;
|
|
|
1957 |
expression = t.filterConcat(t.defaultFilter);
|
|
|
1958 |
}
|
|
|
1959 |
|
|
|
1960 |
if (t.singlePageInline && t.singlePageInline.isOpen) {
|
|
|
1961 |
t.singlePageInline.close('promise', {
|
|
|
1962 |
callback: function() {
|
|
|
1963 |
t.computeFilter(expression);
|
|
|
1964 |
}
|
|
|
1965 |
});
|
|
|
1966 |
} else {
|
|
|
1967 |
t.computeFilter(expression);
|
|
|
1968 |
}
|
|
|
1969 |
},
|
|
|
1970 |
|
|
|
1971 |
/*
|
|
|
1972 |
* Show counter for filters
|
|
|
1973 |
*/
|
|
|
1974 |
showCounter: function(elems, callback) {
|
|
|
1975 |
var t = CubePortfolio.private.checkInstance.call(this, 'showCounter');
|
|
|
1976 |
|
|
|
1977 |
// register callback function
|
|
|
1978 |
if ($.isFunction(callback)) {
|
|
|
1979 |
t.registerEvent('showCounterFinish', callback, true);
|
|
|
1980 |
}
|
|
|
1981 |
|
|
|
1982 |
t.elems = elems;
|
|
|
1983 |
|
|
|
1984 |
elems.each(function() {
|
|
|
1985 |
var el = $(this);
|
|
|
1986 |
|
|
|
1987 |
var count = t.blocks.filter(el.data('filter')).length;
|
|
|
1988 |
el.find('.cbp-filter-counter').text(count);
|
|
|
1989 |
});
|
|
|
1990 |
|
|
|
1991 |
t.triggerEvent('showCounterFinish', elems);
|
|
|
1992 |
},
|
|
|
1993 |
|
|
|
1994 |
/*
|
|
|
1995 |
* ApendItems elements
|
|
|
1996 |
*/
|
|
|
1997 |
appendItems: function(els, callback) {
|
|
|
1998 |
var t = CubePortfolio.private.checkInstance.call(this, 'appendItems'),
|
|
|
1999 |
items = $(els).filter('.cbp-item');
|
|
|
2000 |
|
|
|
2001 |
if (t.isAnimating || items.length < 1) {
|
|
|
2002 |
if ($.isFunction(callback)) {
|
|
|
2003 |
callback.call(t, items);
|
|
|
2004 |
}
|
|
|
2005 |
|
|
|
2006 |
return;
|
|
|
2007 |
}
|
|
|
2008 |
|
|
|
2009 |
t.isAnimating = true;
|
|
|
2010 |
|
|
|
2011 |
if (t.singlePageInline && t.singlePageInline.isOpen) {
|
|
|
2012 |
t.singlePageInline.close('promise', {
|
|
|
2013 |
callback: function() {
|
|
|
2014 |
t.addItems(items, callback);
|
|
|
2015 |
}
|
|
|
2016 |
});
|
|
|
2017 |
} else {
|
|
|
2018 |
t.addItems(items, callback);
|
|
|
2019 |
}
|
|
|
2020 |
},
|
|
|
2021 |
|
|
|
2022 |
};
|
|
|
2023 |
|
|
|
2024 |
})(jQuery, window, document);
|
|
|
2025 |
|
|
|
2026 |
(function($, window, document, undefined) {
|
|
|
2027 |
'use strict';
|
|
|
2028 |
|
|
|
2029 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
2030 |
|
|
|
2031 |
// @todo - gandit cum ar trebui sa fac aici ca nu prea ar merge un plugin
|
|
|
2032 |
// pt slider ca as extinde pe CubePortfolio.prototype la fiecare initializare
|
|
|
2033 |
$.extend(CubePortfolio.prototype, {
|
|
|
2034 |
updateSliderPagination: function() {
|
|
|
2035 |
var t = this,
|
|
|
2036 |
pages,
|
|
|
2037 |
i;
|
|
|
2038 |
|
|
|
2039 |
if (t.options.showPagination) {
|
|
|
2040 |
// get number of pages
|
|
|
2041 |
pages = Math.ceil(t.blocksOn.length / t.cols);
|
|
|
2042 |
t.navPagination.empty();
|
|
|
2043 |
|
|
|
2044 |
for (i = pages - 1; i >= 0; i--) {
|
|
|
2045 |
$('<div/>', {
|
|
|
2046 |
'class': 'cbp-nav-pagination-item',
|
|
|
2047 |
'data-slider-action': 'jumpTo'
|
|
|
2048 |
}).appendTo(t.navPagination);
|
|
|
2049 |
}
|
|
|
2050 |
|
|
|
2051 |
t.navPaginationItems = t.navPagination.children();
|
|
|
2052 |
}
|
|
|
2053 |
|
|
|
2054 |
// enable disable the nav
|
|
|
2055 |
t.enableDisableNavSlider();
|
|
|
2056 |
},
|
|
|
2057 |
|
|
|
2058 |
destroySlider: function() {
|
|
|
2059 |
var t = this;
|
|
|
2060 |
|
|
|
2061 |
if (t.options.layoutMode !== 'slider') {
|
|
|
2062 |
return;
|
|
|
2063 |
}
|
|
|
2064 |
|
|
|
2065 |
t.$obj.removeClass('cbp-mode-slider');
|
|
|
2066 |
|
|
|
2067 |
t.$ul.removeAttr('style');
|
|
|
2068 |
|
|
|
2069 |
t.$ul.off('.cbp');
|
|
|
2070 |
|
|
|
2071 |
$(document).off('.cbp'); // @todo - don't interfer with the lightbox
|
|
|
2072 |
|
|
|
2073 |
if (t.options.auto) {
|
|
|
2074 |
t.stopSliderAuto();
|
|
|
2075 |
}
|
|
|
2076 |
},
|
|
|
2077 |
|
|
|
2078 |
nextSlider: function(el) {
|
|
|
2079 |
var t = this;
|
|
|
2080 |
|
|
|
2081 |
if (t.isEndSlider()) {
|
|
|
2082 |
if (t.isRewindNav()) {
|
|
|
2083 |
t.sliderActive = 0;
|
|
|
2084 |
} else {
|
|
|
2085 |
return;
|
|
|
2086 |
}
|
|
|
2087 |
} else {
|
|
|
2088 |
if (t.options.scrollByPage) {
|
|
|
2089 |
t.sliderActive = Math.min(t.sliderActive + t.cols, t.blocksOn.length - t.cols);
|
|
|
2090 |
} else {
|
|
|
2091 |
t.sliderActive += 1;
|
|
|
2092 |
}
|
|
|
2093 |
}
|
|
|
2094 |
|
|
|
2095 |
t.goToSlider();
|
|
|
2096 |
},
|
|
|
2097 |
|
|
|
2098 |
prevSlider: function(el) {
|
|
|
2099 |
var t = this;
|
|
|
2100 |
|
|
|
2101 |
if (t.isStartSlider()) {
|
|
|
2102 |
if (t.isRewindNav()) {
|
|
|
2103 |
t.sliderActive = t.blocksOn.length - t.cols;
|
|
|
2104 |
} else {
|
|
|
2105 |
return;
|
|
|
2106 |
}
|
|
|
2107 |
} else {
|
|
|
2108 |
if (t.options.scrollByPage) {
|
|
|
2109 |
t.sliderActive = Math.max(0, t.sliderActive - t.cols);
|
|
|
2110 |
} else {
|
|
|
2111 |
t.sliderActive -= 1;
|
|
|
2112 |
}
|
|
|
2113 |
}
|
|
|
2114 |
|
|
|
2115 |
t.goToSlider();
|
|
|
2116 |
},
|
|
|
2117 |
|
|
|
2118 |
jumpToSlider: function(el) {
|
|
|
2119 |
var t = this,
|
|
|
2120 |
index = Math.min(el.index() * t.cols, t.blocksOn.length - t.cols);
|
|
|
2121 |
|
|
|
2122 |
if (index === t.sliderActive) {
|
|
|
2123 |
return;
|
|
|
2124 |
}
|
|
|
2125 |
|
|
|
2126 |
t.sliderActive = index;
|
|
|
2127 |
|
|
|
2128 |
t.goToSlider();
|
|
|
2129 |
},
|
|
|
2130 |
|
|
|
2131 |
jumpDragToSlider: function(pos) {
|
|
|
2132 |
var t = this,
|
|
|
2133 |
jumpWidth,
|
|
|
2134 |
offset,
|
|
|
2135 |
condition,
|
|
|
2136 |
index,
|
|
|
2137 |
dragLeft = (pos > 0) ? true : false;
|
|
|
2138 |
|
|
|
2139 |
if (t.options.scrollByPage) {
|
|
|
2140 |
jumpWidth = t.cols * t.columnWidth;
|
|
|
2141 |
offset = t.cols;
|
|
|
2142 |
} else {
|
|
|
2143 |
jumpWidth = t.columnWidth;
|
|
|
2144 |
offset = 1;
|
|
|
2145 |
}
|
|
|
2146 |
|
|
|
2147 |
pos = Math.abs(pos);
|
|
|
2148 |
index = Math.floor(pos / jumpWidth) * offset;
|
|
|
2149 |
|
|
|
2150 |
if (pos % jumpWidth > 20) {
|
|
|
2151 |
index += offset;
|
|
|
2152 |
}
|
|
|
2153 |
|
|
|
2154 |
if (dragLeft) { // drag to left
|
|
|
2155 |
t.sliderActive = Math.min(t.sliderActive + index, t.blocksOn.length - t.cols);
|
|
|
2156 |
} else { // drag to right
|
|
|
2157 |
t.sliderActive = Math.max(0, t.sliderActive - index);
|
|
|
2158 |
}
|
|
|
2159 |
|
|
|
2160 |
t.goToSlider();
|
|
|
2161 |
},
|
|
|
2162 |
|
|
|
2163 |
isStartSlider: function() {
|
|
|
2164 |
return this.sliderActive === 0;
|
|
|
2165 |
},
|
|
|
2166 |
|
|
|
2167 |
isEndSlider: function() {
|
|
|
2168 |
var t = this;
|
|
|
2169 |
return (t.sliderActive + t.cols) > t.blocksOn.length - 1;
|
|
|
2170 |
},
|
|
|
2171 |
|
|
|
2172 |
goToSlider: function() {
|
|
|
2173 |
var t = this;
|
|
|
2174 |
|
|
|
2175 |
// enable disable the nav
|
|
|
2176 |
t.enableDisableNavSlider();
|
|
|
2177 |
|
|
|
2178 |
t.updateSliderPosition();
|
|
|
2179 |
},
|
|
|
2180 |
|
|
|
2181 |
startSliderAuto: function() {
|
|
|
2182 |
var t = this;
|
|
|
2183 |
|
|
|
2184 |
if (t.isDrag) {
|
|
|
2185 |
t.stopSliderAuto();
|
|
|
2186 |
return;
|
|
|
2187 |
}
|
|
|
2188 |
|
|
|
2189 |
t.timeout = setTimeout(function() {
|
|
|
2190 |
// go to next slide
|
|
|
2191 |
t.nextSlider();
|
|
|
2192 |
|
|
|
2193 |
// start auto
|
|
|
2194 |
t.startSliderAuto();
|
|
|
2195 |
|
|
|
2196 |
}, t.options.autoTimeout);
|
|
|
2197 |
},
|
|
|
2198 |
|
|
|
2199 |
stopSliderAuto: function() {
|
|
|
2200 |
clearTimeout(this.timeout);
|
|
|
2201 |
},
|
|
|
2202 |
|
|
|
2203 |
enableDisableNavSlider: function() {
|
|
|
2204 |
var t = this,
|
|
|
2205 |
page,
|
|
|
2206 |
method;
|
|
|
2207 |
|
|
|
2208 |
if (!t.isRewindNav()) {
|
|
|
2209 |
method = (t.isStartSlider()) ? 'addClass' : 'removeClass';
|
|
|
2210 |
t.navPrev[method]('cbp-nav-stop');
|
|
|
2211 |
|
|
|
2212 |
method = (t.isEndSlider()) ? 'addClass' : 'removeClass';
|
|
|
2213 |
t.navNext[method]('cbp-nav-stop');
|
|
|
2214 |
}
|
|
|
2215 |
|
|
|
2216 |
if (t.options.showPagination) {
|
|
|
2217 |
if (t.options.scrollByPage) {
|
|
|
2218 |
page = Math.ceil(t.sliderActive / t.cols);
|
|
|
2219 |
} else {
|
|
|
2220 |
if (t.isEndSlider()) {
|
|
|
2221 |
page = t.navPaginationItems.length - 1;
|
|
|
2222 |
} else {
|
|
|
2223 |
page = Math.floor(t.sliderActive / t.cols);
|
|
|
2224 |
}
|
|
|
2225 |
}
|
|
|
2226 |
|
|
|
2227 |
// add class active on pagination's items
|
|
|
2228 |
t.navPaginationItems.removeClass('cbp-nav-pagination-active')
|
|
|
2229 |
.eq(page)
|
|
|
2230 |
.addClass('cbp-nav-pagination-active');
|
|
|
2231 |
}
|
|
|
2232 |
|
|
|
2233 |
if (t.customPagination) {
|
|
|
2234 |
if (t.options.scrollByPage) {
|
|
|
2235 |
page = Math.ceil(t.sliderActive / t.cols);
|
|
|
2236 |
} else {
|
|
|
2237 |
if (t.isEndSlider()) {
|
|
|
2238 |
page = t.customPaginationItems.length - 1;
|
|
|
2239 |
} else {
|
|
|
2240 |
page = Math.floor(t.sliderActive / t.cols);
|
|
|
2241 |
}
|
|
|
2242 |
}
|
|
|
2243 |
|
|
|
2244 |
// add class active on pagination's items
|
|
|
2245 |
t.customPaginationItems.removeClass(t.customPaginationClass)
|
|
|
2246 |
.eq(page)
|
|
|
2247 |
.addClass(t.customPaginationClass);
|
|
|
2248 |
}
|
|
|
2249 |
},
|
|
|
2250 |
|
|
|
2251 |
/**
|
|
|
2252 |
* If slider loop is enabled don't add classes to `next` and `prev` buttons
|
|
|
2253 |
*/
|
|
|
2254 |
isRewindNav: function() {
|
|
|
2255 |
var t = this;
|
|
|
2256 |
|
|
|
2257 |
if (!t.options.showNavigation) {
|
|
|
2258 |
return true;
|
|
|
2259 |
}
|
|
|
2260 |
|
|
|
2261 |
if (t.blocksOn.length <= t.cols) {
|
|
|
2262 |
return false;
|
|
|
2263 |
}
|
|
|
2264 |
|
|
|
2265 |
if (t.options.rewindNav) {
|
|
|
2266 |
return true;
|
|
|
2267 |
}
|
|
|
2268 |
|
|
|
2269 |
return false;
|
|
|
2270 |
},
|
|
|
2271 |
|
|
|
2272 |
sliderItemsLength: function() {
|
|
|
2273 |
return this.blocksOn.length <= this.cols;
|
|
|
2274 |
},
|
|
|
2275 |
|
|
|
2276 |
/**
|
|
|
2277 |
* Arrange the items in a slider layout
|
|
|
2278 |
*/
|
|
|
2279 |
sliderLayout: function() {
|
|
|
2280 |
var t = this;
|
|
|
2281 |
|
|
|
2282 |
t.blocksOn.each(function(index, el) {
|
|
|
2283 |
var data = $(el).data('cbp');
|
|
|
2284 |
|
|
|
2285 |
// update the values with the new ones
|
|
|
2286 |
data.leftNew = t.columnWidth * index;
|
|
|
2287 |
data.topNew = 0;
|
|
|
2288 |
|
|
|
2289 |
t.sliderFreeSpaces.push({
|
|
|
2290 |
topStart: data.heightAndGap
|
|
|
2291 |
});
|
|
|
2292 |
});
|
|
|
2293 |
|
|
|
2294 |
t.getFreeSpacesForSlider();
|
|
|
2295 |
|
|
|
2296 |
t.$ul.width(t.columnWidth * t.blocksOn.length - t.options.gapVertical);
|
|
|
2297 |
},
|
|
|
2298 |
|
|
|
2299 |
getFreeSpacesForSlider: function() {
|
|
|
2300 |
var t = this;
|
|
|
2301 |
|
|
|
2302 |
t.freeSpaces = t.sliderFreeSpaces.slice(t.sliderActive, t.sliderActive + t.cols);
|
|
|
2303 |
|
|
|
2304 |
t.freeSpaces.sort(function(space1, space2) {
|
|
|
2305 |
if (space1.topStart > space2.topStart) {
|
|
|
2306 |
return 1;
|
|
|
2307 |
} else if (space1.topStart < space2.topStart) {
|
|
|
2308 |
return -1;
|
|
|
2309 |
}
|
|
|
2310 |
});
|
|
|
2311 |
},
|
|
|
2312 |
|
|
|
2313 |
updateSliderPosition: function() {
|
|
|
2314 |
var t = this,
|
|
|
2315 |
value = -t.sliderActive * t.columnWidth;
|
|
|
2316 |
|
|
|
2317 |
if (CubePortfolio.private.modernBrowser) {
|
|
|
2318 |
t.$ul[0].style[CubePortfolio.private.transform] = 'translate3d(' + value + 'px, 0px, 0)';
|
|
|
2319 |
} else {
|
|
|
2320 |
t.$ul[0].style.left = value + 'px';
|
|
|
2321 |
}
|
|
|
2322 |
|
|
|
2323 |
t.getFreeSpacesForSlider();
|
|
|
2324 |
|
|
|
2325 |
t.resizeMainContainer();
|
|
|
2326 |
},
|
|
|
2327 |
|
|
|
2328 |
dragSlider: function() {
|
|
|
2329 |
var t = this,
|
|
|
2330 |
$document = $(document),
|
|
|
2331 |
posInitial,
|
|
|
2332 |
pos,
|
|
|
2333 |
target,
|
|
|
2334 |
ulPosition,
|
|
|
2335 |
ulMaxWidth,
|
|
|
2336 |
isAnimating = false,
|
|
|
2337 |
events = {},
|
|
|
2338 |
isTouch = false,
|
|
|
2339 |
touchStartEvent,
|
|
|
2340 |
isHover = false;
|
|
|
2341 |
|
|
|
2342 |
t.isDrag = false;
|
|
|
2343 |
|
|
|
2344 |
if (('ontouchstart' in window) ||
|
|
|
2345 |
(navigator.maxTouchPoints > 0) ||
|
|
|
2346 |
(navigator.msMaxTouchPoints > 0)) {
|
|
|
2347 |
|
|
|
2348 |
events = {
|
|
|
2349 |
start: 'touchstart.cbp',
|
|
|
2350 |
move: 'touchmove.cbp',
|
|
|
2351 |
end: 'touchend.cbp'
|
|
|
2352 |
};
|
|
|
2353 |
|
|
|
2354 |
isTouch = true;
|
|
|
2355 |
} else {
|
|
|
2356 |
events = {
|
|
|
2357 |
start: 'mousedown.cbp',
|
|
|
2358 |
move: 'mousemove.cbp',
|
|
|
2359 |
end: 'mouseup.cbp'
|
|
|
2360 |
};
|
|
|
2361 |
}
|
|
|
2362 |
|
|
|
2363 |
function dragStart(e) {
|
|
|
2364 |
if (t.sliderItemsLength()) {
|
|
|
2365 |
return;
|
|
|
2366 |
}
|
|
|
2367 |
|
|
|
2368 |
if (!isTouch) {
|
|
|
2369 |
e.preventDefault();
|
|
|
2370 |
} else {
|
|
|
2371 |
touchStartEvent = e;
|
|
|
2372 |
}
|
|
|
2373 |
|
|
|
2374 |
if (t.options.auto) {
|
|
|
2375 |
t.stopSliderAuto();
|
|
|
2376 |
}
|
|
|
2377 |
|
|
|
2378 |
if (isAnimating) {
|
|
|
2379 |
$(target).one('click.cbp', function() {
|
|
|
2380 |
return false;
|
|
|
2381 |
});
|
|
|
2382 |
return;
|
|
|
2383 |
}
|
|
|
2384 |
|
|
|
2385 |
target = $(e.target);
|
|
|
2386 |
posInitial = pointerEventToXY(e).x;
|
|
|
2387 |
pos = 0;
|
|
|
2388 |
ulPosition = -t.sliderActive * t.columnWidth;
|
|
|
2389 |
ulMaxWidth = t.columnWidth * (t.blocksOn.length - t.cols);
|
|
|
2390 |
|
|
|
2391 |
$document.on(events.move, dragMove);
|
|
|
2392 |
$document.on(events.end, dragEnd);
|
|
|
2393 |
|
|
|
2394 |
t.$obj.addClass('cbp-mode-slider-dragStart');
|
|
|
2395 |
}
|
|
|
2396 |
|
|
|
2397 |
function dragEnd(e) {
|
|
|
2398 |
t.$obj.removeClass('cbp-mode-slider-dragStart');
|
|
|
2399 |
|
|
|
2400 |
// put the state to animate
|
|
|
2401 |
isAnimating = true;
|
|
|
2402 |
|
|
|
2403 |
if (pos !== 0) {
|
|
|
2404 |
target.one('click.cbp', function(e) {
|
|
|
2405 |
return false;
|
|
|
2406 |
});
|
|
|
2407 |
|
|
|
2408 |
// wait a frame to be sure the .cbp-mode-slider-dragStart is removed from the dom
|
|
|
2409 |
requestAnimationFrame(function() {
|
|
|
2410 |
t.jumpDragToSlider(pos);
|
|
|
2411 |
t.$ul.one(CubePortfolio.private.transitionend, afterDragEnd);
|
|
|
2412 |
});
|
|
|
2413 |
} else {
|
|
|
2414 |
afterDragEnd.call(t);
|
|
|
2415 |
}
|
|
|
2416 |
|
|
|
2417 |
$document.off(events.move);
|
|
|
2418 |
$document.off(events.end);
|
|
|
2419 |
}
|
|
|
2420 |
|
|
|
2421 |
function dragMove(e) {
|
|
|
2422 |
pos = posInitial - pointerEventToXY(e).x;
|
|
|
2423 |
|
|
|
2424 |
if (pos > 8 || pos < -8) {
|
|
|
2425 |
e.preventDefault();
|
|
|
2426 |
}
|
|
|
2427 |
|
|
|
2428 |
t.isDrag = true;
|
|
|
2429 |
|
|
|
2430 |
var value = ulPosition - pos;
|
|
|
2431 |
|
|
|
2432 |
if (pos < 0 && pos < ulPosition) { // to right
|
|
|
2433 |
value = (ulPosition - pos) / 5;
|
|
|
2434 |
} else if (pos > 0 && (ulPosition - pos) < -ulMaxWidth) { // to left
|
|
|
2435 |
value = -ulMaxWidth + (ulMaxWidth + ulPosition - pos) / 5;
|
|
|
2436 |
}
|
|
|
2437 |
|
|
|
2438 |
if (CubePortfolio.private.modernBrowser) {
|
|
|
2439 |
t.$ul[0].style[CubePortfolio.private.transform] = 'translate3d(' + value + 'px, 0px, 0)';
|
|
|
2440 |
} else {
|
|
|
2441 |
t.$ul[0].style.left = value + 'px';
|
|
|
2442 |
}
|
|
|
2443 |
}
|
|
|
2444 |
|
|
|
2445 |
function afterDragEnd() {
|
|
|
2446 |
isAnimating = false;
|
|
|
2447 |
t.isDrag = false;
|
|
|
2448 |
|
|
|
2449 |
if (t.options.auto) {
|
|
|
2450 |
if (t.mouseIsEntered) {
|
|
|
2451 |
return;
|
|
|
2452 |
}
|
|
|
2453 |
|
|
|
2454 |
t.startSliderAuto();
|
|
|
2455 |
}
|
|
|
2456 |
}
|
|
|
2457 |
|
|
|
2458 |
function pointerEventToXY(e) {
|
|
|
2459 |
if (e.originalEvent !== undefined && e.originalEvent.touches !== undefined) {
|
|
|
2460 |
e = e.originalEvent.touches[0];
|
|
|
2461 |
}
|
|
|
2462 |
|
|
|
2463 |
return {
|
|
|
2464 |
x: e.pageX,
|
|
|
2465 |
y: e.pageY
|
|
|
2466 |
};
|
|
|
2467 |
}
|
|
|
2468 |
|
|
|
2469 |
t.$ul.on(events.start, dragStart);
|
|
|
2470 |
},
|
|
|
2471 |
|
|
|
2472 |
/**
|
|
|
2473 |
* Reset the slider layout
|
|
|
2474 |
*/
|
|
|
2475 |
sliderLayoutReset: function() {
|
|
|
2476 |
var t = this;
|
|
|
2477 |
|
|
|
2478 |
t.freeSpaces = [];
|
|
|
2479 |
|
|
|
2480 |
t.sliderFreeSpaces = [];
|
|
|
2481 |
},
|
|
|
2482 |
});
|
|
|
2483 |
})(jQuery, window, document);
|
|
|
2484 |
|
|
|
2485 |
if (typeof Object.create !== 'function') {
|
|
|
2486 |
Object.create = function(obj) {
|
|
|
2487 |
function F() {}
|
|
|
2488 |
F.prototype = obj;
|
|
|
2489 |
return new F();
|
|
|
2490 |
};
|
|
|
2491 |
}
|
|
|
2492 |
|
|
|
2493 |
// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
|
|
|
2494 |
// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
|
|
|
2495 |
|
|
|
2496 |
// requestAnimationFrame polyfill by Erik MĂ¯Â¿Â½ller. fixes from Paul Irish and Tino Zijdel
|
|
|
2497 |
|
|
|
2498 |
// MIT license
|
|
|
2499 |
|
|
|
2500 |
(function() {
|
|
|
2501 |
var lastTime = 0;
|
|
|
2502 |
var vendors = ['moz', 'webkit'];
|
|
|
2503 |
|
|
|
2504 |
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; x++) {
|
|
|
2505 |
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
|
|
|
2506 |
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
|
|
|
2507 |
}
|
|
|
2508 |
|
|
|
2509 |
if (!window.requestAnimationFrame) {
|
|
|
2510 |
window.requestAnimationFrame = function(callback, element) {
|
|
|
2511 |
var currTime = new Date().getTime();
|
|
|
2512 |
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
|
|
|
2513 |
var id = window.setTimeout(function() {
|
|
|
2514 |
callback(currTime + timeToCall);
|
|
|
2515 |
},
|
|
|
2516 |
timeToCall);
|
|
|
2517 |
lastTime = currTime + timeToCall;
|
|
|
2518 |
return id;
|
|
|
2519 |
};
|
|
|
2520 |
}
|
|
|
2521 |
|
|
|
2522 |
if (!window.cancelAnimationFrame) {
|
|
|
2523 |
window.cancelAnimationFrame = function(id) {
|
|
|
2524 |
clearTimeout(id);
|
|
|
2525 |
};
|
|
|
2526 |
}
|
|
|
2527 |
}());
|
|
|
2528 |
|
|
|
2529 |
(function($, window, document, undefined) {
|
|
|
2530 |
'use strict';
|
|
|
2531 |
|
|
|
2532 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
2533 |
|
|
|
2534 |
function Plugin(parent) {
|
|
|
2535 |
var t = this;
|
|
|
2536 |
|
|
|
2537 |
t.parent = parent;
|
|
|
2538 |
|
|
|
2539 |
parent.filterLayout = t.filterLayout;
|
|
|
2540 |
|
|
|
2541 |
parent.registerEvent('computeBlocksFinish', function(expression) {
|
|
|
2542 |
parent.blocksOn2On = parent.blocksOnInitial.filter(expression);
|
|
|
2543 |
parent.blocksOn2Off = parent.blocksOnInitial.not(expression);
|
|
|
2544 |
});
|
|
|
2545 |
}
|
|
|
2546 |
|
|
|
2547 |
// here this value point to parent grid
|
|
|
2548 |
Plugin.prototype.filterLayout = function() {
|
|
|
2549 |
var t = this;
|
|
|
2550 |
|
|
|
2551 |
t.$obj.addClass('cbp-animation-' + t.options.animationType);
|
|
|
2552 |
|
|
|
2553 |
// [1] - blocks that are only moving with translate
|
|
|
2554 |
t.blocksOn2On.addClass('cbp-item-on2on')
|
|
|
2555 |
.each(function(index, el) {
|
|
|
2556 |
var data = $(el).data('cbp');
|
|
|
2557 |
el.style[CubePortfolio.private.transform] = 'translate3d(' + (data.leftNew - data.left) + 'px, ' + (data.topNew - data.top) + 'px, 0)';
|
|
|
2558 |
});
|
|
|
2559 |
|
|
|
2560 |
// [2] - blocks than intialy are on but after applying the filter are off
|
|
|
2561 |
t.blocksOn2Off.addClass('cbp-item-on2off');
|
|
|
2562 |
|
|
|
2563 |
// [3] - blocks that are off and it will be on
|
|
|
2564 |
t.blocksOff2On = t.blocksOn
|
|
|
2565 |
.filter('.cbp-item-off')
|
|
|
2566 |
.removeClass('cbp-item-off')
|
|
|
2567 |
.addClass('cbp-item-off2on')
|
|
|
2568 |
.each(function(index, el) {
|
|
|
2569 |
var data = $(el).data('cbp');
|
|
|
2570 |
|
|
|
2571 |
el.style.left = data.leftNew + 'px';
|
|
|
2572 |
el.style.top = data.topNew + 'px';
|
|
|
2573 |
});
|
|
|
2574 |
|
|
|
2575 |
if (t.blocksOn2Off.length) {
|
|
|
2576 |
t.blocksOn2Off.last().data('cbp').wrapper.one(CubePortfolio.private.animationend, animationend);
|
|
|
2577 |
} else if (t.blocksOff2On.length) {
|
|
|
2578 |
t.blocksOff2On.last().data('cbp').wrapper.one(CubePortfolio.private.animationend, animationend);
|
|
|
2579 |
} else {
|
|
|
2580 |
animationend();
|
|
|
2581 |
}
|
|
|
2582 |
|
|
|
2583 |
// resize main container height
|
|
|
2584 |
t.resizeMainContainer();
|
|
|
2585 |
|
|
|
2586 |
function animationend() {
|
|
|
2587 |
t.blocks.removeClass('cbp-item-on2off cbp-item-off2on cbp-item-on2on')
|
|
|
2588 |
.each(function(index, el) {
|
|
|
2589 |
var data = $(el).data('cbp');
|
|
|
2590 |
|
|
|
2591 |
data.left = data.leftNew;
|
|
|
2592 |
data.top = data.topNew;
|
|
|
2593 |
|
|
|
2594 |
el.style.left = data.left + 'px';
|
|
|
2595 |
el.style.top = data.top + 'px';
|
|
|
2596 |
|
|
|
2597 |
el.style[CubePortfolio.private.transform] = '';
|
|
|
2598 |
});
|
|
|
2599 |
|
|
|
2600 |
t.blocksOff.addClass('cbp-item-off');
|
|
|
2601 |
|
|
|
2602 |
t.$obj.removeClass('cbp-animation-' + t.options.animationType);
|
|
|
2603 |
|
|
|
2604 |
t.filterFinish();
|
|
|
2605 |
}
|
|
|
2606 |
};
|
|
|
2607 |
|
|
|
2608 |
Plugin.prototype.destroy = function() {
|
|
|
2609 |
var parent = this.parent;
|
|
|
2610 |
parent.$obj.removeClass('cbp-animation-' + parent.options.animationType);
|
|
|
2611 |
};
|
|
|
2612 |
|
|
|
2613 |
CubePortfolio.plugins.animationClassic = function(parent) {
|
|
|
2614 |
if (!CubePortfolio.private.modernBrowser || $.inArray(parent.options.animationType, ['boxShadow', 'fadeOut', 'flipBottom', 'flipOut', 'quicksand', 'scaleSides', 'skew']) < 0) {
|
|
|
2615 |
return null;
|
|
|
2616 |
}
|
|
|
2617 |
|
|
|
2618 |
return new Plugin(parent);
|
|
|
2619 |
};
|
|
|
2620 |
})(jQuery, window, document);
|
|
|
2621 |
|
|
|
2622 |
(function($, window, document, undefined) {
|
|
|
2623 |
'use strict';
|
|
|
2624 |
|
|
|
2625 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
2626 |
|
|
|
2627 |
function Plugin(parent) {
|
|
|
2628 |
var t = this;
|
|
|
2629 |
|
|
|
2630 |
t.parent = parent;
|
|
|
2631 |
|
|
|
2632 |
parent.filterLayout = t.filterLayout;
|
|
|
2633 |
}
|
|
|
2634 |
|
|
|
2635 |
// here this value point to parent grid
|
|
|
2636 |
Plugin.prototype.filterLayout = function() {
|
|
|
2637 |
var t = this,
|
|
|
2638 |
ulClone = t.$ul[0].cloneNode(true);
|
|
|
2639 |
|
|
|
2640 |
ulClone.setAttribute('class', 'cbp-wrapper-helper');
|
|
|
2641 |
t.wrapper[0].insertBefore(ulClone, t.$ul[0]);
|
|
|
2642 |
|
|
|
2643 |
requestAnimationFrame(function() {
|
|
|
2644 |
t.$obj.addClass('cbp-animation-' + t.options.animationType);
|
|
|
2645 |
|
|
|
2646 |
t.blocksOff.addClass('cbp-item-off');
|
|
|
2647 |
|
|
|
2648 |
t.blocksOn.removeClass('cbp-item-off')
|
|
|
2649 |
.each(function(index, el) {
|
|
|
2650 |
var data = $(el).data('cbp');
|
|
|
2651 |
|
|
|
2652 |
data.left = data.leftNew;
|
|
|
2653 |
data.top = data.topNew;
|
|
|
2654 |
|
|
|
2655 |
el.style.left = data.left + 'px';
|
|
|
2656 |
el.style.top = data.top + 'px';
|
|
|
2657 |
|
|
|
2658 |
if (t.options.animationType === 'sequentially') {
|
|
|
2659 |
data.wrapper[0].style[CubePortfolio.private.animationDelay] = (index * 60) + 'ms';
|
|
|
2660 |
}
|
|
|
2661 |
});
|
|
|
2662 |
|
|
|
2663 |
if (t.blocksOn.length) {
|
|
|
2664 |
t.blocksOn.last().data('cbp').wrapper.one(CubePortfolio.private.animationend, animationend);
|
|
|
2665 |
} else if (t.blocksOnInitial.length) {
|
|
|
2666 |
t.blocksOnInitial.last().data('cbp').wrapper.one(CubePortfolio.private.animationend, animationend);
|
|
|
2667 |
} else {
|
|
|
2668 |
animationend();
|
|
|
2669 |
}
|
|
|
2670 |
|
|
|
2671 |
// resize main container height
|
|
|
2672 |
t.resizeMainContainer();
|
|
|
2673 |
});
|
|
|
2674 |
|
|
|
2675 |
function animationend() {
|
|
|
2676 |
t.wrapper[0].removeChild(ulClone);
|
|
|
2677 |
|
|
|
2678 |
if (t.options.animationType === 'sequentially') {
|
|
|
2679 |
t.blocksOn.each(function(index, el) {
|
|
|
2680 |
$(el).data('cbp').wrapper[0].style[CubePortfolio.private.animationDelay] = '';
|
|
|
2681 |
});
|
|
|
2682 |
}
|
|
|
2683 |
|
|
|
2684 |
t.$obj.removeClass('cbp-animation-' + t.options.animationType);
|
|
|
2685 |
|
|
|
2686 |
t.filterFinish();
|
|
|
2687 |
}
|
|
|
2688 |
};
|
|
|
2689 |
|
|
|
2690 |
Plugin.prototype.destroy = function() {
|
|
|
2691 |
var parent = this.parent;
|
|
|
2692 |
parent.$obj.removeClass('cbp-animation-' + parent.options.animationType);
|
|
|
2693 |
};
|
|
|
2694 |
|
|
|
2695 |
CubePortfolio.plugins.animationClone = function(parent) {
|
|
|
2696 |
if (!CubePortfolio.private.modernBrowser || $.inArray(parent.options.animationType, ['fadeOutTop', 'slideLeft', 'sequentially']) < 0) {
|
|
|
2697 |
return null;
|
|
|
2698 |
}
|
|
|
2699 |
|
|
|
2700 |
return new Plugin(parent);
|
|
|
2701 |
};
|
|
|
2702 |
})(jQuery, window, document);
|
|
|
2703 |
|
|
|
2704 |
(function($, window, document, undefined) {
|
|
|
2705 |
'use strict';
|
|
|
2706 |
|
|
|
2707 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
2708 |
|
|
|
2709 |
function Plugin(parent) {
|
|
|
2710 |
var t = this;
|
|
|
2711 |
|
|
|
2712 |
t.parent = parent;
|
|
|
2713 |
|
|
|
2714 |
parent.filterLayout = t.filterLayout;
|
|
|
2715 |
}
|
|
|
2716 |
|
|
|
2717 |
// here this value point to parent grid
|
|
|
2718 |
Plugin.prototype.filterLayout = function() {
|
|
|
2719 |
var t = this,
|
|
|
2720 |
ulClone = t.$ul.clone(true, true);
|
|
|
2721 |
|
|
|
2722 |
ulClone[0].setAttribute('class', 'cbp-wrapper-helper');
|
|
|
2723 |
t.wrapper[0].insertBefore(ulClone[0], t.$ul[0]);
|
|
|
2724 |
|
|
|
2725 |
// hack for safari osx because it doesn't want to work if I set animationDelay
|
|
|
2726 |
// on cbp-item-wrapper before I clone the t.$ul
|
|
|
2727 |
var items = ulClone.find('.cbp-item').not('.cbp-item-off');
|
|
|
2728 |
t.sortBlocks(items, 'top');
|
|
|
2729 |
items.children('.cbp-item-wrapper').each(function(index, el) {
|
|
|
2730 |
el.style[CubePortfolio.private.animationDelay] = (index * 50) + 'ms';
|
|
|
2731 |
});
|
|
|
2732 |
|
|
|
2733 |
requestAnimationFrame(function() {
|
|
|
2734 |
t.$obj.addClass('cbp-animation-' + t.options.animationType);
|
|
|
2735 |
|
|
|
2736 |
t.blocksOff.addClass('cbp-item-off');
|
|
|
2737 |
|
|
|
2738 |
t.blocksOn.removeClass('cbp-item-off')
|
|
|
2739 |
.each(function(index, el) {
|
|
|
2740 |
var data = $(el).data('cbp');
|
|
|
2741 |
|
|
|
2742 |
data.left = data.leftNew;
|
|
|
2743 |
data.top = data.topNew;
|
|
|
2744 |
|
|
|
2745 |
el.style.left = data.left + 'px';
|
|
|
2746 |
el.style.top = data.top + 'px';
|
|
|
2747 |
|
|
|
2748 |
data.wrapper[0].style[CubePortfolio.private.animationDelay] = (index * 50) + 'ms';
|
|
|
2749 |
});
|
|
|
2750 |
|
|
|
2751 |
var onLength = t.blocksOn.length,
|
|
|
2752 |
offLength = items.length;
|
|
|
2753 |
|
|
|
2754 |
if (onLength === 0 && offLength === 0) {
|
|
|
2755 |
animationend();
|
|
|
2756 |
} else if (onLength < offLength) {
|
|
|
2757 |
items.last().children('.cbp-item-wrapper').one(CubePortfolio.private.animationend, animationend);
|
|
|
2758 |
} else {
|
|
|
2759 |
t.blocksOn.last().data('cbp').wrapper.one(CubePortfolio.private.animationend, animationend);
|
|
|
2760 |
}
|
|
|
2761 |
|
|
|
2762 |
// resize main container height
|
|
|
2763 |
t.resizeMainContainer();
|
|
|
2764 |
});
|
|
|
2765 |
|
|
|
2766 |
function animationend() {
|
|
|
2767 |
t.wrapper[0].removeChild(ulClone[0]);
|
|
|
2768 |
|
|
|
2769 |
t.$obj.removeClass('cbp-animation-' + t.options.animationType);
|
|
|
2770 |
|
|
|
2771 |
t.blocks.each(function(index, el) {
|
|
|
2772 |
$(el).data('cbp').wrapper[0].style[CubePortfolio.private.animationDelay] = '';
|
|
|
2773 |
});
|
|
|
2774 |
|
|
|
2775 |
t.filterFinish();
|
|
|
2776 |
}
|
|
|
2777 |
};
|
|
|
2778 |
|
|
|
2779 |
Plugin.prototype.destroy = function() {
|
|
|
2780 |
var parent = this.parent;
|
|
|
2781 |
parent.$obj.removeClass('cbp-animation-' + parent.options.animationType);
|
|
|
2782 |
};
|
|
|
2783 |
|
|
|
2784 |
CubePortfolio.plugins.animationCloneDelay = function(parent) {
|
|
|
2785 |
if (!CubePortfolio.private.modernBrowser || $.inArray(parent.options.animationType, ['3dflip', 'flipOutDelay', 'foldLeft', 'frontRow', 'rotateRoom', 'rotateSides', 'scaleDown', 'slideDelay', 'unfold']) < 0) {
|
|
|
2786 |
return null;
|
|
|
2787 |
}
|
|
|
2788 |
|
|
|
2789 |
return new Plugin(parent);
|
|
|
2790 |
};
|
|
|
2791 |
})(jQuery, window, document);
|
|
|
2792 |
|
|
|
2793 |
(function($, window, document, undefined) {
|
|
|
2794 |
'use strict';
|
|
|
2795 |
|
|
|
2796 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
2797 |
|
|
|
2798 |
function Plugin(parent) {
|
|
|
2799 |
var t = this;
|
|
|
2800 |
|
|
|
2801 |
t.parent = parent;
|
|
|
2802 |
|
|
|
2803 |
parent.filterLayout = t.filterLayout;
|
|
|
2804 |
}
|
|
|
2805 |
|
|
|
2806 |
// here this value point to parent grid
|
|
|
2807 |
Plugin.prototype.filterLayout = function() {
|
|
|
2808 |
var t = this,
|
|
|
2809 |
ulClone = t.$ul[0].cloneNode(true);
|
|
|
2810 |
|
|
|
2811 |
ulClone.setAttribute('class', 'cbp-wrapper-helper');
|
|
|
2812 |
t.wrapper[0].insertBefore(ulClone, t.$ul[0]);
|
|
|
2813 |
|
|
|
2814 |
requestAnimationFrame(function() {
|
|
|
2815 |
t.$obj.addClass('cbp-animation-' + t.options.animationType);
|
|
|
2816 |
|
|
|
2817 |
t.blocksOff.addClass('cbp-item-off');
|
|
|
2818 |
|
|
|
2819 |
t.blocksOn.removeClass('cbp-item-off')
|
|
|
2820 |
.each(function(index, el) {
|
|
|
2821 |
var data = $(el).data('cbp');
|
|
|
2822 |
|
|
|
2823 |
data.left = data.leftNew;
|
|
|
2824 |
data.top = data.topNew;
|
|
|
2825 |
|
|
|
2826 |
el.style.left = data.left + 'px';
|
|
|
2827 |
el.style.top = data.top + 'px';
|
|
|
2828 |
});
|
|
|
2829 |
|
|
|
2830 |
if (t.blocksOn.length) {
|
|
|
2831 |
t.$ul.one(CubePortfolio.private.animationend, animationend);
|
|
|
2832 |
} else if (t.blocksOnInitial.length) {
|
|
|
2833 |
$(ulClone).one(CubePortfolio.private.animationend, animationend);
|
|
|
2834 |
} else {
|
|
|
2835 |
animationend();
|
|
|
2836 |
}
|
|
|
2837 |
|
|
|
2838 |
// resize main container height
|
|
|
2839 |
t.resizeMainContainer();
|
|
|
2840 |
});
|
|
|
2841 |
|
|
|
2842 |
function animationend() {
|
|
|
2843 |
t.wrapper[0].removeChild(ulClone);
|
|
|
2844 |
|
|
|
2845 |
t.$obj.removeClass('cbp-animation-' + t.options.animationType);
|
|
|
2846 |
|
|
|
2847 |
t.filterFinish();
|
|
|
2848 |
}
|
|
|
2849 |
};
|
|
|
2850 |
|
|
|
2851 |
Plugin.prototype.destroy = function() {
|
|
|
2852 |
var parent = this.parent;
|
|
|
2853 |
parent.$obj.removeClass('cbp-animation-' + parent.options.animationType);
|
|
|
2854 |
};
|
|
|
2855 |
|
|
|
2856 |
CubePortfolio.plugins.animationWrapper = function(parent) {
|
|
|
2857 |
if (!CubePortfolio.private.modernBrowser || $.inArray(parent.options.animationType, ['bounceBottom', 'bounceLeft', 'bounceTop', 'moveLeft']) < 0) {
|
|
|
2858 |
return null;
|
|
|
2859 |
}
|
|
|
2860 |
|
|
|
2861 |
return new Plugin(parent);
|
|
|
2862 |
};
|
|
|
2863 |
})(jQuery, window, document);
|
|
|
2864 |
|
|
|
2865 |
(function($, window, document, undefined) {
|
|
|
2866 |
'use strict';
|
|
|
2867 |
|
|
|
2868 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
2869 |
|
|
|
2870 |
function Plugin(parent) {
|
|
|
2871 |
var t = this;
|
|
|
2872 |
|
|
|
2873 |
t.parent = parent;
|
|
|
2874 |
|
|
|
2875 |
parent.registerEvent('initFinish', function() {
|
|
|
2876 |
parent.$obj.on('click.cbp', '.cbp-caption-defaultWrap', function(e) {
|
|
|
2877 |
e.preventDefault();
|
|
|
2878 |
|
|
|
2879 |
if (parent.isAnimating) {
|
|
|
2880 |
return;
|
|
|
2881 |
}
|
|
|
2882 |
|
|
|
2883 |
parent.isAnimating = true;
|
|
|
2884 |
|
|
|
2885 |
var defaultWrap = $(this),
|
|
|
2886 |
activeWrap = defaultWrap.next(),
|
|
|
2887 |
caption = defaultWrap.parent(),
|
|
|
2888 |
endStyle = {
|
|
|
2889 |
position: 'relative',
|
|
|
2890 |
height: activeWrap.outerHeight(true)
|
|
|
2891 |
},
|
|
|
2892 |
startStyle = {
|
|
|
2893 |
position: 'relative',
|
|
|
2894 |
height: 0
|
|
|
2895 |
};
|
|
|
2896 |
|
|
|
2897 |
parent.$obj.addClass('cbp-caption-expand-active');
|
|
|
2898 |
|
|
|
2899 |
// swap endStyle & startStyle
|
|
|
2900 |
if (caption.hasClass('cbp-caption-expand-open')) {
|
|
|
2901 |
var temp = startStyle;
|
|
|
2902 |
startStyle = endStyle;
|
|
|
2903 |
endStyle = temp;
|
|
|
2904 |
caption.removeClass('cbp-caption-expand-open');
|
|
|
2905 |
}
|
|
|
2906 |
|
|
|
2907 |
activeWrap.css(endStyle);
|
|
|
2908 |
|
|
|
2909 |
parent.$obj.one('pluginResize.cbp', function() {
|
|
|
2910 |
parent.isAnimating = false;
|
|
|
2911 |
parent.$obj.removeClass('cbp-caption-expand-active');
|
|
|
2912 |
|
|
|
2913 |
if (endStyle.height === 0) {
|
|
|
2914 |
caption.removeClass('cbp-caption-expand-open');
|
|
|
2915 |
activeWrap.attr('style', '');
|
|
|
2916 |
}
|
|
|
2917 |
});
|
|
|
2918 |
|
|
|
2919 |
// reposition the blocks
|
|
|
2920 |
parent.layoutAndAdjustment();
|
|
|
2921 |
|
|
|
2922 |
// set activeWrap to 0 so I can start animation in the next frame
|
|
|
2923 |
activeWrap.css(startStyle);
|
|
|
2924 |
|
|
|
2925 |
// delay animation
|
|
|
2926 |
requestAnimationFrame(function() {
|
|
|
2927 |
caption.addClass('cbp-caption-expand-open');
|
|
|
2928 |
|
|
|
2929 |
activeWrap.css(endStyle);
|
|
|
2930 |
|
|
|
2931 |
// used by slider layoutMode
|
|
|
2932 |
parent.triggerEvent('gridAdjust');
|
|
|
2933 |
|
|
|
2934 |
parent.triggerEvent('resizeGrid');
|
|
|
2935 |
});
|
|
|
2936 |
});
|
|
|
2937 |
}, true);
|
|
|
2938 |
}
|
|
|
2939 |
|
|
|
2940 |
Plugin.prototype.destroy = function() {
|
|
|
2941 |
this.parent.$obj.find('.cbp-caption-defaultWrap').off('click.cbp').parent().removeClass('cbp-caption-expand-active');
|
|
|
2942 |
};
|
|
|
2943 |
|
|
|
2944 |
CubePortfolio.plugins.captionExpand = function(parent) {
|
|
|
2945 |
|
|
|
2946 |
if (parent.options.caption !== 'expand') {
|
|
|
2947 |
return null;
|
|
|
2948 |
}
|
|
|
2949 |
|
|
|
2950 |
return new Plugin(parent);
|
|
|
2951 |
};
|
|
|
2952 |
|
|
|
2953 |
})(jQuery, window, document);
|
|
|
2954 |
|
|
|
2955 |
(function($, window, document, undefined) {
|
|
|
2956 |
'use strict';
|
|
|
2957 |
|
|
|
2958 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
2959 |
|
|
|
2960 |
function Plugin(parent) {
|
|
|
2961 |
var deferred = $.Deferred();
|
|
|
2962 |
|
|
|
2963 |
parent.pushQueue('delayFrame', deferred);
|
|
|
2964 |
|
|
|
2965 |
parent.registerEvent('initEndWrite', function() {
|
|
|
2966 |
parent.blocksOn.each(function(index, el) {
|
|
|
2967 |
el.style[CubePortfolio.private.animationDelay] = (index * parent.options.displayTypeSpeed) + 'ms';
|
|
|
2968 |
});
|
|
|
2969 |
|
|
|
2970 |
parent.$obj.addClass('cbp-displayType-bottomToTop');
|
|
|
2971 |
|
|
|
2972 |
// get last element
|
|
|
2973 |
parent.blocksOn.last().one(CubePortfolio.private.animationend, function() {
|
|
|
2974 |
parent.$obj.removeClass('cbp-displayType-bottomToTop');
|
|
|
2975 |
|
|
|
2976 |
parent.blocksOn.each(function(index, el) {
|
|
|
2977 |
el.style[CubePortfolio.private.animationDelay] = '';
|
|
|
2978 |
});
|
|
|
2979 |
|
|
|
2980 |
// resolve event after the animation is finished
|
|
|
2981 |
deferred.resolve();
|
|
|
2982 |
});
|
|
|
2983 |
}, true);
|
|
|
2984 |
}
|
|
|
2985 |
|
|
|
2986 |
CubePortfolio.plugins.displayBottomToTop = function(parent) {
|
|
|
2987 |
if (!CubePortfolio.private.modernBrowser || parent.options.displayType !== 'bottomToTop' || parent.blocksOn.length === 0) {
|
|
|
2988 |
return null;
|
|
|
2989 |
}
|
|
|
2990 |
|
|
|
2991 |
return new Plugin(parent);
|
|
|
2992 |
};
|
|
|
2993 |
})(jQuery, window, document);
|
|
|
2994 |
|
|
|
2995 |
(function($, window, document, undefined) {
|
|
|
2996 |
'use strict';
|
|
|
2997 |
|
|
|
2998 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
2999 |
|
|
|
3000 |
function Plugin(parent) {
|
|
|
3001 |
var deferred = $.Deferred();
|
|
|
3002 |
|
|
|
3003 |
parent.pushQueue('delayFrame', deferred);
|
|
|
3004 |
|
|
|
3005 |
parent.registerEvent('initEndWrite', function() {
|
|
|
3006 |
parent.obj.style[CubePortfolio.private.animationDuration] = parent.options.displayTypeSpeed + 'ms';
|
|
|
3007 |
|
|
|
3008 |
parent.$obj.addClass('cbp-displayType-fadeIn');
|
|
|
3009 |
|
|
|
3010 |
parent.$obj.one(CubePortfolio.private.animationend, function() {
|
|
|
3011 |
parent.$obj.removeClass('cbp-displayType-fadeIn');
|
|
|
3012 |
|
|
|
3013 |
parent.obj.style[CubePortfolio.private.animationDuration] = '';
|
|
|
3014 |
|
|
|
3015 |
// resolve event after the animation is finished
|
|
|
3016 |
deferred.resolve();
|
|
|
3017 |
});
|
|
|
3018 |
}, true);
|
|
|
3019 |
}
|
|
|
3020 |
|
|
|
3021 |
CubePortfolio.plugins.displayFadeIn = function(parent) {
|
|
|
3022 |
if (!CubePortfolio.private.modernBrowser || (parent.options.displayType !== 'lazyLoading' && parent.options.displayType !== 'fadeIn') || parent.blocksOn.length === 0) {
|
|
|
3023 |
return null;
|
|
|
3024 |
}
|
|
|
3025 |
|
|
|
3026 |
return new Plugin(parent);
|
|
|
3027 |
};
|
|
|
3028 |
})(jQuery, window, document);
|
|
|
3029 |
|
|
|
3030 |
(function($, window, document, undefined) {
|
|
|
3031 |
'use strict';
|
|
|
3032 |
|
|
|
3033 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
3034 |
|
|
|
3035 |
function Plugin(parent) {
|
|
|
3036 |
var deferred = $.Deferred();
|
|
|
3037 |
|
|
|
3038 |
parent.pushQueue('delayFrame', deferred);
|
|
|
3039 |
|
|
|
3040 |
parent.registerEvent('initEndWrite', function() {
|
|
|
3041 |
parent.obj.style[CubePortfolio.private.animationDuration] = parent.options.displayTypeSpeed + 'ms';
|
|
|
3042 |
|
|
|
3043 |
parent.$obj.addClass('cbp-displayType-fadeInToTop');
|
|
|
3044 |
|
|
|
3045 |
parent.$obj.one(CubePortfolio.private.animationend, function() {
|
|
|
3046 |
parent.$obj.removeClass('cbp-displayType-fadeInToTop');
|
|
|
3047 |
|
|
|
3048 |
parent.obj.style[CubePortfolio.private.animationDuration] = '';
|
|
|
3049 |
|
|
|
3050 |
// resolve event after the animation is finished
|
|
|
3051 |
deferred.resolve();
|
|
|
3052 |
});
|
|
|
3053 |
}, true);
|
|
|
3054 |
}
|
|
|
3055 |
|
|
|
3056 |
CubePortfolio.plugins.displayFadeInToTop = function(parent) {
|
|
|
3057 |
if (!CubePortfolio.private.modernBrowser || parent.options.displayType !== 'fadeInToTop' || parent.blocksOn.length === 0) {
|
|
|
3058 |
return null;
|
|
|
3059 |
}
|
|
|
3060 |
|
|
|
3061 |
return new Plugin(parent);
|
|
|
3062 |
};
|
|
|
3063 |
})(jQuery, window, document);
|
|
|
3064 |
|
|
|
3065 |
(function($, window, document, undefined) {
|
|
|
3066 |
'use strict';
|
|
|
3067 |
|
|
|
3068 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
3069 |
|
|
|
3070 |
function Plugin(parent) {
|
|
|
3071 |
var deferred = $.Deferred();
|
|
|
3072 |
|
|
|
3073 |
parent.pushQueue('delayFrame', deferred);
|
|
|
3074 |
|
|
|
3075 |
parent.registerEvent('initEndWrite', function() {
|
|
|
3076 |
parent.blocksOn.each(function(index, el) {
|
|
|
3077 |
el.style[CubePortfolio.private.animationDelay] = (index * parent.options.displayTypeSpeed) + 'ms';
|
|
|
3078 |
});
|
|
|
3079 |
|
|
|
3080 |
parent.$obj.addClass('cbp-displayType-sequentially');
|
|
|
3081 |
|
|
|
3082 |
// get last element
|
|
|
3083 |
parent.blocksOn.last().one(CubePortfolio.private.animationend, function() {
|
|
|
3084 |
parent.$obj.removeClass('cbp-displayType-sequentially');
|
|
|
3085 |
|
|
|
3086 |
parent.blocksOn.each(function(index, el) {
|
|
|
3087 |
el.style[CubePortfolio.private.animationDelay] = '';
|
|
|
3088 |
});
|
|
|
3089 |
|
|
|
3090 |
// resolve event after the animation is finished
|
|
|
3091 |
deferred.resolve();
|
|
|
3092 |
});
|
|
|
3093 |
}, true);
|
|
|
3094 |
}
|
|
|
3095 |
|
|
|
3096 |
CubePortfolio.plugins.displaySequentially = function(parent) {
|
|
|
3097 |
if (!CubePortfolio.private.modernBrowser || parent.options.displayType !== 'sequentially' || parent.blocksOn.length === 0) {
|
|
|
3098 |
return null;
|
|
|
3099 |
}
|
|
|
3100 |
|
|
|
3101 |
return new Plugin(parent);
|
|
|
3102 |
};
|
|
|
3103 |
})(jQuery, window, document);
|
|
|
3104 |
|
|
|
3105 |
(function($, window, document, undefined) {
|
|
|
3106 |
'use strict';
|
|
|
3107 |
|
|
|
3108 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
3109 |
|
|
|
3110 |
function Plugin(parent) {
|
|
|
3111 |
var t = this;
|
|
|
3112 |
|
|
|
3113 |
t.parent = parent;
|
|
|
3114 |
|
|
|
3115 |
t.filters = $(parent.options.filters);
|
|
|
3116 |
t.filterData = [];
|
|
|
3117 |
|
|
|
3118 |
parent.registerEvent('afterPlugins', function(elems) {
|
|
|
3119 |
// set default filter if it's present in url
|
|
|
3120 |
t.filterFromUrl();
|
|
|
3121 |
t.registerFilter();
|
|
|
3122 |
});
|
|
|
3123 |
|
|
|
3124 |
}
|
|
|
3125 |
|
|
|
3126 |
Plugin.prototype.registerFilter = function() {
|
|
|
3127 |
var t = this,
|
|
|
3128 |
parent = t.parent,
|
|
|
3129 |
filtersCallback,
|
|
|
3130 |
arr = parent.defaultFilter.split('|');
|
|
|
3131 |
|
|
|
3132 |
t.wrap = t.filters.find('.cbp-l-filters-dropdownWrap')
|
|
|
3133 |
.on({
|
|
|
3134 |
'mouseover.cbp': function() {
|
|
|
3135 |
$(this).addClass('cbp-l-filters-dropdownWrap-open');
|
|
|
3136 |
},
|
|
|
3137 |
'mouseleave.cbp': function() {
|
|
|
3138 |
$(this).removeClass('cbp-l-filters-dropdownWrap-open');
|
|
|
3139 |
}
|
|
|
3140 |
});
|
|
|
3141 |
|
|
|
3142 |
t.filters.each(function(index, el) {
|
|
|
3143 |
var filter = $(el),
|
|
|
3144 |
filterName = '*',
|
|
|
3145 |
items = filter.find('.cbp-filter-item'),
|
|
|
3146 |
dropdown = {};
|
|
|
3147 |
|
|
|
3148 |
if (filter.hasClass('cbp-l-filters-dropdown')) {
|
|
|
3149 |
dropdown.wrap = filter.find('.cbp-l-filters-dropdownWrap');
|
|
|
3150 |
dropdown.header = filter.find('.cbp-l-filters-dropdownHeader');
|
|
|
3151 |
dropdown.headerText = dropdown.header.text();
|
|
|
3152 |
}
|
|
|
3153 |
|
|
|
3154 |
// activate counter for filters
|
|
|
3155 |
parent.$obj.cubeportfolio('showCounter', items);
|
|
|
3156 |
|
|
|
3157 |
$.each(arr, function(index, val) {
|
|
|
3158 |
if (items.filter('[data-filter="' + val + '"]').length) {
|
|
|
3159 |
filterName = val;
|
|
|
3160 |
arr.splice(index, 1);
|
|
|
3161 |
return false;
|
|
|
3162 |
}
|
|
|
3163 |
});
|
|
|
3164 |
|
|
|
3165 |
$.data(el, 'filterName', filterName);
|
|
|
3166 |
t.filterData.push(el);
|
|
|
3167 |
|
|
|
3168 |
t.filtersCallback(dropdown, items.filter('[data-filter="' + filterName + '"]'));
|
|
|
3169 |
|
|
|
3170 |
items.on('click.cbp', function() {
|
|
|
3171 |
var item = $(this);
|
|
|
3172 |
|
|
|
3173 |
if (item.hasClass('cbp-filter-item-active') || parent.isAnimating) {
|
|
|
3174 |
return;
|
|
|
3175 |
}
|
|
|
3176 |
|
|
|
3177 |
t.filtersCallback(dropdown, item);
|
|
|
3178 |
|
|
|
3179 |
$.data(el, 'filterName', item.data('filter'));
|
|
|
3180 |
|
|
|
3181 |
var name = $.map(t.filterData, function(el, index) {
|
|
|
3182 |
var f = $.data(el, 'filterName');
|
|
|
3183 |
return (f !== "" && f !== '*') ? f : null;
|
|
|
3184 |
});
|
|
|
3185 |
|
|
|
3186 |
if (name.length < 1) {
|
|
|
3187 |
name = ['*'];
|
|
|
3188 |
}
|
|
|
3189 |
|
|
|
3190 |
var filterJoin = name.join('|');
|
|
|
3191 |
|
|
|
3192 |
if (parent.defaultFilter !== filterJoin) {
|
|
|
3193 |
// filter the items
|
|
|
3194 |
parent.$obj.cubeportfolio('filter', filterJoin);
|
|
|
3195 |
}
|
|
|
3196 |
});
|
|
|
3197 |
});
|
|
|
3198 |
};
|
|
|
3199 |
|
|
|
3200 |
Plugin.prototype.filtersCallback = function(dropdown, item) {
|
|
|
3201 |
if (!$.isEmptyObject(dropdown)) {
|
|
|
3202 |
dropdown.wrap.trigger('mouseleave.cbp');
|
|
|
3203 |
|
|
|
3204 |
if (dropdown.headerText) {
|
|
|
3205 |
dropdown.headerText = '';
|
|
|
3206 |
} else {
|
|
|
3207 |
dropdown.header.html(item.html());
|
|
|
3208 |
}
|
|
|
3209 |
}
|
|
|
3210 |
|
|
|
3211 |
item.addClass('cbp-filter-item-active').siblings().removeClass('cbp-filter-item-active');
|
|
|
3212 |
};
|
|
|
3213 |
|
|
|
3214 |
/**
|
|
|
3215 |
* Check if filters are present in url
|
|
|
3216 |
*/
|
|
|
3217 |
Plugin.prototype.filterFromUrl = function() {
|
|
|
3218 |
var match = /#cbpf=(.*?)([#\?&]|$)/gi.exec(location.href);
|
|
|
3219 |
|
|
|
3220 |
if (match !== null) {
|
|
|
3221 |
this.parent.defaultFilter = decodeURIComponent(match[1]);
|
|
|
3222 |
}
|
|
|
3223 |
};
|
|
|
3224 |
|
|
|
3225 |
Plugin.prototype.destroy = function() {
|
|
|
3226 |
var t = this;
|
|
|
3227 |
|
|
|
3228 |
t.filters.find('.cbp-filter-item').off('.cbp');
|
|
|
3229 |
t.wrap.off('.cbp');
|
|
|
3230 |
};
|
|
|
3231 |
|
|
|
3232 |
CubePortfolio.plugins.filters = function(parent) {
|
|
|
3233 |
if (parent.options.filters === '') {
|
|
|
3234 |
return null;
|
|
|
3235 |
}
|
|
|
3236 |
|
|
|
3237 |
return new Plugin(parent);
|
|
|
3238 |
};
|
|
|
3239 |
})(jQuery, window, document);
|
|
|
3240 |
|
|
|
3241 |
(function($, window, document, undefined) {
|
|
|
3242 |
'use strict';
|
|
|
3243 |
|
|
|
3244 |
var options = {};
|
|
|
3245 |
|
|
|
3246 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
3247 |
|
|
|
3248 |
function Plugin(parent) {
|
|
|
3249 |
var t = this;
|
|
|
3250 |
|
|
|
3251 |
t.parent = parent;
|
|
|
3252 |
|
|
|
3253 |
t.options = $.extend({}, options, t.parent.options.plugins.inlineSlider);
|
|
|
3254 |
|
|
|
3255 |
t.runInit();
|
|
|
3256 |
|
|
|
3257 |
parent.registerEvent('addItemsToDOM', function() {
|
|
|
3258 |
t.runInit();
|
|
|
3259 |
});
|
|
|
3260 |
|
|
|
3261 |
}
|
|
|
3262 |
|
|
|
3263 |
function InitSlider(slider) {
|
|
|
3264 |
var t = this;
|
|
|
3265 |
|
|
|
3266 |
if (slider.hasClass('cbp-slider-inline-ready')) {
|
|
|
3267 |
return;
|
|
|
3268 |
}
|
|
|
3269 |
|
|
|
3270 |
slider.addClass('cbp-slider-inline-ready');
|
|
|
3271 |
|
|
|
3272 |
t.items = slider.find('.cbp-slider-wrapper').children('.cbp-slider-item');
|
|
|
3273 |
|
|
|
3274 |
t.active = t.items.filter('.cbp-slider-item--active').index();
|
|
|
3275 |
t.total = t.items.length - 1;
|
|
|
3276 |
|
|
|
3277 |
t.updateLeft();
|
|
|
3278 |
|
|
|
3279 |
slider.find('.cbp-slider-next').on('click.cbp', function(e) {
|
|
|
3280 |
e.preventDefault();
|
|
|
3281 |
|
|
|
3282 |
if (t.active < t.total) {
|
|
|
3283 |
t.active++;
|
|
|
3284 |
t.updateLeft();
|
|
|
3285 |
} else if (t.active === t.total) {
|
|
|
3286 |
t.active = 0;
|
|
|
3287 |
t.updateLeft();
|
|
|
3288 |
}
|
|
|
3289 |
});
|
|
|
3290 |
|
|
|
3291 |
slider.find('.cbp-slider-prev').on('click.cbp', function(e) {
|
|
|
3292 |
e.preventDefault();
|
|
|
3293 |
|
|
|
3294 |
if (t.active > 0) {
|
|
|
3295 |
t.active--;
|
|
|
3296 |
t.updateLeft();
|
|
|
3297 |
} else if (t.active === 0) {
|
|
|
3298 |
t.active = t.total;
|
|
|
3299 |
t.updateLeft();
|
|
|
3300 |
}
|
|
|
3301 |
});
|
|
|
3302 |
};
|
|
|
3303 |
|
|
|
3304 |
InitSlider.prototype.updateLeft = function() {
|
|
|
3305 |
var t = this;
|
|
|
3306 |
|
|
|
3307 |
t.items.removeClass('cbp-slider-item--active');
|
|
|
3308 |
t.items.eq(t.active).addClass('cbp-slider-item--active');
|
|
|
3309 |
|
|
|
3310 |
t.items.each(function(index, el) {
|
|
|
3311 |
el.style.left = (index - t.active) + '00%';
|
|
|
3312 |
});
|
|
|
3313 |
};
|
|
|
3314 |
|
|
|
3315 |
Plugin.prototype.runInit = function() {
|
|
|
3316 |
var t = this;
|
|
|
3317 |
|
|
|
3318 |
t.parent.$obj.find('.cbp-slider-inline').not('.cbp-slider-inline-ready').each(function(index, el) {
|
|
|
3319 |
var slider = $(el);
|
|
|
3320 |
var activeImage = slider.find('.cbp-slider-item--active').find('img')[0];
|
|
|
3321 |
|
|
|
3322 |
if (activeImage.hasAttribute('data-cbp-src')) {
|
|
|
3323 |
t.parent.$obj.on('lazyLoad.cbp', function(e, image) {
|
|
|
3324 |
if (image.src === activeImage.src) {
|
|
|
3325 |
new InitSlider(slider);
|
|
|
3326 |
}
|
|
|
3327 |
});
|
|
|
3328 |
} else {
|
|
|
3329 |
new InitSlider(slider);
|
|
|
3330 |
}
|
|
|
3331 |
});
|
|
|
3332 |
};
|
|
|
3333 |
|
|
|
3334 |
Plugin.prototype.destroy = function() {
|
|
|
3335 |
var t = this;
|
|
|
3336 |
|
|
|
3337 |
t.parent.$obj.find('.cbp-slider-next').off('click.cbp');
|
|
|
3338 |
t.parent.$obj.find('.cbp-slider-prev').off('click.cbp');
|
|
|
3339 |
|
|
|
3340 |
t.parent.$obj.off('lazyLoad.cbp');
|
|
|
3341 |
|
|
|
3342 |
t.parent.$obj.find('.cbp-slider-inline').each(function(index, el) {
|
|
|
3343 |
var slider = $(el);
|
|
|
3344 |
|
|
|
3345 |
slider.removeClass('cbp-slider-inline-ready');
|
|
|
3346 |
|
|
|
3347 |
var items = slider.find('.cbp-slider-item');
|
|
|
3348 |
items.removeClass('cbp-slider-item--active');
|
|
|
3349 |
|
|
|
3350 |
items.removeAttr('style');
|
|
|
3351 |
|
|
|
3352 |
items.eq(0).addClass('cbp-slider-item--active');
|
|
|
3353 |
});
|
|
|
3354 |
};
|
|
|
3355 |
|
|
|
3356 |
CubePortfolio.plugins.inlineSlider = function(parent) {
|
|
|
3357 |
return new Plugin(parent);
|
|
|
3358 |
};
|
|
|
3359 |
})(jQuery, window, document);
|
|
|
3360 |
|
|
|
3361 |
(function($, window, document, undefined) {
|
|
|
3362 |
'use strict';
|
|
|
3363 |
|
|
|
3364 |
var options = {
|
|
|
3365 |
loadingClass: 'cbp-lazyload',
|
|
|
3366 |
threshold: 0, // loads images 150px before they're visible
|
|
|
3367 |
};
|
|
|
3368 |
|
|
|
3369 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
3370 |
|
|
|
3371 |
function Plugin(parent) {
|
|
|
3372 |
var t = this;
|
|
|
3373 |
|
|
|
3374 |
t.window = $(window);
|
|
|
3375 |
|
|
|
3376 |
t.parent = parent;
|
|
|
3377 |
|
|
|
3378 |
t.options = $.extend({}, options, t.parent.options.plugins.lazyLoad);
|
|
|
3379 |
|
|
|
3380 |
parent.registerEvent('initEndWrite', function() {
|
|
|
3381 |
var timeout;
|
|
|
3382 |
|
|
|
3383 |
t.triggerImg();
|
|
|
3384 |
|
|
|
3385 |
parent.registerEvent('resizeMainContainer', function() {
|
|
|
3386 |
t.triggerImg();
|
|
|
3387 |
});
|
|
|
3388 |
|
|
|
3389 |
// scroll event. @todo - this must be done like the global resize event
|
|
|
3390 |
t.window.on('scroll.cbp', function() {
|
|
|
3391 |
clearTimeout(timeout);
|
|
|
3392 |
|
|
|
3393 |
timeout = setTimeout(function() {
|
|
|
3394 |
t.triggerImg();
|
|
|
3395 |
}, 300);
|
|
|
3396 |
});
|
|
|
3397 |
}, true);
|
|
|
3398 |
}
|
|
|
3399 |
|
|
|
3400 |
Plugin.prototype.triggerImg = function() {
|
|
|
3401 |
var t = this;
|
|
|
3402 |
|
|
|
3403 |
var imgs = t.parent.$obj.find('img').filter('[data-cbp-src]');
|
|
|
3404 |
|
|
|
3405 |
if (imgs.length === 0) {
|
|
|
3406 |
return;
|
|
|
3407 |
}
|
|
|
3408 |
|
|
|
3409 |
t.screenHeight = t.window.height();
|
|
|
3410 |
|
|
|
3411 |
imgs.each(function(index, el) {
|
|
|
3412 |
var parentNode = $(el.parentNode);
|
|
|
3413 |
|
|
|
3414 |
if (!t.isElementInScreen(el)) {
|
|
|
3415 |
parentNode.addClass(t.options.loadingClass);
|
|
|
3416 |
return;
|
|
|
3417 |
}
|
|
|
3418 |
|
|
|
3419 |
var dataSrc = el.getAttribute('data-cbp-src');
|
|
|
3420 |
|
|
|
3421 |
if (t.parent.checkSrc(dataSrc) === null) {
|
|
|
3422 |
t.removeLazy(el, dataSrc);
|
|
|
3423 |
parentNode.removeClass(t.options.loadingClass);
|
|
|
3424 |
} else {
|
|
|
3425 |
parentNode.addClass(t.options.loadingClass);
|
|
|
3426 |
$('<img>').on('load.cbp error.cbp', function() {
|
|
|
3427 |
t.removeLazy(el, dataSrc, parentNode);
|
|
|
3428 |
}).attr('src', dataSrc); // for ie8
|
|
|
3429 |
}
|
|
|
3430 |
});
|
|
|
3431 |
};
|
|
|
3432 |
|
|
|
3433 |
Plugin.prototype.removeLazy = function(el, dataSrc, parentNode) {
|
|
|
3434 |
var t = this;
|
|
|
3435 |
|
|
|
3436 |
el.src = dataSrc;
|
|
|
3437 |
el.removeAttribute('data-cbp-src');
|
|
|
3438 |
t.parent.removeAttrImage(el);
|
|
|
3439 |
|
|
|
3440 |
// trigger public event
|
|
|
3441 |
t.parent.$obj.trigger('lazyLoad.cbp', el);
|
|
|
3442 |
|
|
|
3443 |
if (parentNode) {
|
|
|
3444 |
if (CubePortfolio.private.modernBrowser) {
|
|
|
3445 |
$(el).one(CubePortfolio.private.transitionend, function() {
|
|
|
3446 |
parentNode.removeClass(t.options.loadingClass);
|
|
|
3447 |
});
|
|
|
3448 |
} else {
|
|
|
3449 |
parentNode.removeClass(t.options.loadingClass);
|
|
|
3450 |
}
|
|
|
3451 |
}
|
|
|
3452 |
};
|
|
|
3453 |
|
|
|
3454 |
Plugin.prototype.isElementInScreen = function(el) {
|
|
|
3455 |
var t = this;
|
|
|
3456 |
|
|
|
3457 |
var bound = el.getBoundingClientRect();
|
|
|
3458 |
var bottom = bound.bottom + t.options.threshold;
|
|
|
3459 |
var screenHeight = t.screenHeight + bottom - (bound.top - t.options.threshold);
|
|
|
3460 |
|
|
|
3461 |
return bottom >= 0 && bottom <= screenHeight;
|
|
|
3462 |
};
|
|
|
3463 |
|
|
|
3464 |
Plugin.prototype.destroy = function() {
|
|
|
3465 |
var t = this;
|
|
|
3466 |
|
|
|
3467 |
t.window.off('scroll.cbp');
|
|
|
3468 |
};
|
|
|
3469 |
|
|
|
3470 |
CubePortfolio.plugins.lazyLoad = function(parent) {
|
|
|
3471 |
return new Plugin(parent);
|
|
|
3472 |
};
|
|
|
3473 |
})(jQuery, window, document);
|
|
|
3474 |
|
|
|
3475 |
(function($, window, document, undefined) {
|
|
|
3476 |
'use strict';
|
|
|
3477 |
|
|
|
3478 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
3479 |
|
|
|
3480 |
function Plugin(parent) {
|
|
|
3481 |
var t = this;
|
|
|
3482 |
|
|
|
3483 |
t.parent = parent;
|
|
|
3484 |
|
|
|
3485 |
t.loadMore = $(parent.options.loadMore).find('.cbp-l-loadMore-link');
|
|
|
3486 |
|
|
|
3487 |
// load click or auto action
|
|
|
3488 |
if (t.loadMore.length) {
|
|
|
3489 |
t[parent.options.loadMoreAction]();
|
|
|
3490 |
}
|
|
|
3491 |
|
|
|
3492 |
}
|
|
|
3493 |
|
|
|
3494 |
Plugin.prototype.click = function() {
|
|
|
3495 |
var t = this,
|
|
|
3496 |
numberOfClicks = 0;
|
|
|
3497 |
|
|
|
3498 |
t.loadMore.on('click.cbp', function(e) {
|
|
|
3499 |
var button = $(this);
|
|
|
3500 |
|
|
|
3501 |
e.preventDefault();
|
|
|
3502 |
|
|
|
3503 |
if (t.parent.isAnimating || button.hasClass('cbp-l-loadMore-stop')) {
|
|
|
3504 |
return;
|
|
|
3505 |
}
|
|
|
3506 |
|
|
|
3507 |
// set loading status
|
|
|
3508 |
button.addClass('cbp-l-loadMore-loading');
|
|
|
3509 |
|
|
|
3510 |
numberOfClicks++;
|
|
|
3511 |
|
|
|
3512 |
// perform ajax request
|
|
|
3513 |
$.ajax({
|
|
|
3514 |
url: t.loadMore.attr('href') + '?block=' + numberOfClicks,
|
|
|
3515 |
type: 'GET',
|
|
|
3516 |
dataType: 'HTML'
|
|
|
3517 |
}).done(function(result) {
|
|
|
3518 |
var items = result.replace(/(\r\n|\n|\r)/gm,"");
|
|
|
3519 |
|
|
|
3520 |
var startBlock = items.indexOf('cbp-loadMore-block' + numberOfClicks);
|
|
|
3521 |
|
|
|
3522 |
// stop the loadMore because the block doesn't exist
|
|
|
3523 |
if (startBlock === -1) {
|
|
|
3524 |
button.addClass('cbp-l-loadMore-stop');
|
|
|
3525 |
return;
|
|
|
3526 |
}
|
|
|
3527 |
|
|
|
3528 |
// set start from where I will substring
|
|
|
3529 |
var start = items.indexOf('>', startBlock) + 1;
|
|
|
3530 |
|
|
|
3531 |
var endBlock = items.indexOf('cbp-loadMore-block' + (numberOfClicks + 1));
|
|
|
3532 |
var end;
|
|
|
3533 |
|
|
|
3534 |
// if endBlock doesn't exist
|
|
|
3535 |
if (endBlock === -1) {
|
|
|
3536 |
end = items.lastIndexOf('</');
|
|
|
3537 |
} else {
|
|
|
3538 |
end = items.lastIndexOf('</', endBlock);
|
|
|
3539 |
}
|
|
|
3540 |
|
|
|
3541 |
t.parent.$obj.cubeportfolio('appendItems', items.substring(start, end), function() {
|
|
|
3542 |
// remove class from button
|
|
|
3543 |
button.removeClass('cbp-l-loadMore-loading');
|
|
|
3544 |
|
|
|
3545 |
// check if we have more works
|
|
|
3546 |
if (endBlock === -1) {
|
|
|
3547 |
button.addClass('cbp-l-loadMore-stop');
|
|
|
3548 |
}
|
|
|
3549 |
});
|
|
|
3550 |
|
|
|
3551 |
}).fail(function() {
|
|
|
3552 |
// error
|
|
|
3553 |
});
|
|
|
3554 |
|
|
|
3555 |
});
|
|
|
3556 |
};
|
|
|
3557 |
|
|
|
3558 |
|
|
|
3559 |
Plugin.prototype.auto = function() {
|
|
|
3560 |
var t = this;
|
|
|
3561 |
|
|
|
3562 |
t.parent.$obj.on('initComplete.cbp', function() {
|
|
|
3563 |
Object.create({
|
|
|
3564 |
init: function() {
|
|
|
3565 |
var self = this;
|
|
|
3566 |
|
|
|
3567 |
// the job inactive
|
|
|
3568 |
self.isActive = false;
|
|
|
3569 |
|
|
|
3570 |
self.numberOfClicks = 0;
|
|
|
3571 |
|
|
|
3572 |
// set loading status
|
|
|
3573 |
t.loadMore.addClass('cbp-l-loadMore-loading');
|
|
|
3574 |
|
|
|
3575 |
// cache window selector
|
|
|
3576 |
self.window = $(window);
|
|
|
3577 |
|
|
|
3578 |
// add events for scroll
|
|
|
3579 |
self.addEvents();
|
|
|
3580 |
|
|
|
3581 |
// trigger method on init
|
|
|
3582 |
self.getNewItems();
|
|
|
3583 |
},
|
|
|
3584 |
|
|
|
3585 |
addEvents: function() {
|
|
|
3586 |
var self = this,
|
|
|
3587 |
timeout;
|
|
|
3588 |
|
|
|
3589 |
t.loadMore.on('click.cbp', function(e) {
|
|
|
3590 |
e.preventDefault();
|
|
|
3591 |
});
|
|
|
3592 |
|
|
|
3593 |
self.window.on('scroll.loadMoreObject', function() {
|
|
|
3594 |
|
|
|
3595 |
clearTimeout(timeout);
|
|
|
3596 |
|
|
|
3597 |
timeout = setTimeout(function() {
|
|
|
3598 |
if (!t.parent.isAnimating) {
|
|
|
3599 |
// get new items on scroll
|
|
|
3600 |
self.getNewItems();
|
|
|
3601 |
}
|
|
|
3602 |
}, 80);
|
|
|
3603 |
|
|
|
3604 |
});
|
|
|
3605 |
|
|
|
3606 |
// when the filter is completed
|
|
|
3607 |
t.parent.$obj.on('filterComplete.cbp', function() {
|
|
|
3608 |
self.getNewItems();
|
|
|
3609 |
});
|
|
|
3610 |
},
|
|
|
3611 |
|
|
|
3612 |
getNewItems: function() {
|
|
|
3613 |
var self = this,
|
|
|
3614 |
topLoadMore, topWindow;
|
|
|
3615 |
|
|
|
3616 |
if (self.isActive || t.loadMore.hasClass('cbp-l-loadMore-stop')) {
|
|
|
3617 |
return;
|
|
|
3618 |
}
|
|
|
3619 |
|
|
|
3620 |
// add a treshold
|
|
|
3621 |
topLoadMore = t.loadMore.offset().top - 200;
|
|
|
3622 |
topWindow = self.window.scrollTop() + self.window.height();
|
|
|
3623 |
|
|
|
3624 |
if (topLoadMore > topWindow) {
|
|
|
3625 |
return;
|
|
|
3626 |
}
|
|
|
3627 |
|
|
|
3628 |
// this job is now busy
|
|
|
3629 |
self.isActive = true;
|
|
|
3630 |
|
|
|
3631 |
// increment number of clicks
|
|
|
3632 |
self.numberOfClicks++;
|
|
|
3633 |
|
|
|
3634 |
// perform ajax request
|
|
|
3635 |
$.ajax({
|
|
|
3636 |
url: t.loadMore.attr('href') + '?block=' + self.numberOfClicks,
|
|
|
3637 |
type: 'GET',
|
|
|
3638 |
dataType: 'HTML',
|
|
|
3639 |
cache: true
|
|
|
3640 |
})
|
|
|
3641 |
.done(function(result) {
|
|
|
3642 |
var items = result.replace(/(\r\n|\n|\r)/gm,"");
|
|
|
3643 |
|
|
|
3644 |
var startBlock = items.indexOf('cbp-loadMore-block' + self.numberOfClicks);
|
|
|
3645 |
|
|
|
3646 |
// stop the loadMore because the block doesn't exist
|
|
|
3647 |
if (startBlock === -1) {
|
|
|
3648 |
t.loadMore.addClass('cbp-l-loadMore-stop');
|
|
|
3649 |
return;
|
|
|
3650 |
}
|
|
|
3651 |
|
|
|
3652 |
// set start from where I will substring
|
|
|
3653 |
var start = items.indexOf('>', startBlock) + 1;
|
|
|
3654 |
|
|
|
3655 |
var endBlock = items.indexOf('cbp-loadMore-block' + (self.numberOfClicks + 1));
|
|
|
3656 |
var end;
|
|
|
3657 |
|
|
|
3658 |
// if endBlock doesn't exist
|
|
|
3659 |
if (endBlock === -1) {
|
|
|
3660 |
end = items.lastIndexOf('</');
|
|
|
3661 |
} else {
|
|
|
3662 |
end = items.lastIndexOf('</', endBlock);
|
|
|
3663 |
}
|
|
|
3664 |
|
|
|
3665 |
t.parent.$obj.cubeportfolio('appendItems', items.substring(start, end), function() {
|
|
|
3666 |
if (endBlock === -1) {
|
|
|
3667 |
t.loadMore.addClass('cbp-l-loadMore-stop');
|
|
|
3668 |
|
|
|
3669 |
// remove events
|
|
|
3670 |
self.window.off('scroll.loadMoreObject');
|
|
|
3671 |
t.parent.$obj.off('filterComplete.cbp');
|
|
|
3672 |
} else {
|
|
|
3673 |
// make the job inactive
|
|
|
3674 |
self.isActive = false;
|
|
|
3675 |
|
|
|
3676 |
self.window.trigger('scroll.loadMoreObject');
|
|
|
3677 |
}
|
|
|
3678 |
});
|
|
|
3679 |
})
|
|
|
3680 |
.fail(function() {
|
|
|
3681 |
// make the job inactive
|
|
|
3682 |
self.isActive = false;
|
|
|
3683 |
});
|
|
|
3684 |
}
|
|
|
3685 |
}).init();
|
|
|
3686 |
});
|
|
|
3687 |
|
|
|
3688 |
};
|
|
|
3689 |
|
|
|
3690 |
|
|
|
3691 |
Plugin.prototype.destroy = function() {
|
|
|
3692 |
var t = this;
|
|
|
3693 |
|
|
|
3694 |
t.loadMore.off('.cbp');
|
|
|
3695 |
|
|
|
3696 |
$(window).off('scroll.loadMoreObject');
|
|
|
3697 |
};
|
|
|
3698 |
|
|
|
3699 |
CubePortfolio.plugins.loadMore = function(parent) {
|
|
|
3700 |
if (parent.options.loadMore === '') {
|
|
|
3701 |
return null;
|
|
|
3702 |
}
|
|
|
3703 |
|
|
|
3704 |
return new Plugin(parent);
|
|
|
3705 |
};
|
|
|
3706 |
|
|
|
3707 |
})(jQuery, window, document);
|
|
|
3708 |
|
|
|
3709 |
(function($, window, document, undefined) {
|
|
|
3710 |
'use strict';
|
|
|
3711 |
|
|
|
3712 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
3713 |
|
|
|
3714 |
var popup = {
|
|
|
3715 |
|
|
|
3716 |
/**
|
|
|
3717 |
* init function for popup
|
|
|
3718 |
* @param cubeportfolio = cubeportfolio instance
|
|
|
3719 |
* @param type = 'lightbox' or 'singlePage'
|
|
|
3720 |
*/
|
|
|
3721 |
init: function(cubeportfolio, type) {
|
|
|
3722 |
var t = this,
|
|
|
3723 |
currentBlock;
|
|
|
3724 |
|
|
|
3725 |
// remember cubeportfolio instance
|
|
|
3726 |
t.cubeportfolio = cubeportfolio;
|
|
|
3727 |
|
|
|
3728 |
// remember if this instance is for lightbox or for singlePage
|
|
|
3729 |
t.type = type;
|
|
|
3730 |
|
|
|
3731 |
// remember if the popup is open or not
|
|
|
3732 |
t.isOpen = false;
|
|
|
3733 |
|
|
|
3734 |
t.options = t.cubeportfolio.options;
|
|
|
3735 |
|
|
|
3736 |
if (type === 'lightbox') {
|
|
|
3737 |
t.cubeportfolio.registerEvent('resizeWindow', function() {
|
|
|
3738 |
t.resizeImage();
|
|
|
3739 |
});
|
|
|
3740 |
}
|
|
|
3741 |
|
|
|
3742 |
if (type === 'singlePageInline') {
|
|
|
3743 |
t.height = 0;
|
|
|
3744 |
|
|
|
3745 |
// create markup, css and add events for SinglePageInline
|
|
|
3746 |
t.createMarkupSinglePageInline();
|
|
|
3747 |
|
|
|
3748 |
t.cubeportfolio.registerEvent('resizeGrid', function() {
|
|
|
3749 |
if (t.isOpen) {
|
|
|
3750 |
// @todo must add support for this features in the future
|
|
|
3751 |
t.close(); // workaround
|
|
|
3752 |
}
|
|
|
3753 |
});
|
|
|
3754 |
|
|
|
3755 |
if (t.options.singlePageInlineDeeplinking) {
|
|
|
3756 |
t.url = location.href;
|
|
|
3757 |
|
|
|
3758 |
if (t.url.slice(-1) === '#') {
|
|
|
3759 |
t.url = t.url.slice(0, -1);
|
|
|
3760 |
}
|
|
|
3761 |
|
|
|
3762 |
var links = t.url.split('#cbpi=');
|
|
|
3763 |
var url = links.shift(); // remove first item
|
|
|
3764 |
|
|
|
3765 |
$.each(links, function(index, link) {
|
|
|
3766 |
t.cubeportfolio.blocksOn.each(function(index1, el) {
|
|
|
3767 |
var singlePageInline = $(el).find(t.options.singlePageInlineDelegate + '[href="' + link + '"]');
|
|
|
3768 |
|
|
|
3769 |
if (singlePageInline.length) {
|
|
|
3770 |
currentBlock = singlePageInline;
|
|
|
3771 |
return false;
|
|
|
3772 |
}
|
|
|
3773 |
});
|
|
|
3774 |
|
|
|
3775 |
if (currentBlock) {
|
|
|
3776 |
return false;
|
|
|
3777 |
}
|
|
|
3778 |
});
|
|
|
3779 |
|
|
|
3780 |
if (currentBlock) {
|
|
|
3781 |
t.cubeportfolio.registerEvent('initFinish', function() {
|
|
|
3782 |
t.openSinglePageInline(t.cubeportfolio.blocksOn, currentBlock[0]);
|
|
|
3783 |
}, true);
|
|
|
3784 |
}
|
|
|
3785 |
}
|
|
|
3786 |
|
|
|
3787 |
return;
|
|
|
3788 |
}
|
|
|
3789 |
|
|
|
3790 |
// create markup, css and add events for lightbox and singlePage
|
|
|
3791 |
t.createMarkup();
|
|
|
3792 |
|
|
|
3793 |
if (type === 'singlePage') {
|
|
|
3794 |
t.cubeportfolio.registerEvent('resizeWindow', function() {
|
|
|
3795 |
if (t.options.singlePageStickyNavigation) {
|
|
|
3796 |
|
|
|
3797 |
var width = t.wrap[0].clientWidth;
|
|
|
3798 |
|
|
|
3799 |
if (width > 0) {
|
|
|
3800 |
t.navigationWrap.width(width);
|
|
|
3801 |
|
|
|
3802 |
// set navigation width='window width' to center the divs
|
|
|
3803 |
t.navigation.width(width);
|
|
|
3804 |
}
|
|
|
3805 |
|
|
|
3806 |
}
|
|
|
3807 |
});
|
|
|
3808 |
|
|
|
3809 |
if (t.options.singlePageDeeplinking) {
|
|
|
3810 |
t.url = location.href;
|
|
|
3811 |
|
|
|
3812 |
if (t.url.slice(-1) === '#') {
|
|
|
3813 |
t.url = t.url.slice(0, -1);
|
|
|
3814 |
}
|
|
|
3815 |
|
|
|
3816 |
var links = t.url.split('#cbp=');
|
|
|
3817 |
var url = links.shift(); // remove first item
|
|
|
3818 |
|
|
|
3819 |
$.each(links, function(index, link) {
|
|
|
3820 |
t.cubeportfolio.blocksOn.each(function(index1, el) {
|
|
|
3821 |
var singlePage = $(el).find(t.options.singlePageDelegate + '[href="' + link + '"]');
|
|
|
3822 |
|
|
|
3823 |
if (singlePage.length) {
|
|
|
3824 |
currentBlock = singlePage;
|
|
|
3825 |
return false;
|
|
|
3826 |
}
|
|
|
3827 |
});
|
|
|
3828 |
|
|
|
3829 |
if (currentBlock) {
|
|
|
3830 |
return false;
|
|
|
3831 |
}
|
|
|
3832 |
});
|
|
|
3833 |
|
|
|
3834 |
if (currentBlock) {
|
|
|
3835 |
t.url = url;
|
|
|
3836 |
|
|
|
3837 |
var self = currentBlock,
|
|
|
3838 |
gallery = self.attr('data-cbp-singlePage'),
|
|
|
3839 |
blocks = [];
|
|
|
3840 |
|
|
|
3841 |
if (gallery) {
|
|
|
3842 |
blocks = self.closest($('.cbp-item')).find('[data-cbp-singlePage="' + gallery + '"]');
|
|
|
3843 |
} else {
|
|
|
3844 |
t.cubeportfolio.blocksOn.each(function(index, el) {
|
|
|
3845 |
var item = $(el);
|
|
|
3846 |
|
|
|
3847 |
if (item.not('.cbp-item-off')) {
|
|
|
3848 |
item.find(t.options.singlePageDelegate).each(function(index2, el2) {
|
|
|
3849 |
if (!$(el2).attr('data-cbp-singlePage')) {
|
|
|
3850 |
blocks.push(el2);
|
|
|
3851 |
}
|
|
|
3852 |
});
|
|
|
3853 |
}
|
|
|
3854 |
});
|
|
|
3855 |
}
|
|
|
3856 |
|
|
|
3857 |
t.openSinglePage(blocks, currentBlock[0]);
|
|
|
3858 |
} else if (links.length) { // @todo - hack to load items from loadMore
|
|
|
3859 |
var fakeLink = document.createElement('a');
|
|
|
3860 |
fakeLink.setAttribute('href', links[0]);
|
|
|
3861 |
t.openSinglePage([fakeLink], fakeLink);
|
|
|
3862 |
}
|
|
|
3863 |
}
|
|
|
3864 |
}
|
|
|
3865 |
},
|
|
|
3866 |
|
|
|
3867 |
/**
|
|
|
3868 |
* Create markup, css and add events
|
|
|
3869 |
*/
|
|
|
3870 |
createMarkup: function() {
|
|
|
3871 |
var t = this,
|
|
|
3872 |
animationCls = '';
|
|
|
3873 |
|
|
|
3874 |
if (t.type === 'singlePage') {
|
|
|
3875 |
if (t.options.singlePageAnimation !== 'left') {
|
|
|
3876 |
animationCls = ' cbp-popup-singlePage-' + t.options.singlePageAnimation;
|
|
|
3877 |
}
|
|
|
3878 |
}
|
|
|
3879 |
|
|
|
3880 |
// wrap element
|
|
|
3881 |
t.wrap = $('<div/>', {
|
|
|
3882 |
'class': 'cbp-popup-wrap cbp-popup-' + t.type + animationCls,
|
|
|
3883 |
'data-action': (t.type === 'lightbox') ? 'close' : ''
|
|
|
3884 |
}).on('click.cbp', function(e) {
|
|
|
3885 |
if (t.stopEvents) {
|
|
|
3886 |
return;
|
|
|
3887 |
}
|
|
|
3888 |
|
|
|
3889 |
var action = $(e.target).attr('data-action');
|
|
|
3890 |
|
|
|
3891 |
if (t[action]) {
|
|
|
3892 |
t[action]();
|
|
|
3893 |
e.preventDefault();
|
|
|
3894 |
}
|
|
|
3895 |
});
|
|
|
3896 |
|
|
|
3897 |
// content element
|
|
|
3898 |
t.content = $('<div/>', {
|
|
|
3899 |
'class': 'cbp-popup-content'
|
|
|
3900 |
}).appendTo(t.wrap);
|
|
|
3901 |
|
|
|
3902 |
// append loading div
|
|
|
3903 |
$('<div/>', {
|
|
|
3904 |
'class': 'cbp-popup-loadingBox'
|
|
|
3905 |
}).appendTo(t.wrap);
|
|
|
3906 |
|
|
|
3907 |
// add background only for ie8
|
|
|
3908 |
if (CubePortfolio.private.browser === 'ie8') {
|
|
|
3909 |
t.bg = $('<div/>', {
|
|
|
3910 |
'class': 'cbp-popup-ie8bg',
|
|
|
3911 |
'data-action': (t.type === 'lightbox') ? 'close' : ''
|
|
|
3912 |
}).appendTo(t.wrap);
|
|
|
3913 |
}
|
|
|
3914 |
|
|
|
3915 |
// create navigation wrap
|
|
|
3916 |
t.navigationWrap = $('<div/>', {
|
|
|
3917 |
'class': 'cbp-popup-navigation-wrap'
|
|
|
3918 |
}).appendTo(t.wrap);
|
|
|
3919 |
|
|
|
3920 |
// create navigation block
|
|
|
3921 |
t.navigation = $('<div/>', {
|
|
|
3922 |
'class': 'cbp-popup-navigation'
|
|
|
3923 |
}).appendTo(t.navigationWrap);
|
|
|
3924 |
|
|
|
3925 |
// close
|
|
|
3926 |
t.closeButton = $('<div/>', {
|
|
|
3927 |
'class': 'cbp-popup-close',
|
|
|
3928 |
'title': 'Close (Esc arrow key)',
|
|
|
3929 |
'data-action': 'close'
|
|
|
3930 |
}).appendTo(t.navigation);
|
|
|
3931 |
|
|
|
3932 |
// next
|
|
|
3933 |
t.nextButton = $('<div/>', {
|
|
|
3934 |
'class': 'cbp-popup-next',
|
|
|
3935 |
'title': 'Next (Right arrow key)',
|
|
|
3936 |
'data-action': 'next'
|
|
|
3937 |
}).appendTo(t.navigation);
|
|
|
3938 |
|
|
|
3939 |
|
|
|
3940 |
// prev
|
|
|
3941 |
t.prevButton = $('<div/>', {
|
|
|
3942 |
'class': 'cbp-popup-prev',
|
|
|
3943 |
'title': 'Previous (Left arrow key)',
|
|
|
3944 |
'data-action': 'prev'
|
|
|
3945 |
}).appendTo(t.navigation);
|
|
|
3946 |
|
|
|
3947 |
|
|
|
3948 |
if (t.type === 'singlePage') {
|
|
|
3949 |
if (t.options.singlePageCounter) {
|
|
|
3950 |
// counter for singlePage
|
|
|
3951 |
t.counter = $(t.options.singlePageCounter).appendTo(t.navigation);
|
|
|
3952 |
t.counter.text('');
|
|
|
3953 |
}
|
|
|
3954 |
|
|
|
3955 |
t.content.on('click.cbp', t.options.singlePageDelegate, function(e) {
|
|
|
3956 |
e.preventDefault();
|
|
|
3957 |
|
|
|
3958 |
var i,
|
|
|
3959 |
len = t.dataArray.length,
|
|
|
3960 |
href = this.getAttribute('href');
|
|
|
3961 |
|
|
|
3962 |
for (i = 0; i < len; i++) {
|
|
|
3963 |
if (t.dataArray[i].url === href) {
|
|
|
3964 |
break;
|
|
|
3965 |
}
|
|
|
3966 |
}
|
|
|
3967 |
|
|
|
3968 |
t.singlePageJumpTo(i - t.current);
|
|
|
3969 |
});
|
|
|
3970 |
|
|
|
3971 |
// if there are some events than overrides the default scroll behaviour don't go to them
|
|
|
3972 |
t.wrap.on('mousewheel.cbp' + ' DOMMouseScroll.cbp', function(e) {
|
|
|
3973 |
e.stopImmediatePropagation();
|
|
|
3974 |
});
|
|
|
3975 |
}
|
|
|
3976 |
|
|
|
3977 |
$(document).on('keydown.cbp', function(e) {
|
|
|
3978 |
// if is not open => return
|
|
|
3979 |
if (!t.isOpen) {
|
|
|
3980 |
return;
|
|
|
3981 |
}
|
|
|
3982 |
|
|
|
3983 |
// if all events are stopped => return
|
|
|
3984 |
if (t.stopEvents) {
|
|
|
3985 |
return;
|
|
|
3986 |
}
|
|
|
3987 |
|
|
|
3988 |
if (e.keyCode === 37) { // prev key
|
|
|
3989 |
t.prev();
|
|
|
3990 |
} else if (e.keyCode === 39) { // next key
|
|
|
3991 |
t.next();
|
|
|
3992 |
} else if (e.keyCode === 27) { //esc key
|
|
|
3993 |
t.close();
|
|
|
3994 |
}
|
|
|
3995 |
});
|
|
|
3996 |
},
|
|
|
3997 |
|
|
|
3998 |
createMarkupSinglePageInline: function() {
|
|
|
3999 |
var t = this;
|
|
|
4000 |
|
|
|
4001 |
// wrap element
|
|
|
4002 |
t.wrap = $('<div/>', {
|
|
|
4003 |
'class': 'cbp-popup-singlePageInline'
|
|
|
4004 |
}).on('click.cbp', function(e) {
|
|
|
4005 |
if (t.stopEvents) {
|
|
|
4006 |
return;
|
|
|
4007 |
}
|
|
|
4008 |
|
|
|
4009 |
var action = $(e.target).attr('data-action');
|
|
|
4010 |
|
|
|
4011 |
if (action && t[action]) {
|
|
|
4012 |
t[action]();
|
|
|
4013 |
e.preventDefault();
|
|
|
4014 |
}
|
|
|
4015 |
});
|
|
|
4016 |
|
|
|
4017 |
// content element
|
|
|
4018 |
t.content = $('<div/>', {
|
|
|
4019 |
'class': 'cbp-popup-content'
|
|
|
4020 |
}).appendTo(t.wrap);
|
|
|
4021 |
|
|
|
4022 |
// append loading div
|
|
|
4023 |
// $('<div/>', {
|
|
|
4024 |
// 'class': 'cbp-popup-loadingBox'
|
|
|
4025 |
// }).appendTo(t.wrap);
|
|
|
4026 |
|
|
|
4027 |
// create navigation block
|
|
|
4028 |
t.navigation = $('<div/>', {
|
|
|
4029 |
'class': 'cbp-popup-navigation'
|
|
|
4030 |
}).appendTo(t.wrap);
|
|
|
4031 |
|
|
|
4032 |
// close
|
|
|
4033 |
t.closeButton = $('<div/>', {
|
|
|
4034 |
'class': 'cbp-popup-close',
|
|
|
4035 |
'title': 'Close (Esc arrow key)',
|
|
|
4036 |
'data-action': 'close'
|
|
|
4037 |
}).appendTo(t.navigation);
|
|
|
4038 |
|
|
|
4039 |
},
|
|
|
4040 |
|
|
|
4041 |
destroy: function() {
|
|
|
4042 |
var t = this,
|
|
|
4043 |
body = $('body');
|
|
|
4044 |
|
|
|
4045 |
// remove off key down
|
|
|
4046 |
$(document).off('keydown.cbp');
|
|
|
4047 |
|
|
|
4048 |
// external lightbox and singlePageInline
|
|
|
4049 |
body.off('click.cbp', t.options.lightboxDelegate);
|
|
|
4050 |
body.off('click.cbp', t.options.singlePageDelegate);
|
|
|
4051 |
|
|
|
4052 |
t.content.off('click.cbp', t.options.singlePageDelegate);
|
|
|
4053 |
|
|
|
4054 |
t.cubeportfolio.$obj.off('click.cbp', t.options.singlePageInlineDelegate);
|
|
|
4055 |
t.cubeportfolio.$obj.off('click.cbp', t.options.lightboxDelegate);
|
|
|
4056 |
t.cubeportfolio.$obj.off('click.cbp', t.options.singlePageDelegate);
|
|
|
4057 |
|
|
|
4058 |
t.cubeportfolio.$obj.removeClass('cbp-popup-isOpening');
|
|
|
4059 |
|
|
|
4060 |
t.cubeportfolio.$obj.find('.cbp-item').removeClass('cbp-singlePageInline-active');
|
|
|
4061 |
|
|
|
4062 |
t.wrap.remove();
|
|
|
4063 |
},
|
|
|
4064 |
|
|
|
4065 |
openLightbox: function(blocks, currentBlock) {
|
|
|
4066 |
var t = this,
|
|
|
4067 |
i = 0,
|
|
|
4068 |
currentBlockHref, tempHref = [],
|
|
|
4069 |
element;
|
|
|
4070 |
|
|
|
4071 |
if (t.isOpen) {
|
|
|
4072 |
return;
|
|
|
4073 |
}
|
|
|
4074 |
|
|
|
4075 |
// remember that the lightbox is open now
|
|
|
4076 |
t.isOpen = true;
|
|
|
4077 |
|
|
|
4078 |
// remember to stop all events after the lightbox has been shown
|
|
|
4079 |
t.stopEvents = false;
|
|
|
4080 |
|
|
|
4081 |
// array with elements
|
|
|
4082 |
t.dataArray = [];
|
|
|
4083 |
|
|
|
4084 |
// reset current
|
|
|
4085 |
t.current = null;
|
|
|
4086 |
|
|
|
4087 |
currentBlockHref = currentBlock.getAttribute('href');
|
|
|
4088 |
if (currentBlockHref === null) {
|
|
|
4089 |
throw new Error('HEI! Your clicked element doesn\'t have a href attribute.');
|
|
|
4090 |
}
|
|
|
4091 |
|
|
|
4092 |
$.each(blocks, function(index, item) {
|
|
|
4093 |
var href = item.getAttribute('href'),
|
|
|
4094 |
src = href, // default if element is image
|
|
|
4095 |
type = 'isImage', // default if element is image
|
|
|
4096 |
videoLink;
|
|
|
4097 |
|
|
|
4098 |
if ($.inArray(href, tempHref) === -1) {
|
|
|
4099 |
if (currentBlockHref === href) {
|
|
|
4100 |
t.current = i;
|
|
|
4101 |
} else if (!t.options.lightboxGallery) {
|
|
|
4102 |
return;
|
|
|
4103 |
}
|
|
|
4104 |
|
|
|
4105 |
if (/youtube/i.test(href)) {
|
|
|
4106 |
videoLink = href.substring(href.lastIndexOf('v=') + 2);
|
|
|
4107 |
|
|
|
4108 |
if (!(/autoplay=/i.test(videoLink))) {
|
|
|
4109 |
videoLink += '&autoplay=1';
|
|
|
4110 |
}
|
|
|
4111 |
|
|
|
4112 |
videoLink = videoLink.replace(/\?|&/, '?');
|
|
|
4113 |
|
|
|
4114 |
// create new href
|
|
|
4115 |
src = '//www.youtube.com/embed/' + videoLink;
|
|
|
4116 |
|
|
|
4117 |
type = 'isYoutube';
|
|
|
4118 |
} else if (/vimeo\.com/i.test(href)) {
|
|
|
4119 |
videoLink = href.substring(href.lastIndexOf('/') + 1);
|
|
|
4120 |
|
|
|
4121 |
if (!(/autoplay=/i.test(videoLink))) {
|
|
|
4122 |
videoLink += '&autoplay=1';
|
|
|
4123 |
}
|
|
|
4124 |
|
|
|
4125 |
videoLink = videoLink.replace(/\?|&/, '?');
|
|
|
4126 |
|
|
|
4127 |
// create new href
|
|
|
4128 |
src = '//player.vimeo.com/video/' + videoLink;
|
|
|
4129 |
|
|
|
4130 |
type = 'isVimeo';
|
|
|
4131 |
} else if (/www\.ted\.com/i.test(href)) {
|
|
|
4132 |
// create new href
|
|
|
4133 |
src = 'http://embed.ted.com/talks/' + href.substring(href.lastIndexOf('/') + 1) + '.html';
|
|
|
4134 |
|
|
|
4135 |
type = 'isTed';
|
|
|
4136 |
} else if (/soundcloud\.com/i.test(href)) {
|
|
|
4137 |
// create new href
|
|
|
4138 |
src = href;
|
|
|
4139 |
|
|
|
4140 |
type = 'isSoundCloud';
|
|
|
4141 |
} else if (/(\.mp4)|(\.ogg)|(\.ogv)|(\.webm)/i.test(href)) {
|
|
|
4142 |
if (href.indexOf('|') !== -1) {
|
|
|
4143 |
// create new href
|
|
|
4144 |
src = href.split('|');
|
|
|
4145 |
} else {
|
|
|
4146 |
// create new href
|
|
|
4147 |
src = href.split('%7C');
|
|
|
4148 |
}
|
|
|
4149 |
|
|
|
4150 |
type = 'isSelfHostedVideo';
|
|
|
4151 |
} else if (/\.mp3$/i.test(href)) {
|
|
|
4152 |
src = href;
|
|
|
4153 |
type = 'isSelfHostedAudio';
|
|
|
4154 |
}
|
|
|
4155 |
|
|
|
4156 |
t.dataArray.push({
|
|
|
4157 |
src: src,
|
|
|
4158 |
title: item.getAttribute(t.options.lightboxTitleSrc),
|
|
|
4159 |
type: type
|
|
|
4160 |
});
|
|
|
4161 |
|
|
|
4162 |
i++;
|
|
|
4163 |
}
|
|
|
4164 |
|
|
|
4165 |
tempHref.push(href);
|
|
|
4166 |
});
|
|
|
4167 |
|
|
|
4168 |
// total numbers of elements
|
|
|
4169 |
t.counterTotal = t.dataArray.length;
|
|
|
4170 |
|
|
|
4171 |
if (t.counterTotal === 1) {
|
|
|
4172 |
t.nextButton.hide();
|
|
|
4173 |
t.prevButton.hide();
|
|
|
4174 |
t.dataActionImg = '';
|
|
|
4175 |
} else {
|
|
|
4176 |
t.nextButton.show();
|
|
|
4177 |
t.prevButton.show();
|
|
|
4178 |
t.dataActionImg = 'data-action="next"';
|
|
|
4179 |
}
|
|
|
4180 |
|
|
|
4181 |
// append to body
|
|
|
4182 |
t.wrap.appendTo(document.body);
|
|
|
4183 |
|
|
|
4184 |
t.scrollTop = $(window).scrollTop();
|
|
|
4185 |
|
|
|
4186 |
t.originalStyle = $('html').attr('style');
|
|
|
4187 |
|
|
|
4188 |
$('html').css({
|
|
|
4189 |
overflow: 'hidden',
|
|
|
4190 |
marginRight: window.innerWidth - $(document).width()
|
|
|
4191 |
});
|
|
|
4192 |
|
|
|
4193 |
t.wrap.addClass('cbp-popup-transitionend');
|
|
|
4194 |
|
|
|
4195 |
// show the wrapper (lightbox box)
|
|
|
4196 |
t.wrap.show();
|
|
|
4197 |
|
|
|
4198 |
// get the current element
|
|
|
4199 |
element = t.dataArray[t.current];
|
|
|
4200 |
|
|
|
4201 |
// call function if current element is image or video (iframe)
|
|
|
4202 |
t[element.type](element);
|
|
|
4203 |
},
|
|
|
4204 |
|
|
|
4205 |
openSinglePage: function(blocks, currentBlock) {
|
|
|
4206 |
var t = this,
|
|
|
4207 |
i = 0,
|
|
|
4208 |
currentBlockHref, tempHref = [];
|
|
|
4209 |
|
|
|
4210 |
if (t.isOpen) {
|
|
|
4211 |
return;
|
|
|
4212 |
}
|
|
|
4213 |
|
|
|
4214 |
// check singlePageInline and close it
|
|
|
4215 |
if (t.cubeportfolio.singlePageInline && t.cubeportfolio.singlePageInline.isOpen) {
|
|
|
4216 |
t.cubeportfolio.singlePageInline.close();
|
|
|
4217 |
}
|
|
|
4218 |
|
|
|
4219 |
// remember that the lightbox is open now
|
|
|
4220 |
t.isOpen = true;
|
|
|
4221 |
|
|
|
4222 |
// remember to stop all events after the popup has been showing
|
|
|
4223 |
t.stopEvents = false;
|
|
|
4224 |
|
|
|
4225 |
// array with elements
|
|
|
4226 |
t.dataArray = [];
|
|
|
4227 |
|
|
|
4228 |
// reset current
|
|
|
4229 |
t.current = null;
|
|
|
4230 |
|
|
|
4231 |
currentBlockHref = currentBlock.getAttribute('href');
|
|
|
4232 |
if (currentBlockHref === null) {
|
|
|
4233 |
throw new Error('HEI! Your clicked element doesn\'t have a href attribute.');
|
|
|
4234 |
}
|
|
|
4235 |
|
|
|
4236 |
$.each(blocks, function(index, item) {
|
|
|
4237 |
var href = item.getAttribute('href');
|
|
|
4238 |
|
|
|
4239 |
if ($.inArray(href, tempHref) === -1) {
|
|
|
4240 |
if (currentBlockHref === href) {
|
|
|
4241 |
t.current = i;
|
|
|
4242 |
}
|
|
|
4243 |
|
|
|
4244 |
t.dataArray.push({
|
|
|
4245 |
url: href,
|
|
|
4246 |
element: item
|
|
|
4247 |
});
|
|
|
4248 |
|
|
|
4249 |
i++;
|
|
|
4250 |
}
|
|
|
4251 |
|
|
|
4252 |
tempHref.push(href);
|
|
|
4253 |
});
|
|
|
4254 |
|
|
|
4255 |
// total numbers of elements
|
|
|
4256 |
t.counterTotal = t.dataArray.length;
|
|
|
4257 |
|
|
|
4258 |
if (t.counterTotal === 1) {
|
|
|
4259 |
t.nextButton.hide();
|
|
|
4260 |
t.prevButton.hide();
|
|
|
4261 |
} else {
|
|
|
4262 |
t.nextButton.show();
|
|
|
4263 |
t.prevButton.show();
|
|
|
4264 |
}
|
|
|
4265 |
|
|
|
4266 |
// append to body
|
|
|
4267 |
t.wrap.appendTo(document.body);
|
|
|
4268 |
|
|
|
4269 |
t.scrollTop = $(window).scrollTop();
|
|
|
4270 |
|
|
|
4271 |
// go to top of the page (reset scroll)
|
|
|
4272 |
t.wrap.scrollTop(0);
|
|
|
4273 |
|
|
|
4274 |
// show the wrapper
|
|
|
4275 |
t.wrap.show();
|
|
|
4276 |
|
|
|
4277 |
// finish the open animation
|
|
|
4278 |
t.finishOpen = 2;
|
|
|
4279 |
|
|
|
4280 |
// if transitionend is not fulfilled
|
|
|
4281 |
t.navigationMobile = $();
|
|
|
4282 |
t.wrap.one(CubePortfolio.private.transitionend, function() {
|
|
|
4283 |
$('html').css({
|
|
|
4284 |
overflow: 'hidden',
|
|
|
4285 |
marginRight: window.innerWidth - $(document).width()
|
|
|
4286 |
});
|
|
|
4287 |
|
|
|
4288 |
t.wrap.addClass('cbp-popup-transitionend');
|
|
|
4289 |
|
|
|
4290 |
// make the navigation sticky
|
|
|
4291 |
if (t.options.singlePageStickyNavigation) {
|
|
|
4292 |
|
|
|
4293 |
t.wrap.addClass('cbp-popup-singlePage-sticky');
|
|
|
4294 |
|
|
|
4295 |
t.navigationWrap.width(t.wrap[0].clientWidth);
|
|
|
4296 |
|
|
|
4297 |
if (CubePortfolio.private.browser === 'android' || CubePortfolio.private.browser === 'ios') {
|
|
|
4298 |
// wrap element
|
|
|
4299 |
t.navigationMobile = $('<div/>', {
|
|
|
4300 |
'class': 'cbp-popup-singlePage cbp-popup-singlePage-sticky',
|
|
|
4301 |
'id': t.wrap.attr('id')
|
|
|
4302 |
}).on('click.cbp', function(e) {
|
|
|
4303 |
if (t.stopEvents) {
|
|
|
4304 |
return;
|
|
|
4305 |
}
|
|
|
4306 |
|
|
|
4307 |
var action = $(e.target).attr('data-action');
|
|
|
4308 |
|
|
|
4309 |
if (t[action]) {
|
|
|
4310 |
t[action]();
|
|
|
4311 |
e.preventDefault();
|
|
|
4312 |
}
|
|
|
4313 |
});
|
|
|
4314 |
|
|
|
4315 |
t.navigationMobile.appendTo(document.body).append(t.navigationWrap);
|
|
|
4316 |
}
|
|
|
4317 |
}
|
|
|
4318 |
|
|
|
4319 |
t.finishOpen--;
|
|
|
4320 |
|
|
|
4321 |
if (t.finishOpen <= 0) {
|
|
|
4322 |
t.updateSinglePageIsOpen.call(t);
|
|
|
4323 |
}
|
|
|
4324 |
});
|
|
|
4325 |
|
|
|
4326 |
if (CubePortfolio.private.browser === 'ie8' || CubePortfolio.private.browser === 'ie9') {
|
|
|
4327 |
// make the navigation sticky
|
|
|
4328 |
if (t.options.singlePageStickyNavigation) {
|
|
|
4329 |
t.navigationWrap.width(t.wrap[0].clientWidth);
|
|
|
4330 |
|
|
|
4331 |
setTimeout(function() {
|
|
|
4332 |
t.wrap.addClass('cbp-popup-singlePage-sticky');
|
|
|
4333 |
}, 1000);
|
|
|
4334 |
}
|
|
|
4335 |
|
|
|
4336 |
t.finishOpen--;
|
|
|
4337 |
}
|
|
|
4338 |
|
|
|
4339 |
t.wrap.addClass('cbp-popup-loading');
|
|
|
4340 |
|
|
|
4341 |
// force reflow and then add class
|
|
|
4342 |
t.wrap.offset();
|
|
|
4343 |
t.wrap.addClass('cbp-popup-singlePage-open');
|
|
|
4344 |
|
|
|
4345 |
// change link
|
|
|
4346 |
if (t.options.singlePageDeeplinking) {
|
|
|
4347 |
// ignore old #cbp from href
|
|
|
4348 |
t.url = t.url.split('#cbp=')[0];
|
|
|
4349 |
location.href = t.url + '#cbp=' + t.dataArray[t.current].url;
|
|
|
4350 |
}
|
|
|
4351 |
|
|
|
4352 |
// run callback function
|
|
|
4353 |
if ($.isFunction(t.options.singlePageCallback)) {
|
|
|
4354 |
t.options.singlePageCallback.call(t, t.dataArray[t.current].url, t.dataArray[t.current].element);
|
|
|
4355 |
}
|
|
|
4356 |
},
|
|
|
4357 |
|
|
|
4358 |
openSinglePageInline: function(blocks, currentBlock, fromOpen) {
|
|
|
4359 |
var t = this,
|
|
|
4360 |
start = 0,
|
|
|
4361 |
currentBlockHref,
|
|
|
4362 |
tempCurrent,
|
|
|
4363 |
cbpitem,
|
|
|
4364 |
parentElement;
|
|
|
4365 |
|
|
|
4366 |
fromOpen = fromOpen || false;
|
|
|
4367 |
|
|
|
4368 |
t.fromOpen = fromOpen;
|
|
|
4369 |
|
|
|
4370 |
t.storeBlocks = blocks;
|
|
|
4371 |
t.storeCurrentBlock = currentBlock;
|
|
|
4372 |
|
|
|
4373 |
// check singlePageInline and close it
|
|
|
4374 |
if (t.isOpen) {
|
|
|
4375 |
tempCurrent = $(currentBlock).closest('.cbp-item').index();
|
|
|
4376 |
|
|
|
4377 |
if ((t.dataArray[t.current].url !== currentBlock.getAttribute('href')) || (t.current !== tempCurrent)) {
|
|
|
4378 |
t.cubeportfolio.singlePageInline.close('open', {
|
|
|
4379 |
blocks: blocks,
|
|
|
4380 |
currentBlock: currentBlock,
|
|
|
4381 |
fromOpen: true
|
|
|
4382 |
});
|
|
|
4383 |
} else {
|
|
|
4384 |
t.close();
|
|
|
4385 |
}
|
|
|
4386 |
|
|
|
4387 |
return;
|
|
|
4388 |
}
|
|
|
4389 |
|
|
|
4390 |
// remember that the lightbox is open now
|
|
|
4391 |
t.isOpen = true;
|
|
|
4392 |
|
|
|
4393 |
// remember to stop all events after the popup has been showing
|
|
|
4394 |
t.stopEvents = false;
|
|
|
4395 |
|
|
|
4396 |
// array with elements
|
|
|
4397 |
t.dataArray = [];
|
|
|
4398 |
|
|
|
4399 |
// reset current
|
|
|
4400 |
t.current = null;
|
|
|
4401 |
|
|
|
4402 |
currentBlockHref = currentBlock.getAttribute('href');
|
|
|
4403 |
if (currentBlockHref === null) {
|
|
|
4404 |
throw new Error('HEI! Your clicked element doesn\'t have a href attribute.');
|
|
|
4405 |
}
|
|
|
4406 |
|
|
|
4407 |
cbpitem = $(currentBlock).closest('.cbp-item')[0];
|
|
|
4408 |
|
|
|
4409 |
blocks.each(function(index, el) {
|
|
|
4410 |
if (cbpitem === el) {
|
|
|
4411 |
t.current = index;
|
|
|
4412 |
}
|
|
|
4413 |
});
|
|
|
4414 |
|
|
|
4415 |
t.dataArray[t.current] = {
|
|
|
4416 |
url: currentBlockHref,
|
|
|
4417 |
element: currentBlock
|
|
|
4418 |
};
|
|
|
4419 |
|
|
|
4420 |
parentElement = $(t.dataArray[t.current].element).parents('.cbp-item').addClass('cbp-singlePageInline-active');
|
|
|
4421 |
|
|
|
4422 |
// total numbers of elements
|
|
|
4423 |
t.counterTotal = blocks.length;
|
|
|
4424 |
|
|
|
4425 |
t.wrap.insertBefore(t.cubeportfolio.wrapper);
|
|
|
4426 |
|
|
|
4427 |
if (t.options.singlePageInlinePosition === 'top') {
|
|
|
4428 |
t.blocksToMove = blocks;
|
|
|
4429 |
t.top = 0;
|
|
|
4430 |
} else if (t.options.singlePageInlinePosition === 'bottom') {
|
|
|
4431 |
t.blocksToMove = $();
|
|
|
4432 |
t.top = t.cubeportfolio.height;
|
|
|
4433 |
} else if (t.options.singlePageInlinePosition === 'above') {
|
|
|
4434 |
t.top = $(blocks[t.current]).data('cbp').top;
|
|
|
4435 |
t.blocksToMove = $();
|
|
|
4436 |
|
|
|
4437 |
blocks.each(function(index, el) {
|
|
|
4438 |
var data = $(el).data('cbp');
|
|
|
4439 |
|
|
|
4440 |
if ((data.top + data.height) >= t.top) {
|
|
|
4441 |
t.blocksToMove = t.blocksToMove.add(el);
|
|
|
4442 |
}
|
|
|
4443 |
});
|
|
|
4444 |
|
|
|
4445 |
t.top = Math.max(t.top - t.options.gapHorizontal, 0);
|
|
|
4446 |
} else { // below
|
|
|
4447 |
var dataBlock = $(blocks[t.current]).data('cbp');
|
|
|
4448 |
|
|
|
4449 |
t.top = dataBlock.top + dataBlock.height;
|
|
|
4450 |
t.blocksToMove = $();
|
|
|
4451 |
|
|
|
4452 |
blocks.each(function(index, el) {
|
|
|
4453 |
var data = $(el).data('cbp');
|
|
|
4454 |
|
|
|
4455 |
if ((data.top + data.height) > t.top) {
|
|
|
4456 |
t.blocksToMove = t.blocksToMove.add(el);
|
|
|
4457 |
}
|
|
|
4458 |
});
|
|
|
4459 |
}
|
|
|
4460 |
|
|
|
4461 |
t.wrap[0].style.height = t.wrap.outerHeight(true) + 'px';
|
|
|
4462 |
|
|
|
4463 |
// debouncer for inline content
|
|
|
4464 |
t.deferredInline = $.Deferred();
|
|
|
4465 |
|
|
|
4466 |
if (t.options.singlePageInlineInFocus) {
|
|
|
4467 |
t.scrollTop = $(window).scrollTop();
|
|
|
4468 |
|
|
|
4469 |
var goToScroll = t.cubeportfolio.$obj.offset().top + t.top - 100;
|
|
|
4470 |
|
|
|
4471 |
if (t.scrollTop !== goToScroll) {
|
|
|
4472 |
$('html,body').animate({
|
|
|
4473 |
scrollTop: goToScroll
|
|
|
4474 |
}, 350)
|
|
|
4475 |
.promise()
|
|
|
4476 |
.then(function() {
|
|
|
4477 |
t.resizeSinglePageInline();
|
|
|
4478 |
t.deferredInline.resolve();
|
|
|
4479 |
});
|
|
|
4480 |
} else {
|
|
|
4481 |
t.resizeSinglePageInline();
|
|
|
4482 |
t.deferredInline.resolve();
|
|
|
4483 |
}
|
|
|
4484 |
} else {
|
|
|
4485 |
t.resizeSinglePageInline();
|
|
|
4486 |
t.deferredInline.resolve();
|
|
|
4487 |
}
|
|
|
4488 |
|
|
|
4489 |
t.cubeportfolio.$obj.addClass('cbp-popup-singlePageInline-open');
|
|
|
4490 |
|
|
|
4491 |
t.wrap.css({
|
|
|
4492 |
top: t.top
|
|
|
4493 |
});
|
|
|
4494 |
|
|
|
4495 |
// change link
|
|
|
4496 |
if (t.options.singlePageInlineDeeplinking) {
|
|
|
4497 |
// ignore old #cbpi from href
|
|
|
4498 |
t.url = t.url.split('#cbpi=')[0];
|
|
|
4499 |
location.href = t.url + '#cbpi=' + t.dataArray[t.current].url;
|
|
|
4500 |
}
|
|
|
4501 |
|
|
|
4502 |
// register callback function
|
|
|
4503 |
if ($.isFunction(t.options.singlePageInlineCallback)) {
|
|
|
4504 |
t.options.singlePageInlineCallback.call(t, t.dataArray[t.current].url, t.dataArray[t.current].element);
|
|
|
4505 |
}
|
|
|
4506 |
},
|
|
|
4507 |
|
|
|
4508 |
resizeSinglePageInline: function() {
|
|
|
4509 |
var t = this;
|
|
|
4510 |
|
|
|
4511 |
t.height = ((t.top === 0) || (t.top === t.cubeportfolio.height)) ? t.wrap.outerHeight(true) : t.wrap.outerHeight(true) - t.options.gapHorizontal;
|
|
|
4512 |
|
|
|
4513 |
t.storeBlocks.each(function(index, el) {
|
|
|
4514 |
if (CubePortfolio.private.modernBrowser) {
|
|
|
4515 |
el.style[CubePortfolio.private.transform] = '';
|
|
|
4516 |
} else {
|
|
|
4517 |
el.style.marginTop = '';
|
|
|
4518 |
}
|
|
|
4519 |
});
|
|
|
4520 |
|
|
|
4521 |
t.blocksToMove.each(function(index, el) {
|
|
|
4522 |
if (CubePortfolio.private.modernBrowser) {
|
|
|
4523 |
el.style[CubePortfolio.private.transform] = 'translate3d(0px, ' + t.height + 'px, 0)';
|
|
|
4524 |
} else {
|
|
|
4525 |
el.style.marginTop = t.height + 'px';
|
|
|
4526 |
}
|
|
|
4527 |
});
|
|
|
4528 |
|
|
|
4529 |
t.cubeportfolio.obj.style.height = t.cubeportfolio.height + t.height + 'px';
|
|
|
4530 |
},
|
|
|
4531 |
|
|
|
4532 |
revertResizeSinglePageInline: function() {
|
|
|
4533 |
var t = this;
|
|
|
4534 |
|
|
|
4535 |
// reset deferred object
|
|
|
4536 |
t.deferredInline = $.Deferred();
|
|
|
4537 |
|
|
|
4538 |
t.storeBlocks.each(function(index, el) {
|
|
|
4539 |
if (CubePortfolio.private.modernBrowser) {
|
|
|
4540 |
el.style[CubePortfolio.private.transform] = '';
|
|
|
4541 |
} else {
|
|
|
4542 |
el.style.marginTop = '';
|
|
|
4543 |
}
|
|
|
4544 |
});
|
|
|
4545 |
|
|
|
4546 |
t.cubeportfolio.obj.style.height = t.cubeportfolio.height + 'px';
|
|
|
4547 |
},
|
|
|
4548 |
|
|
|
4549 |
appendScriptsToWrap: function(scripts) {
|
|
|
4550 |
var t = this,
|
|
|
4551 |
index = 0,
|
|
|
4552 |
loadScripts = function(item) {
|
|
|
4553 |
var script = document.createElement('script'),
|
|
|
4554 |
src = item.src;
|
|
|
4555 |
|
|
|
4556 |
script.type = 'text/javascript';
|
|
|
4557 |
|
|
|
4558 |
if (script.readyState) { // ie
|
|
|
4559 |
script.onreadystatechange = function() {
|
|
|
4560 |
if (script.readyState == 'loaded' || script.readyState == 'complete') {
|
|
|
4561 |
script.onreadystatechange = null;
|
|
|
4562 |
index++;
|
|
|
4563 |
if (scripts[index]) {
|
|
|
4564 |
loadScripts(scripts[index]);
|
|
|
4565 |
}
|
|
|
4566 |
}
|
|
|
4567 |
};
|
|
|
4568 |
} else {
|
|
|
4569 |
script.onload = function() {
|
|
|
4570 |
index++;
|
|
|
4571 |
if (scripts[index]) {
|
|
|
4572 |
loadScripts(scripts[index]);
|
|
|
4573 |
}
|
|
|
4574 |
};
|
|
|
4575 |
}
|
|
|
4576 |
|
|
|
4577 |
if (src) {
|
|
|
4578 |
script.src = src;
|
|
|
4579 |
} else {
|
|
|
4580 |
script.text = item.text;
|
|
|
4581 |
}
|
|
|
4582 |
|
|
|
4583 |
t.content[0].appendChild(script);
|
|
|
4584 |
|
|
|
4585 |
};
|
|
|
4586 |
|
|
|
4587 |
loadScripts(scripts[0]);
|
|
|
4588 |
},
|
|
|
4589 |
|
|
|
4590 |
updateSinglePage: function(html, scripts, isWrap) {
|
|
|
4591 |
var t = this,
|
|
|
4592 |
counterMarkup,
|
|
|
4593 |
animationFinish;
|
|
|
4594 |
|
|
|
4595 |
t.content.addClass('cbp-popup-content').removeClass('cbp-popup-content-basic');
|
|
|
4596 |
|
|
|
4597 |
if (isWrap === false) {
|
|
|
4598 |
t.content.removeClass('cbp-popup-content').addClass('cbp-popup-content-basic');
|
|
|
4599 |
}
|
|
|
4600 |
|
|
|
4601 |
// update counter navigation
|
|
|
4602 |
if (t.counter) {
|
|
|
4603 |
counterMarkup = $(t.getCounterMarkup(t.options.singlePageCounter, t.current + 1, t.counterTotal));
|
|
|
4604 |
t.counter.text(counterMarkup.text());
|
|
|
4605 |
}
|
|
|
4606 |
|
|
|
4607 |
t.fromAJAX = {
|
|
|
4608 |
html: html,
|
|
|
4609 |
scripts: scripts
|
|
|
4610 |
};
|
|
|
4611 |
|
|
|
4612 |
t.finishOpen--;
|
|
|
4613 |
|
|
|
4614 |
if (t.finishOpen <= 0) {
|
|
|
4615 |
t.updateSinglePageIsOpen.call(t);
|
|
|
4616 |
}
|
|
|
4617 |
},
|
|
|
4618 |
|
|
|
4619 |
updateSinglePageIsOpen: function() {
|
|
|
4620 |
var t = this,
|
|
|
4621 |
selectorSlider;
|
|
|
4622 |
|
|
|
4623 |
t.wrap.addClass('cbp-popup-ready');
|
|
|
4624 |
t.wrap.removeClass('cbp-popup-loading');
|
|
|
4625 |
|
|
|
4626 |
t.content.html(t.fromAJAX.html);
|
|
|
4627 |
|
|
|
4628 |
if (t.fromAJAX.scripts) {
|
|
|
4629 |
t.appendScriptsToWrap(t.fromAJAX.scripts);
|
|
|
4630 |
}
|
|
|
4631 |
|
|
|
4632 |
t.fromAJAX = {};
|
|
|
4633 |
|
|
|
4634 |
|
|
|
4635 |
// trigger public event
|
|
|
4636 |
t.cubeportfolio.$obj.trigger('updateSinglePageStart.cbp');
|
|
|
4637 |
|
|
|
4638 |
// instantiate slider if exists
|
|
|
4639 |
selectorSlider = t.content.find('.cbp-slider');
|
|
|
4640 |
if (selectorSlider) {
|
|
|
4641 |
selectorSlider.find('.cbp-slider-item').addClass('cbp-item');
|
|
|
4642 |
t.slider = selectorSlider.cubeportfolio({
|
|
|
4643 |
layoutMode: 'slider',
|
|
|
4644 |
mediaQueries: [{
|
|
|
4645 |
width: 1,
|
|
|
4646 |
cols: 1
|
|
|
4647 |
}],
|
|
|
4648 |
gapHorizontal: 0,
|
|
|
4649 |
gapVertical: 0,
|
|
|
4650 |
caption: '',
|
|
|
4651 |
coverRatio: '', // wp version only
|
|
|
4652 |
});
|
|
|
4653 |
} else {
|
|
|
4654 |
t.slider = null;
|
|
|
4655 |
}
|
|
|
4656 |
|
|
|
4657 |
// check for social share icons
|
|
|
4658 |
t.checkForSocialLinks(t.content);
|
|
|
4659 |
|
|
|
4660 |
// scroll bug on android and ios
|
|
|
4661 |
if (CubePortfolio.private.browser === 'android' || CubePortfolio.private.browser === 'ios') {
|
|
|
4662 |
$('html').css({
|
|
|
4663 |
position: 'fixed'
|
|
|
4664 |
});
|
|
|
4665 |
}
|
|
|
4666 |
|
|
|
4667 |
// trigger public event
|
|
|
4668 |
t.cubeportfolio.$obj.trigger('updateSinglePageComplete.cbp');
|
|
|
4669 |
},
|
|
|
4670 |
|
|
|
4671 |
checkForSocialLinks: function(content) {
|
|
|
4672 |
var t = this;
|
|
|
4673 |
|
|
|
4674 |
t.createFacebookShare(content.find('.cbp-social-fb'));
|
|
|
4675 |
t.createTwitterShare(content.find('.cbp-social-twitter'));
|
|
|
4676 |
t.createGooglePlusShare(content.find('.cbp-social-googleplus'));
|
|
|
4677 |
t.createPinterestShare(content.find('.cbp-social-pinterest'));
|
|
|
4678 |
},
|
|
|
4679 |
|
|
|
4680 |
createFacebookShare: function(item) {
|
|
|
4681 |
if (item.length && !item.attr('onclick')) {
|
|
|
4682 |
item.attr('onclick', "window.open('http://www.facebook.com/sharer.php?u=" + encodeURIComponent(window.location.href) + "', '_blank', 'top=100,left=100,toolbar=0,status=0,width=620,height=400'); return false;");
|
|
|
4683 |
}
|
|
|
4684 |
},
|
|
|
4685 |
|
|
|
4686 |
createTwitterShare: function(item) {
|
|
|
4687 |
if (item.length && !item.attr('onclick')) {
|
|
|
4688 |
item.attr('onclick', "window.open('https://twitter.com/intent/tweet?source=" + encodeURIComponent(window.location.href) + "&text=" + encodeURIComponent(document.title) + "', '_blank', 'top=100,left=100,toolbar=0,status=0,width=620,height=300'); return false;");
|
|
|
4689 |
}
|
|
|
4690 |
},
|
|
|
4691 |
|
|
|
4692 |
createGooglePlusShare: function(item) {
|
|
|
4693 |
if (item.length && !item.attr('onclick')) {
|
|
|
4694 |
item.attr('onclick', "window.open('https://plus.google.com/share?url=" + encodeURIComponent(window.location.href) + "', '_blank', 'top=100,left=100,toolbar=0,status=0,width=620,height=450'); return false;");
|
|
|
4695 |
}
|
|
|
4696 |
},
|
|
|
4697 |
|
|
|
4698 |
createPinterestShare: function(item) {
|
|
|
4699 |
if (item.length && !item.attr('onclick')) {
|
|
|
4700 |
var media = '';
|
|
|
4701 |
var firstImg = this.content.find('img')[0];
|
|
|
4702 |
|
|
|
4703 |
if(firstImg) {
|
|
|
4704 |
media = firstImg.src;
|
|
|
4705 |
}
|
|
|
4706 |
|
|
|
4707 |
item.attr('onclick', "window.open('http://pinterest.com/pin/create/button/?url=" + encodeURIComponent(window.location.href) + "&media=" + media + "', '_blank', 'top=100,left=100,toolbar=0,status=0,width=620,height=400'); return false;");
|
|
|
4708 |
}
|
|
|
4709 |
},
|
|
|
4710 |
|
|
|
4711 |
updateSinglePageInline: function(html, scripts) {
|
|
|
4712 |
var t = this;
|
|
|
4713 |
|
|
|
4714 |
t.content.html(html);
|
|
|
4715 |
|
|
|
4716 |
if (scripts) {
|
|
|
4717 |
t.appendScriptsToWrap(scripts);
|
|
|
4718 |
}
|
|
|
4719 |
// trigger public event
|
|
|
4720 |
t.cubeportfolio.$obj.trigger('updateSinglePageInlineStart.cbp');
|
|
|
4721 |
|
|
|
4722 |
t.singlePageInlineIsOpen.call(t);
|
|
|
4723 |
},
|
|
|
4724 |
|
|
|
4725 |
singlePageInlineIsOpen: function() {
|
|
|
4726 |
var t = this;
|
|
|
4727 |
|
|
|
4728 |
function finishLoading() {
|
|
|
4729 |
t.wrap.addClass('cbp-popup-singlePageInline-ready');
|
|
|
4730 |
t.wrap[0].style.height = '';
|
|
|
4731 |
|
|
|
4732 |
t.resizeSinglePageInline();
|
|
|
4733 |
|
|
|
4734 |
// trigger public event
|
|
|
4735 |
t.cubeportfolio.$obj.trigger('updateSinglePageInlineComplete.cbp');
|
|
|
4736 |
}
|
|
|
4737 |
|
|
|
4738 |
// wait to load all images
|
|
|
4739 |
t.cubeportfolio.loadImages(t.wrap, function() {
|
|
|
4740 |
// instantiate slider if exists
|
|
|
4741 |
var selectorSlider = t.content.find('.cbp-slider');
|
|
|
4742 |
|
|
|
4743 |
if (selectorSlider.length) {
|
|
|
4744 |
selectorSlider.find('.cbp-slider-item').addClass('cbp-item');
|
|
|
4745 |
|
|
|
4746 |
selectorSlider.one('initComplete.cbp', function() {
|
|
|
4747 |
t.deferredInline.done(finishLoading);
|
|
|
4748 |
});
|
|
|
4749 |
|
|
|
4750 |
selectorSlider.on('pluginResize.cbp', function() {
|
|
|
4751 |
t.deferredInline.done(finishLoading);
|
|
|
4752 |
});
|
|
|
4753 |
|
|
|
4754 |
t.slider = selectorSlider.cubeportfolio({
|
|
|
4755 |
layoutMode: 'slider',
|
|
|
4756 |
displayType: 'default',
|
|
|
4757 |
mediaQueries: [{
|
|
|
4758 |
width: 1,
|
|
|
4759 |
cols: 1
|
|
|
4760 |
}],
|
|
|
4761 |
gapHorizontal: 0,
|
|
|
4762 |
gapVertical: 0,
|
|
|
4763 |
caption: '',
|
|
|
4764 |
coverRatio: '', // wp version only
|
|
|
4765 |
});
|
|
|
4766 |
} else {
|
|
|
4767 |
t.slider = null;
|
|
|
4768 |
t.deferredInline.done(finishLoading);
|
|
|
4769 |
}
|
|
|
4770 |
|
|
|
4771 |
// check for social share icons
|
|
|
4772 |
t.checkForSocialLinks(t.content);
|
|
|
4773 |
});
|
|
|
4774 |
},
|
|
|
4775 |
|
|
|
4776 |
isImage: function(el) {
|
|
|
4777 |
var t = this,
|
|
|
4778 |
img = new Image();
|
|
|
4779 |
|
|
|
4780 |
t.tooggleLoading(true);
|
|
|
4781 |
|
|
|
4782 |
t.cubeportfolio.loadImages($('<div><img src="' + el.src + '"></div>'), function() {
|
|
|
4783 |
t.updateImagesMarkup(el.src, el.title, t.getCounterMarkup(t.options.lightboxCounter, t.current + 1, t.counterTotal));
|
|
|
4784 |
|
|
|
4785 |
t.tooggleLoading(false);
|
|
|
4786 |
});
|
|
|
4787 |
},
|
|
|
4788 |
|
|
|
4789 |
isVimeo: function(el) {
|
|
|
4790 |
var t = this;
|
|
|
4791 |
t.updateVideoMarkup(el.src, el.title, t.getCounterMarkup(t.options.lightboxCounter, t.current + 1, t.counterTotal));
|
|
|
4792 |
},
|
|
|
4793 |
|
|
|
4794 |
isYoutube: function(el) {
|
|
|
4795 |
var t = this;
|
|
|
4796 |
t.updateVideoMarkup(el.src, el.title, t.getCounterMarkup(t.options.lightboxCounter, t.current + 1, t.counterTotal));
|
|
|
4797 |
|
|
|
4798 |
},
|
|
|
4799 |
|
|
|
4800 |
isTed: function(el) {
|
|
|
4801 |
var t = this;
|
|
|
4802 |
t.updateVideoMarkup(el.src, el.title, t.getCounterMarkup(t.options.lightboxCounter, t.current + 1, t.counterTotal));
|
|
|
4803 |
},
|
|
|
4804 |
|
|
|
4805 |
isSoundCloud: function(el) {
|
|
|
4806 |
var t = this;
|
|
|
4807 |
t.updateVideoMarkup(el.src, el.title, t.getCounterMarkup(t.options.lightboxCounter, t.current + 1, t.counterTotal));
|
|
|
4808 |
},
|
|
|
4809 |
|
|
|
4810 |
isSelfHostedVideo: function(el) {
|
|
|
4811 |
var t = this;
|
|
|
4812 |
t.updateSelfHostedVideo(el.src, el.title, t.getCounterMarkup(t.options.lightboxCounter, t.current + 1, t.counterTotal));
|
|
|
4813 |
},
|
|
|
4814 |
|
|
|
4815 |
isSelfHostedAudio: function(el) {
|
|
|
4816 |
var t = this;
|
|
|
4817 |
t.updateSelfHostedAudio(el.src, el.title, t.getCounterMarkup(t.options.lightboxCounter, t.current + 1, t.counterTotal));
|
|
|
4818 |
},
|
|
|
4819 |
|
|
|
4820 |
getCounterMarkup: function(markup, current, total) {
|
|
|
4821 |
if (!markup.length) {
|
|
|
4822 |
return '';
|
|
|
4823 |
}
|
|
|
4824 |
|
|
|
4825 |
var mapObj = {
|
|
|
4826 |
current: current,
|
|
|
4827 |
total: total
|
|
|
4828 |
};
|
|
|
4829 |
|
|
|
4830 |
return markup.replace(/\{\{current}}|\{\{total}}/gi, function(matched) {
|
|
|
4831 |
return mapObj[matched.slice(2, -2)];
|
|
|
4832 |
});
|
|
|
4833 |
},
|
|
|
4834 |
|
|
|
4835 |
updateSelfHostedVideo: function(src, title, counter) {
|
|
|
4836 |
var t = this,
|
|
|
4837 |
i;
|
|
|
4838 |
|
|
|
4839 |
t.wrap.addClass('cbp-popup-lightbox-isIframe');
|
|
|
4840 |
|
|
|
4841 |
var markup = '<div class="cbp-popup-lightbox-iframe">' +
|
|
|
4842 |
'<video controls="controls" height="auto" style="width: 100%">';
|
|
|
4843 |
|
|
|
4844 |
for (i = 0; i < src.length; i++) {
|
|
|
4845 |
if (/(\.mp4)/i.test(src[i])) {
|
|
|
4846 |
markup += '<source src="' + src[i] + '" type="video/mp4">';
|
|
|
4847 |
} else if (/(\.ogg)|(\.ogv)/i.test(src[i])) {
|
|
|
4848 |
markup += '<source src="' + src[i] + '" type="video/ogg">';
|
|
|
4849 |
} else if (/(\.webm)/i.test(src[i])) {
|
|
|
4850 |
markup += '<source src="' + src[i] + '" type="video/webm">';
|
|
|
4851 |
}
|
|
|
4852 |
}
|
|
|
4853 |
|
|
|
4854 |
markup += 'Your browser does not support the video tag.' +
|
|
|
4855 |
'</video>' +
|
|
|
4856 |
'<div class="cbp-popup-lightbox-bottom">' +
|
|
|
4857 |
((title) ? '<div class="cbp-popup-lightbox-title">' + title + '</div>' : '') +
|
|
|
4858 |
counter +
|
|
|
4859 |
'</div>' +
|
|
|
4860 |
'</div>';
|
|
|
4861 |
|
|
|
4862 |
t.content.html(markup);
|
|
|
4863 |
t.wrap.addClass('cbp-popup-ready');
|
|
|
4864 |
t.preloadNearbyImages();
|
|
|
4865 |
},
|
|
|
4866 |
|
|
|
4867 |
updateSelfHostedAudio: function(src, title, counter) {
|
|
|
4868 |
var t = this,
|
|
|
4869 |
i;
|
|
|
4870 |
|
|
|
4871 |
t.wrap.addClass('cbp-popup-lightbox-isIframe');
|
|
|
4872 |
|
|
|
4873 |
var markup = '<div class="cbp-popup-lightbox-iframe">' +
|
|
|
4874 |
'<div class="cbp-misc-video"><audio controls="controls" height="auto" style="width: 75%">' +
|
|
|
4875 |
'<source src="' + src + '" type="audio/mpeg">' +
|
|
|
4876 |
'Your browser does not support the audio tag.' +
|
|
|
4877 |
'</audio></div>' +
|
|
|
4878 |
'<div class="cbp-popup-lightbox-bottom">' +
|
|
|
4879 |
((title) ? '<div class="cbp-popup-lightbox-title">' + title + '</div>' : '') +
|
|
|
4880 |
counter +
|
|
|
4881 |
'</div>' +
|
|
|
4882 |
'</div>';
|
|
|
4883 |
|
|
|
4884 |
t.content.html(markup);
|
|
|
4885 |
t.wrap.addClass('cbp-popup-ready');
|
|
|
4886 |
t.preloadNearbyImages();
|
|
|
4887 |
},
|
|
|
4888 |
|
|
|
4889 |
updateVideoMarkup: function(src, title, counter) {
|
|
|
4890 |
var t = this;
|
|
|
4891 |
t.wrap.addClass('cbp-popup-lightbox-isIframe');
|
|
|
4892 |
|
|
|
4893 |
var markup = '<div class="cbp-popup-lightbox-iframe">' +
|
|
|
4894 |
'<iframe src="' + src + '" frameborder="0" allowfullscreen scrolling="no"></iframe>' +
|
|
|
4895 |
'<div class="cbp-popup-lightbox-bottom">' +
|
|
|
4896 |
((title) ? '<div class="cbp-popup-lightbox-title">' + title + '</div>' : '') +
|
|
|
4897 |
counter +
|
|
|
4898 |
'</div>' +
|
|
|
4899 |
'</div>';
|
|
|
4900 |
|
|
|
4901 |
t.content.html(markup);
|
|
|
4902 |
t.wrap.addClass('cbp-popup-ready');
|
|
|
4903 |
t.preloadNearbyImages();
|
|
|
4904 |
},
|
|
|
4905 |
|
|
|
4906 |
updateImagesMarkup: function(src, title, counter) {
|
|
|
4907 |
var t = this;
|
|
|
4908 |
|
|
|
4909 |
t.wrap.removeClass('cbp-popup-lightbox-isIframe');
|
|
|
4910 |
|
|
|
4911 |
var markup = '<div class="cbp-popup-lightbox-figure">' +
|
|
|
4912 |
'<img src="' + src + '" class="cbp-popup-lightbox-img" ' + t.dataActionImg + ' />' +
|
|
|
4913 |
'<div class="cbp-popup-lightbox-bottom">' +
|
|
|
4914 |
((title) ? '<div class="cbp-popup-lightbox-title">' + title + '</div>' : '') +
|
|
|
4915 |
counter +
|
|
|
4916 |
'</div>' +
|
|
|
4917 |
'</div>';
|
|
|
4918 |
|
|
|
4919 |
t.content.html(markup);
|
|
|
4920 |
t.wrap.addClass('cbp-popup-ready');
|
|
|
4921 |
t.resizeImage();
|
|
|
4922 |
t.preloadNearbyImages();
|
|
|
4923 |
},
|
|
|
4924 |
|
|
|
4925 |
next: function() {
|
|
|
4926 |
var t = this;
|
|
|
4927 |
t[t.type + 'JumpTo'](1);
|
|
|
4928 |
},
|
|
|
4929 |
|
|
|
4930 |
prev: function() {
|
|
|
4931 |
var t = this;
|
|
|
4932 |
t[t.type + 'JumpTo'](-1);
|
|
|
4933 |
},
|
|
|
4934 |
|
|
|
4935 |
lightboxJumpTo: function(index) {
|
|
|
4936 |
var t = this,
|
|
|
4937 |
el;
|
|
|
4938 |
|
|
|
4939 |
t.current = t.getIndex(t.current + index);
|
|
|
4940 |
|
|
|
4941 |
// get the current element
|
|
|
4942 |
el = t.dataArray[t.current];
|
|
|
4943 |
|
|
|
4944 |
// call function if current element is image or video (iframe)
|
|
|
4945 |
t[el.type](el);
|
|
|
4946 |
},
|
|
|
4947 |
|
|
|
4948 |
|
|
|
4949 |
singlePageJumpTo: function(index) {
|
|
|
4950 |
var t = this;
|
|
|
4951 |
|
|
|
4952 |
t.current = t.getIndex(t.current + index);
|
|
|
4953 |
|
|
|
4954 |
// register singlePageCallback function
|
|
|
4955 |
if ($.isFunction(t.options.singlePageCallback)) {
|
|
|
4956 |
t.resetWrap();
|
|
|
4957 |
|
|
|
4958 |
// go to top of the page (reset scroll)
|
|
|
4959 |
t.wrap.scrollTop(0);
|
|
|
4960 |
|
|
|
4961 |
t.wrap.addClass('cbp-popup-loading');
|
|
|
4962 |
t.options.singlePageCallback.call(t, t.dataArray[t.current].url, t.dataArray[t.current].element);
|
|
|
4963 |
|
|
|
4964 |
if (t.options.singlePageDeeplinking) {
|
|
|
4965 |
location.href = t.url + '#cbp=' + t.dataArray[t.current].url;
|
|
|
4966 |
}
|
|
|
4967 |
}
|
|
|
4968 |
},
|
|
|
4969 |
|
|
|
4970 |
resetWrap: function() {
|
|
|
4971 |
var t = this;
|
|
|
4972 |
|
|
|
4973 |
if (t.type === 'singlePage' && t.options.singlePageDeeplinking) {
|
|
|
4974 |
location.href = t.url + '#';
|
|
|
4975 |
}
|
|
|
4976 |
|
|
|
4977 |
if (t.type === 'singlePageInline' && t.options.singlePageInlineDeeplinking) {
|
|
|
4978 |
location.href = t.url + '#';
|
|
|
4979 |
}
|
|
|
4980 |
},
|
|
|
4981 |
|
|
|
4982 |
getIndex: function(index) {
|
|
|
4983 |
var t = this;
|
|
|
4984 |
|
|
|
4985 |
// go to interval [0, (+ or -)this.counterTotal.length - 1]
|
|
|
4986 |
index = index % t.counterTotal;
|
|
|
4987 |
|
|
|
4988 |
// if index is less then 0 then go to interval (0, this.counterTotal - 1]
|
|
|
4989 |
if (index < 0) {
|
|
|
4990 |
index = t.counterTotal + index;
|
|
|
4991 |
}
|
|
|
4992 |
|
|
|
4993 |
return index;
|
|
|
4994 |
},
|
|
|
4995 |
|
|
|
4996 |
close: function(method, data) {
|
|
|
4997 |
var t = this;
|
|
|
4998 |
|
|
|
4999 |
function finishClose() {
|
|
|
5000 |
// reset content
|
|
|
5001 |
t.content.html('');
|
|
|
5002 |
|
|
|
5003 |
// hide the wrap
|
|
|
5004 |
t.wrap.detach();
|
|
|
5005 |
|
|
|
5006 |
t.cubeportfolio.$obj.removeClass('cbp-popup-singlePageInline-open cbp-popup-singlePageInline-close');
|
|
|
5007 |
|
|
|
5008 |
if (method === 'promise') {
|
|
|
5009 |
if ($.isFunction(data.callback)) {
|
|
|
5010 |
data.callback.call(t.cubeportfolio);
|
|
|
5011 |
}
|
|
|
5012 |
}
|
|
|
5013 |
|
|
|
5014 |
t.resetWrap();
|
|
|
5015 |
}
|
|
|
5016 |
|
|
|
5017 |
function checkFocusInline() {
|
|
|
5018 |
if (t.options.singlePageInlineInFocus && method !== 'promise') {
|
|
|
5019 |
$('html,body').animate({
|
|
|
5020 |
scrollTop: t.scrollTop
|
|
|
5021 |
}, 350)
|
|
|
5022 |
.promise()
|
|
|
5023 |
.then(function() {
|
|
|
5024 |
finishClose();
|
|
|
5025 |
});
|
|
|
5026 |
} else {
|
|
|
5027 |
finishClose();
|
|
|
5028 |
}
|
|
|
5029 |
}
|
|
|
5030 |
|
|
|
5031 |
// now the popup is closed
|
|
|
5032 |
t.isOpen = false;
|
|
|
5033 |
|
|
|
5034 |
if (t.type === 'singlePageInline') {
|
|
|
5035 |
if (method === 'open') {
|
|
|
5036 |
t.wrap.removeClass('cbp-popup-singlePageInline-ready');
|
|
|
5037 |
$(t.dataArray[t.current].element).closest('.cbp-item').removeClass('cbp-singlePageInline-active');
|
|
|
5038 |
t.openSinglePageInline(data.blocks, data.currentBlock, data.fromOpen);
|
|
|
5039 |
} else {
|
|
|
5040 |
t.height = 0;
|
|
|
5041 |
|
|
|
5042 |
t.revertResizeSinglePageInline();
|
|
|
5043 |
t.wrap.removeClass('cbp-popup-singlePageInline-ready');
|
|
|
5044 |
t.cubeportfolio.$obj.addClass('cbp-popup-singlePageInline-close');
|
|
|
5045 |
t.cubeportfolio.$obj.find('.cbp-item').removeClass('cbp-singlePageInline-active');
|
|
|
5046 |
|
|
|
5047 |
if (CubePortfolio.private.modernBrowser) {
|
|
|
5048 |
t.wrap.one(CubePortfolio.private.transitionend, function() {
|
|
|
5049 |
checkFocusInline();
|
|
|
5050 |
});
|
|
|
5051 |
} else {
|
|
|
5052 |
checkFocusInline();
|
|
|
5053 |
}
|
|
|
5054 |
}
|
|
|
5055 |
|
|
|
5056 |
} else if (t.type === 'singlePage') {
|
|
|
5057 |
t.resetWrap();
|
|
|
5058 |
|
|
|
5059 |
t.wrap.removeClass('cbp-popup-ready cbp-popup-transitionend');
|
|
|
5060 |
|
|
|
5061 |
// scroll bug on android and ios
|
|
|
5062 |
if (CubePortfolio.private.browser === 'android' || CubePortfolio.private.browser === 'ios') {
|
|
|
5063 |
$('html').css({
|
|
|
5064 |
position: ''
|
|
|
5065 |
});
|
|
|
5066 |
|
|
|
5067 |
t.navigationWrap.appendTo(t.wrap);
|
|
|
5068 |
t.navigationMobile.remove();
|
|
|
5069 |
}
|
|
|
5070 |
|
|
|
5071 |
$(window).scrollTop(t.scrollTop);
|
|
|
5072 |
|
|
|
5073 |
// weird bug on mozilla. fixed with setTimeout
|
|
|
5074 |
setTimeout(function() {
|
|
|
5075 |
t.stopScroll = true;
|
|
|
5076 |
|
|
|
5077 |
t.navigationWrap.css({
|
|
|
5078 |
top: t.wrap.scrollTop()
|
|
|
5079 |
});
|
|
|
5080 |
|
|
|
5081 |
t.wrap.removeClass('cbp-popup-singlePage-open cbp-popup-singlePage-sticky');
|
|
|
5082 |
|
|
|
5083 |
if (CubePortfolio.private.browser === 'ie8' || CubePortfolio.private.browser === 'ie9') {
|
|
|
5084 |
// reset content
|
|
|
5085 |
t.content.html('');
|
|
|
5086 |
|
|
|
5087 |
// hide the wrap
|
|
|
5088 |
t.wrap.detach();
|
|
|
5089 |
|
|
|
5090 |
$('html').css({
|
|
|
5091 |
overflow: '',
|
|
|
5092 |
marginRight: '',
|
|
|
5093 |
position: ''
|
|
|
5094 |
});
|
|
|
5095 |
|
|
|
5096 |
t.navigationWrap.removeAttr('style');
|
|
|
5097 |
}
|
|
|
5098 |
}, 0);
|
|
|
5099 |
|
|
|
5100 |
$('html').css({
|
|
|
5101 |
overflow: '',
|
|
|
5102 |
marginRight: '',
|
|
|
5103 |
position: ''
|
|
|
5104 |
});
|
|
|
5105 |
|
|
|
5106 |
t.wrap.one(CubePortfolio.private.transitionend, function() {
|
|
|
5107 |
// reset content
|
|
|
5108 |
t.content.html('');
|
|
|
5109 |
|
|
|
5110 |
// hide the wrap
|
|
|
5111 |
t.wrap.detach();
|
|
|
5112 |
|
|
|
5113 |
|
|
|
5114 |
t.navigationWrap.removeAttr('style');
|
|
|
5115 |
});
|
|
|
5116 |
} else {
|
|
|
5117 |
if (t.originalStyle) {
|
|
|
5118 |
$('html').attr('style', t.originalStyle);
|
|
|
5119 |
} else {
|
|
|
5120 |
$('html').css({
|
|
|
5121 |
overflow: '',
|
|
|
5122 |
marginRight: ''
|
|
|
5123 |
});
|
|
|
5124 |
}
|
|
|
5125 |
|
|
|
5126 |
$(window).scrollTop(t.scrollTop);
|
|
|
5127 |
|
|
|
5128 |
// reset content
|
|
|
5129 |
t.content.html('');
|
|
|
5130 |
|
|
|
5131 |
// hide the wrap
|
|
|
5132 |
t.wrap.detach();
|
|
|
5133 |
}
|
|
|
5134 |
},
|
|
|
5135 |
|
|
|
5136 |
tooggleLoading: function(state) {
|
|
|
5137 |
var t = this;
|
|
|
5138 |
|
|
|
5139 |
t.stopEvents = state;
|
|
|
5140 |
t.wrap[(state) ? 'addClass' : 'removeClass']('cbp-popup-loading');
|
|
|
5141 |
},
|
|
|
5142 |
|
|
|
5143 |
resizeImage: function() {
|
|
|
5144 |
// if lightbox is not open go out
|
|
|
5145 |
if (!this.isOpen) {
|
|
|
5146 |
return;
|
|
|
5147 |
}
|
|
|
5148 |
|
|
|
5149 |
var height = $(window).height(),
|
|
|
5150 |
img = this.content.find('img'),
|
|
|
5151 |
padding = parseInt(img.css('margin-top'), 10) + parseInt(img.css('margin-bottom'), 10);
|
|
|
5152 |
|
|
|
5153 |
img.css('max-height', (height - padding) + 'px');
|
|
|
5154 |
},
|
|
|
5155 |
|
|
|
5156 |
preloadNearbyImages: function() {
|
|
|
5157 |
var arr = [],
|
|
|
5158 |
img, t = this,
|
|
|
5159 |
src;
|
|
|
5160 |
|
|
|
5161 |
arr.push(t.getIndex(t.current + 1));
|
|
|
5162 |
arr.push(t.getIndex(t.current + 2));
|
|
|
5163 |
arr.push(t.getIndex(t.current + 3));
|
|
|
5164 |
arr.push(t.getIndex(t.current - 1));
|
|
|
5165 |
arr.push(t.getIndex(t.current - 2));
|
|
|
5166 |
arr.push(t.getIndex(t.current - 3));
|
|
|
5167 |
|
|
|
5168 |
for (var i = arr.length - 1; i >= 0; i--) {
|
|
|
5169 |
if (t.dataArray[arr[i]].type === 'isImage') {
|
|
|
5170 |
t.cubeportfolio.checkSrc(t.dataArray[arr[i]].src);
|
|
|
5171 |
}
|
|
|
5172 |
}
|
|
|
5173 |
}
|
|
|
5174 |
};
|
|
|
5175 |
|
|
|
5176 |
function Plugin(parent) {
|
|
|
5177 |
var t = this;
|
|
|
5178 |
|
|
|
5179 |
t.parent = parent;
|
|
|
5180 |
|
|
|
5181 |
// if lightboxShowCounter is false, put lightboxCounter to ''
|
|
|
5182 |
if (parent.options.lightboxShowCounter === false) {
|
|
|
5183 |
parent.options.lightboxCounter = '';
|
|
|
5184 |
}
|
|
|
5185 |
|
|
|
5186 |
// if singlePageShowCounter is false, put singlePageCounter to ''
|
|
|
5187 |
if (parent.options.singlePageShowCounter === false) {
|
|
|
5188 |
parent.options.singlePageCounter = '';
|
|
|
5189 |
}
|
|
|
5190 |
|
|
|
5191 |
// @todo - schedule this in future
|
|
|
5192 |
parent.registerEvent('initStartRead', function() {
|
|
|
5193 |
t.run();
|
|
|
5194 |
}, true);
|
|
|
5195 |
}
|
|
|
5196 |
|
|
|
5197 |
var lightboxInit = false,
|
|
|
5198 |
singlePageInit = false;
|
|
|
5199 |
|
|
|
5200 |
Plugin.prototype.run = function() {
|
|
|
5201 |
var t = this,
|
|
|
5202 |
p = t.parent,
|
|
|
5203 |
body = $(document.body);
|
|
|
5204 |
|
|
|
5205 |
// default value for lightbox
|
|
|
5206 |
p.lightbox = null;
|
|
|
5207 |
|
|
|
5208 |
// LIGHTBOX
|
|
|
5209 |
if (p.options.lightboxDelegate && !lightboxInit) {
|
|
|
5210 |
// init only one time @todo
|
|
|
5211 |
lightboxInit = true;
|
|
|
5212 |
|
|
|
5213 |
p.lightbox = Object.create(popup);
|
|
|
5214 |
p.lightbox.init(p, 'lightbox');
|
|
|
5215 |
|
|
|
5216 |
body.on('click.cbp', p.options.lightboxDelegate, function(e) {
|
|
|
5217 |
e.preventDefault();
|
|
|
5218 |
|
|
|
5219 |
var self = $(this),
|
|
|
5220 |
gallery = self.attr('data-cbp-lightbox'),
|
|
|
5221 |
scope = t.detectScope(self),
|
|
|
5222 |
cbp = scope.data('cubeportfolio'),
|
|
|
5223 |
blocks = [];
|
|
|
5224 |
|
|
|
5225 |
// is inside a cbp
|
|
|
5226 |
if (cbp) {
|
|
|
5227 |
cbp.blocksOn.each(function(index, el) {
|
|
|
5228 |
var item = $(el);
|
|
|
5229 |
|
|
|
5230 |
if (item.not('.cbp-item-off')) {
|
|
|
5231 |
item.find(p.options.lightboxDelegate).each(function(index2, el2) {
|
|
|
5232 |
if (gallery) {
|
|
|
5233 |
if ($(el2).attr('data-cbp-lightbox') === gallery) {
|
|
|
5234 |
blocks.push(el2);
|
|
|
5235 |
}
|
|
|
5236 |
} else {
|
|
|
5237 |
blocks.push(el2);
|
|
|
5238 |
}
|
|
|
5239 |
});
|
|
|
5240 |
}
|
|
|
5241 |
});
|
|
|
5242 |
} else {
|
|
|
5243 |
if (gallery) {
|
|
|
5244 |
blocks = scope.find(p.options.lightboxDelegate + '[data-cbp-lightbox=' + gallery + ']');
|
|
|
5245 |
} else {
|
|
|
5246 |
blocks = scope.find(p.options.lightboxDelegate);
|
|
|
5247 |
}
|
|
|
5248 |
}
|
|
|
5249 |
|
|
|
5250 |
p.lightbox.openLightbox(blocks, self[0]);
|
|
|
5251 |
});
|
|
|
5252 |
}
|
|
|
5253 |
|
|
|
5254 |
// default value for singlePage
|
|
|
5255 |
p.singlePage = null;
|
|
|
5256 |
|
|
|
5257 |
// SINGLEPAGE
|
|
|
5258 |
if (p.options.singlePageDelegate && !singlePageInit) {
|
|
|
5259 |
// init only one time @todo
|
|
|
5260 |
singlePageInit = true;
|
|
|
5261 |
|
|
|
5262 |
p.singlePage = Object.create(popup);
|
|
|
5263 |
p.singlePage.init(p, 'singlePage');
|
|
|
5264 |
|
|
|
5265 |
body.on('click.cbp', p.options.singlePageDelegate, function(e) {
|
|
|
5266 |
e.preventDefault();
|
|
|
5267 |
|
|
|
5268 |
var self = $(this),
|
|
|
5269 |
gallery = self.attr('data-cbp-singlePage'),
|
|
|
5270 |
scope = t.detectScope(self),
|
|
|
5271 |
cbp = scope.data('cubeportfolio'),
|
|
|
5272 |
blocks = [];
|
|
|
5273 |
|
|
|
5274 |
// is inside a cbp
|
|
|
5275 |
if (cbp) {
|
|
|
5276 |
cbp.blocksOn.each(function(index, el) {
|
|
|
5277 |
var item = $(el);
|
|
|
5278 |
|
|
|
5279 |
if (item.not('.cbp-item-off')) {
|
|
|
5280 |
item.find(p.options.singlePageDelegate).each(function(index2, el2) {
|
|
|
5281 |
if (gallery) {
|
|
|
5282 |
if ($(el2).attr('data-cbp-singlePage') === gallery) {
|
|
|
5283 |
blocks.push(el2);
|
|
|
5284 |
}
|
|
|
5285 |
} else {
|
|
|
5286 |
blocks.push(el2);
|
|
|
5287 |
}
|
|
|
5288 |
});
|
|
|
5289 |
}
|
|
|
5290 |
});
|
|
|
5291 |
} else {
|
|
|
5292 |
if (gallery) {
|
|
|
5293 |
blocks = scope.find(p.options.singlePageDelegate + '[data-cbp-singlePage=' + gallery + ']');
|
|
|
5294 |
} else {
|
|
|
5295 |
blocks = scope.find(p.options.singlePageDelegate);
|
|
|
5296 |
}
|
|
|
5297 |
}
|
|
|
5298 |
|
|
|
5299 |
p.singlePage.openSinglePage(blocks, self[0]);
|
|
|
5300 |
});
|
|
|
5301 |
}
|
|
|
5302 |
|
|
|
5303 |
// default value for singlePageInline
|
|
|
5304 |
p.singlePageInline = null;
|
|
|
5305 |
|
|
|
5306 |
// SINGLEPAGEINLINE
|
|
|
5307 |
if (p.options.singlePageInlineDelegate) {
|
|
|
5308 |
p.singlePageInline = Object.create(popup);
|
|
|
5309 |
|
|
|
5310 |
p.singlePageInline.init(p, 'singlePageInline');
|
|
|
5311 |
|
|
|
5312 |
p.$obj.on('click.cbp', p.options.singlePageInlineDelegate, function(e) {
|
|
|
5313 |
e.preventDefault();
|
|
|
5314 |
|
|
|
5315 |
var oldDate = $.data(this, 'cbp-locked'),
|
|
|
5316 |
newDate = $.data(this, 'cbp-locked', +new Date());
|
|
|
5317 |
|
|
|
5318 |
if(!oldDate || ((newDate - oldDate) > 300)) {
|
|
|
5319 |
p.singlePageInline.openSinglePageInline(p.blocksOn, this);
|
|
|
5320 |
}
|
|
|
5321 |
});
|
|
|
5322 |
}
|
|
|
5323 |
};
|
|
|
5324 |
|
|
|
5325 |
Plugin.prototype.detectScope = function(item) {
|
|
|
5326 |
var singlePageInline,
|
|
|
5327 |
singlePage,
|
|
|
5328 |
cbp;
|
|
|
5329 |
|
|
|
5330 |
singlePageInline = item.closest('.cbp-popup-singlePageInline');
|
|
|
5331 |
if (singlePageInline.length) {
|
|
|
5332 |
cbp = item.closest('.cbp', singlePageInline[0]);
|
|
|
5333 |
return (cbp.length) ? cbp : singlePageInline;
|
|
|
5334 |
}
|
|
|
5335 |
|
|
|
5336 |
singlePage = item.closest('.cbp-popup-singlePage');
|
|
|
5337 |
if (singlePage.length) {
|
|
|
5338 |
cbp = item.closest('.cbp', singlePage[0]);
|
|
|
5339 |
return (cbp.length) ? cbp : singlePage;
|
|
|
5340 |
}
|
|
|
5341 |
|
|
|
5342 |
cbp = item.closest('.cbp');
|
|
|
5343 |
return (cbp.length) ? cbp : $(document.body);
|
|
|
5344 |
|
|
|
5345 |
};
|
|
|
5346 |
|
|
|
5347 |
Plugin.prototype.destroy = function() {
|
|
|
5348 |
var p = this.parent;
|
|
|
5349 |
|
|
|
5350 |
$(document.body).off('click.cbp');
|
|
|
5351 |
|
|
|
5352 |
// @todo - remove these from here
|
|
|
5353 |
lightboxInit = false;
|
|
|
5354 |
singlePageInit = false;
|
|
|
5355 |
|
|
|
5356 |
// destroy lightbox if enabled
|
|
|
5357 |
if (p.lightbox) {
|
|
|
5358 |
p.lightbox.destroy();
|
|
|
5359 |
}
|
|
|
5360 |
|
|
|
5361 |
// destroy singlePage if enabled
|
|
|
5362 |
if (p.singlePage) {
|
|
|
5363 |
p.singlePage.destroy();
|
|
|
5364 |
}
|
|
|
5365 |
|
|
|
5366 |
// destroy singlePage inline if enabled
|
|
|
5367 |
if (p.singlePageInline) {
|
|
|
5368 |
p.singlePageInline.destroy();
|
|
|
5369 |
}
|
|
|
5370 |
};
|
|
|
5371 |
|
|
|
5372 |
CubePortfolio.plugins.popUp = function(parent) {
|
|
|
5373 |
return new Plugin(parent);
|
|
|
5374 |
};
|
|
|
5375 |
})(jQuery, window, document);
|
|
|
5376 |
|
|
|
5377 |
(function($, window, document, undefined) {
|
|
|
5378 |
'use strict';
|
|
|
5379 |
|
|
|
5380 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
5381 |
|
|
|
5382 |
function Plugin(parent) {
|
|
|
5383 |
var t = this;
|
|
|
5384 |
|
|
|
5385 |
t.parent = parent;
|
|
|
5386 |
|
|
|
5387 |
t.searchInput = $(parent.options.search);
|
|
|
5388 |
|
|
|
5389 |
t.searchInput.each(function(index, el) {
|
|
|
5390 |
var selector = el.getAttribute('data-search');
|
|
|
5391 |
|
|
|
5392 |
if (!selector) {
|
|
|
5393 |
selector = '*';
|
|
|
5394 |
}
|
|
|
5395 |
|
|
|
5396 |
$.data(el, 'searchData', {
|
|
|
5397 |
value: el.value,
|
|
|
5398 |
el: selector
|
|
|
5399 |
});
|
|
|
5400 |
});
|
|
|
5401 |
|
|
|
5402 |
var timeout = null;
|
|
|
5403 |
|
|
|
5404 |
t.searchInput.on('keyup.cbp paste.cbp', function(e) {
|
|
|
5405 |
e.preventDefault();
|
|
|
5406 |
|
|
|
5407 |
var el = $(this);
|
|
|
5408 |
|
|
|
5409 |
clearTimeout(timeout);
|
|
|
5410 |
timeout = setTimeout(function() {
|
|
|
5411 |
t.runEvent.call(t, el);
|
|
|
5412 |
}, 300);
|
|
|
5413 |
});
|
|
|
5414 |
|
|
|
5415 |
t.searchNothing = t.searchInput.siblings('.cbp-search-nothing').detach();
|
|
|
5416 |
t.searchNothingHeight = null;
|
|
|
5417 |
t.searchNothingHTML = t.searchNothing.html();
|
|
|
5418 |
|
|
|
5419 |
t.searchInput.siblings('.cbp-search-icon').on('click.cbp', function(e) {
|
|
|
5420 |
e.preventDefault();
|
|
|
5421 |
|
|
|
5422 |
t.runEvent.call(t, $(this).prev().val(''));
|
|
|
5423 |
});
|
|
|
5424 |
}
|
|
|
5425 |
|
|
|
5426 |
Plugin.prototype.runEvent = function(el) {
|
|
|
5427 |
var t = this,
|
|
|
5428 |
value = el.val(),
|
|
|
5429 |
searchData = el.data('searchData'),
|
|
|
5430 |
reg = new RegExp(value, 'i');
|
|
|
5431 |
|
|
|
5432 |
if (searchData.value === value || t.parent.isAnimating) {
|
|
|
5433 |
return;
|
|
|
5434 |
}
|
|
|
5435 |
|
|
|
5436 |
searchData.value = value;
|
|
|
5437 |
|
|
|
5438 |
if (value.length > 0) {
|
|
|
5439 |
el.attr('value', value);
|
|
|
5440 |
} else {
|
|
|
5441 |
el.removeAttr('value');
|
|
|
5442 |
}
|
|
|
5443 |
|
|
|
5444 |
t.parent.$obj.cubeportfolio('filter', function(blocks) {
|
|
|
5445 |
var blocksNew = blocks.filter(function(index, block) {
|
|
|
5446 |
var text = $(block).find(searchData.el).text();
|
|
|
5447 |
|
|
|
5448 |
if (text.search(reg) > -1) {
|
|
|
5449 |
return true;
|
|
|
5450 |
}
|
|
|
5451 |
});
|
|
|
5452 |
|
|
|
5453 |
if (blocksNew.length === 0 && t.searchNothing.length) {
|
|
|
5454 |
var innerText = t.searchNothingHTML.replace('{{query}}', value);
|
|
|
5455 |
t.searchNothing.html(innerText);
|
|
|
5456 |
|
|
|
5457 |
t.searchNothing.appendTo(t.parent.$obj);
|
|
|
5458 |
|
|
|
5459 |
if (t.searchNothingHeight === null) {
|
|
|
5460 |
t.searchNothingHeight = t.searchNothing.outerHeight(true);
|
|
|
5461 |
}
|
|
|
5462 |
|
|
|
5463 |
t.parent.registerEvent('resizeMainContainer', function() {
|
|
|
5464 |
t.parent.height = t.parent.height + t.searchNothingHeight;
|
|
|
5465 |
t.parent.obj.style.height = t.parent.height + 'px';
|
|
|
5466 |
}, true);
|
|
|
5467 |
} else {
|
|
|
5468 |
t.searchNothing.detach();
|
|
|
5469 |
}
|
|
|
5470 |
|
|
|
5471 |
return blocksNew;
|
|
|
5472 |
}, function() {
|
|
|
5473 |
el.trigger('keyup.cbp');
|
|
|
5474 |
});
|
|
|
5475 |
};
|
|
|
5476 |
|
|
|
5477 |
Plugin.prototype.destroy = function() {
|
|
|
5478 |
var t = this;
|
|
|
5479 |
|
|
|
5480 |
t.searchInput.off('.cbp');
|
|
|
5481 |
t.searchInput.next('.cbp-search-icon').off('.cbp');
|
|
|
5482 |
|
|
|
5483 |
t.searchInput.each(function(index, el) {
|
|
|
5484 |
$.removeData(el);
|
|
|
5485 |
});
|
|
|
5486 |
};
|
|
|
5487 |
|
|
|
5488 |
CubePortfolio.plugins.search = function(parent) {
|
|
|
5489 |
if (parent.options.search === '') {
|
|
|
5490 |
return null;
|
|
|
5491 |
}
|
|
|
5492 |
|
|
|
5493 |
return new Plugin(parent);
|
|
|
5494 |
};
|
|
|
5495 |
})(jQuery, window, document);
|
|
|
5496 |
|
|
|
5497 |
(function($, window, document, undefined) {
|
|
|
5498 |
'use strict';
|
|
|
5499 |
|
|
|
5500 |
var options = {
|
|
|
5501 |
/**
|
|
|
5502 |
* Pagination custom selector
|
|
|
5503 |
* Values: strings that represent the elements in the document (DOM selector).
|
|
|
5504 |
*/
|
|
|
5505 |
pagination: '',
|
|
|
5506 |
paginationClass: 'cbp-pagination-active',
|
|
|
5507 |
};
|
|
|
5508 |
|
|
|
5509 |
var CubePortfolio = $.fn.cubeportfolio.constructor;
|
|
|
5510 |
|
|
|
5511 |
function Plugin(parent) {
|
|
|
5512 |
var t = this;
|
|
|
5513 |
|
|
|
5514 |
t.parent = parent;
|
|
|
5515 |
|
|
|
5516 |
t.options = $.extend({}, options, t.parent.options.plugins.slider);
|
|
|
5517 |
|
|
|
5518 |
var customPagination = $(t.options.pagination);
|
|
|
5519 |
|
|
|
5520 |
if (customPagination.length > 0) {
|
|
|
5521 |
t.parent.customPagination = customPagination;
|
|
|
5522 |
t.parent.customPaginationItems = customPagination.children();
|
|
|
5523 |
t.parent.customPaginationClass = t.options.paginationClass;
|
|
|
5524 |
|
|
|
5525 |
t.parent.customPaginationItems.on('click.cbp', function(e) {
|
|
|
5526 |
e.preventDefault();
|
|
|
5527 |
e.stopImmediatePropagation();
|
|
|
5528 |
e.stopPropagation();
|
|
|
5529 |
|
|
|
5530 |
if (t.parent.sliderStopEvents) {
|
|
|
5531 |
return;
|
|
|
5532 |
}
|
|
|
5533 |
|
|
|
5534 |
t.parent.jumpToSlider($(this));
|
|
|
5535 |
});
|
|
|
5536 |
}
|
|
|
5537 |
|
|
|
5538 |
t.parent.registerEvent('gridAdjust', function() {
|
|
|
5539 |
t.sliderMarkup.call(t.parent);
|
|
|
5540 |
|
|
|
5541 |
t.parent.registerEvent('gridAdjust', function() {
|
|
|
5542 |
t.updateSlider.call(t.parent);
|
|
|
5543 |
});
|
|
|
5544 |
}, true);
|
|
|
5545 |
}
|
|
|
5546 |
|
|
|
5547 |
/**
|
|
|
5548 |
* Create mark-up for slider layout
|
|
|
5549 |
*/
|
|
|
5550 |
Plugin.prototype.sliderMarkup = function() {
|
|
|
5551 |
var t = this;
|
|
|
5552 |
|
|
|
5553 |
t.sliderStopEvents = false;
|
|
|
5554 |
|
|
|
5555 |
t.sliderActive = 0;
|
|
|
5556 |
|
|
|
5557 |
t.$obj.one('initComplete.cbp', function() {
|
|
|
5558 |
t.$obj.addClass('cbp-mode-slider');
|
|
|
5559 |
});
|
|
|
5560 |
|
|
|
5561 |
t.nav = $('<div/>', {
|
|
|
5562 |
'class': 'cbp-nav'
|
|
|
5563 |
});
|
|
|
5564 |
|
|
|
5565 |
t.nav.on('click.cbp', '[data-slider-action]', function(e) {
|
|
|
5566 |
e.preventDefault();
|
|
|
5567 |
e.stopImmediatePropagation();
|
|
|
5568 |
e.stopPropagation();
|
|
|
5569 |
|
|
|
5570 |
if (t.sliderStopEvents) {
|
|
|
5571 |
return;
|
|
|
5572 |
}
|
|
|
5573 |
|
|
|
5574 |
var el = $(this),
|
|
|
5575 |
action = el.attr('data-slider-action');
|
|
|
5576 |
|
|
|
5577 |
if (t[action + 'Slider']) {
|
|
|
5578 |
t[action + 'Slider'](el);
|
|
|
5579 |
}
|
|
|
5580 |
});
|
|
|
5581 |
|
|
|
5582 |
if (t.options.showNavigation) {
|
|
|
5583 |
t.controls = $('<div/>', {
|
|
|
5584 |
'class': 'cbp-nav-controls'
|
|
|
5585 |
});
|
|
|
5586 |
|
|
|
5587 |
t.navPrev = $('<div/>', {
|
|
|
5588 |
'class': 'cbp-nav-prev',
|
|
|
5589 |
'data-slider-action': 'prev'
|
|
|
5590 |
}).appendTo(t.controls);
|
|
|
5591 |
|
|
|
5592 |
t.navNext = $('<div/>', {
|
|
|
5593 |
'class': 'cbp-nav-next',
|
|
|
5594 |
'data-slider-action': 'next'
|
|
|
5595 |
}).appendTo(t.controls);
|
|
|
5596 |
|
|
|
5597 |
t.controls.appendTo(t.nav);
|
|
|
5598 |
}
|
|
|
5599 |
|
|
|
5600 |
if (t.options.showPagination) {
|
|
|
5601 |
t.navPagination = $('<div/>', {
|
|
|
5602 |
'class': 'cbp-nav-pagination'
|
|
|
5603 |
}).appendTo(t.nav);
|
|
|
5604 |
}
|
|
|
5605 |
|
|
|
5606 |
if (t.controls || t.navPagination) {
|
|
|
5607 |
t.nav.appendTo(t.$obj);
|
|
|
5608 |
}
|
|
|
5609 |
|
|
|
5610 |
t.updateSliderPagination();
|
|
|
5611 |
|
|
|
5612 |
if (t.options.auto) {
|
|
|
5613 |
if (t.options.autoPauseOnHover) {
|
|
|
5614 |
t.mouseIsEntered = false;
|
|
|
5615 |
t.$obj.on('mouseenter.cbp', function(e) {
|
|
|
5616 |
t.mouseIsEntered = true;
|
|
|
5617 |
t.stopSliderAuto();
|
|
|
5618 |
}).on('mouseleave.cbp', function(e) {
|
|
|
5619 |
t.mouseIsEntered = false;
|
|
|
5620 |
t.startSliderAuto();
|
|
|
5621 |
});
|
|
|
5622 |
}
|
|
|
5623 |
|
|
|
5624 |
t.startSliderAuto();
|
|
|
5625 |
}
|
|
|
5626 |
|
|
|
5627 |
if (t.options.drag && CubePortfolio.private.modernBrowser) {
|
|
|
5628 |
t.dragSlider();
|
|
|
5629 |
}
|
|
|
5630 |
};
|
|
|
5631 |
|
|
|
5632 |
Plugin.prototype.updateSlider = function() {
|
|
|
5633 |
var t = this;
|
|
|
5634 |
|
|
|
5635 |
t.updateSliderPosition();
|
|
|
5636 |
|
|
|
5637 |
t.updateSliderPagination();
|
|
|
5638 |
};
|
|
|
5639 |
|
|
|
5640 |
Plugin.prototype.destroy = function() {
|
|
|
5641 |
var t = this;
|
|
|
5642 |
|
|
|
5643 |
if (t.parent.customPaginationItems) {
|
|
|
5644 |
t.parent.customPaginationItems.off('.cbp');
|
|
|
5645 |
}
|
|
|
5646 |
|
|
|
5647 |
if (t.parent.controls || t.parent.navPagination) {
|
|
|
5648 |
t.parent.nav.off('.cbp');
|
|
|
5649 |
t.parent.nav.remove();
|
|
|
5650 |
}
|
|
|
5651 |
};
|
|
|
5652 |
|
|
|
5653 |
CubePortfolio.plugins.slider = function(parent) {
|
|
|
5654 |
if (parent.options.layoutMode !== 'slider') {
|
|
|
5655 |
return null;
|
|
|
5656 |
}
|
|
|
5657 |
|
|
|
5658 |
return new Plugin(parent);
|
|
|
5659 |
};
|
|
|
5660 |
})(jQuery, window, document);
|