Seditio Source
Root |
./othercms/xenForo 2.2.8/js/xf/avatar.js
!function($, window, document, _undefined)
{
"use strict";

// ################################## AVATAR UPLOAD HANDLER ###########################################

XF.AvatarUpload = XF.Element.newHandler({

options: {},

init: function()
{
var $form = this.$target,
$file = $form.find('.js-uploadAvatar'),
$avatar = $form.find('.js-avatar'),
$deleteButton = $form.find('.js-deleteAvatar');

if ($avatar.find('img').length)
{
$deleteButton.show();
}
else
{
$deleteButton.hide();
}

$file.on('change', XF.proxy(this, 'changeFile'));
$form.on('ajax-submit:response', XF.proxy(this, 'ajaxResponse'));
},

changeFile: function(e)
{
if ($(e.target).val() != '')
{
this.$target.submit();
}
},

ajaxResponse: function(e, data)
{
if (data.errors || data.exception)
{
return;
}

e.preventDefault();

if (data.message)
{
XF.flashMessage(data.message, 3000);
}

var $form = this.$target,
$delete = $form.find('.js-deleteAvatar'),
$file = $form.find('.js-uploadAvatar'),
$avatar = $form.find('.js-avatar'),
$x = $form.find('.js-avatarX'),
$y = $form.find('.js-avatarY'),
useCustom = ($form.find('input[name="use_custom"]:checked').val() == 1);

if (!useCustom)
{
$('.js-gravatarPreview').attr('src', data.gravatarTest ? data.gravatarPreview : data.gravatarUrl);
if (data.gravatarTest)
{
return;
}
}
else
{
$avatar.css({
left: data.cropX * -1,
top: data.cropX * -1
});
$x.val(data.cropX);
$y.val(data.cropY);
$avatar.data('x', data.cropX);
$avatar.data('y', data.cropY);

XF.Element.initializeElement($avatar);

$file.val('');
}

XF.updateAvatars(data.userId, data.avatars, useCustom);

if (data.defaultAvatars)
{
$delete.hide();
}
else
{
$delete.show();
}

$('.js-avatarCropper').trigger('avatar:updated', data);
}
});

// ################################## AVATAR CROPPER HANDLER ###########################################

XF.AvatarCropper = XF.Element.newHandler({

options: {
size: 96,
x: 0,
y: 0
},

$img: null,
size: 96,

x: 0,
y: 0,

imgW: null,
imgH: null,

cropSize: null,
scale: null,

init: function()
{
this.$target.one('avatar:updated', XF.proxy(this, 'avatarsUpdated'));

this.$img = this.$target.find('img');

if (!this.$img.length)
{
return;
}

this.initTest();
},

avatarsUpdated: function(e, data)
{
this.options.x = data.cropX;
this.options.y = data.cropY;
this.init();
},

initTest: function()
{
var img = this.$img[0],
tests = 0,
self = this;

var test = function()
{
tests++;
if (tests > 50)
{
return;
}

if (img.naturalWidth > 0)
{
self.setup();
}
else if (img.naturalWidth === 0)
{
setTimeout(test, 100);
}
// if no naturalWidth support (IE <9), don't init
};

test();
},

setup: function()
{
this.imgW = this.$img[0].naturalWidth;
this.imgH = this.$img[0].naturalHeight;

this.cropSize = Math.min(this.imgW, this.imgH);
this.scale = this.cropSize / this.options.size;

this.$img.cropbox({
width: this.size,
height: this.size,
zoom: 0,
maxZoom: 0,
controls: false,
showControls: 'never',
result: {
cropX: this.options.x * this.scale,
cropY: this.options.y * this.scale,
cropW: this.cropSize,
cropH: this.cropSize
}
}).on('cropbox', XF.proxy(this, 'onCrop'));

// workaround for image dragging bug in Firefox
// https://bugzilla.mozilla.org/show_bug.cgi?id=1376369
if (XF.browser.mozilla)
{
this.$img.on('mousedown', function(e)
{
e.preventDefault();
});
}
},

onCrop: function(e, results)
{
this.$target.parent().find('.js-avatarX').val(results.cropX / this.scale);
this.$target.parent().find('.js-avatarY').val(results.cropY / this.scale);
}
});

XF.Element.register('avatar-upload', 'XF.AvatarUpload');
XF.Element.register('avatar-cropper', 'XF.AvatarCropper');
}
(jQuery, window, document);