Вход Регистрация
Файл: concrete5.7.5.6/concrete/js/build/core/app/search/base.js
Строк: 381
<?php
/**
 * Base search class for AJAX searching
 */

!function(global, $) {
    
'use strict';

    function 
ConcreteAjaxSearch($elementoptions) {
        
options options || {};
        
options = $.extend({
            
'result': {},
            
'onLoad'false,
            
'onUpdateResults'false,
            
'bulkParameterName''item'
        
}, options);
        
this.$element $element;
        
this.$results $element.find('div[data-search-element=results]');
        
this.$resultsTableBody this.$results.find('tbody');
        
this.$resultsTableHead this.$results.find('thead');
        
this.$resultsPagination this.$results.find('div.ccm-search-results-pagination');
        
this.$menuTemplate $element.find('script[data-template=search-results-menu]');
        
this.$searchFieldRowTemplate $element.find('script[data-template=search-field-row]');

        
this.options options;

        
this._templateSearchForm _.template($element.find('script[data-template=search-form]').html());
        
this._templateSearchResultsTableHead _.template($element.find('script[data-template=search-results-table-head]').html());
        
this._templateSearchResultsTableBody _.template($element.find('script[data-template=search-results-table-body]').html());
        
this._templateSearchResultsPagination _.template($element.find('script[data-template=search-results-pagination]').html());
        if (
this.$menuTemplate.length) {
            
this._templateSearchResultsMenu _.template(this.$menuTemplate.html());
        }
        if (
this.$searchFieldRowTemplate.length) {
            
this._templateAdvancedSearchFieldRow _.template(this.$searchFieldRowTemplate.html());
        }

        
this.setupSearch();
        
this.setupCheckboxes();
        
this.setupBulkActions();
        
this.setupSort();
        
this.setupPagination();
        
this.setupSelect2();
        
this.setupAdvancedSearch();
        
this.setupCustomizeColumns();
        
this.updateResults(options.result);

        if (
options.onLoad) {
            
options.onLoad(this);
        }
    }

    
ConcreteAjaxSearch.prototype.ajaxUpdate = function(urldatacallback) {
        var 
cs this;
        $.
concreteAjax({
            
urlurl,
            
datadata,
            
success: function(r) {
                if (!
callback) {
                    
cs.updateResults(r);
                } else {
                    
callback(r);
                }
            }
        })
    }

    
ConcreteAjaxSearch.prototype.setupSelect2 = function() {
        var 
selects this.$element.find('.select2-select');
        if (
selects.length) {
            
selects.select2();
        }
    }

    
ConcreteAjaxSearch.prototype.createMenu = function($selector) {
        
$selector.concreteMenu({
            
'menu': $('[data-search-menu=' $selector.attr('data-launch-search-menu') + ']')
        });
    }

    
ConcreteAjaxSearch.prototype.setupMenus = function(result) {
        var 
cs this;
        if (
cs._templateSearchResultsMenu) {
            
cs.$element.find('[data-search-menu]').remove();

            
// loop through all results,
            // create nodes for them.
            
$.each(result.items, function(iitem) {
                
cs.$results.append(cs._templateSearchResultsMenu({'item'item}));
            });

            
cs.$element.find('tbody tr').each(function() {
                
cs.createMenu($(this));
            });
        }
    }

    
ConcreteAjaxSearch.prototype.setupCustomizeColumns = function() {
        var 
cs this;
        
cs.$element.on('click''a[data-search-toggle=customize]', function() {
            var 
url = $(this).attr('data-search-column-customize-url');
            $.
fn.dialog.open({
                
width480,
                
height400,
                
hrefurl,
                
modaltrue,
                
titleccmi18n.customizeSearch,
                
onOpen: function() {
                    var 
$form = $('form[data-dialog-form=search-customize]'),
                        
$selectDefault $form.find('select[data-search-select-default-column]'),
                        
$columns $form.find('ul[data-search-column-list]');

                    $(
'ul[data-search-column-list]').sortable({
                        
cursor'move',
                        
opacity0.5
                    
});
                    
$form.on('click''input[type=checkbox]', function() {
                        var 
label = $(this).parent().find('span').html(),
                            
id = $(this).attr('id');

                        if ($(
this).prop('checked')) {
                            if (
$form.find('li[data-field-order-column='' + id + '']').length == 0) {
                                
$selectDefault.append($('<option>', {'value'id'text'label}));
                                
$selectDefault.prop('disabled'false);
                                
$columns.append('<li data-field-order-column="' id '"><input type="hidden" name="column[]" value="' id '" />' label '</li>');
                            }
                        } else {
                            
$columns.find('li[data-field-order-column='' + id + '']').remove();
                            
$selectDefault.find('option[value='' + id + '']').remove();
                            if (
$columns.find('li').length == 0) {
                                
$selectDefault.prop('disabled'true);
                            }
                        }
                    });
                    
ConcreteEvent.subscribe('AjaxFormSubmitSuccess', function(edata) {
                        
cs.updateResults(data.response.result);
                    });
                }
            });
            return 
false;
        });
    }

    
ConcreteAjaxSearch.prototype.updateResults = function(result) {
        var 
cs this,
            
options cs.options;

        
cs.$resultsTableHead.html(cs._templateSearchResultsTableHead({'columns'result.columns}));
        
cs.$resultsTableBody.html(cs._templateSearchResultsTableBody({'items'result.items}));
        
cs.$resultsPagination.html(cs._templateSearchResultsPagination({'paginationTemplate'result.paginationTemplate}));
        
cs.$advancedFields.html('');
        $.
each(result.fields, function(ifield) {
            
cs.$advancedFields.append(cs._templateAdvancedSearchFieldRow({'field'field}));
        });
        
cs.setupMenus(result);
        if (
options.onUpdateResults) {
            
options.onUpdateResults(this);
        }
    }

    
ConcreteAjaxSearch.prototype.setupAdvancedSearch = function() {
        var 
cs this;
        
cs.$advancedFields cs.$element.find('div.ccm-search-fields-advanced');

        
cs.$element.on('click''a[data-search-toggle=advanced]', function() {
            
cs.$advancedFields.append(cs._templateAdvancedSearchFieldRow());
            return 
false;
        });
        
cs.$element.on('change''select[data-search-field]', function() {
            var 
$content = $(this).parent().find('.ccm-search-field-content');
            
$content.html('');
            var 
field = $(this).find(':selected').attr('data-search-field-url');
            if (
field) {
                
cs.ajaxUpdate(fieldfalse, function(r) {
                    
_.each(r.assets.css, function(css) {
                        
ccm_addHeaderItem(css'CSS');
                    });
                    
_.each(r.assets.javascript, function(javascript) {
                        
ccm_addHeaderItem(javascript'JAVASCRIPT');
                    });
                    
$content.html(r.html);
                });
            }
        });
        
cs.$element.on('click''a[data-search-remove=search-field]', function() {
            var 
$row = $(this).parent();
            
$row.remove();
            return 
false;
        });
    }

    
ConcreteAjaxSearch.prototype.setupSort = function() {
        var 
cs this;
        
this.$element.on('click''thead th a', function() {
            
cs.ajaxUpdate($(this).attr('href'));
            return 
false;
        });
    }

    
ConcreteAjaxSearch.prototype.refreshResults = function() {
        var 
cs this;
        
cs.$element.find('form[data-search-form]').trigger('submit');
    }

    
ConcreteAjaxSearch.prototype.setupSearch = function() {
        var 
cs this;
        
cs.$element.find('[data-search-element=wrapper]').html(cs._templateSearchForm());
        
cs.$element.on('submit''form[data-search-form]', function() {
            var 
data = $(this).serializeArray();
            
data.push({'name''submitSearch''value''1'});
            
cs.ajaxUpdate($(this).attr('action'), data);
            return 
false;
        });
    }

    
ConcreteAjaxSearch.prototype.handleSelectedBulkAction = function(valuetype$option$items) {
        var 
cs this,
            
itemIDs = [];

        $.
each($items, function(icheckbox) {
            
itemIDs.push({'name'cs.options.bulkParameterName '[]''value': $(checkbox).val()});
        });

        if (
type == 'dialog') {
            
jQuery.fn.dialog.open({
                
width$option.attr('data-bulk-action-dialog-width'),
                
height$option.attr('data-bulk-action-dialog-height'),
                
modaltrue,
                
href$option.attr('data-bulk-action-url') + '?' jQuery.param(itemIDs),
                
title$option.attr('data-bulk-action-title')
            });
        }

        if (
type == 'ajax') {
            $.
concreteAjax({
                
url$option.attr('data-bulk-action-url'),
                
dataitemIDs,
                
success: function(r) {
                    if (
r.message) {
                        
ConcreteAlert.notify({
                            
'message'r.message,
                            
'title'r.title
                        
});
                    }
                }
            });
        }
        
cs.publish('SearchBulkActionSelect', {valuevalueoption$optionitems$items});
    }

    
ConcreteAjaxSearch.prototype.publish = function(eventNamedata) {
        var 
cs this;
        
ConcreteEvent.publish(eventNamedatacs);
    }

    
ConcreteAjaxSearch.prototype.subscribe = function(eventNamecallback) {
        var 
cs this;
        
ConcreteEvent.subscribe(eventNamecallbackcs);
    }

    
ConcreteAjaxSearch.prototype.setupBulkActions = function() {
        var 
cs this;
        
cs.$bulkActions cs.$element.find('select[data-bulk-action]');
        
cs.$element.on('change''select[data-bulk-action]', function() {
            var 
$option = $(this).find('option:selected'),
                
value $option.val(),
                
type $option.attr('data-bulk-action-type'),
                
items = [];

            
cs.handleSelectedBulkAction(valuetype$optioncs.$element.find('input[data-search-checkbox=individual]:checked'));
            
cs.$element.find('option').eq(0).prop('selected'true);
        });
    }

    
ConcreteAjaxSearch.prototype.setupPagination = function() {
        var 
cs this;
        
this.$element.on('click''ul.pagination a', function() {
            
cs.ajaxUpdate($(this).attr('href'));
            return 
false;
        });
    }

    
ConcreteAjaxSearch.prototype.setupCheckboxes = function() {
        var 
cs this;
        
cs.$element.on('click''input[data-search-checkbox=select-all]', function() {
            
cs.$element.find('input[data-search-checkbox=individual]').prop('checked', $(this).is(':checked')).trigger('change');
        });
        
cs.$element.on('change''input[data-search-checkbox=individual]', function() {
            if (
cs.$element.find('input[data-search-checkbox=individual]:checked').length) {
                
cs.$bulkActions.prop('disabled'false);
            } else {
                
cs.$bulkActions.prop('disabled'true);
            }
        });

    }

    
// jQuery Plugin
    
$.fn.concreteAjaxSearch = function(options) {
        return new 
ConcreteAjaxSearch(thisoptions);
    }

    global.
ConcreteAjaxSearch ConcreteAjaxSearch;

}(
this, $);
?>
Онлайн: 1
Реклама