Вход Регистрация
Файл: static/plugins/base/js/avatar_change.js
Строк: 295
<?php
var avatarChange = function( params )
{
    $.
event.props.push('dataTransfer');
    
    
this.params params;

    
this.$dropArea = $('#avatar-drop-area');
    
this.$dropAreaLabel = $('#avatar-drop-area-label');
    
this.$fileInput = $('#avatar-change-file-input');

    
this.$preloader = $('#avatar-change-preloader');
    
this.$step1 = $("#avatar-change-step-1");
    
this.$step2 = $("#avatar-change-step-2");

    
this.$backButton = $('#avatar-crop-back-btn');
    
this.$cropButton = $('#avatar-crop-btn');
    
this.$cropPreview = $('#avatar-crop-preview');
    
this.$cropTarget = $('#avatar-crop-target');

    
this.fileTypes = ['image/jpeg''image/png''image/gif'];
    
this.coords = {};
    
this.jcropApi = {};

    
// selected image params
    
this.url '';
    
this.entityType '';
    
this.entityId '';
    
this.id '';

    var 
self this;

    
this.cropPreview = function showPreview(coords) {
        var 
rx self.params.minCropSize coords.w;
        var 
ry self.params.minCropSize coords.h;

        
self.coords coords;
        
self.$cropPreview.css({
            
widthMath.round(rx self.$cropTarget.width()) + 'px',
            
heightMath.round(ry self.$cropTarget.height()) + 'px',
            
marginLeft'-' Math.round(rx coords.x) + 'px',
            
marginTop'-' Math.round(ry coords.y) + 'px'
        
});
    };

    
this.initCrop = function( callback ){

        var 
ts = new Date().getTime();
        var 
url self.url "?" ts;

        if (!$.
isEmptyObject(self.jcropApi)) { // reset jcrop api
            
self.jcropApi.destroy();
        }

        var 
image = new Image();
        
image.onload = function(e) {
            var 
width this.width;
            var 
height this.height;

            
self.$cropTarget.attr('src'url);
            
self.$cropPreview.attr('src'url);

            
document.avatarFloatBox.$header.find(".floatbox_title span").html(PEEP.getLanguageText('base''avatar_crop'));
            var 
cropWidth document.avatarFloatBox.$body.width() - self.params.minCropSize 16;

            $(
".peep_avatar_crop_area").css({ widthcropWidth });

            $(
".peep_avatar_crop_result").css({ widthself.params.minCropSize });
            $(
".avatar_crop_preview_wrap").css({ heightself.params.minCropSize });
            
self.$cropPreview.css({ widthself.params.minCropSizeheightself.params.minCropSize });

            if (
height self.params.minCropSize) {
                
self.$cropTarget.css({ heightself.params.minCropSize });
            }

            
self.$cropTarget.Jcrop({
                
onChangeself.cropPreview,
                
onSelectself.cropPreview,
                
boxWidthcropWidth,
                
minSize: [ self.params.minCropSizeself.params.minCropSize ],
                
aspectRatio1
            
},function(){
                
self.jcropApi this;
                if (
width >= self.params.minCropSize && height >= self.params.minCropSize) {
                    
self.jcropApi.setSelect(self.getCropInitialSelection(widthheight));
                }
                
self.$step1.hide();
                
self.$step2.show();
                
                if ( 
callback && typeof(callback) === "function" )
                {
                    
callback();
                }
            });
        };
        
image.src url;
    };

    if ( 
self.params.step == )
    {
        
self.$backButton.closest(".peep_button").hide();

        
// join form
        
if ( self.params.inputId ) {

            
self.$step2.hide();
            
PEEP.inProgressNode(self.$preloader);
            
self.$preloader.show();

            var 
file document.getElementById(self.params.inputId).files[0];

            if ( 
file ) {
                var 
reader = new FileReader();
                
reader.onload = function(e) {
                    var 
image = new Image();
                    
image.onload = function(e) {
                        var 
width this.width;
                        var 
height this.height;
                        if (
width self.params.minCropSize || height self.params.minCropSize) {
                            
PEEP.error(PEEP.getLanguageText('base''avatar_image_too_small', { width self.params.minCropSizeheight self.params.minCropSize }));
                            
document.avatarFloatBox.close();
                            $(
"#" self.params.inputId).val("");
                        }
                        else {
                            var 
fd = new FormData();
                            
fd.append('file'file);
                            
self.uploadFile(fd);
                        }
                    };
                    
image.src e.target.result;
                };
                
reader.readAsDataURL(file);
            }
        }
        
// pre-selected item from library
        
else if ( self.params.url && self.params.entityType && self.params.id ) {
            
self.url self.params.url;
            
self.entityType self.params.entityType;
            
self.entityId self.params.entityId;
            
self.id self.params.id;

            
self.initCrop(function(){ self.$preloader.hide(); });
        }
    }

    
this.checkFileType = function(fileType) {
        return 
self.fileTypes.indexOf(fileType.toLowerCase()) !== -1;
    };

    
this.getCropInitialSelection = function(widthheight){
        var 
xC width 2yC height 2;
        var 
halfSize width height width height 2;
        var 
padding width height width 0.05 height 0.05;
        
halfSize halfSize padding;

        var 
x1 xC halfSizey1 yC halfSize;
        var 
x2 xC halfSizey2 yC halfSize;

        return [
x1y1x2y2];
    };

    
this.$cropButton.click(function() {
        var 
button = $(this);
        
PEEP.inProgressNode(button);
        
        var 
params = { ajaxFunc'ajaxCropPhoto'coordsself.coordsview_sizeself.$cropTarget.width() };

        if ( 
self.entityType && self.id ) {
            
params.entityType self.entityType;
            
params.entityId self.entityId;
            
params.id self.id;
        }
        else {
            
params.url self.url;
        }

        
// do we need change avatar?
        
params.changeUserAvatar self.params.changeUserAvatar 0;

        $.
ajax({
            
urlself.params.ajaxResponder,
            
type'POST',
            
dataparams,
            
dataType'json',
            
success: function(data) {
                if (
data.result
                {
                    if ( !
self.params.inputId 
                    {
                        
PEEP.info(PEEP.getLanguageText('base''avatar_changed'));
                    }

                    
PEEP.trigger('base.avatar_cropped'data); // Listen this event to update interface
                    
document.avatarFloatBox.close();
                }
                else 
                {
                    if ( 
data.error )
                    {
                        
PEEP.error(data.error);
                    }
                    else
                    {
                        
PEEP.error(PEEP.getLanguageText('base''crop_avatar_failed'));
                    }
                }
                
                
PEEP.activateNode(button);
            }
        });
    });

    
this.$backButton.click(function(){
        
self.$step2.hide();
        
self.$step1.show();
        
document.avatarFloatBox.$header.find(".floatbox_title span").html(PEEP.getLanguageText('base''avatar_change'));
    });

    
this.$dropArea.click(function(){
        
self.$fileInput.trigger('click');
    });

    
self.$fileInput.change(function(e){
        var 
files e.target.files || (e.dataTransfer && e.dataTransfer.files);

        if ( !
files || !self.checkFileType(files[0].type) ) {
            
PEEP.error(PEEP.getLanguageText('base''not_valid_image'));

            return;
        }

        var 
height self.$step1.height();
        
self.$preloader.height(height);

        
self.$step1.hide();
        
PEEP.inProgressNode(self.$preloader);
        
self.$preloader.show();

        var 
reader = new FileReader();
        
reader.onload = function(e) {
            var 
image = new Image();
            
image.onload = function(e) {
                var 
width this.width;
                var 
height this.height;
                if (
width self.params.minCropSize || height self.params.minCropSize) {
                    
PEEP.error(PEEP.getLanguageText('base''avatar_image_too_small', { width self.params.minCropSizeheight self.params.minCropSize }));
                    
                    
self.$step1.show();
                    
PEEP.activateNode(self.$preloader);
                    
self.$preloader.hide();
                }
                else {
                    var 
fd = new FormData();
                    
fd.append('file'files[0]);
                    
self.uploadFile(fd);
                }
            };
            
image.src e.target.result;
        };
        
reader.readAsDataURL(files[0]);
    });

    
this.$dropArea.on('dragenter', function(e) {
        
e.stopPropagation();
        
e.preventDefault();
        
self.$dropAreaLabel.html(PEEP.getLanguageText('base''drop_image_here'));
    });
    
this.$dropArea.on('dragleave', function(e) {
        
self.$dropAreaLabel.html(PEEP.getLanguageText('base''drag_image_or_browse'));
    });
    
this.$dropArea.on('drop', function(e){
        
e.preventDefault();

        var 
files e.target.files || (e.dataTransfer && e.dataTransfer.files);
        
        if (
files && files.length 1) {
            
PEEP.error(PEEP.getLanguageText('base''avatar_drop_single_image'));
        }
        else {
            if ( !
files || !self.checkFileType(files[0].type) ) {
                
PEEP.error(PEEP.getLanguageText('base''not_valid_image'));
            }
            else {
                var 
height self.$step1.height();
                
self.$preloader.height(height);
                
                
PEEP.inProgressNode(self.$preloader);
                
self.$preloader.show();
                
                
self.$step1.hide();
                
                var 
fd = new FormData();
                
fd.append('file'files[0]);
                
self.uploadFile(fd);
            }
        }

        
self.$dropAreaLabel.html(PEEP.getLanguageText('base''drag_image_or_browse'));
    });

    
this.uploadFile = function(formData)
    {
        
formData.append('ajaxFunc''ajaxUploadImage');

        var 
jqXHR = $.ajax({
            
xhr: function() {
                var 
xhrobj = $.ajaxSettings.xhr();
                if (
xhrobj.upload) {
                    
xhrobj.upload.addEventListener('progress', function(event) {
                        var 
percent 0;
                        var 
position event.loaded || event.position;
                        var 
total event.total;
                        if (
event.lengthComputable) {
                            
percent Math.ceil(position total 100);
                        }
                    }, 
false);
                }
                return 
xhrobj;
            },
            
urlself.params.ajaxResponder,
            
type"POST",
            
dataType'json',
            
contentTypefalse,
            
processDatafalse,
            
cachefalse,
            
dataformData,
            
success: function(data){
                if (
data.result) {
                    var 
ts = new Date().getTime();
                    
self.url data.url;
                    
                    
self.initCrop(function(){ self.$preloader.hide(); });
                }
                else
                {
                    if ( 
data.error )
                    {
                        
PEEP.error(data.error);
                    }
                    else
                    {
                        
PEEP.error('Undefined error!');
                    }
                    
document.avatarFloatBox.close();
                }
            }
        });
    };

    $(
"body").on("click"".peep_photo_avatar_hover", function(){
        var 
image = new Image();
        var 
$btn = $(this).find(".avatar_select");
        var 
node = $(this).parents(".peep_photo_item:eq(0)");
        
        
$btn.hide();
        
node.addClass("peep_avatar_preloader");
        var 
timeout;
        
        function 
hidePreolader () {
            
node.removeClass("peep_avatar_preloader");
            
$btn.show();
            
timeout && window.clearTimeout(timeout);
        }
        
        var 
load = function(e) {                           
            
            if (
this.width self.params.minCropSize || this.height self.params.minCropSize) {
                
PEEP.error(PEEP.getLanguageText('base''avatar_image_too_small', { width self.params.minCropSizeheight self.params.minCropSize }));
                
hidePreolader();
            }
            else {
                
self.id $btn.data("id");
                
self.url $btn.data("url");
                
self.entityId $btn.data("eid");
                
self.entityType $btn.data("type");
                
                
self.initCrophidePreolader );
            }
        };
        
        
image.onload load;
        
        
timeout window.setTimeout(hidePreolader30000);
        
        
image.src $btn.data("url");
    });

//    document.avatarFloatBox.bind('close', function(){
//        $("body").off("click", ".avatar_select");
//
//        if (self.params.step == 2 && self.params.inputId){
//            $("#" + self.params.inputId).val("");
//        }
//    });

    
$(".avatar_load_more").click(function(){
        var 
$moreBtn = $(this);
        var 
$parent $moreBtn.parent();
        var 
offset $moreBtn.data("offset");

        
$moreBtn.data("offset"offset self.params.limit);

        
$parent.addClass("peep_preloader");
        $.
ajax({
            
urlself.params.ajaxResponder,
            
type'POST',
            
data: { ajaxFunc'ajaxLoadMore'entityType $moreBtn.data("type"), entityId $moreBtn.data("id"), offset offset },
            
dataType'json',
            
success: function(data){
                if (
data.result) {
                    var 
$item $parent.closest(".peep_photo_item_wrap");

                    
$item.prev().show();
                    
$item.before(data.markup);
                    
PEEP.updateScroll($('.peep_photo_library_wrap'));
                    
$parent.removeClass("peep_preloader");

                    if ( 
$moreBtn.data("offset") >= data.count )
                    {
                        
$item.hide();
                    }
                }
            }
        });
    });
};
?>
Онлайн: 1
Реклама