aboutsummaryrefslogtreecommitdiffstats
path: root/apps/contacts/js/contacts.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/contacts/js/contacts.js')
-rw-r--r--apps/contacts/js/contacts.js2277
1 files changed, 0 insertions, 2277 deletions
diff --git a/apps/contacts/js/contacts.js b/apps/contacts/js/contacts.js
deleted file mode 100644
index 09cf26bf7fe..00000000000
--- a/apps/contacts/js/contacts.js
+++ /dev/null
@@ -1,2277 +0,0 @@
-function ucwords (str) {
- return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
- return $1.toUpperCase();
- });
-}
-
-String.prototype.strip_tags = function(){
- tags = this;
- stripped = tags.replace(/<(.|\n)*?>/g, '');
- return stripped;
-};
-
-OC.Contacts={
- /**
- * Arguments:
- * message: The text message to show.
- * 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.
- * cancel: If set cancel all ongoing timer events and hide the notification.
- */
- notify:function(params) {
- var self = this;
- if(!self.notifier) {
- self.notifier = $('#notification');
- }
- if(params.cancel) {
- self.notifier.off('click');
- for(var id in self.notifier.data()) {
- if($.isNumeric(id)) {
- clearTimeout(parseInt(id));
- }
- }
- self.notifier.text('').fadeOut().removeData();
- return;
- }
- self.notifier.text(params.message);
- self.notifier.fadeIn();
- self.notifier.on('click', function() { $(this).fadeOut();});
- var timer = setTimeout(function() {
- if(!self || !self.notifier) {
- var self = OC.Contacts;
- self.notifier = $('#notification');
- }
- self.notifier.fadeOut();
- if(params.timeouthandler && $.isFunction(params.timeouthandler)) {
- params.timeouthandler(self.notifier.data(dataid));
- self.notifier.off('click');
- self.notifier.removeData(dataid);
- }
- }, params.timeout && $.isNumeric(params.timeout) ? parseInt(params.timeout)*1000 : 10000);
- var dataid = timer.toString();
- if(params.data) {
- self.notifier.data(dataid, params.data);
- }
- if(params.clickhandler && $.isFunction(params.clickhandler)) {
- self.notifier.on('click', function() {
- if(!self || !self.notifier) {
- var self = OC.Contacts;
- self.notifier = $(this);
- }
- clearTimeout(timer);
- self.notifier.off('click');
- params.clickhandler(self.notifier.data(dataid));
- self.notifier.removeData(dataid);
- });
- }
- },
- notImplemented:function() {
- OC.dialogs.alert(t('contacts', 'Sorry, this functionality has not been implemented yet'), t('contacts', 'Not implemented'));
- },
- searchOSM:function(obj) {
- var adr = OC.Contacts.propertyContainerFor(obj).find('.adr').val();
- if(adr == undefined) {
- OC.dialogs.alert(t('contacts', 'Couldn\'t get a valid address.'), t('contacts', 'Error'));
- return;
- }
- // FIXME: I suck at regexp. /Tanghus
- var adrarr = adr.split(';');
- var adrstr = '';
- if(adrarr[2].trim() != '') {
- adrstr = adrstr + adrarr[2].trim() + ',';
- }
- if(adrarr[3].trim() != '') {
- adrstr = adrstr + adrarr[3].trim() + ',';
- }
- if(adrarr[4].trim() != '') {
- adrstr = adrstr + adrarr[4].trim() + ',';
- }
- if(adrarr[5].trim() != '') {
- adrstr = adrstr + adrarr[5].trim() + ',';
- }
- if(adrarr[6].trim() != '') {
- adrstr = adrstr + adrarr[6].trim();
- }
- adrstr = encodeURIComponent(adrstr);
- var uri = 'http://open.mapquestapi.com/nominatim/v1/search.php?q=' + adrstr + '&limit=10&addressdetails=1&polygon=1&zoom=';
- var newWindow = window.open(uri,'_blank');
- newWindow.focus();
- },
- mailTo:function(obj) {
- var adr = OC.Contacts.propertyContainerFor($(obj)).find('input[type="email"]').val().trim();
- if(adr == '') {
- OC.dialogs.alert(t('contacts', 'Please enter an email address.'), t('contacts', 'Error'));
- return;
- }
- window.location.href='mailto:' + adr;
- },
- propertyContainerFor:function(obj) {
- return $(obj).parents('.propertycontainer').first();
- },
- checksumFor:function(obj) {
- return $(obj).parents('.propertycontainer').first().data('checksum');
- },
- propertyTypeFor:function(obj) {
- return $(obj).parents('.propertycontainer').first().data('element');
- },
- loading:function(obj, state) {
- if(state) {
- $(obj).addClass('loading');
- } else {
- $(obj).removeClass('loading');
- }
- },
- showCardDAVUrl:function(username, bookname){
- $('#carddav_url').val(totalurl + '/' + username + '/' + decodeURIComponent(bookname));
- $('#carddav_url').show();
- $('#carddav_url_close').show();
- },
- loadListHandlers:function() {
- $('.propertylist li a.delete').unbind('click');
- $('.propertylist li a.delete').unbind('keydown');
- var deleteItem = function(obj) {
- obj.tipsy('hide');
- OC.Contacts.Card.deleteProperty(obj, 'list');
- }
- $('.propertylist li a.delete, .addresscard .delete').click(function() { deleteItem($(this)) });
- $('.propertylist li a.delete, .addresscard .delete').keydown(function() { deleteItem($(this)) });
- $('.propertylist li a.mail').click(function() { OC.Contacts.mailTo(this) });
- $('.propertylist li a.mail').keydown(function() { OC.Contacts.mailTo(this) });
- $('.addresscard .globe').click(function() { $(this).tipsy('hide');OC.Contacts.searchOSM(this); });
- $('.addresscard .globe').keydown(function() { $(this).tipsy('hide');OC.Contacts.searchOSM(this); });
- $('.addresscard .edit').click(function() { $(this).tipsy('hide');OC.Contacts.Card.editAddress(this, false); });
- $('.addresscard .edit').keydown(function() { $(this).tipsy('hide');OC.Contacts.Card.editAddress(this, false); });
- $('.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() {});
- }
- );
- },
- loadHandlers:function() {
- var deleteItem = function(obj) {
- obj.tipsy('hide');
- OC.Contacts.Card.deleteProperty(obj, 'single');
- }
- var goToUrl = function(obj) {
- var url = OC.Contacts.propertyContainerFor(obj).find('#url').val();
- if(url != '') {
- var newWindow = window.open(url,'_blank');
- 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(); } );
- $('#categories_value a.edit').keydown( function() { $(this).tipsy('hide');OCCategories.edit(); } );
- $('#url_value a.globe').click( function() { $(this).tipsy('hide');goToUrl($(this)); } );
- $('#url_value a.globe').keydown( function() { $(this).tipsy('hide');goToUrl($(this)); } );
- $('#fn_select').combobox({
- 'id': 'fn',
- 'name': 'value',
- 'classes': ['contacts_property', 'nonempty', 'huge', 'tip', 'float'],
- 'attributes': {'placeholder': t('contacts', 'Enter name')},
- 'title': t('contacts', 'Format custom, Short name, Full name, Reverse or Reverse with comma')});
- $('#bday').datepicker({
- dateFormat : 'dd-mm-yy'
- });
- // Style phone types
- $('#phonelist').find('select.contacts_property').multiselect({
- noneSelectedText: t('contacts', 'Select type'),
- header: false,
- selectedList: 4,
- classes: 'typelist'
- });
- $('#edit_name').click(function(){OC.Contacts.Card.editName()});
- $('#edit_name').keydown(function(){OC.Contacts.Card.editName()});
-
- $('#phototools li a').click(function() {
- $(this).tipsy('hide');
- });
- $('#contacts_details_photo_wrapper').hover(
- function () {
- $('#phototools').slideDown(200);
- },
- function () {
- $('#phototools').slideUp(200);
- }
- );
- $('#phototools').hover(
- function () {
- $(this).removeClass('transparent');
- },
- function () {
- $(this).addClass('transparent');
- }
- );
- $('#phototools .upload').click(function() {
- $('#file_upload_start').trigger('click');
- });
- $('#phototools .cloud').click(function() {
- OC.dialogs.filepicker(t('contacts', 'Select photo'), OC.Contacts.Card.cloudPhotoSelected, false, 'image', true);
- });
- /* Initialize the photo edit dialog */
- $('#edit_photo_dialog').dialog({
- autoOpen: false, modal: true, height: 'auto', width: 'auto'
- });
- $('#edit_photo_dialog' ).dialog( 'option', 'buttons', [
- {
- text: "Ok",
- click: function() {
- OC.Contacts.Card.savePhoto(this);
- $(this).dialog('close');
- }
- },
- {
- text: "Cancel",
- click: function() { $(this).dialog('close'); }
- }
- ] );
-
- // Name has changed. Update it and reorder.
- $('#fn').change(function(){
- var name = $('#fn').val().strip_tags();
- var item = $('.contacts li[data-id="'+OC.Contacts.Card.id+'"]').detach();
- $(item).find('a').html(name);
- OC.Contacts.Card.fn = name;
- OC.Contacts.Contacts.insertContact({contact:item});
- OC.Contacts.Contacts.scrollTo(OC.Contacts.Card.id);
- });
-
- $('#contacts_deletecard').click( function() { OC.Contacts.Card.delayedDelete();return false;} );
- $('#contacts_deletecard').keydown( function(event) {
- if(event.which == 13 || event.which == 32) {
- OC.Contacts.Card.delayedDelete();
- }
- return false;
- });
-
- $('#contacts_downloadcard').click( function() { OC.Contacts.Card.doExport();return false;} );
- $('#contacts_downloadcard').keydown( function(event) {
- if(event.which == 13 || event.which == 32) {
- OC.Contacts.Card.doExport();
- }
- return false;
- });
-
- // Profile picture upload handling
- // New profile picture selected
- $('#file_upload_start').change(function(){
- OC.Contacts.Card.uploadPhoto(this.files);
- });
- $('#contacts_details_photo_wrapper').bind('dragover',function(event){
- $(event.target).addClass('droppable');
- event.stopPropagation();
- event.preventDefault();
- });
- $('#contacts_details_photo_wrapper').bind('dragleave',function(event){
- $(event.target).removeClass('droppable');
- });
- $('#contacts_details_photo_wrapper').bind('drop',function(event){
- event.stopPropagation();
- event.preventDefault();
- $(event.target).removeClass('droppable');
- $.fileUpload(event.originalEvent.dataTransfer.files);
- });
-
- $('#categories').multiple_autocomplete({source: categories});
- $('#contacts_deletecard').tipsy({gravity: 'ne'});
- $('#contacts_downloadcard').tipsy({gravity: 'ne'});
- $('#contacts_propertymenu_button').tipsy();
- $('#contacts_newcontact, #contacts_import, #bottomcontrols .settings').tipsy({gravity: 'sw'});
-
- $('body').click(function(e){
- if(!$(e.target).is('#contacts_propertymenu_button')) {
- $('#contacts_propertymenu_dropdown').hide();
- }
- });
- function propertyMenu(){
- var menu = $('#contacts_propertymenu_dropdown');
- if(menu.is(':hidden')) {
- menu.show();
- menu.find('li').first().focus();
- } else {
- menu.hide();
- }
- }
- $('#contacts_propertymenu_button').click(propertyMenu);
- $('#contacts_propertymenu_button').keydown(propertyMenu);
- function propertyMenuItem(){
- var type = $(this).data('type');
- OC.Contacts.Card.addProperty(type);
- $('#contacts_propertymenu_dropdown').hide();
- }
- $('#contacts_propertymenu_dropdown a').click(propertyMenuItem);
- $('#contacts_propertymenu_dropdown a').keydown(propertyMenuItem);
- },
- Card:{
- update:function(params) { // params {cid:int, aid:int}
- if(!params) { params = {}; }
- $('#contacts li,#contacts h3').removeClass('active');
- console.log('Card, cid: ' + params.cid + ' aid: ' + params.aid);
- var newid, bookid, firstitem;
- if(!parseInt(params.cid) && !parseInt(params.aid)) {
- firstitem = $('#contacts ul').find('li:first-child');
- if(firstitem.length > 0) {
- if(firstitem.length > 1) {
- firstitem = firstitem.first();
- }
- newid = parseInt(firstitem.data('id'));
- bookid = parseInt(firstitem.data('bookid'));
- }
- } else if(!parseInt(params.cid) && parseInt(params.aid)) {
- bookid = parseInt(params.aid);
- newid = parseInt($('#contacts').find('li[data-bookid="'+bookid+'"]').first().data('id'));
- } else if(parseInt(params.cid) && !parseInt(params.aid)) {
- newid = parseInt(params.cid);
- var listitem = OC.Contacts.Contacts.getContact(newid); //$('#contacts li[data-id="'+newid+'"]');
- console.log('Is contact in list? ' + listitem.length);
- if(listitem.length) {
- //bookid = parseInt($('#contacts li[data-id="'+newid+'"]').data('bookid'));
- bookid = parseInt(OC.Contacts.Contacts.getContact(newid).data('bookid'));
- } else { // contact isn't in list yet.
- bookid = 'unknown';
- }
- } else {
- newid = parseInt(params.cid);
- bookid = parseInt(params.aid);
- }
- if(!bookid || !newid) {
- bookid = parseInt($('#contacts h3').first().data('id'));
- newid = parseInt($('#contacts').find('li[data-bookid="'+bookid+'"]').first().data('id'));
- }
- console.log('newid: ' + newid + ' bookid: ' +bookid);
- var localLoadContact = function(newid, bookid) {
- if($('.contacts li').length > 0) {
- $.getJSON(OC.filePath('contacts', 'ajax', 'contact/details.php'),{'id':newid},function(jsondata){
- if(jsondata.status == 'success'){
- if(bookid == 'unknown') {
- bookid = jsondata.data.addressbookid;
- var contact = OC.Contacts.Contacts.insertContact({
- contactlist:$('#contacts ul[data-id="'+bookid+'"]'),
- data:jsondata.data
- });
- }
- $('#contacts li[data-id="'+newid+'"],#contacts h3[data-id="'+bookid+'"]').addClass('active');
- $('#contacts ul[data-id="'+bookid+'"]').slideDown(300);
- OC.Contacts.Card.loadContact(jsondata.data, bookid);
- OC.Contacts.Contacts.scrollTo(newid);
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- }
- }
-
- // Make sure proper DOM is loaded.
- if(!$('#card').length && newid) {
- console.log('Loading card DOM');
- $.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{requesttoken:requesttoken},function(jsondata){
- if(jsondata.status == 'success'){
- $('#rightcontent').html(jsondata.data.page).ready(function() {
- OC.Contacts.loadHandlers();
- localLoadContact(newid, bookid);
- });
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- } else if(!newid) {
- console.log('Loading intro');
- // 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 {
- localLoadContact(newid, bookid);
- }
- },
- setEnabled:function(enabled) {
- console.log('setEnabled', enabled);
- $('.contacts_property,.action').each(function () {
- $(this).prop('disabled', !enabled);
- OC.Contacts.Card.enabled = enabled;
- });
- },
- doExport:function() {
- document.location.href = OC.linkTo('contacts', 'export.php') + '?contactid=' + this.id;
- },
- editNew:function(){ // add a new contact
- var book = $('#contacts h3.active');
- var permissions = parseInt(book.data('permissions'));
- if(permissions == 0
- || permissions & OC.Share.PERMISSION_UPDATE
- || permissions & OC.Share.PERMISSION_DELETE) {
- with(this) {
- delete id; delete fn; delete fullname; delete givname; delete famname;
- delete addname; delete honpre; delete honsuf;
- }
- this.bookid = book.data('id');
- OC.Contacts.Card.add(';;;;;', '', '', true);
- } else {
- OC.dialogs.alert(t('contacts', 'You do not have permission to add contacts to ')
- + book.text() + '. ' + t('contacts', 'Please select one of your own address books.'), t('contacts', 'Permission error'));
- }
- return false;
- },
- add:function(n, fn, aid, isnew){ // add a new contact
- console.log('Adding ' + fn);
- aid = aid?aid:$('#contacts h3.active').first().data('id');
- var localAddcontact = function(n, fn, aid, isnew) {
- $.post(OC.filePath('contacts', 'ajax', 'contact/add.php'), { n: n, fn: fn, aid: aid, isnew: isnew },
- function(jsondata) {
- if (jsondata.status == 'success'){
- $('#rightcontent').data('id',jsondata.data.id);
- var id = jsondata.data.id;
- var aid = jsondata.data.aid;
- $.getJSON(OC.filePath('contacts', 'ajax', 'contact/details.php'),{'id':id},function(jsondata){
- if(jsondata.status == 'success'){
- OC.Contacts.Card.loadContact(jsondata.data, aid);
- var item = OC.Contacts.Contacts.insertContact({data:jsondata.data});
- if(isnew) { // add some default properties
- OC.Contacts.Card.addProperty('EMAIL');
- OC.Contacts.Card.addProperty('TEL');
- $('#fn').focus();
- }
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- $('#contact_identity').show();
- $('#actionbar').show();
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- }
-
- if(!$('#card').length) {
- console.log('Loading card DOM');
- $.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{'requesttoken': requesttoken},function(jsondata){
- if(jsondata.status == 'success'){
- $('#rightcontent').html(jsondata.data.page).ready(function() {
- OC.Contacts.loadHandlers();
- localAddcontact(n, fn, aid, isnew);
- });
- } else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- } else {
- localAddcontact(n, fn, aid, isnew);
- }
- },
- delayedDelete:function() {
- $('#contacts_deletecard').tipsy('hide');
- var newid = '', bookid;
- var curlistitem = OC.Contacts.Contacts.getContact(this.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);
-
- OC.Contacts.Contacts.deletionQueue.push(parseInt(this.id));
- if(!window.onbeforeunload) {
- window.onbeforeunload = OC.Contacts.Contacts.warnNotDeleted;
- }
-
- with(this) {
- delete id; delete fn; delete fullname; delete shortname; delete famname;
- delete givname; delete addname; delete honpre; delete honsuf; delete data;
- }
-
- if($('.contacts li').length > 0) {
- OC.Contacts.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').html(jsondata.data.page).removeData('id');
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- }
- OC.Contacts.notify({
- data:curlistitem,
- message:t('contacts','Click to undo deletion of "') + curlistitem.find('a').text() + '"',
- //timeout:5,
- timeouthandler:function(contact) {
- console.log('timeout');
- OC.Contacts.Card.doDelete(contact.data('id'), true, function(res) {
- if(!res) {
- OC.Contacts.Contacts.insertContact({contact:contact});
- } else {
- delete contact;
- }
- });
- },
- clickhandler:function(contact) {
- OC.Contacts.Contacts.insertContact({contact:contact});
- OC.Contacts.notify({message:t('contacts', 'Cancelled deletion of: "') + curlistitem.find('a').text() + '"'});
- window.onbeforeunload = null;
- }
- });
- },
- doDelete:function(id, removeFromQueue, cb) {
- var updateQueue = function(id, remove) {
- if(removeFromQueue) {
- OC.Contacts.Contacts.deletionQueue.splice(OC.Contacts.Contacts.deletionQueue.indexOf(parseInt(id)), 1);
- }
- if(OC.Contacts.Contacts.deletionQueue.length == 0) {
- window.onbeforeunload = null;
- }
- }
-
- if(OC.Contacts.Contacts.deletionQueue.indexOf(parseInt(id)) == -1 && removeFromQueue) {
- console.log('returning');
- updateQueue(id, removeFromQueue);
- if(typeof cb == 'function') {
- cb(true);
- }
- return;
- }
- $.post(OC.filePath('contacts', 'ajax', 'contact/delete.php'), {'id':id},function(jsondata) {
- if(jsondata.status == 'error'){
- OC.Contacts.notify({message:jsondata.data.message});
- if(typeof cb == 'function') {
- cb(false);
- }
- }
- updateQueue(id, removeFromQueue);
- });
- if(typeof cb == 'function') {
- cb(true);
- }
- },
- loadContact:function(jsondata, bookid){
- this.data = jsondata;
- this.id = this.data.id;
- this.bookid = bookid;
- $('#rightcontent').data('id',this.id);
- this.populateNameFields();
- this.loadPhoto();
- this.loadMails();
- this.loadPhones();
- this.loadIMs();
- this.loadAddresses();
- this.loadSingleProperties();
- OC.Contacts.loadListHandlers();
- var note = $('#note');
- if(this.data.NOTE) {
- note.data('checksum', this.data.NOTE[0]['checksum']);
- var textarea = note.find('textarea');
- var txt = this.data.NOTE[0]['value'];
- var nheight = txt.split('\n').length > 4 ? txt.split('\n').length+2 : 5;
- textarea.css('min-height', nheight+'em');
- textarea.attr('rows', nheight);
- textarea.val(txt);
- $('#contact_note').show();
- textarea.expandingTextarea();
- $('#contacts_propertymenu_dropdown a[data-type="NOTE"]').parent().hide();
- } else {
- note.removeData('checksum');
- note.find('textarea').val('');
- $('#contact_note').hide();
- $('#contacts_propertymenu_dropdown a[data-type="NOTE"]').parent().show();
- }
- var permissions = OC.Contacts.Card.permissions = parseInt($('#contacts ul[data-id="' + bookid + '"]').data('permissions'));
- console.log('permissions', permissions);
- this.setEnabled(permissions == 0
- || permissions & OC.Share.PERMISSION_UPDATE
- || permissions & OC.Share.PERMISSION_DELETE);
- },
- loadSingleProperties:function() {
- var props = ['BDAY', 'NICKNAME', 'ORG', 'URL', 'CATEGORIES'];
- // Clear all elements
- $('#ident .propertycontainer').each(function(){
- if(props.indexOf($(this).data('element')) > -1) {
- $(this).data('checksum', '');
- $(this).find('input').val('');
- $(this).hide();
- $(this).prev().hide();
- }
- });
- for(var prop in props) {
- var propname = props[prop];
- if(this.data[propname] != undefined) {
- $('#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);
- }
- var identcontainer = $('#contact_identity');
- identcontainer.find('#'+propname.toLowerCase()).val(value);
- identcontainer.find('#'+propname.toLowerCase()+'_value').data('checksum', checksum);
- identcontainer.find('#'+propname.toLowerCase()+'_label').show();
- identcontainer.find('#'+propname.toLowerCase()+'_value').show();
- } else {
- $('#contacts_propertymenu_dropdown a[data-type="'+propname+'"]').parent().show();
- }
- }
- },
- populateNameFields:function() {
- var props = ['FN', 'N'];
- // Clear all elements
- $('#ident .propertycontainer').each(function(){
- if(props.indexOf($(this).data('element')) > -1) {
- $(this).data('checksum', '');
- $(this).find('input').val('');
- }
- });
-
- with(this) {
- delete fn; delete fullname; delete givname; delete famname;
- delete addname; delete honpre; delete honsuf;
- }
-
- if(this.data.FN) {
- this.fn = this.data.FN[0]['value'];
- }
- else {
- this.fn = '';
- }
- if(this.data.N == undefined) {
- narray = [this.fn,'','','','']; // Checking for non-existing 'N' property :-P
- } else {
- narray = this.data.N[0]['value'];
- }
- this.famname = narray[0] || '';
- this.givname = narray[1] || '';
- this.addname = narray[2] || '';
- this.honpre = narray[3] || '';
- this.honsuf = narray[4] || '';
- if(this.honpre.length > 0) {
- this.fullname += this.honpre + ' ';
- }
- if(this.givname.length > 0) {
- this.fullname += ' ' + this.givname;
- }
- if(this.addname.length > 0) {
- this.fullname += ' ' + this.addname;
- }
- if(this.famname.length > 0) {
- this.fullname += ' ' + this.famname;
- }
- if(this.honsuf.length > 0) {
- this.fullname += ', ' + this.honsuf;
- }
- $('#n').val(narray.join(';'));
- $('#fn_select option').remove();
- var names = [this.fn, this.fullname, this.givname + ' ' + this.famname, this.famname + ' ' + this.givname, this.famname + ', ' + this.givname];
- if(this.data.ORG) {
- names[names.length]=this.data.ORG[0].value;
- }
- $.each(names, function(key, value) {
- $('#fn_select')
- .append($('<option></option>')
- .text(value));
- });
- $('#fn_select').combobox('value', this.fn);
- $('#contact_identity').find('*[data-element="N"]').data('checksum', this.data.N[0]['checksum']);
- if(this.data.FN) {
- $('#contact_identity').find('*[data-element="FN"]').data('checksum', this.data.FN[0]['checksum']);
- }
- $('#contact_identity').show();
- },
- hasCategory:function(category) {
- if(this.data.CATEGORIES) {
- var categories = this.data.CATEGORIES[0]['value'].split(/,\s*/);
- for(var c in categories) {
- var cat = this.data.CATEGORIES[0]['value'][c];
- if(typeof cat === 'string' && (cat.toUpperCase() === category.toUpperCase())) {
- return true;
- }
- }
- }
- return false;
- },
- categoriesChanged:function(newcategories) { // Categories added/deleted.
- categories = $.map(newcategories, function(v) {return v;});
- $('#categories').multiple_autocomplete('option', 'source', categories);
- var categorylist = $('#categories_value').find('input');
- $.getJSON(OC.filePath('contacts', 'ajax', 'categories/categoriesfor.php'),{'id':OC.Contacts.Card.id},function(jsondata){
- if(jsondata.status == 'success'){
- $('#categories_value').data('checksum', jsondata.data.checksum);
- categorylist.val(jsondata.data.value);
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- },
- savePropertyInternal:function(name, fields, oldchecksum, checksum) {
- // TODO: Add functionality for new fields.
- //console.log('savePropertyInternal: ' + name + ', fields: ' + fields + 'checksum: ' + checksum);
- //console.log('savePropertyInternal: ' + this.data[name]);
- var multivalue = ['CATEGORIES'];
- var params = {};
- var value = multivalue.indexOf(name) != -1 ? new Array() : undefined;
- jQuery.each(fields, function(i, field){
- //.substring(11,'parameters[TYPE][]'.indexOf(']'))
- if(field.name.substring(0, 5) === 'value') {
- if(multivalue.indexOf(name) != -1) {
- value.push(field.value);
- } else {
- value = field.value;
- }
- } else if(field.name.substring(0, 10) === 'parameters') {
- var p = field.name.substring(11,'parameters[TYPE][]'.indexOf(']'));
- if(!(p in params)) {
- params[p] = [];
- }
- params[p].push(field.value);
- }
- });
- for(var i in this.data[name]) {
- if(this.data[name][i]['checksum'] == oldchecksum) {
- this.data[name][i]['checksum'] = checksum;
- this.data[name][i]['value'] = value;
- this.data[name][i]['parameters'] = params;
- }
- }
- },
- saveProperty:function(obj) {
- if(!$(obj).hasClass('contacts_property')) {
- return false;
- }
- if($(obj).hasClass('nonempty') && $(obj).val().trim() == '') {
- OC.dialogs.alert(t('contacts', 'This property has to be non-empty.'), t('contacts', 'Error'));
- return false;
- }
- container = $(obj).parents('.propertycontainer').first(); // get the parent holding the metadata.
- OC.Contacts.loading(obj, true);
- var checksum = container.data('checksum');
- var name = container.data('element');
- var fields = container.find('input.contacts_property,select.contacts_property').serializeArray();
- switch(name) {
- case 'FN':
- var nempty = true;
- for(var i in OC.Contacts.Card.data.N[0]['value']) {
- if(OC.Contacts.Card.data.N[0]['value'][i] != '') {
- nempty = false;
- break;
- }
- }
- if(nempty) {
- $('#n').val(fields[0].value + ';;;;');
- OC.Contacts.Card.data.N[0]['value'] = Array(fields[0].value, '', '', '', '');
- setTimeout(function() {OC.Contacts.Card.saveProperty($('#n'))}, 500);
- }
- break;
- }
- var q = container.find('input.contacts_property,select.contacts_property,textarea.contacts_property').serialize();
- if(q == '' || q == undefined) {
- OC.dialogs.alert(t('contacts', 'Couldn\'t serialize elements.'), t('contacts', 'Error'));
- OC.Contacts.loading(obj, false);
- return false;
- }
- q = q + '&id=' + this.id + '&name=' + name;
- if(checksum != undefined && checksum != '') { // save
- q = q + '&checksum=' + checksum;
- console.log('Saving: ' + q);
- $(obj).attr('disabled', 'disabled');
- $.post(OC.filePath('contacts', 'ajax', 'contact/saveproperty.php'),q,function(jsondata){
- if(!jsondata) {
- OC.dialogs.alert(t('contacts', 'Unknown error. Please check logs.'), t('contacts', 'Error'));
- OC.Contacts.loading(obj, false);
- $(obj).removeAttr('disabled');
- OC.Contacts.Card.update({cid:OC.Contacts.Card.id});
- return false;
- }
- if(jsondata.status == 'success'){
- container.data('checksum', jsondata.data.checksum);
- OC.Contacts.Card.savePropertyInternal(name, fields, checksum, jsondata.data.checksum);
- OC.Contacts.loading(obj, false);
- $(obj).removeAttr('disabled');
- return true;
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- OC.Contacts.loading(obj, false);
- $(obj).removeAttr('disabled');
- OC.Contacts.Card.update({cid:OC.Contacts.Card.id});
- return false;
- }
- },'json');
- } else { // add
- console.log('Adding: ' + q);
- $(obj).attr('disabled', 'disabled');
- $.post(OC.filePath('contacts', 'ajax', 'contact/addproperty.php'),q,function(jsondata){
- if(jsondata.status == 'success'){
- container.data('checksum', jsondata.data.checksum);
- // TODO: savePropertyInternal doesn't know about new fields
- //OC.Contacts.Card.savePropertyInternal(name, fields, checksum, jsondata.data.checksum);
- OC.Contacts.loading(obj, false);
- $(obj).removeAttr('disabled');
- return true;
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- OC.Contacts.loading(obj, false);
- $(obj).removeAttr('disabled');
- OC.Contacts.Card.update({cid:OC.Contacts.Card.id});
- return false;
- }
- },'json');
- }
- },
- addProperty:function(type) {
- if(!this.enabled) {
- return;
- }
- switch (type) {
- case 'NOTE':
- $('#contacts_propertymenu_dropdown a[data-type="'+type+'"]').parent().hide();
- $('#note').find('textarea').expandingTextarea().show().focus();
- $('#contact_note').show();
- break;
- case 'EMAIL':
- if($('#emaillist>li').length == 1) {
- $('#emails').show();
- }
- OC.Contacts.Card.addMail();
- break;
- case 'TEL':
- if($('#phonelist>li').length == 1) {
- $('#phones').show();
- }
- OC.Contacts.Card.addPhone();
- break;
- case 'IMPP':
- if($('#imlist>li').length == 1) {
- $('#ims').show();
- }
- OC.Contacts.Card.addIM();
- break;
- case 'ADR':
- if($('addresses>dl').length == 1) {
- $('#addresses').show();
- }
- OC.Contacts.Card.editAddress('new', true);
- break;
- case 'NICKNAME':
- case 'URL':
- case 'ORG':
- case 'BDAY':
- case 'CATEGORIES':
- $('dl dt[data-element="'+type+'"],dd[data-element="'+type+'"]').show();
- $('dd[data-element="'+type+'"]').find('input').focus();
- $('#contacts_propertymenu_dropdown a[data-type="'+type+'"]').parent().hide();
- break;
- }
- },
- deleteProperty:function(obj, type) {
- console.log('deleteProperty');
- if(!this.enabled) {
- return;
- }
- OC.Contacts.loading(obj, true);
- var checksum = OC.Contacts.checksumFor(obj);
- if(checksum) {
- $.post(OC.filePath('contacts', 'ajax', 'contact/deleteproperty.php'),{'id': this.id, 'checksum': checksum },function(jsondata){
- if(jsondata.status == 'success'){
- if(type == 'list') {
- OC.Contacts.propertyContainerFor(obj).remove();
- } else if(type == 'single') {
- var proptype = OC.Contacts.propertyTypeFor(obj);
- OC.Contacts.Card.data[proptype] = null;
- var othertypes = ['NOTE', 'PHOTO'];
- if(othertypes.indexOf(proptype) != -1) {
- OC.Contacts.propertyContainerFor(obj).data('checksum', '');
- if(proptype == 'PHOTO') {
- OC.Contacts.Contacts.refreshThumbnail(OC.Contacts.Card.id);
- OC.Contacts.Card.loadPhoto();
- } else if(proptype == 'NOTE') {
- $('#note').find('textarea').val('');
- $('#contact_note').hide();
- OC.Contacts.propertyContainerFor(obj).hide();
- }
- } else {
- $('dl dt[data-element="'+proptype+'"],dd[data-element="'+proptype+'"]').hide();
- $('dl dd[data-element="'+proptype+'"]').data('checksum', '').find('input').val('');
- }
- $('#contacts_propertymenu_dropdown a[data-type="'+proptype+'"]').parent().show();
- OC.Contacts.loading(obj, false);
- } else {
- OC.dialogs.alert(t('contacts', '\'deleteProperty\' called without type argument. Please report at bugs.owncloud.org'), t('contacts', 'Error'));
- OC.Contacts.loading(obj, false);
- }
- }
- else{
- OC.Contacts.loading(obj, false);
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- } else { // Property hasn't been saved so there's nothing to delete.
- if(type == 'list') {
- OC.Contacts.propertyContainerFor(obj).remove();
- } else if(type == 'single') {
- var proptype = OC.Contacts.propertyTypeFor(obj);
- $('dl dt[data-element="'+proptype+'"],dd[data-element="'+proptype+'"]').hide();
- $('#contacts_propertymenu_dropdown a[data-type="'+proptype+'"]').parent().show();
- OC.Contacts.loading(obj, false);
- } else {
- OC.dialogs.alert(t('contacts', '\'deleteProperty\' called without type argument. Please report at bugs.owncloud.org'), t('contacts', 'Error'));
- }
- }
- },
- editName:function() {
- if(!this.enabled) {
- return;
- }
- var params = {id: this.id};
- /* Initialize the name edit dialog */
- if($('#edit_name_dialog').dialog('isOpen') == true) {
- $('#edit_name_dialog').dialog('moveToTop');
- } else {
- $.getJSON(OC.filePath('contacts', 'ajax', 'editname.php'),{id: this.id},function(jsondata) {
- if(jsondata.status == 'success') {
- $('body').append('<div id="name_dialog"></div>');
- $('#name_dialog').html(jsondata.data.page).find('#edit_name_dialog' ).dialog({
- modal: true,
- closeOnEscape: true,
- title: t('contacts', 'Edit name'),
- height: 'auto', width: 'auto',
- buttons: {
- 'Ok':function() {
- OC.Contacts.Card.saveName(this);
- $(this).dialog('close');
- },
- 'Cancel':function() { $(this).dialog('close'); }
- },
- close: function(event, ui) {
- $(this).dialog('destroy').remove();
- $('#name_dialog').remove();
- },
- open: function(event, ui) {
- // load 'N' property - maybe :-P
- }
- });
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- }
- },
- saveName:function(dlg) {
- if(!this.enabled) {
- return;
- }
- //console.log('saveName, id: ' + this.id);
- var n = new Array($(dlg).find('#fam').val().strip_tags(),$(dlg).find('#giv').val().strip_tags(),$(dlg).find('#add').val().strip_tags(),$(dlg).find('#pre').val().strip_tags(),$(dlg).find('#suf').val().strip_tags());
- this.famname = n[0];
- this.givname = n[1];
- this.addname = n[2];
- this.honpre = n[3];
- this.honsuf = n[4];
- this.fullname = '';
-
- $('#n').val(n.join(';'));
- if(n[3].length > 0) {
- this.fullname = n[3] + ' ';
- }
- this.fullname += n[1] + ' ' + n[2] + ' ' + n[0];
- if(n[4].length > 0) {
- this.fullname += ', ' + n[4];
- }
-
- $('#fn_select option').remove();
- //$('#fn_select').combobox('value', this.fn);
- var tmp = [this.fullname, this.givname + ' ' + this.famname, this.famname + ' ' + this.givname, this.famname + ', ' + this.givname];
- var names = new Array();
- for(var name in tmp) {
- if(names.indexOf(tmp[name]) == -1) {
- names.push(tmp[name]);
- }
- }
- $.each(names, function(key, value) {
- $('#fn_select')
- .append($('<option></option>')
- .text(value));
- });
-
- if(this.id == '') {
- var aid = $(dlg).find('#aid').val();
- OC.Contacts.Card.add(n.join(';'), $('#short').text(), aid);
- } else {
- OC.Contacts.Card.saveProperty($('#n'));
- }
- },
- loadAddresses:function() {
- $('#addresses').hide();
- $('#addresses dl.propertycontainer').remove();
- var addresscontainer = $('#addresses');
- for(var adr in this.data.ADR) {
- addresscontainer.find('dl').first().clone().insertAfter($('#addresses dl').last()).show();
- addresscontainer.find('dl').last().removeClass('template').addClass('propertycontainer');
- addresscontainer.find('dl').last().data('checksum', this.data.ADR[adr]['checksum']);
- var adrarray = this.data.ADR[adr]['value'];
- var adrtxt = '';
- if(adrarray[0] && adrarray[0].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[0].strip_tags() + '</li>';
- }
- if(adrarray[1] && adrarray[1].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[1].strip_tags() + '</li>';
- }
- if(adrarray[2] && adrarray[2].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[2].strip_tags() + '</li>';
- }
- if((3 in adrarray && 5 in adrarray) && adrarray[3].length > 0 || adrarray[5].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[5].strip_tags() + ' ' + adrarray[3].strip_tags() + '</li>';
- }
- if(adrarray[4] && adrarray[4].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[4].strip_tags() + '</li>';
- }
- if(adrarray[6] && adrarray[6].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[6].strip_tags() + '</li>';
- }
- addresscontainer.find('dl').last().find('.addresslist').html(adrtxt);
- var types = new Array();
- var ttypes = new Array();
- for(var param in this.data.ADR[adr]['parameters']) {
- if(param.toUpperCase() == 'TYPE') {
- types.push(t('contacts', ucwords(this.data.ADR[adr]['parameters'][param].toLowerCase())));
- ttypes.push(this.data.ADR[adr]['parameters'][param]);
- }
- }
- addresscontainer.find('dl').last().find('.adr_type_label').text(types.join('/'));
- addresscontainer.find('dl').last().find('.adr_type').val(ttypes.join(','));
- addresscontainer.find('dl').last().find('.adr').val(adrarray.join(';'));
- addresscontainer.find('dl').last().data('checksum', this.data.ADR[adr]['checksum']);
- }
- if(addresscontainer.find('dl').length > 1) {
- $('#addresses').show();
- }
- return false;
- },
- editAddress:function(obj, isnew){
- if(!this.enabled) {
- return;
- }
- var container = undefined;
- var params = {id: this.id};
- if(obj === 'new') {
- isnew = true;
- $('#addresses dl').first().clone(true).insertAfter($('#addresses dl').last()).show();
- container = $('#addresses dl').last();
- container.removeClass('template').addClass('propertycontainer');
- } else {
- params['checksum'] = OC.Contacts.checksumFor(obj);
- }
- /* Initialize the address edit dialog */
- if($('#edit_address_dialog').dialog('isOpen') == true){
- $('#edit_address_dialog').dialog('moveToTop');
- }else{
- $.getJSON(OC.filePath('contacts', 'ajax', 'editaddress.php'),params,function(jsondata){
- if(jsondata.status == 'success'){
- $('body').append('<div id="address_dialog"></div>');
- $('#address_dialog').html(jsondata.data.page).find('#edit_address_dialog' ).dialog({
- height: 'auto', width: 'auto',
- buttons: {
- 'Ok':function() {
- if(isnew) {
- OC.Contacts.Card.saveAddress(this, $('#addresses dl:last-child').find('input').first(), isnew);
- } else {
- OC.Contacts.Card.saveAddress(this, obj, isnew);
- }
- $(this).dialog('close');
- },
- 'Cancel':function() {
- $(this).dialog('close');
- if(isnew) {
- container.remove();
- }
- }
- },
- close : function(event, ui) {
- $(this).dialog('destroy').remove();
- $('#address_dialog').remove();
- },
- open : function(event, ui) {
- $( "#adr_city" ).autocomplete({
- source: function( request, response ) {
- $.ajax({
- url: "http://ws.geonames.org/searchJSON",
- dataType: "jsonp",
- data: {
- featureClass: "P",
- style: "full",
- maxRows: 12,
- lang: lang,
- name_startsWith: request.term
- },
- success: function( data ) {
- response( $.map( data.geonames, function( item ) {
- return {
- label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
- value: item.name,
- country: item.countryName
- }
- }));
- }
- });
- },
- minLength: 2,
- select: function( event, ui ) {
- if(ui.item && $('#adr_country').val().trim().length == 0) {
- $('#adr_country').val(ui.item.country);
- }
- },
- open: function() {
- $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
- },
- close: function() {
- $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
- }
- });
- $('#adr_country').autocomplete({
- source: function( request, response ) {
- $.ajax({
- url: "http://ws.geonames.org/searchJSON",
- dataType: "jsonp",
- data: {
- /*featureClass: "A",*/
- featureCode: "PCLI",
- /*countryBias: "true",*/
- /*style: "full",*/
- lang: lang,
- maxRows: 12,
- name_startsWith: request.term
- },
- success: function( data ) {
- response( $.map( data.geonames, function( item ) {
- return {
- label: item.name,
- value: item.name
- }
- }));
- }
- });
- },
- minLength: 2,
- select: function( event, ui ) {
- /*if(ui.item) {
- $('#adr_country').val(ui.item.country);
- }
- log( ui.item ?
- "Selected: " + ui.item.label :
- "Nothing selected, input was " + this.value);*/
- },
- open: function() {
- $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
- },
- close: function() {
- $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
- }
- });
- }
- });
- } else {
- alert(jsondata.data.message);
- }
- });
- }
- },
- saveAddress:function(dlg, obj, isnew){
- if(!this.enabled) {
- return;
- }
- if(isnew) {
- container = $('#addresses dl').last();
- obj = container.find('input').first();
- } else {
- checksum = OC.Contacts.checksumFor(obj);
- container = OC.Contacts.propertyContainerFor(obj);
- }
- var adr = new Array(
- $(dlg).find('#adr_pobox').val().strip_tags(),
- $(dlg).find('#adr_extended').val().strip_tags(),
- $(dlg).find('#adr_street').val().strip_tags(),
- $(dlg).find('#adr_city').val().strip_tags(),
- $(dlg).find('#adr_region').val().strip_tags(),
- $(dlg).find('#adr_zipcode').val().strip_tags(),
- $(dlg).find('#adr_country').val().strip_tags()
- );
- container.find('.adr').val(adr.join(';'));
- container.find('.adr_type').val($(dlg).find('#adr_type').val());
- container.find('.adr_type_label').html(t('contacts',ucwords($(dlg).find('#adr_type').val().toLowerCase())));
- OC.Contacts.Card.saveProperty($(container).find('input').first());
- var adrtxt = '';
- if(adr[0].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[0] + '</li>';
- }
- if(adr[1].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[1] + '</li>';
- }
- if(adr[2].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[2] + '</li>';
- }
- if(adr[3].length > 0 || adr[5].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[5] + ' ' + adr[3] + '</li>';
- }
- if(adr[4].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[4] + '</li>';
- }
- if(adr[6].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[6] + '</li>';
- }
- container.find('.addresslist').html(adrtxt);
- },
- uploadPhoto:function(filelist) {
- if(!this.enabled) {
- return;
- }
- if(!filelist) {
- OC.dialogs.alert(t('contacts','No files selected for upload.'), t('contacts', 'Error'));
- return;
- }
- var file = filelist[0];
- var target = $('#file_upload_target');
- var form = $('#file_upload_form');
- var totalSize=0;
- if(file.size > $('#max_upload').val()){
- OC.dialogs.alert(t('contacts','The file you are trying to upload exceed the maximum size for file uploads on this server.'), t('contacts', 'Error'));
- return;
- } else {
- target.load(function(){
- var response=jQuery.parseJSON(target.contents().text());
- if(response != undefined && response.status == 'success'){
- OC.Contacts.Card.editPhoto(response.data.id, response.data.tmp);
- //alert('File: ' + file.tmp + ' ' + file.name + ' ' + file.mime);
- }else{
- OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
- }
- });
- form.submit();
- }
- },
- loadPhotoHandlers:function() {
- var phototools = $('#phototools');
- phototools.find('li a').tipsy('hide');
- phototools.find('li a').tipsy();
- if(this.data.PHOTO) {
- phototools.find('.delete').click(function() {
- $(this).tipsy('hide');
- OC.Contacts.Card.deleteProperty($('#contacts_details_photo'), 'single');
- $(this).hide();
- });
- phototools.find('.edit').click(function() {
- $(this).tipsy('hide');
- OC.Contacts.Card.editCurrentPhoto();
- });
- phototools.find('.delete').show();
- phototools.find('.edit').show();
- } else {
- phototools.find('.delete').hide();
- phototools.find('.edit').hide();
- }
- },
- cloudPhotoSelected:function(path){
- $.getJSON(OC.filePath('contacts', 'ajax', 'oc_photo.php'),{'path':path,'id':OC.Contacts.Card.id},function(jsondata){
- if(jsondata.status == 'success'){
- //alert(jsondata.data.page);
- OC.Contacts.Card.editPhoto(jsondata.data.id, jsondata.data.tmp)
- $('#edit_photo_dialog_img').html(jsondata.data.page);
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- },
- loadPhoto:function(){
- var self = this;
- var refreshstr = '&refresh='+Math.random();
- $('#phototools li a').tipsy('hide');
- var wrapper = $('#contacts_details_photo_wrapper');
- wrapper.addClass('loading').addClass('wait');
- delete this.photo;
- this.photo = new Image();
- $(this.photo).load(function () {
- $('img.contacts_details_photo').remove()
- $(this).addClass('contacts_details_photo');
- wrapper.css('width', $(this).get(0).width + 10);
- wrapper.removeClass('loading').removeClass('wait');
- $(this).insertAfter($('#phototools')).fadeIn();
- }).error(function () {
- // notify the user that the image could not be loaded
- OC.Contacts.notify({message:t('contacts','Error loading profile picture.')});
- }).attr('src', OC.linkTo('contacts', 'photo.php')+'?id='+self.id+refreshstr);
- this.loadPhotoHandlers()
- },
- editCurrentPhoto:function(){
- if(!this.enabled) {
- return;
- }
- $.getJSON(OC.filePath('contacts', 'ajax', 'currentphoto.php'),{'id':this.id},function(jsondata){
- if(jsondata.status == 'success'){
- //alert(jsondata.data.page);
- OC.Contacts.Card.editPhoto(jsondata.data.id, jsondata.data.tmp)
- $('#edit_photo_dialog_img').html(jsondata.data.page);
- }
- else{
- wrapper.removeClass('wait');
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- },
- editPhoto:function(id, tmpkey){
- if(!this.enabled) {
- return;
- }
- //alert('editPhoto: ' + tmpkey);
- $.getJSON(OC.filePath('contacts', 'ajax', 'cropphoto.php'),{'tmpkey':tmpkey,'id':this.id, 'requesttoken':requesttoken},function(jsondata){
- if(jsondata.status == 'success'){
- //alert(jsondata.data.page);
- $('#edit_photo_dialog_img').html(jsondata.data.page);
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- if($('#edit_photo_dialog').dialog('isOpen') == true){
- $('#edit_photo_dialog').dialog('moveToTop');
- } else {
- $('#edit_photo_dialog').dialog('open');
- }
- },
- savePhoto:function() {
- if(!this.enabled) {
- return;
- }
- var target = $('#crop_target');
- var form = $('#cropform');
- var wrapper = $('#contacts_details_photo_wrapper');
- var self = this;
- wrapper.addClass('wait');
- form.submit();
- target.load(function(){
- var response=jQuery.parseJSON(target.contents().text());
- if(response != undefined && response.status == 'success'){
- // load cropped photo.
- self.loadPhoto();
- OC.Contacts.Card.data.PHOTO = true;
- }else{
- OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
- wrapper.removeClass('wait');
- }
- });
- OC.Contacts.Contacts.refreshThumbnail(this.id);
- },
- addIM:function() {
- //alert('addMail');
- var imlist = $('#imlist');
- imlist.find('li.template:first-child').clone(true).appendTo(imlist).show().find('a .tip').tipsy();
- imlist.find('li.template:last-child').find('select').addClass('contacts_property');
- imlist.find('li.template:last-child').removeClass('template').addClass('propertycontainer');
- imlist.find('li:last-child').find('input[type="text"]').focus();
- return false;
- },
- loadIMs:function() {
- //console.log('loadIMs');
- $('#ims').hide();
- $('#imlist li.propertycontainer').remove();
- var imlist = $('#imlist');
- for(var im in this.data.IMPP) {
- this.addIM();
- var curim = imlist.find('li.propertycontainer:last-child');
- if(typeof this.data.IMPP[im].label != 'undefined') {
- curim.prepend('<label class="xab">'+this.data.IMPP[im].label+'</label>');
- }
- curim.data('checksum', this.data.IMPP[im]['checksum'])
- curim.find('input[type="text"]').val(this.data.IMPP[im]['value'].split(':').pop());
- for(var param in this.data.IMPP[im]['parameters']) {
- if(param.toUpperCase() == 'PREF') {
- curim.find('input[type="checkbox"]').attr('checked', 'checked')
- }
- else if(param.toUpperCase() == 'TYPE') {
- if(typeof this.data.IMPP[im]['parameters'][param] == 'string') {
- var found = false;
- var imt = this.data.IMPP[im]['parameters'][param];
- curim.find('select.types option').each(function(){
- if($(this).val().toUpperCase() == imt.toUpperCase()) {
- $(this).attr('selected', 'selected');
- found = true;
- }
- });
- if(!found) {
- curim.find('select.type option:last-child').after('<option value="'+imt+'" selected="selected">'+imt+'</option>');
- }
- } else if(typeof this.data.IMPP[im]['parameters'][param] == 'object') {
- for(imtype in this.data.IMPP[im]['parameters'][param]) {
- var found = false;
- var imt = this.data.IMPP[im]['parameters'][param][imtype];
- curim.find('select.types option').each(function(){
- if($(this).val().toUpperCase() == imt.toUpperCase().split(',')) {
- $(this).attr('selected', 'selected');
- found = true;
- }
- });
- if(!found) {
- curim.find('select.type option:last-child').after('<option value="'+imt+'" selected="selected">'+imt+'</option>');
- }
- }
- }
- }
- else if(param.toUpperCase() == 'X-SERVICE-TYPE') {
- curim.find('select.impp').val(this.data.IMPP[im]['parameters'][param].toLowerCase());
- }
- }
- }
- if($('#imlist li').length > 1) {
- $('#ims').show();
- }
- return false;
- },
- addMail:function() {
- var emaillist = $('#emaillist');
- emaillist.find('li.template:first-child').clone(true).appendTo(emaillist).show().find('a .tip').tipsy();
- emaillist.find('li.template:last-child').find('select').addClass('contacts_property');
- emaillist.find('li.template:last-child').removeClass('template').addClass('propertycontainer');
- emaillist.find('li:last-child').find('input[type="email"]').focus();
- emaillist.find('li:last-child').find('select').multiselect({
- noneSelectedText: t('contacts', 'Select type'),
- header: false,
- selectedList: 4,
- classes: 'typelist'
- });
- return false;
- },
- loadMails:function() {
- $('#emails').hide();
- $('#emaillist li.propertycontainer').remove();
- var emaillist = $('#emaillist');
- for(var mail in this.data.EMAIL) {
- this.addMail();
- emaillist.find('li:last-child').find('select').multiselect('destroy');
- var curemail = emaillist.find('li.propertycontainer:last-child');
- if(typeof this.data.EMAIL[mail].label != 'undefined') {
- curemail.prepend('<label class="xab">'+this.data.EMAIL[mail].label+'</label>');
- }
- curemail.data('checksum', this.data.EMAIL[mail]['checksum'])
- curemail.find('input[type="email"]').val(this.data.EMAIL[mail]['value']);
- for(var param in this.data.EMAIL[mail]['parameters']) {
- if(param.toUpperCase() == 'PREF') {
- curemail.find('input[type="checkbox"]').attr('checked', 'checked')
- }
- else if(param.toUpperCase() == 'TYPE') {
- for(etype in this.data.EMAIL[mail]['parameters'][param]) {
- var found = false;
- var et = this.data.EMAIL[mail]['parameters'][param][etype];
- curemail.find('select option').each(function(){
- if($.inArray($(this).val().toUpperCase(), et.toUpperCase().split(',')) > -1) {
- $(this).attr('selected', 'selected');
- found = true;
- }
- });
- if(!found) {
- curemail.find('select option:last-child').after('<option value="'+et+'" selected="selected">'+et+'</option>');
- }
- }
- }
- }
- curemail.find('select').multiselect({
- noneSelectedText: t('contacts', 'Select type'),
- header: false,
- selectedList: 4,
- classes: 'typelist'
- });
- }
- if($('#emaillist li').length > 1) {
- $('#emails').show();
- }
- $('#emaillist li:last-child').find('input[type="text"]').focus();
- return false;
- },
- addPhone:function() {
- var phonelist = $('#phonelist');
- phonelist.find('li.template:first-child').clone(true).appendTo(phonelist); //.show();
- phonelist.find('li.template:last-child').find('select').addClass('contacts_property');
- phonelist.find('li.template:last-child').removeClass('template').addClass('propertycontainer');
- phonelist.find('li:last-child').find('input[type="text"]').focus();
- phonelist.find('li:last-child').find('select').multiselect({
- noneSelectedText: t('contacts', 'Select type'),
- header: false,
- selectedList: 4,
- classes: 'typelist'
- });
- phonelist.find('li:last-child').show();
- return false;
- },
- loadPhones:function() {
- $('#phones').hide();
- $('#phonelist li.propertycontainer').remove();
- var phonelist = $('#phonelist');
- for(var phone in this.data.TEL) {
- this.addPhone();
- var curphone = phonelist.find('li.propertycontainer:last-child');
- if(typeof this.data.TEL[phone].label != 'undefined') {
- curphone.prepend('<label class="xab">'+this.data.TEL[phone].label+'</label>');
- }
- curphone.find('select').multiselect('destroy');
- curphone.data('checksum', this.data.TEL[phone]['checksum'])
- curphone.find('input[type="text"]').val(this.data.TEL[phone]['value']);
- for(var param in this.data.TEL[phone]['parameters']) {
- if(param.toUpperCase() == 'PREF') {
- curphone.find('input[type="checkbox"]').attr('checked', 'checked');
- }
- else if(param.toUpperCase() == 'TYPE') {
- for(ptype in this.data.TEL[phone]['parameters'][param]) {
- var found = false;
- var pt = this.data.TEL[phone]['parameters'][param][ptype];
- curphone.find('select option').each(function() {
- //if ($(this).val().toUpperCase() == pt.toUpperCase()) {
- if ($.inArray($(this).val().toUpperCase(), pt.toUpperCase().split(',')) > -1) {
- $(this).attr('selected', 'selected');
- found = true;
- }
- });
- if(!found) {
- curphone.find('select option:last-child').after('<option class="custom" value="'+pt+'" selected="selected">'+pt+'</option>');
- }
- }
- }
- }
- curphone.find('select').multiselect({
- noneSelectedText: t('contacts', 'Select type'),
- header: false,
- selectedList: 4,
- classes: 'typelist'
- });
- }
- if(phonelist.find('li').length > 1) {
- $('#phones').show();
- }
- return false;
- },
- },
- Contacts:{
- contacts:{},
- deletionQueue:[],
- batchnum:50,
- warnNotDeleted:function(e) {
- e = e || window.event;
- var warn = t('contacts', 'Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted.');
- if (e) {
- e.returnValue = String(warn);
- }
- if(OC.Contacts.Contacts.deletionQueue.length > 0) {
- setTimeout(OC.Contacts.Contacts.deleteFilesInQueue, 1);
- }
- return warn;
- },
- deleteFilesInQueue:function() {
- var queue = OC.Contacts.Contacts.deletionQueue;
- if(queue.length > 0) {
- OC.Contacts.notify({cancel:true});
- while(queue.length > 0) {
- var id = queue.pop();
- if(id) {
- OC.Contacts.Card.doDelete(id, false);
- }
- }
- }
- },
- getContact:function(id) {
- if(!this.contacts[id]) {
- this.contacts[id] = $('#contacts li[data-id="'+id+'"]');
- if(!this.contacts[id]) {
- self = this;
- $.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':id},function(jsondata){
- if(jsondata.status == 'success'){
- self.contacts[id] = self.insertContact({data:jsondata.data});
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- }
- }
- return this.contacts[id];
- },
- drop:function(event, ui) {
- var dragitem = ui.draggable, droptarget = $(this);
- if(dragitem.is('li')) {
- OC.Contacts.Contacts.dropContact(event, dragitem, droptarget);
- } else {
- OC.Contacts.Contacts.dropAddressbook(event, dragitem, droptarget);
- }
- },
- dropContact:function(event, dragitem, droptarget) {
- if(dragitem.data('bookid') == droptarget.data('id')) {
- return false;
- }
- var droplist = (droptarget.is('ul')) ? droptarget : droptarget.next();
- $.post(OC.filePath('contacts', 'ajax', 'contact/move.php'),
- {
- id: dragitem.data('id'),
- aid: droptarget.data('id')
- },
- function(jsondata){
- if(jsondata.status == 'success'){
- dragitem.attr('data-bookid', droptarget.data('id'))
- dragitem.data('bookid', droptarget.data('id'));
- OC.Contacts.Contacts.insertContact({
- contactlist:droplist,
- contact:dragitem.detach()
- });
- OC.Contacts.Contacts.scrollTo(dragitem.data('id'));
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- },
- dropAddressbook:function(event, dragitem, droptarget) {
- if(confirm(t('contacts', 'Do you want to merge these address books?'))) {
- if(dragitem.data('bookid') == droptarget.data('id')) {
- return false;
- }
- var droplist = (droptarget.is('ul')) ? droptarget : droptarget.next();
- $.post(OC.filePath('contacts', 'ajax', 'contact/move.php'),
- {
- id: dragitem.data('id'),
- aid: droptarget.data('id'),
- isaddressbook: 1
- },
- function(jsondata){
- if(jsondata.status == 'success'){
- OC.Contacts.Contacts.update(); // Easier to refresh the whole bunch.
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- } else {
- return false;
- }
- },
- /**
- * @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 'contactlist' or 'contacts' aren't defined they will be search for based in the properties in 'data'.
- */
- insertContact:function(params) {
- var id, bookid;
- if(!params.contactlist) {
- // FIXME: Check if contact really exists.
- bookid = params.data ? params.data.addressbookid : params.contact.data('bookid');
- id = params.data ? params.data.id : params.contact.data('id');
- params.contactlist = $('#contacts ul[data-id="'+bookid+'"]');
- }
- if(!params.contacts) {
- bookid = params.data ? params.data.addressbookid : params.contact.data('bookid');
- id = params.data ? params.data.id : params.contact.data('id');
- 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;
- var added = false;
- var name = params.data ? params.data.displayname.toLowerCase() : contact.find('a').text().toLowerCase();
- if(params.contacts) {
- params.contacts.each(function() {
- if ($(this).text().toLowerCase() > name) {
- $(this).before(contact);
- added = true;
- return false;
- }
- });
- }
- if(!added || !params.contacts) {
- params.contactlist.append(contact);
- }
- //this.contacts[id] = contact;
- return contact;
- },
- addAddressbook:function(name, description, cb) {
- $.post(OC.filePath('contacts', 'ajax/addressbook', 'add.php'), { name: name, description: description, active: true },
- function(jsondata) {
- if(jsondata.status == 'success'){
- if(cb && typeof cb == 'function') {
- cb(jsondata.data.addressbook);
- }
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- return false;
- }
- });
- },
- doImport:function(file, aid){
- $.post(OC.filePath('contacts', '', 'import.php'), { id: aid, file: file, fstype: 'OC_FilesystemView' },
- function(jsondata){
- if(jsondata.status != 'success'){
- OC.Contacts.notify({message:jsondata.data.message});
- }
- });
- return false;
- },
- next:function(reverse) {
- var curlistitem = this.getContact(OC.Contacts.Card.id);
- var newlistitem = reverse ? curlistitem.prev('li') : curlistitem.next('li');
- if(newlistitem) {
- curlistitem.removeClass('active');
- OC.Contacts.Card.update({
- cid:newlistitem.data('id'),
- aid:newlistitem.data('bookid')
- });
- }
- },
- previous:function() {
- this.next(true);
- },
- nextAddressbook:function(reverse) {
- console.log('nextAddressbook', reverse);
- var curlistitem = this.getContact(OC.Contacts.Card.id);
- var parent = curlistitem.parent('ul');
- var newparent = reverse
- ? parent.prevAll('ul').first()
- : parent.nextAll('ul').first();
- if(newparent) {
- newlistitem = newparent.find('li:first-child');
- if(newlistitem) {
- parent.slideUp().prev('h3').removeClass('active');
- newparent.slideDown().prev('h3').addClass('active');
- curlistitem.removeClass('active');
- OC.Contacts.Card.update({
- cid:newlistitem.data('id'),
- aid:newlistitem.data('bookid')
- });
- }
- }
- },
- previousAddressbook:function() {
- console.log('previousAddressbook');
- this.nextAddressbook(true);
- },
- // Reload the contacts list.
- update:function(params){
- if(!params) { params = {}; }
- if(!params.start) {
- if(params.aid) {
- $('#contacts h3[data-id="'+params.aid+'"],#contacts ul[data-id="'+params.aid+'"]').remove();
- } else {
- $('#contacts').empty();
- }
- }
- self = this;
- console.log('update: ' + params.cid + ' ' + params.aid + ' ' + params.start);
- var firstrun = false;
- var opts = {};
- opts['startat'] = (params.start?params.start:0);
- if(params.aid) {
- opts['aid'] = params.aid;
- }
- $.getJSON(OC.filePath('contacts', 'ajax', 'contact/list.php'),opts,function(jsondata){
- if(jsondata.status == 'success'){
- var books = jsondata.data.entries;
- $.each(books, function(b, book) {
- if($('#contacts h3[data-id="'+b+'"]').length == 0) {
- firstrun = true;
- if($('#contacts h3').length == 0) {
- $('#contacts').html('<h3 class="addressbook" contextmenu="addressbookmenu" data-id="'
- + b + '" data-permissions="' + book.permissions + '">' + book.displayname
- + '</h3><ul class="contacts hidden" data-id="'+b+'" data-permissions="'
- + book.permissions + '"></ul>');
- } else {
- if(!$('#contacts h3[data-id="' + b + '"]').length) {
- var item = $('<h3 class="addressbook" contextmenu="addressbookmenu" data-id="'
- + b + '" data-permissions="' + book.permissions + '">'
- + book.displayname+'</h3><ul class="contacts hidden" data-id="' + b
- + '" data-permissions="' + book.permissions + '"></ul>');
- var added = false;
- $('#contacts h3').each(function(){
- if ($(this).text().toLowerCase() > book.displayname.toLowerCase()) {
- $(this).before(item).fadeIn('fast');
- added = true;
- return false;
- }
- });
- if(!added) {
- $('#contacts').append(item);
- }
- }
- }
- $('#contacts h3[data-id="'+b+'"]').on('click', function(event) {
- $('#contacts h3').removeClass('active');
- $(this).addClass('active');
- $('#contacts ul[data-id="'+b+'"]').slideToggle(300);
- return false;
- });
- var accept = 'li:not([data-bookid="'+b+'"]),h3:not([data-id="'+b+'"])';
- $('#contacts h3[data-id="'+b+'"],#contacts ul[data-id="'+b+'"]').droppable({
- drop: OC.Contacts.Contacts.drop,
- activeClass: 'ui-state-hover',
- accept: accept
- });
- }
- var contactlist = $('#contacts ul[data-id="'+b+'"]');
- var contacts = $('#contacts ul[data-id="'+b+'"] li');
- for(var c in book.contacts) {
- if(book.contacts[c].id == undefined) { continue; }
- if(!$('#contacts li[data-id="'+book.contacts[c]['id']+'"]').length) {
- var contact = OC.Contacts.Contacts.insertContact({contactlist:contactlist, contacts:contacts, data:book.contacts[c]});
- if(c == self.batchnum-10) {
- contact.bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
- $(this).unbind(event);
- var bookid = $(this).data('bookid');
- var numsiblings = $('.contacts li[data-bookid="'+bookid+'"]').length;
- if (isInView && numsiblings >= self.batchnum) {
- console.log('This would be a good time to load more contacts.');
- OC.Contacts.Contacts.update({cid:params.cid, aid:bookid, start:$('#contacts li[data-bookid="'+bookid+'"]').length});
- }
- });
- }
- }
- }
- });
- if($('#contacts h3').length > 1) {
- $('#contacts li,#contacts h3').draggable({
- distance: 10,
- revert: 'invalid',
- axis: 'y', containment: '#contacts',
- scroll: true, scrollSensitivity: 40,
- opacity: 0.7, helper: 'clone'
- });
- } else {
- $('#contacts h3').first().addClass('active');
- }
- if(opts['startat'] == 0) { // only update card on first load.
- OC.Contacts.Card.update(params);
- }
- } else {
- OC.Contacts.notify({message:t('contacts', 'Error')+': '+jsondata.data.message});
- }
- });
- },
- refreshThumbnail:function(id){
- var item = $('.contacts li[data-id="'+id+'"]').find('a');
- item.html(OC.Contacts.Card.fn);
- item.css('background','url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+id+'&refresh=1'+Math.random()+') no-repeat');
- },
- scrollTo:function(id){
- var item = $('#contacts li[data-id="'+id+'"]');
- if(item && $.isNumeric(item.offset().top)) {
- console.log('scrollTo ' + parseInt(item.offset().top));
- $('#contacts').animate({
- scrollTop: parseInt(item.offset()).top-40}, 'slow','swing');
- }
- }
- }
-}
-$(document).ready(function(){
-
- OCCategories.changed = OC.Contacts.Card.categoriesChanged;
- OCCategories.app = 'contacts';
-
- var ninjahelp = $('#ninjahelp');
-
- $('#bottomcontrols .settings').on('click keydown', function() {
- try {
- ninjahelp.hide();
- OC.appSettings({appid:'contacts', loadJS:true, cache:false});
- } catch(e) {
- console.log('error:', e.message);
- }
- });
- $('#bottomcontrols .import').click(function() {
- $('#import_upload_start').trigger('click');
- });
- $('#contacts_newcontact').on('click keydown', OC.Contacts.Card.editNew);
-
- ninjahelp.find('.close').on('click keydown',function() {
- ninjahelp.hide();
- });
-
- $(document).on('keyup', function(event) {
- if(event.target.nodeName.toUpperCase() != 'BODY'
- || $('#contacts li').length == 0
- || !OC.Contacts.Card.id) {
- return;
- }
- //console.log(event.which + ' ' + event.target.nodeName);
- /**
- * To add:
- * Shift-a: add addressbook
- * u (85): hide/show leftcontent
- * f (70): add field
- */
- switch(event.which) {
- case 27: // Esc
- ninjahelp.hide();
- break;
- case 46: // Delete
- if(event.shiftKey) {
- OC.Contacts.Card.delayedDelete();
- }
- break;
- case 40: // down
- case 74: // j
- OC.Contacts.Contacts.next();
- break;
- case 65: // a
- if(event.shiftKey) {
- // add addressbook
- OC.Contacts.notImplemented();
- break;
- }
- OC.Contacts.Card.editNew();
- break;
- case 38: // up
- case 75: // k
- OC.Contacts.Contacts.previous();
- break;
- case 34: // PageDown
- case 78: // n
- // next addressbook
- OC.Contacts.Contacts.nextAddressbook();
- break;
- case 79: // o
- var aid = $('#contacts h3.active').first().data('id');
- if(aid) {
- $('#contacts ul[data-id="'+aid+'"]').slideToggle(300);
- }
- break;
- case 33: // PageUp
- case 80: // p
- // prev addressbook
- OC.Contacts.Contacts.previousAddressbook();
- break;
- case 82: // r
- OC.Contacts.Contacts.update({cid:OC.Contacts.Card.id});
- break;
- case 191: // ?
- ninjahelp.toggle('fast');
- break;
- }
-
- });
-
- //$(window).on('beforeunload', OC.Contacts.Contacts.deleteFilesInQueue);
-
- // Load a contact.
- $('.contacts').keydown(function(event) {
- if(event.which == 13 || event.which == 32) {
- $('.contacts').click();
- }
- });
- $(document).on('click', '#contacts', function(event){
- var $tgt = $(event.target);
- if ($tgt.is('li') || $tgt.is('a')) {
- var item = $tgt.is('li')?$($tgt):($tgt).parent();
- var id = item.data('id');
- var bookid = item.data('bookid');
- item.addClass('active');
- var oldid = $('#rightcontent').data('id');
- if(oldid != 0){
- var olditem = $('.contacts li[data-id="'+oldid+'"]');
- var oldbookid = olditem.data('bookid');
- olditem.removeClass('active');
- if(oldbookid != bookid) {
- $('#contacts h3[data-id="'+oldbookid+'"]').removeClass('active');
- $('#contacts h3[data-id="'+bookid+'"]').addClass('active');
- }
- }
- $.getJSON(OC.filePath('contacts', 'ajax', 'contact/details.php'),{'id':id},function(jsondata){
- if(jsondata.status == 'success'){
- OC.Contacts.Card.loadContact(jsondata.data, bookid);
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- }
- return false;
- });
-
- $('.contacts_property').live('change', function(){
- OC.Contacts.Card.saveProperty(this);
- });
-
- $(function() {
- // Upload function for dropped contact photos files. Should go in the Contacts class/object.
- $.fileUpload = function(files){
- var file = files[0];
- if(file.size > $('#max_upload').val()){
- OC.dialogs.alert(t('contacts','The file you are trying to upload exceed the maximum size for file uploads on this server.'), t('contacts','Upload too large'));
- return;
- }
- if (file.type.indexOf("image") != 0) {
- OC.dialogs.alert(t('contacts','Only image files can be used as profile picture.'), t('contacts','Wrong file type'));
- return;
- }
- var xhr = new XMLHttpRequest();
-
- if (!xhr.upload) {
- OC.dialogs.alert(t('contacts', 'Your browser doesn\'t support AJAX upload. Please click on the profile picture to select a photo to upload.'), t('contacts', 'Error'))
- }
- fileUpload = xhr.upload,
- xhr.onreadystatechange = function() {
- if (xhr.readyState == 4){
- response = $.parseJSON(xhr.responseText);
- if(response.status == 'success') {
- if(xhr.status == 200) {
- OC.Contacts.Card.editPhoto(response.data.id, response.data.tmp);
- } else {
- OC.dialogs.alert(xhr.status + ': ' + xhr.responseText, t('contacts', 'Error'));
- }
- } else {
- OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
- }
- }
- };
-
- fileUpload.onprogress = function(e){
- if (e.lengthComputable){
- var _progress = Math.round((e.loaded * 100) / e.total);
- //if (_progress != 100){
- //}
- }
- };
- xhr.open('POST', OC.filePath('contacts', 'ajax', 'uploadphoto.php')+'?id='+OC.Contacts.Card.id+'&requesttoken='+requesttoken+'&imagefile='+encodeURIComponent(file.name), true);
- xhr.setRequestHeader('Cache-Control', 'no-cache');
- xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
- xhr.setRequestHeader('X_FILE_NAME', encodeURIComponent(file.name));
- xhr.setRequestHeader('X-File-Size', file.size);
- xhr.setRequestHeader('Content-Type', file.type);
- xhr.send(file);
- }
- });
-
- $(document).bind('drop dragover', function (e) {
- e.preventDefault(); // prevent browser from doing anything, if file isn't dropped in dropZone
- });
-
- //add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
- if(navigator.userAgent.search(/konqueror/i)==-1){
- $('#import_upload_start').attr('multiple','multiple')
- }
- // Import using jquery.fileupload
- $(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,
- add: function(e, data) {
- var files = data.files;
- var totalSize=0;
- if(files) {
- numfiles += files.length; uploadedfiles = 0;
- for(var i=0;i<files.length;i++) {
- if(files[i].size ==0 && files[i].type== '') {
- OC.dialogs.alert(t('files', 'Unable to upload your file as it is a directory or has 0 bytes'), t('files', 'Upload Error'));
- return;
- }
- totalSize+=files[i].size;
- }
- }
- if(totalSize>$('#max_upload').val()){
- OC.dialogs.alert(t('contacts','The file you are trying to upload exceed the maximum size for file uploads on this server.'), t('contacts','Upload too large'));
- numfiles = uploadedfiles = retries = aid = 0;
- uploadingFiles = {};
- return;
- }else{
- if($.support.xhrFileUpload) {
- for(var i=0;i<files.length;i++){
- var fileName = files[i].name;
- var dropTarget;
- if($(e.originalEvent.target).is('h3')) {
- dropTarget = $(e.originalEvent.target).next('ul');
- } else {
- dropTarget = $(e.originalEvent.target).closest('ul');
- }
- if(dropTarget && dropTarget.hasClass('contacts')) { // TODO: More thorough check for where we are.
- aid = dropTarget.attr('data-id');
- } else {
- aid = undefined;
- }
- var jqXHR = $('#import_upload_start').fileupload('send', {files: files[i],
- formData: function(form) {
- var formArray = form.serializeArray();
- formArray['aid'] = aid;
- return formArray;
- }})
- .success(function(result, textStatus, jqXHR) {
- if(result.status == 'success') {
- // import the file
- uploadedfiles += 1;
- } else {
- OC.Contacts.notify({message:jsondata.data.message});
- }
- return false;
- })
- .error(function(jqXHR, textStatus, errorThrown) {
- console.log(textStatus);
- OC.Contacts.notify({message:errorThrown + ': ' + textStatus,});
- });
- uploadingFiles[fileName] = jqXHR;
- }
- } else {
- data.submit().success(function(data, status) {
- response = jQuery.parseJSON(data[0].body.innerText);
- if(response[0] != undefined && response[0].status == 'success') {
- var file=response[0];
- delete uploadingFiles[file.name];
- $('tr').filterAttr('data-file',file.name).data('mime',file.mime);
- var size = $('tr').filterAttr('data-file',file.name).find('td.filesize').text();
- if(size==t('files','Pending')){
- $('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
- }
- FileList.loadingDone(file.name);
- } else {
- OC.Contacts.notify({message:response.data.message});
- }
- });
- }
- }
- },
- fail: function(e, data) {
- console.log('fail');
- OC.Contacts.notify({message:data.errorThrown + ': ' + data.textStatus});
- // TODO: Remove file from upload queue.
- },
- progressall: function(e, data) {
- var progress = (data.loaded/data.total)*50;
- $('#uploadprogressbar').progressbar('value',progress);
- },
- start: function(e, data) {
- $('#uploadprogressbar').progressbar({value:0});
- $('#uploadprogressbar').fadeIn();
- if(data.dataType != 'iframe ') {
- $('#upload input.stop').show();
- }
- },
- stop: function(e, data) {
- // stop only gets fired once so we collect uploaded items here.
- var importFiles = function(aid, fileList) {
- // Create a closure that can be called from different places.
- if(numfiles != uploadedfiles) {
- OC.Contacts.notify({message:t('contacts', 'Not all files uploaded. Retrying...')});
- retries += 1;
- if(retries > 3) {
- numfiles = uploadedfiles = retries = aid = 0;
- uploadingFiles = {};
- $('#uploadprogressbar').fadeOut();
- OC.dialogs.alert(t('contacts', 'Something went wrong with the upload, please retry.'), t('contacts', 'Error'));
- return;
- }
- setTimeout(function() { // Just to let any uploads finish
- importFiles(aid, uploadingFiles);
- }, 1000);
- }
- $('#uploadprogressbar').progressbar('value',50);
- var todo = uploadedfiles;
- $.each(fileList, function(fileName, data) {
- OC.Contacts.Contacts.doImport(fileName, aid);
- delete fileList[fileName];
- numfiles -= 1; uploadedfiles -= 1;
- $('#uploadprogressbar').progressbar('value',50+(50/(todo-uploadedfiles)));
- })
- $('#uploadprogressbar').progressbar('value',100);
- $('#uploadprogressbar').fadeOut();
- setTimeout(function() {
- OC.Contacts.Contacts.update({aid:aid});
- numfiles = uploadedfiles = retries = aid = 0;
- }, 1000);
- }
- if(!aid) {
- // Either selected with filepicker or dropped outside of an address book.
- $.getJSON(OC.filePath('contacts', 'ajax', 'selectaddressbook.php'),{},function(jsondata) {
- if(jsondata.status == 'success') {
- if($('#selectaddressbook_dialog').dialog('isOpen') == true) {
- $('#selectaddressbook_dialog').dialog('moveToTop');
- } else {
- $('#dialog_holder').html(jsondata.data.page).ready(function($) {
- var select_dlg = $('#selectaddressbook_dialog');
- select_dlg.dialog({
- modal: true, height: 'auto', width: 'auto',
- buttons: {
- 'Ok':function() {
- aid = select_dlg.find('input:checked').val();
- if(aid == 'new') {
- var displayname = select_dlg.find('input.name').val();
- var description = select_dlg.find('input.desc').val();
- if(!displayname.trim()) {
- OC.dialogs.alert(t('contacts', 'The address book name cannot be empty.'), t('contacts', 'Error'));
- return false;
- }
- $(this).dialog('close');
- OC.Contacts.Contacts.addAddressbook(displayname, description, function(addressbook) {
- aid = addressbook.id;
- setTimeout(function() {
- importFiles(aid, uploadingFiles);
- }, 500);
- console.log('aid ' + aid);
- });
- } else {
- setTimeout(function() {
- importFiles(aid, uploadingFiles);
- }, 500);
- console.log('aid ' + aid);
- $(this).dialog('close');
- }
- },
- 'Cancel':function() {
- $(this).dialog('close');
- numfiles = uploadedfiles = retries = aid = 0;
- uploadingFiles = {};
- $('#uploadprogressbar').fadeOut();
- }
- },
- close: function(event, ui) {
- // TODO: If numfiles != 0 delete tmp files after a timeout.
- $(this).dialog('destroy').remove();
- }
- });
- });
- }
- } else {
- $('#uploadprogressbar').fadeOut();
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- } else {
- // Dropped on an address book or it's list.
- setTimeout(function() { // Just to let any uploads finish
- importFiles(aid, uploadingFiles);
- }, 1000);
- }
- if(data.dataType != 'iframe ') {
- $('#upload input.stop').hide();
- }
- }
- })
- });
-
- OC.Contacts.loadHandlers();
- OC.Contacts.Contacts.update({cid:id});
-});