Merge branch 'master' into subadmin
This commit is contained in:
commit
6ccd4e0cfb
|
@ -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});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue