summaryrefslogtreecommitdiffstats
path: root/core/js
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2013-09-07 14:52:56 +0200
committerRobin Appelman <icewind@owncloud.com>2013-09-07 14:58:51 +0200
commit00cc83e3f7ce53840f5cf03a05a3d995355d1925 (patch)
tree220199e7667ac14080f6fbfd090c8c9df9a6a3ac /core/js
parentce035016460d8285d5511e67b389d494eb78c1ce (diff)
downloadnextcloud-server-00cc83e3f7ce53840f5cf03a05a3d995355d1925.tar.gz
nextcloud-server-00cc83e3f7ce53840f5cf03a05a3d995355d1925.zip
show preview for uploading image files on conflict
Diffstat (limited to 'core/js')
-rw-r--r--core/js/oc-dialogs.js87
1 files changed, 71 insertions, 16 deletions
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 82bf49fc3a7..13348b455d1 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -220,12 +220,61 @@ var OCdialogs = {
*/
fileexists:function(data, original, replacement, controller) {
var self = this;
+
+ var getCroppedPreview = function(file) {
+ var deferred = new $.Deferred();
+ // Only process image files.
+ var type = file.type.split('/').shift();
+ if (window.FileReader && type === 'image') {
+ var reader = new FileReader();
+ reader.onload = function (e) {
+ var blob = new Blob([event.target.result]);
+ window.URL = window.URL || window.webkitURL;
+ var originalUrl = window.URL.createObjectURL(blob);
+ var image = new Image();
+ image.src = originalUrl;
+ image.onload = function () {
+ var url = crop(image);
+ deferred.resolve(url);
+ }
+ };
+ reader.readAsArrayBuffer(file);
+ } else {
+ deferred.reject();
+ }
+ return deferred;
+ };
+
+ var crop = function(img) {
+ var canvas = document.createElement('canvas'),
+ width = img.width,
+ height = img.height,
+ x, y, size;
+
+ // calculate the width and height, constraining the proportions
+ if (width > height) {
+ y = 0;
+ x = (width - height) / 2;
+ } else {
+ y = (height - width) / 2;
+ x = 0;
+ }
+ size = Math.min(width, height);
+
+ // resize the canvas and draw the image data into it
+ canvas.width = 64;
+ canvas.height = 64;
+ var ctx = canvas.getContext("2d");
+ ctx.drawImage(img, x, y, size, size, 0, 0, 64, 64);
+ return canvas.toDataURL("image/png", 0.7);
+ };
+
var addConflict = function(conflicts, original, replacement) {
-
+
var conflict = conflicts.find('.conflict.template').clone();
-
+
conflict.data('data',data);
-
+
conflict.find('.filename').text(original.name);
conflict.find('.original .size').text(humanFileSize(original.size));
conflict.find('.original .mtime').text(formatDate(original.mtime*1000));
@@ -238,12 +287,18 @@ var OCdialogs = {
lazyLoadPreview(path, original.type, function(previewpath){
conflict.find('.original .icon').css('background-image','url('+previewpath+')');
});
- getMimeIcon(replacement.type,function(path){
- conflict.find('.replacement .icon').css('background-image','url('+path+')');
- });
+ getCroppedPreview(replacement).then(
+ function(path){
+ conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
+ }, function(){
+ getMimeIcon(replacement.type,function(path){
+ conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
+ });
+ }
+ );
conflict.removeClass('template');
conflicts.append(conflict);
-
+
//set more recent mtime bold
// ie sucks
if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() > original.mtime*1000) {
@@ -253,7 +308,7 @@ var OCdialogs = {
} else {
//TODO add to same mtime collection?
}
-
+
// set bigger size bold
if (replacement.size && replacement.size > original.size) {
conflict.find('.replacement .size').css('font-weight', 'bold');
@@ -262,9 +317,9 @@ var OCdialogs = {
} else {
//TODO add to same size collection?
}
-
+
//TODO show skip action for files with same size and mtime in bottom row
-
+
};
//var selection = controller.getSelection(data.originalFiles);
//if (selection.defaultAction) {
@@ -274,16 +329,16 @@ var OCdialogs = {
var dialog_id = '#' + dialog_name;
if (this._fileexistsshown) {
// add conflict
-
+
var conflicts = $(dialog_id+ ' .conflicts');
addConflict(conflicts, original, replacement);
-
+
var title = t('files','{count} file conflicts',{count:$(dialog_id+ ' .conflict:not(.template)').length});
$(dialog_id).parent().children('.oc-dialog-title').text(title);
-
+
//recalculate dimensions
$(window).trigger('resize');
-
+
} else {
//create dialog
this._fileexistsshown = true;
@@ -334,7 +389,7 @@ var OCdialogs = {
buttons: buttonlist,
closeButton: null
});
-
+
$(dialog_id).css('height','auto');
//add checkbox toggling actions
@@ -354,7 +409,7 @@ var OCdialogs = {
var checkbox = $(this);
checkbox.prop('checked', !checkbox.prop('checked'));
});
-
+
//update counters
$(dialog_id).on('click', '.replacement,.allnewfiles', function() {
var count = $(dialog_id).find('.conflict:not(.template) .replacement input[type="checkbox"]:checked').length;