summaryrefslogtreecommitdiffstats
path: root/core/js
diff options
context:
space:
mode:
Diffstat (limited to 'core/js')
-rw-r--r--core/js/avatar.js8
-rw-r--r--core/js/jquery.ocdialog.js3
-rw-r--r--core/js/js.js13
-rw-r--r--core/js/oc-dialogs.js255
-rw-r--r--core/js/share.js2
5 files changed, 277 insertions, 4 deletions
diff --git a/core/js/avatar.js b/core/js/avatar.js
index 410182f01bf..57e6daa0930 100644
--- a/core/js/avatar.js
+++ b/core/js/avatar.js
@@ -1,7 +1,9 @@
$(document).ready(function(){
- $('#header .avatardiv').avatar(OC.currentUser, 32);
- // Personal settings
- $('#avatar .avatardiv').avatar(OC.currentUser, 128);
+ if (OC.currentUser) {
+ $('#header .avatardiv').avatar(OC.currentUser, 32);
+ // Personal settings
+ $('#avatar .avatardiv').avatar(OC.currentUser, 128);
+ }
// User settings
$.each($('td.avatar .avatardiv'), function(i, element) {
$(element).avatar($(element).parent().parent().data('uid'), 32);
diff --git a/core/js/jquery.ocdialog.js b/core/js/jquery.ocdialog.js
index f1836fd4727..02cd6ac1466 100644
--- a/core/js/jquery.ocdialog.js
+++ b/core/js/jquery.ocdialog.js
@@ -103,6 +103,9 @@
}
$.each(value, function(idx, val) {
var $button = $('<button>').text(val.text);
+ if (val.classes) {
+ $button.addClass(val.classes);
+ }
if(val.defaultButton) {
$button.addClass('primary');
self.$defaultButton = $button;
diff --git a/core/js/js.js b/core/js/js.js
index cb7287c02ae..b7f7ff1ac15 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -723,11 +723,17 @@ $(document).ready(function(){
}
}else if(event.keyCode===27){//esc
OC.search.hide();
+ if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
+ FileList.unfilter();
+ }
}else{
var query=$('#searchbox').val();
if(OC.search.lastQuery!==query){
OC.search.lastQuery=query;
OC.search.currentResult=-1;
+ if (FileList && typeof FileList.filter === 'function') { //TODO add hook system
+ FileList.filter(query);
+ }
if(query.length>2){
OC.search(query);
}else{
@@ -840,6 +846,13 @@ function formatDate(date){
return $.datepicker.formatDate(datepickerFormatDate, date)+' '+date.getHours()+':'+((date.getMinutes()<10)?'0':'')+date.getMinutes();
}
+// taken from http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery
+function getURLParameter(name) {
+ return decodeURI(
+ (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search) || [, null])[1]
+ );
+}
+
/**
* takes an absolute timestamp and return a string with a human-friendly relative date
* @param int a Unix timestamp
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 8e8a477772b..ac37b109e76 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -220,6 +220,245 @@ var OCdialogs = {
}
});
},
+ _fileexistsshown: false,
+ /**
+ * Displays file exists dialog
+ * @param {object} data upload object
+ * @param {object} original file with name, size and mtime
+ * @param {object} replacement file with name, size and mtime
+ * @param {object} controller with onCancel, onSkip, onReplace and onRename methods
+ */
+ 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([e.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('.template').clone().removeClass('template').addClass('conflict');
+
+ 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));
+ // ie sucks
+ if (replacement.size && replacement.lastModifiedDate) {
+ conflict.find('.replacement .size').text(humanFileSize(replacement.size));
+ conflict.find('.replacement .mtime').text(formatDate(replacement.lastModifiedDate));
+ }
+ var path = getPathForPreview(original.name);
+ lazyLoadPreview(path, original.type, function(previewpath){
+ conflict.find('.original .icon').css('background-image','url('+previewpath+')');
+ }, 96, 96);
+ 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 + ')');
+ });
+ }
+ );
+ conflicts.append(conflict);
+
+ //set more recent mtime bold
+ // ie sucks
+ if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() > original.mtime*1000) {
+ conflict.find('.replacement .mtime').css('font-weight', 'bold');
+ } else if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() < original.mtime*1000) {
+ conflict.find('.original .mtime').css('font-weight', 'bold');
+ } 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');
+ } else if (replacement.size && replacement.size < original.size) {
+ conflict.find('.original .size').css('font-weight', 'bold');
+ } 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) {
+ // controller[selection.defaultAction](data);
+ //} else {
+ var dialog_name = 'oc-dialog-fileexists-content';
+ var dialog_id = '#' + dialog_name;
+ if (this._fileexistsshown) {
+ // add conflict
+
+ var conflicts = $(dialog_id+ ' .conflicts');
+ addConflict(conflicts, original, replacement);
+
+ var count = $(dialog_id+ ' .conflict').length;
+ var title = n('files',
+ '{count} file conflict',
+ '{count} file conflicts',
+ count,
+ {count:count}
+ );
+ $(dialog_id).parent().children('.oc-dialog-title').text(title);
+
+ //recalculate dimensions
+ $(window).trigger('resize');
+
+ } else {
+ //create dialog
+ this._fileexistsshown = true;
+ $.when(this._getFileExistsTemplate()).then(function($tmpl) {
+ var title = t('files','One file conflict');
+ var $dlg = $tmpl.octemplate({
+ dialog_name: dialog_name,
+ title: title,
+ type: 'fileexists',
+
+ why: t('files','Which files do you want to keep?'),
+ what: t('files','If you select both versions, the copied file will have a number added to its name.')
+ });
+ $('body').append($dlg);
+
+ var conflicts = $($dlg).find('.conflicts');
+ addConflict(conflicts, original, replacement);
+
+ buttonlist = [{
+ text: t('core', 'Cancel'),
+ classes: 'cancel',
+ click: function(){
+ if ( typeof controller.onCancel !== 'undefined') {
+ controller.onCancel(data);
+ }
+ $(dialog_id).ocdialog('close');
+ }
+ },
+ {
+ text: t('core', 'Continue'),
+ classes: 'continue',
+ click: function(){
+ if ( typeof controller.onContinue !== 'undefined') {
+ controller.onContinue($(dialog_id + ' .conflict'));
+ }
+ $(dialog_id).ocdialog('close');
+ }
+ }];
+
+ $(dialog_id).ocdialog({
+ width: 500,
+ closeOnEscape: true,
+ modal: true,
+ buttons: buttonlist,
+ closeButton: null,
+ close: function(event, ui) {
+ self._fileexistsshown = false;
+ $(this).ocdialog('destroy').remove();
+ }
+ });
+
+ $(dialog_id).css('height','auto');
+
+ //add checkbox toggling actions
+ $(dialog_id).find('.allnewfiles').on('click', function() {
+ var checkboxes = $(dialog_id).find('.conflict .replacement input[type="checkbox"]');
+ checkboxes.prop('checked', $(this).prop('checked'));
+ });
+ $(dialog_id).find('.allexistingfiles').on('click', function() {
+ var checkboxes = $(dialog_id).find('.conflict .original input[type="checkbox"]');
+ checkboxes.prop('checked', $(this).prop('checked'));
+ });
+ $(dialog_id).find('.conflicts').on('click', '.replacement,.original', function() {
+ var checkbox = $(this).find('input[type="checkbox"]');
+ checkbox.prop('checked', !checkbox.prop('checked'));
+ });
+ $(dialog_id).find('.conflicts').on('click', 'input[type="checkbox"]', function() {
+ var checkbox = $(this);
+ checkbox.prop('checked', !checkbox.prop('checked'));
+ });
+
+ //update counters
+ $(dialog_id).on('click', '.replacement,.allnewfiles', function() {
+ var count = $(dialog_id).find('.conflict .replacement input[type="checkbox"]:checked').length;
+ if (count === $(dialog_id+ ' .conflict').length) {
+ $(dialog_id).find('.allnewfiles').prop('checked', true);
+ $(dialog_id).find('.allnewfiles + .count').text(t('files','(all selected)'));
+ } else if (count > 0) {
+ $(dialog_id).find('.allnewfiles').prop('checked', false);
+ $(dialog_id).find('.allnewfiles + .count').text(t('files','({count} selected)',{count:count}));
+ } else {
+ $(dialog_id).find('.allnewfiles').prop('checked', false);
+ $(dialog_id).find('.allnewfiles + .count').text('');
+ }
+ });
+ $(dialog_id).on('click', '.original,.allexistingfiles', function(){
+ var count = $(dialog_id).find('.conflict .original input[type="checkbox"]:checked').length;
+ if (count === $(dialog_id+ ' .conflict').length) {
+ $(dialog_id).find('.allexistingfiles').prop('checked', true);
+ $(dialog_id).find('.allexistingfiles + .count').text(t('files','(all selected)'));
+ } else if (count > 0) {
+ $(dialog_id).find('.allexistingfiles').prop('checked', false);
+ $(dialog_id).find('.allexistingfiles + .count').text(t('files','({count} selected)',{count:count}));
+ } else {
+ $(dialog_id).find('.allexistingfiles').prop('checked', false);
+ $(dialog_id).find('.allexistingfiles + .count').text('');
+ }
+ });
+ })
+ .fail(function() {
+ alert(t('core', 'Error loading file exists template'));
+ });
+ }
+ //}
+ },
_getFilePickerTemplate: function() {
var defer = $.Deferred();
if(!this.$filePickerTemplate) {
@@ -253,6 +492,22 @@ var OCdialogs = {
}
return defer.promise();
},
+ _getFileExistsTemplate: function () {
+ var defer = $.Deferred();
+ if (!this.$fileexistsTemplate) {
+ var self = this;
+ $.get(OC.filePath('files', 'templates', 'fileexists.html'), function (tmpl) {
+ self.$fileexistsTemplate = $(tmpl);
+ defer.resolve(self.$fileexistsTemplate);
+ })
+ .fail(function () {
+ defer.reject();
+ });
+ } else {
+ defer.resolve(this.$fileexistsTemplate);
+ }
+ return defer.promise();
+ },
_getFileList: function(dir, mimeType) {
if (typeof(mimeType) === "string") {
mimeType = [mimeType];
diff --git a/core/js/share.js b/core/js/share.js
index 094b0be929d..f54f13c95e3 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -483,7 +483,7 @@ $(document).ready(function() {
if (!$('.cruds', this).is(':visible')) {
$('a', this).hide();
if (!$('input[name="edit"]', this).is(':checked')) {
- $('input:[type=checkbox]', this).hide();
+ $('input[type="checkbox"]', this).hide();
$('label', this).hide();
}
} else {