Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
Your IP : 3.15.34.105
(function ( $ ) {
$.fn.mpmansory = function ( options ) {
var settings = $.extend({
childrenClass: '',
breakpoints: {
lg: 4,
md: 4,
sm: 6,
xs: 12
},
distributeBy: {
attr: 'data-order',
attrOrder: 'asc',
order: false,
height: false
},
onload: function ( items ) {
return true;
}
}, options);
Array.min = function( array ){
return Math.min.apply( Math, array );
};
$.emptyArray = function ( array ) {
for (var i = 0; i<array.length; i++) {
array[i].remove();
}
return new Array();
}
$.fn.initialize = function ( columns, classStr ) {
/*
* @params [string] {classStr} - the bootstrap column string
* @return [Array] - list of columns to create
* @description - creates the grid columns in wich the items will be distributed
*/
var cols = [];
for (var i = 0; i<columns; i++) {
var wrap = $('<div></div>');
wrap.addClass(classStr);
$(this).append(wrap);
cols.push(wrap);
}
return cols;
}
$.fn.distributeItemsByHeight = function ( wrappers, items ) {
/*
* @params [Array] {wrappers} - the array containing the columns elements
* @params [Array] {items} - the array containing items
* @description - distribute the items through the columns - to the columns with lowest height
*/
var counter = 0;
for (var k = 0; k<items.length; k++) {
var $heights = new Array();
for (var i = 0; i<wrappers.length; i++ ) {
//get the wrappers height
$heights.push(wrappers[i].height());
}
//get the wrapper with the lowest height
var min = Array.min($heights) == Number.POSITIVE_INFINITY || Array.min($heights) == Number.NEGATIVE_INFINITY ? 0 : Array.min($heights);
wrappers[$heights.indexOf(min)].append(items[k]);
}
}
$.fn.getCurrentColumnSize = function () {
if ($(window).width() > 1200) {
return 'lg';
} else if ($(window).width() > 992) {
return 'md';
} else if ($(window).width() > 720) {
return 'sm';
} else if ($(window).width() > 480) {
return 'xs';
} else if ($(window).width() > 320) {
return 'xs';
} else {
return 'xs';
}
}
$.fn.distributeItemsByOrder = function ( wrappers, items ) {
/*
* @params [Array] {wrappers} - the array containing the columns elements
* @params [Array] {items} - the array containing items
* @description - distribute the items through the columns - to the columns with lowest height
*/
var counter = 0;
for (var k = 0; k<items.length; k++) {
if (counter == wrappers.length) counter = 0;
wrappers[counter].append(items[k]);
counter++;
}
}
$.fn.orderItemsByAttr = function (items, order) {
var attrs = new Array();
for ( var k = 0; k<items.length; k++ ) {
attrs.push($(items[k]).attr(order.attr));
}
if (order.attrOrder == 'asc') {
attrs.sort(function (a, b) { return a-b });
} else {
attrs.sort(function (a, b) { return b-a });
}
var ordered_items = new Array();
for ( var i = 0; i<attrs.length; i++) {
var item = $.grep(items, function (e) {return $(e).attr(order.attr) == attrs[i]});
ordered_items.push(item);
}
return ordered_items;
}
$.fn.distributeItemsByAttr = function ( wrappers, items, order) {
var counter = 0;
var counter2 = 0;
for (var i = 0; i<items.length; i++) {
if (counter == wrappers.length) counter = 0;
if ( items[i].length > 1) {
if (counter2 == items[i].length) counter2 = 0;
wrappers[counter].append($(items[i][counter2]));
counter2++;
} else {
wrappers[counter].append($(items[i]));
}
counter++;
}
}
$.fn.apply = function ( settings, nrOfColumns, wrappers, items ) {
var _this = $(this);
var currentSize = _this.getCurrentColumnSize();
var columns = nrOfColumns; //find number of columns
//build the bootstrap class string
var classStr = "col-lg-" + settings.breakpoints.lg + " col-md-"+settings.breakpoints.md + " col-sm-" + settings.breakpoints.sm + " col-xs-" + settings.breakpoints.xs + " " + settings.columnClasses;
wrappers = $(this).initialize( columns, classStr ); //create columns'white
if ( settings.distributeBy.order ) {
_this.distributeItemsByOrder( wrappers, items); //apply mansory
} else if ( settings.distributeBy.height ) {
_this.distributeItemsByHeight( wrappers, items); //apply mansory
} else if ( settings.distributeBy.attr ) {
_this.distributeItemsByAttr( wrappers, _this.orderItemsByAttr(items, settings.distributeBy), settings.distributeBy);
}
return { wrappers: wrappers, items: items };
}
return this.each(function () {
var _this = $(this);
var currentSize = _this.getCurrentColumnSize();
var numberOfColumns = 12 / settings.breakpoints[currentSize];
var items = _this.children( (settings.childrenClass != '' ? '.'+settings.childrenClass : 'div') );
var wrappers = new Array();
var returns = _this.apply( settings, numberOfColumns, wrappers, items );
wrappers = returns.wrappers;
$(window).on('resize', function ( e ) {
if (_this.getCurrentColumnSize() != currentSize ) {
numberOfColumns = 12 / settings.breakpoints[_this.getCurrentColumnSize()];
wrappers = $.emptyArray(wrappers);
returns = _this.apply( settings , numberOfColumns, wrappers, items);
wrappers = returns.wrappers;
currentSize = _this.getCurrentColumnSize();
}
});
if (settings.hasOwnProperty('onload')) {
//execute on load
settings.onload( items );
}
});
}
})(jQuery);
|