Вход Регистрация
Файл: concrete5.7.5.6/concrete/js/build/core/gathering.js
Строк: 443
<?php
/**
 * Gathering
 */


(function($, window) {

  var 
methods = {

    private:  {

        
handleAppendedElements: function(response, $gathering, options, prepend) {
            var 
elements = ($('<div />').append(response).find('>div'));
            $.
each(elements, function(i, obj) {
                
prepend ? $gathering.prepend(obj) : $gathering.append(obj);
            });
            if (
elements.length > 0) {
                
prepend ? $gathering.packery('prepended', elements) : $gathering.packery('appended', elements);
                if (
options.showTileControls) {
                    
methods.private.enableEditing($gathering, options);
                }

                
methods.private.enableOverlay($gathering, options);
                
methods.private.enableHover($gathering, options);
            }
        },

        
enableOverlay: function($gathering, options) {
            
$gathering.find('a[data-overlay=gathering-item]').not('.overlay-bound').each(function() {
                var 
gaiID = $(this).closest('[data-gathering-item-id]').attr('data-gathering-item-id');
                $(
this).on('click', function() {
                    $.
magnificPopup.open({
                        
ajax: {
                            
settings: {
                                
'data': {
                                    
'gaiID': gaiID,
                                    
'token': options.loadToken
                                
},
                                
'dataType': 'html',
                                
'type': 'post'
                            
}
                        },
                        
items: {
                            
src: CCM_TOOLS_PATH + '/gathering/item/detail'
                        
},
                        
mainClass: 'ccm-gathering-overlay-wrapper',    
                        
type: 'ajax',
                        
removalDelay: 200
                    
});
                    return 
false;
                });
            }).
addClass('overlay-bound');
        },

        
enableHover: function($gathering, options) {

            
$gathering.find('.ccm-gathering-item').not('.hover-bound').each(function() {
                $(
this).on('mouseenter', function() {
                    $(
this).addClass('ccm-gathering-item-over')
                }).
on('mouseleave', function() {
                    $(
this).removeClass('ccm-gathering-item-over')
                });
            }).
addClass('hover-bound');
        },

        
enableEditing: function($gathering, options) {
            
$gathering.find('a[data-inline-command=options-tile]').not('.gathering-options-bound').on('click', function(e) {
                var 
$item = $(this);
                var 
$menu = $('[data-menu=' + $(this).attr('data-launch-menu') + ']'); 
                var 
menu = new ConcreteMenu($item, {
                    
menu: $menu,
                    
launcher: 'none'
                
});
                
menu.show(e);
                return 
false;
            }).
addClass('gathering-options-bound');

            var 
$itemElements = $($gathering.packery('getItemElements')).not('.event-bound');
            
$itemElements.draggable({
                
'handle': 'a[data-inline-command=move-tile]', 
                
start: function() {
                    $(
'.ccm-area-block-dropzone').addClass('ccm-area-block-dropzone-active');
                    $(
'div[data-gathering-id]').each(function() {
                        var 
$tagg = $(this);
                        if (
parseInt($tagg.attr('data-gathering-id')) != parseInt(options.gaID)) {
                            
$tagg.addClass('ccm-gathering-item-droppable').droppable({
                                
accept: '.ccm-gathering-item',
                                
tolerance: 'pointer',
                                
hoverClass: 'ccm-gathering-item-drop-active',
                                
drop: function(e, ui) {
                                    
jQuery.fn.dialog.showLoader();
                                    var 
$destination = $(this);
                                    var 
gaID = $destination.attr('data-gathering-id');
                                    var 
data = [
                                        {
'name': 'task', 'value': 'move_to_new_gathering'},
                                        {
'name': 'gaiID', 'value': ui.draggable.attr('data-gathering-item-id')},
                                        {
'name': 'gaID', 'value': $destination.attr('data-gathering-id')},
                                        {
'name': 'cID', 'value': CCM_CID},
                                        {
'name': 'itemsPerPage', 'value': options.itemsPerPage},
                                        {
'name': 'editToken', 'value': options.editToken}
                                    ];

                                    var 
$source = $(ui.draggable).parent();
                                    $(
ui.draggable).remove();

                                    $.
ajax({
                                        
type: 'post',
                                        
url: CCM_TOOLS_PATH + '/gathering/update',
                                        
data: data,
                                        
success: function(r) {
                                            
$source.packery('layout');
                                            
$destination.before(r).remove();
                                            
$destination.packery('layout');
                                            
jQuery.fn.dialog.hideLoader();
                                        }
                                    });
                                }
                            });
                        }
                    });
                },
                
stop: function() {
                    
//$('div.ccm-gathering-item-droppable').droppable('destroy');
                    
$('.ccm-area-block-dropzone').removeClass('ccm-area-block-dropzone-active');
                    
$gathering.packery('layout');
                }
            });

            
$gathering.packery('on', 'dragItemPositioned', function(pkr, item) {
                var 
data = [
                    {
'name': 'task', 'value': 'update_display_order'},
                    {
'name': 'gaID', 'value': options.gaID},
                    {
'name': 'editToken', 'value': options.editToken}
                ];
                var 
items = [];
                var 
elements = pkr.getItemElements();
                for (var 
i = 0; i < elements.length; i++) {
                    var 
$obj = $(elements[i]);
                    
data.push({'name': 'gaiID[]', 'value': $obj.attr('data-gathering-item-id')});
                }

                $.
ajax({
                    
type: 'post',
                    
url: CCM_TOOLS_PATH + '/gathering/update',
                    
data: data
                
});
            });

            
$gathering.packery( 'bindUIDraggableEvents', $itemElements );
            
$itemElements.resizable({
                
handles: 'se',
                
helper: 'ccm-gathering-resize-helper',
                
grid: [options.columnWidth + options.gutter, options.rowHeight + options.gutter],
                
stop: function(e, ui) {
                    var 
$tile = ui.element,
                    
wx = parseInt($tile.css('width')),
                    
hx = parseInt($tile.css('height')),
                    
w = Math.floor(wx / options.columnWidth),
                    
h = Math.floor(hx / options.rowHeight);

                    
$gathering.packery('layout');

                    $.
ajax({
                        
type: 'post',
                        
url: CCM_TOOLS_PATH + '/gathering/update',
                        
data: {
                            
'task': 'resize',
                            
'gaID': options.gaID,
                            
'gaiID': $tile.attr('data-gathering-item-id'),
                            
'gaiSlotWidth': w,
                            
'gaiSlotHeight': h,
                            
'editToken': options.editToken
                        
}
                    });
                }
            });
            
$itemElements.not('.event-bound').addClass('event-bound');
        }

    },
   
    
updateItemTemplate: function(options) {
        
jQuery.fn.dialog.showLoader();
        
options = $.extend({
            
reloadItemTile: false
        
}, options);
        $.
ajax({
            
type: 'POST',
            
data: {
                
task: 'update_item_template',
                
gaiID: options.gaiID,
                
gatTypeID: options.gatTypeID,
                
gatID: options.gatID,
                
token: options.updateToken
            
},
            
url: CCM_TOOLS_PATH + '/gathering/item/template',
            
success: function(r) {
                
jQuery.fn.dialog.hideLoader();
                if (
options.reloadItemTile) {
                    
// load the newly rendered HTML into the old gathering item.
                    
$('[data-gathering-item-id=' + options.gaiID + ']').find('div.ccm-gathering-item-inner-render').html(r);
                }
                
jQuery.fn.dialog.closeTop();
            }
        });
    },

    
deleteItem: function(options) {
        
jQuery.fn.dialog.showLoader();
        $.
ajax({
            
type: 'POST',
            
data: {
                
task: 'delete_item',
                
gaiID: options.gaiID,
                
token: options.deleteToken
            
},
            
url: CCM_TOOLS_PATH + '/gathering/item/delete',
            
success: function(r) {
                
jQuery.fn.dialog.hideLoader();
                var 
$item = $('[data-gathering-item-id=' + options.gaiID + ']');
                var 
$gathering = $item.parent();
                
$item.remove();
                
$gathering.packery('layout');
                
jQuery.fn.dialog.closeTop();
            }
        });
    },

    
getNew: function() {
        var 
$gathering = $(this);
        var 
options = $(this).data('options');
        
jQuery.fn.dialog.showLoader();
        var 
getNewerThan = $($gathering.find('.ccm-gathering-item')[0]).attr('data-gathering-item-id');
        $.
ajax({
            
type: 'post',
            
url: CCM_TOOLS_PATH + '/gathering/get_new',
            
data: {
                
'task': 'get_gathering_items',
                
'newerThan': getNewerThan,
                
'gaID': options.gaID,
                
'editToken': options.editToken,
                
'showTileControls': options.showTileControls
            
},
        
            
success: function(r) {
                
jQuery.fn.dialog.hideLoader();
                
methods.private.handleAppendedElements(r, $gathering, options, true);
            }
        });
    },

    
init: function(options) {

        
options = $.extend({
            
totalPages: 0,
            
columnWidth: 120,
            
itemsPerPage: 24,
            
rowHeight: 120,
            
showTileControls: false,
            
gutter: 1
        
}, options);

        return 
this.each(function() {
            var 
$gathering = $(this);
            $(
this).data('options', options);
            var 
$loadButton = $gathering.parent().find('button[data-gathering-button=gathering-load-more-items]');
            if (
options.totalPages == 1) {
                
$loadButton.hide();
            }
            
$gathering.packery({
                
columnWidth: options.columnWidth,
                
rowHeight: options.rowHeight,
                
gutter: options.gutter
            
});
            
$gathering.css('opacity', 1);

            
// handle details and lightbox.
            
methods.private.enableHover($gathering, options);

            
// handle details and lightbox.
            
methods.private.enableOverlay($gathering, options);

            
$loadButton.on('click', function() {
                var 
page = parseInt($gathering.attr('data-gathering-current-page')),
                    
newPage = page + 1;

                
$loadButton.prop('disabled', true);

                $.
ajax({
                    
type: 'post',
                    
url: CCM_TOOLS_PATH + '/gathering/load_more',
                    
data: {
                        
'task': 'get_gathering_items',
                        
'gaID': options.gaID,
                        
'page': newPage,
                        
'itemsPerPage': options.itemsPerPage,
                        
'loadToken': options.loadToken,
                        
'editToken': options.editToken,
                        
'showTileControls': options.showTileControls
                    
},
                
                    
success: function(r) {
                        
methods.private.handleAppendedElements(r, $gathering, options);
                        if (
newPage == options.totalPages) {
                            
$loadButton.hide();
                        } else {
                            
$loadButton.prop('disabled', false);
                            
$gathering.attr('data-gathering-current-page', newPage);
                        }
                    }
                });
            });

            if (
options.showTileControls) {
                var 
$refreshButton = $('[data-gathering-refresh=' + options.gaID + ']');
                
$refreshButton.on('click', function() {
                    
$gathering.ccmgathering('getNew');
                    return 
false;
                });
                
methods.private.enableEditing($gathering, options);
            }
        });    
    }
  };

  $.
fn.ccmgathering = function(method) {

    if ( 
methods[method] ) {
      return 
methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( 
typeof method === 'object' || ! method ) {
      return 
methods.init.apply( this, arguments );
    } else {
      $.
error( 'Method ' +  method + ' does not exist on jQuery.ccmgathering' );
    }   

  };
})(
jQuery, window);
?>
Онлайн: 2
Реклама