Вход Регистрация
Файл: concrete5.7.5.6/concrete/js/build/core/editable-field/container.js
Строк: 203
<?php
/**
 * Base search class for AJAX forms in the UI
 */

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

    function 
ConcreteEditableFieldContainer($elementoptions) {
        var 
my this;
        
options options || {};
        
options = $.extend({
            
urlfalse,
            
data: {}
        }, 
options);
        
my.$element $element;
        
my.options options;
        
my.initializeEditableFields();
        
my.initializeClearCommands();
        return 
my.$element;
    }

    
ConcreteEditableFieldContainer.prototype = {

        
/**
         * returns either the options.url or a url from the field. This is the default behavior for x editable so we don't have
         * to do this there
         */
        
getAjaxURL: function($field) {
            var 
my thisurl my.options.url;
            if (
$field.attr('data-url')) {
                
url $field.attr('data-url');
            }
            return 
url;
        },

        
setupXeditableField: function($field) {
            var 
my this;
            
$field.editable({
                
ajaxOptions: {
                    
dataType'json'
                
},
                
emptytextccmi18n.none,
                
showbuttonstrue,
                
paramsmy.options.data,
                
urlmy.options.url,
                
success: function(rnewValue) {
                    if (
ConcreteAjaxRequest.validateResponse(r)) {
                        return {
'newValue'newValue};
                    } else {
                        return 
'';
                    }
                },
                
pk'_x' // we have to include this otherwise xeditable doesn't work.
            
});
        },

        
setupXeditableAttributeField: function($field) {
            var 
my this;
            
$field.editable({
                
ajaxOptions: {
                    
dataType'json'
                
},
                
mode$field.data('editablemode'),
                
emptytextccmi18n.none,
                
showbuttonstrue,
                
savenochangetrue,
                
autotext'never',
                
urlmy.options.url,
                
params: function(args) {
                    var 
newParams = [];
                    
newParams.push({name'name''value'args.name});
                    
newParams.push({name'pk''value'args.pk});
                    
_.each(my.options.data, function(valuekey) {
                        if (
typeof(value) == 'object') {
                            
newParams.push({namevalue.name'value'value.value});
                        } else {
                            
newParams.push({namekey'value'value});
                        }
                    });
                    
_.each(args.value, function(value) {
                        
newParams.push({namevalue.name'value'value.value});
                    });
                    return 
newParams;
                },
                
success: function(rnewValue) {
                    if (
ConcreteAjaxRequest.validateResponse(r)) {
                        return {
'newValue'r.value};
                    } else {
                        return 
'';
                    }
                },
                
pk'_x' // we have to include this otherwise xeditable doesn't work.
            
});
        },

        
setupImageField: function($field) {
            var 
my this;
            
// automatically set the width and height of the proxy field
            
var $thumbnail $field.find('.editable-image-wrapper img');
            
$field.find('.editable-image-wrapper input').css('width'$thumbnail.width()).css('height'$thumbnail.height());

            
$field.fileupload({
                
urlmy.getAjaxURL($field),
                
dataType'json',
                
formDatamy.options.data,
                
start: function() {
                    
jQuery.fn.dialog.showLoader();
                    
//ConcreteAlert.showLoader();
                
},
                
success: function(r) {
                    
my.updateImageField(r$field);
                },
                
error: function(r) {
                    
ConcreteAlert.dialog('Error'r.responseText);
                },
                
complete: function(r) {
                    
jQuery.fn.dialog.hideLoader();
                    
//ConcreteAlert.hideLoader()
                
}
            });
        },

        
updateImageField: function(r$field) {
            var 
my this;
            if (
ConcreteAjaxRequest.validateResponse(r)) {
                
$field.find('.editable-image-display').html(r.imageHTML)
                    .
find('img').attr('src', function(indexattr) {
                        return 
attr '?' + new Date().getTime();
                    });
                
my.setupImageField($field);
                
ConcreteAlert.notify({
                
'message'r.message
                
});
            }
        },

        
initializeEditableFields: function() {
            var 
my this;
            
my.$element.find('[data-editable-field-type]').each(function() {
                var 
$field = $(this);
                var 
method 'setup'  $field.attr('data-editable-field-type').charAt(0).toUpperCase() + $field.attr('data-editable-field-type').slice(1) + 'Field';
                
my[method]($field);
            });
        },

        
initializeClearCommands: function() {
            var 
my this;
            
my.$element.on('click''[data-editable-field-command=clear]', function() {
                var 
$icon = $(this),
                    
$field $icon.closest('[data-editable-field-type]'),
                    
method 'update'  $field.attr('data-editable-field-type').charAt(0).toUpperCase() + $field.attr('data-editable-field-type').slice(1) + 'Field',
                    
data my.options.data;

                
data.task 'clear';

                var 
url my.getAjaxURL($field);
                new 
ConcreteAjaxRequest({
                    
urlurl,
                    
datadata,
                    
success: function(r) {
                        
my[method](r$field);

                    }
                });
                return 
false;
            });
            
my.$element.on('click''[data-editable-field-command=clear_attribute]', function() {
                var 
data my.options.data,
                    
url my.getAjaxURL($(this)),
                    
akID = $(this).attr('data-key-id'),
                    
ajaxData = [];

                
_.each(data, function(valuekey) {
                    if (
typeof(value) == 'object') {
                        
ajaxData.push({namevalue.name'value'value.value});
                    } else {
                        
ajaxData.push({namekey'value'value});
                    }
                });

                
ajaxData.push({'name''akID''value'akID});

                new 
ConcreteAjaxRequest({
                    
urlurl,
                    
dataajaxData,
                    
success: function(r) {
                         $(
'[data-key-id=' akID '][data-editable-field-type=xeditableAttribute]').editable('setValue''');
                    }
                });
                return 
false;
            });
        }

    }

    
// jQuery Plugin
    
$.fn.concreteEditableFieldContainer = function(options) {
        return $.
each($(this), function(iobj) {
            new 
ConcreteEditableFieldContainer($(this), options);
        });
    }

    global.
ConcreteEditableFieldContainer ConcreteEditableFieldContainer;

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