Merge branch 'master' into subadmin

This commit is contained in:
Georg Ehrke 2012-07-21 17:01:45 +02:00
commit 6ccd4e0cfb
1 changed files with 129 additions and 84 deletions

View File

@ -12,10 +12,38 @@ String.prototype.strip_tags = function(){
Contacts={
UI:{
/**
* Arguments:
* message: The text message to show. The only mandatory parameter.
* timeout: The timeout in seconds before the notification disappears. Default 10.
* timeouthandler: A function to run on timeout.
* clickhandler: A function to run on click. If a timeouthandler is given it will be cancelled.
* data: An object that will be passed as argument to the timeouthandler and clickhandler functions.
*/
notify:function(params) {
$('#notification').text(params.message);
$('#notification').fadeIn();
setTimeout(function() {$('#notification').fadeOut();}, 10000);
var notifier = $('#notification');
notifier.text(params.message);
notifier.fadeIn();
var timer = setTimeout(function() {
notifier.fadeOut();
if(params.timeouthandler && $.isFunction(params.timeouthandler)) {
params.timeouthandler(notifier.data(dataid));
notifier.off('click');
notifier.data(dataid, null);
}
}, params.timeout && $.isNumeric(params.timeout) ? parseInt(params.timeout)*1000 : 10000);
var dataid = timer.toString();
if(params.data) {
notifier.data(dataid, params.data);
}
if(params.clickhandler && $.isFunction(params.clickhandler)) {
notifier.on('click', function() {
clearTimeout(timer);
notifier.off('click');
params.clickhandler(notifier.data(dataid));
notifier.data(dataid, null);
});
}
},
notImplemented:function() {
OC.dialogs.alert(t('contacts', 'Sorry, this functionality has not been implemented yet'), t('contacts', 'Not implemented'));
@ -96,7 +124,7 @@ Contacts={
$('.addresscard,.propertylist li,.propertycontainer').hover(
function () {
$(this).find('.globe,.mail,.delete,.edit').animate({ opacity: 1.0 }, 200, function() {});
},
},
function () {
$(this).find('.globe,.mail,.delete,.edit').animate({ opacity: 0.1 }, 200, function() {});
}
@ -107,7 +135,7 @@ Contacts={
obj.tipsy('hide');
Contacts.UI.Card.deleteProperty(obj, 'single');
}
var goToUrl = function(obj) {
var url = Contacts.UI.propertyContainerFor(obj).find('#url').val();
if(url != '') {
@ -115,7 +143,7 @@ Contacts={
newWindow.focus();
}
}
$('#identityprops a.delete').click( function() { deleteItem($(this)) });
$('#identityprops a.delete').keydown( function() { deleteItem($(this)) });
$('#categories_value a.edit').click( function() { $(this).tipsy('hide');OCCategories.edit(); } );
@ -140,7 +168,7 @@ Contacts={
});
$('#edit_name').click(function(){Contacts.UI.Card.editName()});
$('#edit_name').keydown(function(){Contacts.UI.Card.editName()});
$('#phototools li a').click(function() {
$(this).tipsy('hide');
});
@ -167,13 +195,13 @@ Contacts={
OC.dialogs.filepicker(t('contacts', 'Select photo'), Contacts.UI.Card.cloudPhotoSelected, false, 'image', true);
});
/* Initialize the photo edit dialog */
$('#edit_photo_dialog').dialog({
$('#edit_photo_dialog').dialog({
autoOpen: false, modal: true, height: 'auto', width: 'auto'
});
$('#edit_photo_dialog' ).dialog( 'option', 'buttons', [
{
text: "Ok",
click: function() {
click: function() {
Contacts.UI.Card.savePhoto(this);
$(this).dialog('close');
}
@ -183,7 +211,7 @@ Contacts={
click: function() { $(this).dialog('close'); }
}
] );
// Name has changed. Update it and reorder.
$('#fn').change(function(){
var name = $('#fn').val().strip_tags();
@ -198,16 +226,16 @@ Contacts={
Contacts.UI.Contacts.scrollTo(Contacts.UI.Card.id);
});
$('#contacts_deletecard').click( function() { Contacts.UI.Card.doDelete();return false;} );
$('#contacts_deletecard').keydown( function(event) {
$('#contacts_deletecard').click( function() { Contacts.UI.Card.delayedDelete();return false;} );
$('#contacts_deletecard').keydown( function(event) {
if(event.which == 13 || event.which == 32) {
Contacts.UI.Card.doDelete();
Contacts.UI.Card.delayedDelete();
}
return false;
});
$('#contacts_downloadcard').click( function() { Contacts.UI.Card.doExport();return false;} );
$('#contacts_downloadcard').keydown( function(event) {
$('#contacts_downloadcard').keydown( function(event) {
if(event.which == 13 || event.which == 32) {
Contacts.UI.Card.doExport();
}
@ -222,12 +250,12 @@ Contacts={
$('#contacts_details_photo_wrapper').bind('dragover',function(event){
$(event.target).addClass('droppable');
event.stopPropagation();
event.preventDefault();
event.preventDefault();
});
$('#contacts_details_photo_wrapper').bind('dragleave',function(event){
$(event.target).removeClass('droppable');
//event.stopPropagation();
//event.preventDefault();
//event.preventDefault();
});
$('#contacts_details_photo_wrapper').bind('drop',function(event){
event.stopPropagation();
@ -313,10 +341,10 @@ Contacts={
if($('.contacts li').length > 0) {
$.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':newid},function(jsondata){
if(jsondata.status == 'success'){
if(bookid == 'unknown') {
bookid = jsondata.data.addressbookid;
if(bookid == 'unknown') {
bookid = jsondata.data.addressbookid;
var contact = Contacts.UI.Contacts.insertContact({
contactlist:$('#contacts ul[data-id="'+bookid+'"]'),
contactlist:$('#contacts ul[data-id="'+bookid+'"]'),
data:jsondata.data
});
}
@ -330,7 +358,7 @@ Contacts={
});
}
}
// Make sure proper DOM is loaded.
if(!$('#card').length && newid) {
console.log('Loading card DOM');
@ -415,7 +443,7 @@ Contacts={
}
});
}
if(!$('#card').length) {
console.log('Loading card DOM');
$.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{'requesttoken': requesttoken},function(jsondata){
@ -432,47 +460,56 @@ Contacts={
localAddcontact(n, fn, aid, isnew);
}
},
doDelete:function() {
delayedDelete:function() {
$('#contacts_deletecard').tipsy('hide');
OC.dialogs.confirm(t('contacts', 'Are you sure you want to delete this contact?'), t('contacts', 'Warning'), function(answer) {
if(answer == true) {
$.post(OC.filePath('contacts', 'ajax', 'deletecard.php'),{'id':Contacts.UI.Card.id},function(jsondata){
if(jsondata.status == 'success'){
var newid = '', bookid;
var curlistitem = $('#contacts li[data-id="'+jsondata.data.id+'"]');
var newlistitem = curlistitem.prev('li');
if(!newlistitem) {
newlistitem = curlistitem.next('li');
}
curlistitem.remove();
if($(newlistitem).is('li')) {
newid = newlistitem.data('id');
bookid = newlistitem.data('bookid');
}
$('#rightcontent').data('id',newid);
this.id = this.fn = this.fullname = this.shortname = this.famname = this.givname = this.addname = this.honpre = this.honsuf = '';
this.data = undefined;
if($('.contacts li').length > 0) { // Load first in list.
Contacts.UI.Card.update({cid:newid, aid:bookid});
} else {
// load intro page
$.getJSON(OC.filePath('contacts', 'ajax', 'loadintro.php'),{},function(jsondata){
if(jsondata.status == 'success'){
id = '';
$('#rightcontent').data('id','');
$('#rightcontent').html(jsondata.data.page);
}
else{
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
}
}
else{
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
var newid = '', bookid;
var curlistitem = $('#contacts li[data-id="'+Contacts.UI.Card.id+'"]');
curlistitem.removeClass('active');
var newlistitem = curlistitem.prev('li');
if(!newlistitem) {
newlistitem = curlistitem.next('li');
}
curlistitem.detach();
if($(newlistitem).is('li')) {
newid = newlistitem.data('id');
bookid = newlistitem.data('bookid');
}
$('#rightcontent').data('id',newid);
this.id = this.fn = this.fullname = this.shortname = this.famname = this.givname = this.addname = this.honpre = this.honsuf = '';
this.data = undefined;
if($('.contacts li').length > 0) { // Load first in list.
Contacts.UI.Card.update({cid:newid, aid:bookid});
} else {
// load intro page
$.getJSON(OC.filePath('contacts', 'ajax', 'loadintro.php'),{},function(jsondata){
if(jsondata.status == 'success'){
id = '';
$('#rightcontent').data('id','');
$('#rightcontent').html(jsondata.data.page);
}
else{
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
}
Contacts.UI.notify({
data:curlistitem,
message:t('contacts','Click to undo deletion of "') + curlistitem.find('a').text() + '"',
timeouthandler:function(contact) {
Contacts.UI.Card.doDelete(contact.data('id'));
delete contact;
},
clickhandler:function(contact) {
Contacts.UI.Contacts.insertContact({contact:contact});
Contacts.UI.notify({message:t('contacts', 'Cancelled deletion of: "') + curlistitem.find('a').text() + '"'});
}
});
},
doDelete:function(id) {
$.post(OC.filePath('contacts', 'ajax', 'deletecard.php'),{'id':id},function(jsondata) {
if(jsondata.status == 'error'){
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
return false;
@ -524,7 +561,7 @@ Contacts={
$('#contacts_propertymenu_dropdown a[data-type="'+propname+'"]').parent().hide();
var property = this.data[propname][0];
var value = property['value'], checksum = property['checksum'];
if(propname == 'BDAY') {
var val = $.datepicker.parseDate('yy-mm-dd', value.substring(0, 10));
value = $.datepicker.formatDate('dd-mm-yy', val);
@ -589,7 +626,7 @@ Contacts={
$.each(names, function(key, value) {
$('#fn_select')
.append($('<option></option>')
.text(value));
.text(value));
});
$('#fn_select').combobox('value', this.fn);
$('#contact_identity').find('*[data-element="N"]').data('checksum', this.data.N[0]['checksum']);
@ -840,7 +877,7 @@ Contacts={
title: t('contacts', 'Edit name'),
height: 'auto', width: 'auto',
buttons: {
'Ok':function() {
'Ok':function() {
Contacts.UI.Card.saveName(this);
$(this).dialog('close');
},
@ -891,9 +928,9 @@ Contacts={
$.each(names, function(key, value) {
$('#fn_select')
.append($('<option></option>')
.text(value));
.text(value));
});
if(this.id == '') {
var aid = $(dlg).find('#aid').val();
Contacts.UI.Card.add(n.join(';'), $('#short').text(), aid);
@ -957,7 +994,7 @@ Contacts={
container = $('#addressdisplay dl').last();
container.removeClass('template').addClass('propertycontainer');
} else {
params['checksum'] = Contacts.UI.checksumFor(obj);
params['checksum'] = Contacts.UI.checksumFor(obj);
}
/* Initialize the address edit dialog */
if($('#edit_address_dialog').dialog('isOpen') == true){
@ -1173,7 +1210,7 @@ Contacts={
$('#phototools li a').tipsy('hide');
var wrapper = $('#contacts_details_photo_wrapper');
wrapper.addClass('loading').addClass('wait');
var img = new Image();
$(img).load(function () {
$('img.contacts_details_photo').remove()
@ -1182,9 +1219,9 @@ Contacts={
$(this).insertAfter($('#phototools')).fadeIn();
}).error(function () {
// notify the user that the image could not be loaded
$(t('contacts','something went wrong.')).insertAfter($('#phototools'));
Contacts.UI.notify({message:t('contacts','Error loading profile picture.')});
}).attr('src', OC.linkTo('contacts', 'photo.php')+'?id='+self.id+refreshstr);
$.getJSON(OC.filePath('contacts', 'ajax', 'loadphoto.php'),{'id':this.id, 'refresh': refresh},function(jsondata){
if(jsondata.status == 'success'){
$('#contacts_details_photo_wrapper').data('checksum', jsondata.data.checksum);
@ -1430,7 +1467,7 @@ Contacts={
var displayname = $("#displayname_"+bookid).val().trim();
var active = $("#edit_active_"+bookid+":checked").length;
var description = $("#description_"+bookid).val();
if(displayname.length == 0) {
OC.dialogs.alert(t('contacts', 'Displayname cannot be empty.'), t('contacts', 'Error'));
return false;
@ -1498,13 +1535,21 @@ Contacts={
alert('Dropping address books not implemented yet');
},
/**
* @params params An object with the propeties 'contactlist':a jquery object of the ul to insert into,
* 'contacts':a jquery object of all items in the list and either 'data': an object with the properties
* @params params An object with the properties 'contactlist':a jquery object of the ul to insert into,
* 'contacts':a jquery object of all items in the list and either 'data': an object with the properties
* id, addressbookid and displayname or 'contact': a listitem to be inserted directly.
* If 'contacts' is defined the new contact will be inserted alphabetically into the list, otherwise
* it will be appended.
* If 'contactlist' or 'contacts' aren't defined they will be search for based in the properties in 'data'.
*/
insertContact:function(params) {
if(!params.contactlist) {
// FIXME: Check if contact really exists.
var bookid = params.data ? params.data.addressbookid : params.contact.data('bookid');
params.contactlist = $('#contacts ul[data-id="'+bookid+'"]');
}
if(!params.contacts) {
var bookid = params.data ? params.data.addressbookid : params.contact.data('bookid');
params.contacts = $('#contacts ul[data-id="'+bookid+'"] li');
}
var contact = params.data
? $('<li data-id="'+params.data.id+'" data-bookid="'+params.data.addressbookid+'" role="button"><a href="'+OC.linkTo('contacts', 'index.php')+'&id='+params.data.id+'" style="background: url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+params.data.id+') no-repeat scroll 0% 0% transparent;">'+params.data.displayname+'</a></li>')
: params.contact;
@ -1545,7 +1590,7 @@ Contacts={
$.getJSON(OC.filePath('contacts', 'ajax', 'contacts.php'),opts,function(jsondata){
if(jsondata.status == 'success'){
var books = jsondata.data.entries;
$.each(books, function(b, book) {
$.each(books, function(b, book) {
if($('#contacts h3[data-id="'+b+'"]').length == 0) {
firstrun = true;
if($('#contacts h3').length == 0) {
@ -1564,7 +1609,7 @@ Contacts={
if(!added) {
$('#contacts').append(item);
}
}
}
$('#contacts h3[data-id="'+b+'"]').on('click', function(event) {
@ -1644,13 +1689,13 @@ $(document).ready(function(){
$('#notification').click(function(){
$('#notification').fadeOut();
});
$('#chooseaddressbook').click(Contacts.UI.Addressbooks.overview);
$('#chooseaddressbook').keydown(Contacts.UI.Addressbooks.overview);
$('#contacts_newcontact').click(Contacts.UI.Card.editNew);
$('#contacts_newcontact').keydown(Contacts.UI.Card.editNew);
// Load a contact.
$('.contacts').keydown(function(event) {
if(event.which == 13 || event.which == 32) {
@ -1722,7 +1767,7 @@ $(document).ready(function(){
}
}
};
fileUpload.onprogress = function(e){
if (e.lengthComputable){
var _progress = Math.round((e.loaded * 100) / e.total);
@ -1752,7 +1797,7 @@ $(document).ready(function(){
$(function() {
var uploadingFiles = {}, numfiles = 0, uploadedfiles = 0, retries = 0;
var aid;
$('#import_upload_start').fileupload({
dropZone: $('#contacts'), // restrict dropZone to contacts list.
acceptFileTypes: /^text\/(directory|vcard|x-vcard)$/i,
@ -1914,7 +1959,7 @@ $(document).ready(function(){
$(this).dialog('close');
}
},
'Cancel':function() {
'Cancel':function() {
$(this).dialog('close');
numfiles = uploadedfiles = retries = aid = 0;
uploadingFiles = {};
@ -1941,11 +1986,11 @@ $(document).ready(function(){
}
if(data.dataType != 'iframe ') {
$('#upload input.stop').hide();
}
}
}
})
});
Contacts.UI.loadHandlers();
Contacts.UI.Contacts.update({cid:id});
});