aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/javascripts/profile_photo.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/profile_photo.js')
-rw-r--r--app/assets/javascripts/profile_photo.js100
1 files changed, 55 insertions, 45 deletions
diff --git a/app/assets/javascripts/profile_photo.js b/app/assets/javascripts/profile_photo.js
index 6d637b439..b0bb25e76 100644
--- a/app/assets/javascripts/profile_photo.js
+++ b/app/assets/javascripts/profile_photo.js
@@ -1,49 +1,59 @@
-// Remember to invoke within jQuery(window).load(...)
-// If you don't, Jcrop may not initialize properly
-jQuery(window).load(function(){
- // The size of the initial selection (largest, centreted rectangle)
- var w = jQuery('#profile_photo_cropbox').width();
- var h = jQuery('#profile_photo_cropbox').height();
- var t = 0;
- var l = 0;
- var initial;
- if (h < w) {
- initial = h;
- l = (w - initial) / 2;
- } else {
- initial = w;
- t = (h - initial) / 2;
- }
-
- jQuery('#profile_photo_cropbox').Jcrop({
- onChange: showPreview,
- onSelect: showPreview,
- aspectRatio: 1,
- setSelect: [ l, t, initial, initial ]
- });
+(function($) {
+
+ $(function(){
+
+ // The size of the initial selection (largest, centreted rectangle)
+ var w = jQuery('#profile_photo_cropbox').width();
+ var h = jQuery('#profile_photo_cropbox').height();
+ var t = 0;
+ var l = 0;
+ var initial;
+ if (h < w) {
+ initial = h;
+ l = (w - initial) / 2;
+ } else {
+ initial = w;
+ t = (h - initial) / 2;
+ }
-});
-
-// Our simple event handler, called from onChange and onSelect
-// event handlers, as per the Jcrop invocation above
-function showPreview(coords)
-{
- if (parseInt(coords.w) > 0)
- {
- var rx = 100 / coords.w;
- var ry = 100 / coords.h;
-
- jQuery('#profile_photo_preview').css({
- width: Math.round(rx * jQuery('#profile_photo_cropbox').width()) + 'px',
- height: Math.round(ry * jQuery('#profile_photo_cropbox').height()) + 'px',
- marginLeft: '-' + Math.round(rx * coords.x) + 'px',
- marginTop: '-' + Math.round(ry * coords.y) + 'px'
+ var jcrop_api;
+ var bounds, boundx, boundy;
+
+ $('#profile_photo_cropbox').Jcrop({
+ onChange: showPreview,
+ onSelect: showPreview,
+ aspectRatio: 1
+ },function(){
+ jcrop_api = this;
+ bounds = jcrop_api.getBounds();
+ boundx = bounds[0];
+ boundy = bounds[1];
});
- $('#x').val(coords.x);
- $('#y').val(coords.y);
- $('#w').val(coords.w);
- $('#h').val(coords.h);
- }
-}
+ jcrop_api.setSelect([ l, t, initial, initial ]);
+
+ function showPreview(coords)
+ {
+ if (parseInt(coords.w) > 0)
+ {
+ var rx = 100 / coords.w;
+ var ry = 100 / coords.h;
+
+ $('#profile_photo_preview').css({
+ width: Math.round(rx * boundx) + 'px',
+ height: Math.round(ry * boundy) + 'px',
+ marginLeft: '-' + Math.round(rx * coords.x) + 'px',
+ marginTop: '-' + Math.round(ry * coords.y) + 'px'
+ });
+
+ $('#x').val(coords.x);
+ $('#y').val(coords.y);
+ $('#w').val(coords.w);
+ $('#h').val(coords.h);
+ }
+ };
+
+ });
+
+}(jQuery));