211 lines
7.3 KiB
JavaScript
211 lines
7.3 KiB
JavaScript
/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-var, no-use-before-define, prefer-arrow-callback, no-else-return, consistent-return, prefer-template, quotes, one-var, one-var-declaration-per-line, no-unused-vars, no-return-assign, comma-dangle, quote-props, no-unused-expressions, no-sequences, object-shorthand, max-len */
|
|
(function() {
|
|
gl.ImageFile = (function() {
|
|
var prepareFrames;
|
|
|
|
// Width where images must fits in, for 2-up this gets divided by 2
|
|
ImageFile.availWidth = 900;
|
|
|
|
ImageFile.viewModes = ['two-up', 'swipe'];
|
|
|
|
function ImageFile(file) {
|
|
this.file = file;
|
|
this.requestImageInfo($('.two-up.view .frame.deleted img', this.file), (function(_this) {
|
|
// Determine if old and new file has same dimensions, if not show 'two-up' view
|
|
return function(deletedWidth, deletedHeight) {
|
|
return _this.requestImageInfo($('.two-up.view .frame.added img', _this.file), function(width, height) {
|
|
if (width === deletedWidth && height === deletedHeight) {
|
|
return _this.initViewModes();
|
|
} else {
|
|
return _this.initView('two-up');
|
|
}
|
|
});
|
|
};
|
|
})(this));
|
|
}
|
|
|
|
ImageFile.prototype.initViewModes = function() {
|
|
var viewMode;
|
|
viewMode = ImageFile.viewModes[0];
|
|
$('.view-modes', this.file).removeClass('hide');
|
|
$('.view-modes-menu', this.file).on('click', 'li', (function(_this) {
|
|
return function(event) {
|
|
if (!$(event.currentTarget).hasClass('active')) {
|
|
return _this.activateViewMode(event.currentTarget.className);
|
|
}
|
|
};
|
|
})(this));
|
|
return this.activateViewMode(viewMode);
|
|
};
|
|
|
|
ImageFile.prototype.activateViewMode = function(viewMode) {
|
|
$('.view-modes-menu li', this.file).removeClass('active').filter("." + viewMode).addClass('active');
|
|
return $(".view:visible:not(." + viewMode + ")", this.file).fadeOut(200, (function(_this) {
|
|
return function() {
|
|
$(".view." + viewMode, _this.file).fadeIn(200);
|
|
return _this.initView(viewMode);
|
|
};
|
|
})(this));
|
|
};
|
|
|
|
ImageFile.prototype.initView = function(viewMode) {
|
|
return this.views[viewMode].call(this);
|
|
};
|
|
|
|
ImageFile.prototype.initDraggable = function($el, padding, callback) {
|
|
var dragging = false;
|
|
var $body = $('body');
|
|
var $offsetEl = $el.parent();
|
|
|
|
$el.off('mousedown').on('mousedown', function() {
|
|
dragging = true;
|
|
$body.css('user-select', 'none');
|
|
});
|
|
|
|
$body.off('mouseup').off('mousemove').on('mouseup', function() {
|
|
dragging = false;
|
|
$body.css('user-select', '');
|
|
})
|
|
.on('mousemove', function(e) {
|
|
var left;
|
|
if (!dragging) return;
|
|
|
|
left = e.pageX - ($offsetEl.offset().left + padding);
|
|
|
|
callback(e, left);
|
|
});
|
|
};
|
|
|
|
prepareFrames = function(view) {
|
|
var maxHeight, maxWidth;
|
|
maxWidth = 0;
|
|
maxHeight = 0;
|
|
$('.frame', view).each((function(_this) {
|
|
return function(index, frame) {
|
|
var height, width;
|
|
width = $(frame).width();
|
|
height = $(frame).height();
|
|
maxWidth = width > maxWidth ? width : maxWidth;
|
|
return maxHeight = height > maxHeight ? height : maxHeight;
|
|
};
|
|
})(this)).css({
|
|
width: maxWidth,
|
|
height: maxHeight
|
|
});
|
|
return [maxWidth, maxHeight];
|
|
};
|
|
|
|
ImageFile.prototype.views = {
|
|
'two-up': function() {
|
|
return $('.two-up.view .wrap', this.file).each((function(_this) {
|
|
return function(index, wrap) {
|
|
$('img', wrap).each(function() {
|
|
var currentWidth;
|
|
currentWidth = $(this).width();
|
|
if (currentWidth > ImageFile.availWidth / 2) {
|
|
return $(this).width(ImageFile.availWidth / 2);
|
|
}
|
|
});
|
|
return _this.requestImageInfo($('img', wrap), function(width, height) {
|
|
$('.image-info .meta-width', wrap).text(width + "px");
|
|
$('.image-info .meta-height', wrap).text(height + "px");
|
|
return $('.image-info', wrap).removeClass('hide');
|
|
});
|
|
};
|
|
})(this));
|
|
},
|
|
'swipe': function() {
|
|
var maxHeight, maxWidth;
|
|
maxWidth = 0;
|
|
maxHeight = 0;
|
|
return $('.swipe.view', this.file).each((function(_this) {
|
|
return function(index, view) {
|
|
var $swipeWrap, $swipeBar, $swipeFrame, wrapPadding, ref;
|
|
ref = prepareFrames(view), maxWidth = ref[0], maxHeight = ref[1];
|
|
$swipeFrame = $('.swipe-frame', view);
|
|
$swipeWrap = $('.swipe-wrap', view);
|
|
$swipeBar = $('.swipe-bar', view);
|
|
|
|
$swipeFrame.css({
|
|
width: maxWidth + 16,
|
|
height: maxHeight + 28
|
|
});
|
|
$swipeWrap.css({
|
|
width: maxWidth + 1,
|
|
height: maxHeight + 2
|
|
});
|
|
$swipeBar.css({
|
|
left: 0
|
|
});
|
|
|
|
wrapPadding = parseInt($swipeWrap.css('right').replace('px', ''), 10);
|
|
|
|
_this.initDraggable($swipeBar, wrapPadding, function(e, left) {
|
|
if (left > 0 && left < $swipeFrame.width() - (wrapPadding * 2)) {
|
|
$swipeWrap.width((maxWidth + 1) - left);
|
|
$swipeBar.css('left', left);
|
|
}
|
|
});
|
|
};
|
|
})(this));
|
|
},
|
|
'onion-skin': function() {
|
|
var dragTrackWidth, maxHeight, maxWidth;
|
|
maxWidth = 0;
|
|
maxHeight = 0;
|
|
dragTrackWidth = $('.drag-track', this.file).width() - $('.dragger', this.file).width();
|
|
return $('.onion-skin.view', this.file).each((function(_this) {
|
|
return function(index, view) {
|
|
var $frame, $track, $dragger, $frameAdded, framePadding, ref, dragging = false;
|
|
ref = prepareFrames(view), maxWidth = ref[0], maxHeight = ref[1];
|
|
$frame = $('.onion-skin-frame', view);
|
|
$frameAdded = $('.frame.added', view);
|
|
$track = $('.drag-track', view);
|
|
$dragger = $('.dragger', $track);
|
|
|
|
$frame.css({
|
|
width: maxWidth + 16,
|
|
height: maxHeight + 28
|
|
});
|
|
$('.swipe-wrap', view).css({
|
|
width: maxWidth + 1,
|
|
height: maxHeight + 2
|
|
});
|
|
$dragger.css({
|
|
left: dragTrackWidth
|
|
});
|
|
|
|
framePadding = parseInt($frameAdded.css('right').replace('px', ''), 10);
|
|
|
|
_this.initDraggable($dragger, framePadding, function(e, left) {
|
|
var opacity = left / dragTrackWidth;
|
|
|
|
if (opacity >= 0 && opacity <= 1) {
|
|
$dragger.css('left', left);
|
|
$frameAdded.css('opacity', opacity);
|
|
}
|
|
});
|
|
};
|
|
})(this));
|
|
}
|
|
};
|
|
|
|
ImageFile.prototype.requestImageInfo = function(img, callback) {
|
|
var domImg;
|
|
domImg = img.get(0);
|
|
if (domImg) {
|
|
if (domImg.complete) {
|
|
return callback.call(this, domImg.naturalWidth, domImg.naturalHeight);
|
|
} else {
|
|
return img.on('load', (function(_this) {
|
|
return function() {
|
|
return callback.call(_this, domImg.naturalWidth, domImg.naturalHeight);
|
|
};
|
|
})(this));
|
|
}
|
|
}
|
|
};
|
|
|
|
return ImageFile;
|
|
})();
|
|
}).call(window);
|