aboutsummaryrefslogtreecommitdiffstats
path: root/core/js
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@owncloud.com>2013-09-23 12:44:11 +0200
committerAndreas Fischer <bantu@owncloud.com>2013-09-23 12:44:11 +0200
commit4a9f1cc74d7323b43983023c2b5b28e550e8c85d (patch)
tree13b09a7b9bc56eaffa3872de0260896b2916ca30 /core/js
parent2a17025d537c41b9366c9592c985b911d9394337 (diff)
parent9851f0f4f2a97dc6ac1382bcd533eb23feffa4e0 (diff)
downloadnextcloud-server-4a9f1cc74d7323b43983023c2b5b28e550e8c85d.tar.gz
nextcloud-server-4a9f1cc74d7323b43983023c2b5b28e550e8c85d.zip
Merge remote-tracking branch 'owncloud/master' into fixing-4866-master
* owncloud/master: (98 commits) [tx-robot] updated from transifex files: when filtering search results, ensure results are children of the fakeroot not just path starting the same setting a default on filecache column unencrypted_size [tx-robot] updated from transifex remove unneccessary lib in namespace namespaces use upcasefirst parts when _ is left in namespace and files are named after their classes the autoloader will also find classes in the lib folder of an app its magic! initialize variable calculate correct permissions while toggle the password protection make sure that both $permissions and $oldPermissions have the same type Add copyright, remove starting blank line update inherit docs comment Fix insert/update/delete helper functions for oracle Add missing return true statements to legacy preferences functions Add missing static Convert OC_Preference to object interface fix race condition in lazy preview loading use {count} instead of 'One' for more versatile translation fix double translation of error message use n to translate title fixing typos and l10n ... Conflicts: tests/lib/files/cache/scanner.php
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.js24
-rw-r--r--core/js/oc-dialogs.js255
-rw-r--r--core/js/share.js15
5 files changed, 299 insertions, 6 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 c09f80369f9..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
@@ -906,7 +919,7 @@ OC.set=function(name, value) {
* @param {type} start
* @param {type} end
*/
-$.fn.selectRange = function(start, end) {
+jQuery.fn.selectRange = function(start, end) {
return this.each(function() {
if (this.setSelectionRange) {
this.focus();
@@ -922,6 +935,15 @@ $.fn.selectRange = function(start, end) {
};
/**
+ * check if an element exists.
+ * allows you to write if ($('#myid').exists()) to increase readability
+ * @link http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery
+ */
+jQuery.fn.exists = function(){
+ return this.length > 0;
+}
+
+/**
* Calls the server periodically every 15 mins to ensure that session doesnt
* time out
*/
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 5d34faf8a5d..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 {
@@ -603,7 +603,18 @@ $(document).ready(function() {
if (!$('#showPassword').is(':checked') ) {
var itemType = $('#dropdown').data('item-type');
var itemSource = $('#dropdown').data('item-source');
- OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', OC.PERMISSION_READ);
+ var allowPublicUpload = $('#sharingDialogAllowPublicUpload').is(':checked');
+ var permissions = 0;
+
+ // Calculate permissions
+ if (allowPublicUpload) {
+ permissions = OC.PERMISSION_UPDATE + OC.PERMISSION_CREATE + OC.PERMISSION_READ;
+ } else {
+ permissions = OC.PERMISSION_READ;
+ }
+
+
+ OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', permissions);
} else {
$('#linkPassText').focus();
}