jQuery(function() { var links = 0; // Remove the CSS-only popup and replace it with a jQuery/AJAX popup jQuery('div.dokuwiki a.plugin_davcard_url span.plugin_davcard_popup').each(function() { jQuery(this).addClass('plugin_davcard_nopopup'); jQuery(this).removeClass('plugin_davcard_popup'); var $link = jQuery(this).parents('a.plugin_davcard_url'); if(!$link) return; $link.davcard_popup_id = 'plugin_davcard_popup_'+(links++); $link.mouseover(function () { $link.davcard_timer = window.setTimeout( function () { dw_davcard__modals.showOverlay($link); $link.davcard_timer = null; }, 300 ); }); // Attach edit event dialog to link $link.click( function(e) { dw_davcard__modals.attachEditDialog($link); e.preventDefault(); return ''; } ); $link.mouseout(function () { $link = jQuery(this); if ($link.davcard_timer) window.clearTimeout($link.davcard_timer); $link.davcard_timer = null; }); }); // Attach to addressbook links var addressbookpage = jQuery('#davcardAddressbookList').data('addressbookpage'); if(!addressbookpage) return; jQuery('div.davcardAddressbookAddNew a').each(function() { var $link = jQuery(this); var href = $link.attr('href'); if (!href) return; $link.click( function(e) { dw_davcard__modals.id = addressbookpage; dw_davcard__modals.showEditContactDialog(null, false, true); e.preventDefault(); return ''; } ); } ); jQuery('div.dokuwiki a.plugin_davcard_edit_vcard').each(function() { var $link = jQuery(this); // Attach edit event dialog to link $link.click( function(e) { dw_davcard__modals.attachEditDialog($link); e.preventDefault(); return ''; } ); }); }); /** * This holds all modal windows that DAVCard uses. */ var dw_davcard__modals = { $editContactDialog: null, $confirmDialog: null, $loadingDialog: null, page: JSINFO['id'], id: null, uri: null, action: null, completeCb: null, msg: null, attachEditDialog : function($link) { dw_davcard__modals.showLoadingDialog(); dw_davcard__modals.id = $link.data('davcardid'); var write = $link.data('write'); jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_davcard', id: $link.data('davcardid'), page: dw_davcard__modals.page, action: 'getContactDetails', params: { uri: $link.data('davcarduri'), }, sectok: JSINFO.plugin.davcard['sectok'] }, function(data) { var result = data['result']; if(result === true) { dw_davcard__modals.hideLoadingDialog(); dw_davcard__modals.showEditContactDialog(data['contactdata'], true, write); } else { dw_davcard__modals.hideLoadingDialog(); dw_davcard__modals.msg = LANG.plugins.davcard['error_loading']; dw_davcard__modals.showDialog(false); } } ); }, showEditContactDialog : function(entry, edit, write) { if(dw_davcard__modals.$editContactDialog) return; var title = ''; var dialogButtons = {}; if(edit) { title = LANG.plugins.davcard['edit_entry']; dialogButtons[LANG.plugins.davcard['edit']] = function() { var postArray = { }; var addrArray = new Array(); var mailArray = new Array(); var phoneArray = new Array(); var pageid = jQuery("#dw_davcard__addressbook option:selected").val(); jQuery("tr.dw_davcard__editentry_phone_row").each(function() { var type = jQuery(this).children("td.dw_davcard__editentry_phone_row_type").data('type'); var phone = jQuery(this).children("td.dw_davcard__editentry_phone_row_number").html(); var phoneRow = { }; phoneRow['type'] = type; phoneRow['number'] = phone; phoneArray.push(phoneRow); }); jQuery("tr.dw_davcard__editentry_email_row").each(function() { var type = jQuery(this).children("td.dw_davcard__editentry_email_row_data").data('type'); var email = jQuery(this).children("td.dw_davcard__editentry_email_row_data").html(); mailRow = { }; mailRow['type'] = type; mailRow['mail'] = email; mailArray.push(mailRow); }); jQuery("tr.dw_davcard__editentry_addresses_row").each(function() { var $rowData = jQuery(this).children("td.dw_davcard__editentry_addresses_row_data"); var type = $rowData.data('type'); var city = $rowData.data('city'); var street = $rowData.data('street'); var zipcode = $rowData.data('zipcode'); var country = $rowData.data('country'); var addrRow = { }; addrRow['type'] = type; addrRow['city'] = city; addrRow['street'] = street; addrRow['zipcode'] = zipcode; addrRow['country'] = country; addrArray.push(addrRow); }); postArray['phones'] = phoneArray; postArray['email'] = mailArray; postArray['addresses'] = addrArray; postArray['uri'] = entry['uri']; jQuery("input.dw_davcard__editcontact").each(function() { if(jQuery(this).attr('type') == 'checkbox') { postArray[jQuery(this).prop('name')] = jQuery(this).prop('checked') ? 1 : 0; } else { postArray[jQuery(this).prop('name')] = jQuery(this).val(); } }); jQuery('#dw_davcard__ajaxedit').html(''); jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_davcard', id: pageid, page: dw_davcard__modals.page, action: 'editContact', params: postArray, sectok: JSINFO.plugin.davcard['sectok'] }, function(data) { var result = data['result']; var html = data['html']; jQuery('#dw_davcard__ajaxedit').html(html); if(result === true) { dw_davcard__modals.hideEditContactDialog(); location.reload(); } } ); }; dialogButtons[LANG.plugins.davcard['delete']] = function() { dw_davcard__modals.action = 'deleteContact'; dw_davcard__modals.uri = entry['uri']; dw_davcard__modals.msg = LANG.plugins.davcard['really_delete_this_entry']; dw_davcard__modals.completeCb = function(data) { var result = data['result']; jQuery('#dw_davcard__ajaxedit').html(data['html']); if(result === true) { dw_davcard__modals.hideEditContactDialog(); location.reload(); } }; dw_davcard__modals.showDialog(true); }; } else { title = LANG.plugins.davcard['create_entry']; dialogButtons[LANG.plugins.davcard['create']] = function() { var postArray = { }; var addrArray = new Array(); var mailArray = new Array(); var phoneArray = new Array(); var pageid = jQuery("#dw_davcard__addressbook option:selected").val(); jQuery("tr.dw_davcard__editentry_phone_row").each(function() { var type = jQuery(this).children("td.dw_davcard__editentry_phone_row_type").data('type'); var phone = jQuery(this).children("td.dw_davcard__editentry_phone_row_number").html(); var phoneRow = { }; phoneRow['type'] = type; phoneRow['number'] = phone; phoneArray.push(phoneRow); }); jQuery("tr.dw_davcard__editentry_email_row").each(function() { var type = jQuery(this).children("td.dw_davcard__editentry_email_row_data").data('type'); var email = jQuery(this).children("td.dw_davcard__editentry_email_row_data").html(); mailRow = { }; mailRow['type'] = type; mailRow['mail'] = email; mailArray.push(mailRow); }); jQuery("tr.dw_davcard__editentry_addresses_row").each(function() { var $rowData = jQuery(this).children("td.dw_davcard__editentry_addresses_row_data"); var type = $rowData.data('type'); var city = $rowData.data('city'); var street = $rowData.data('street'); var zipcode = $rowData.data('zipcode'); var country = $rowData.data('country'); var addrRow = { }; addrRow['type'] = type; addrRow['city'] = city; addrRow['street'] = street; addrRow['zipcode'] = zipcode; addrRow['country'] = country; addrArray.push(addrRow); }); postArray['phones'] = phoneArray; postArray['email'] = mailArray; postArray['addresses'] = addrArray; jQuery("input.dw_davcard__editcontact").each(function() { if(jQuery(this).attr('type') == 'checkbox') { postArray[jQuery(this).prop('name')] = jQuery(this).prop('checked') ? 1 : 0; } else { postArray[jQuery(this).prop('name')] = jQuery(this).val(); } }); jQuery('#dw_davcard__ajaxedit').html(''); jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_davcard', id: pageid, page: dw_davcard__modals.page, action: 'newContact', params: postArray, sectok: JSINFO.plugin.davcard['sectok'] }, function(data) { var result = data['result']; var html = data['html']; jQuery('#dw_davcard__ajaxedit').html(html); if(result === true) { dw_davcard__modals.hideEditContactDialog(); location.reload(); } } ); }; } // Remove create/edit buttons if we are read only if(!write) { delete dialogButtons['create']; delete dialogButtons['edit']; } dialogButtons[LANG.plugins.davcard['cancel']] = function() { dw_davcard__modals.hideEditContactDialog(); }; dw_davcard__modals.$editContactDialog = jQuery(document.createElement('div')) .dialog({ autoOpen: false, draggable: true, // fix for dragging: http://stackoverflow.com/questions/17247486/jquery-ui-dialog-dragging-issues drag: function(event, ui) { var fixPix = jQuery(document).scrollTop(); iObj = ui.position; iObj.top = iObj.top - fixPix; jQuery(this).closest(".ui-dialog").css("top", iObj.top + "px"); }, title: title, resizable: true, buttons: dialogButtons, }) .html( '
' + '' + '' + '' + '' + '' + '' + '
' + LANG.plugins.davcard['addressbook'] + '
' + LANG.plugins.davcard['firstname'] + '
' + LANG.plugins.davcard['lastname'] + '
' + LANG.plugins.davcard['phone'] + '
' + LANG.plugins.davcard['add_phone'] + '
' + LANG.plugins.davcard['email'] + '
' + LANG.plugins.davcard['add_mail'] + '
' + LANG.plugins.davcard['addresses'] + '' + '' + '' + '' + '' + '
' + LANG.plugins.davcard['street'] + '
' + LANG.plugins.davcard['zipcode'] + '
' + LANG.plugins.davcard['city'] + '
' + LANG.plugins.davcard['country'] + '
' + LANG.plugins.davcard['add_address'] + '
' + '' + '
' + '
' ) .parent() .attr('id','dw_davcard__edit') .css({'overflow-y': 'auto'}) .show() .appendTo('.dokuwiki:first'); // attach event handlers jQuery('#dw_davcard__edit .ui-dialog-titlebar-close').click(function(){ dw_davcard__modals.hideEditContactDialog(); }); // Populate Dropdowns var $dropdown = jQuery('#dw_davcard__editentry_phones_select'); $dropdown.append(''); $dropdown.append(''); $dropdown.append(''); $dropdown = jQuery('#dw_davcard__editentry_addresses_select'); $dropdown.append(''); $dropdown.append(''); $dropdown = jQuery('#dw_davcard__addressbook'); jQuery('#davcardAddressbookList option').each(function() { var sel = ''; if(edit && dw_davcard__modals.id == jQuery(this).val()) sel = ' selected="selected"'; if(edit || (!edit && (jQuery(this).data('write') == "1" || jQuery(this).data('write') == "true"))) { $dropdown.append(''); } }); if(edit) { $dropdown.prop('disabled', true); } dw_davcard__modals.attachPhoneDeleteHandlers(); dw_davcard__modals.attachMailDeleteHandlers(); dw_davcard__modals.attachAddressDeleteHandlers(); jQuery('#dw_davcard__editentry_phone_add').on("click", function(e) { e.preventDefault(); var number = jQuery('#dw_davcard__editentry_phone_edit').val(); if(number == '') return false; var type = jQuery('#dw_davcard__editentry_phones_select option:selected').val(); var typeText = jQuery('#dw_davcard__editentry_phones_select option:selected').text(); jQuery('#dw_davcard__editentry_phone_edit').val(''); dw_davcard__modals.addPhone(type, typeText, number); return false; }); jQuery('#dw_davcard__editentry_email_add').on("click", function(e) { e.preventDefault(); var mail = jQuery('#dw_davcard__editentry_email_edit').val(); if(mail == '') return false; jQuery('#dw_davcard__editentry_email_edit').val(''); dw_davcard__modals.addMail('internet', mail); return false; }); jQuery('#dw_davcard__editentry_addresses_add').on("click", function(e) { e.preventDefault(); var street = jQuery('#dw_davcard__editentry_addresses_street').val(); var zipcode = jQuery('#dw_davcard__editentry_addresses_zipcode').val(); var country = jQuery('#dw_davcard__editentry_addresses_country').val(); var city = jQuery('#dw_davcard__editentry_addresses_city').val(); var type = jQuery('#dw_davcard__editentry_addresses_select option:selected').val(); var typeText = jQuery('#dw_davcard__editentry_addresses_select option:selected').text(); if(street == '' && zipcode == '' && country == '' && city == '') return false; jQuery('#dw_davcard__editentry_addresses_street').val(''); jQuery('#dw_davcard__editentry_addresses_city').val(''); jQuery('#dw_davcard__editentry_addresses_country').val(''); jQuery('#dw_davcard__editentry_addresses_zipcode').val(''); dw_davcard__modals.addAddress(type, typeText, street, zipcode, city, country); return false; }); if(edit) { var name = entry['structuredname'].split(';'); jQuery('#dw_davcard__lastname_edit').val(name[0]); jQuery('#dw_davcard__firstname_edit').val(name[1]); for(var i=0; i jQuery(window).height()) { jQuery('#dw_davcard__edit').height(jQuery(window).height() * 0.9); } jQuery('#dw_davcard__edit').position({ my: "center", at: "center", of: window }); }, addressTypeToString: function(type) { var ret = ''; switch(type) { case 'work': ret = LANG.plugins.davcard['work']; break; case 'home': ret = LANG.plugins.davcard['home']; break; default: ret = LANG.plugins.davcard['other_address']; break; } return ret; }, phoneTypeToString: function(type) { var ret = ''; switch(type) { case 'work': ret = LANG.plugins.davcard['workphone']; break; case 'cell': ret = LANG.plugins.davcard['cellphone']; break; case 'home': ret = LANG.plugins.davcard['phone']; break; default: ret = LANG.plugins.davcard['otherphone']; break; } return ret; }, addPhone: function(type, typeText, number) { var row = '' + typeText + '' + number + '' + LANG.plugins.davcard['delete'] + ''; jQuery('#dw_davcard__editentry_phones > tbody:last').append(row); dw_davcard__modals.attachPhoneDeleteHandlers(); }, addMail: function(type, mail) { var row = '' + mail + '' + LANG.plugins.davcard['delete'] + ''; jQuery('#dw_davcard__editentry_emails > tbody:last').append(row); dw_davcard__modals.attachMailDeleteHandlers(); }, addAddress: function(type, typeText, street, zipcode, city, country) { var row = '' + typeText + '' + LANG.plugins.davcard['street'] + ': ' + street + '
' + '' + LANG.plugins.davcard['city'] + ': ' + zipcode + ' ' + city + '
' + '' + LANG.plugins.davcard['country'] + ': ' + country + '
' + '' + LANG.plugins.davcard['delete'] + ''; jQuery('#dw_davcard__editentry_addresses > tbody:last').append(row); dw_davcard__modals.attachAddressDeleteHandlers(); }, attachAddressDeleteHandlers: function() { jQuery("#dw_davcard__editentry_addresses .deleteAddress").on("click", function(e) { e.preventDefault(); var tr = jQuery(this).closest('tr'); tr.css("background-color", "#FF3700"); tr.fadeOut(400, function() { tr.remove(); }); return false; }); }, attachPhoneDeleteHandlers: function() { jQuery("#dw_davcard__editentry_phones .deletePhoneNumber").on("click", function(e) { e.preventDefault(); var tr = jQuery(this).closest('tr'); tr.css("background-color", "#FF3700"); tr.fadeOut(400, function() { tr.remove(); }); return false; }); }, attachMailDeleteHandlers: function() { jQuery("#dw_davcard__editentry_emails .deleteEmail").on("click", function(e) { e.preventDefault(); var tr = jQuery(this).closest('tr'); tr.css("background-color", "#FF3700"); tr.fadeOut(400, function() { tr.remove(); }); return false; }); }, showLoadingDialog: function() { if(dw_davcard__modals.$loadingDialog) return; var dialogButtons = {}; var title = ''; title = LANG.plugins.davcard['loading']; dialogButtons[LANG.plugins.davcard['cancel']] = function() { dw_davcard__modals.hideLoadingDialog(); }; dw_davcard__modals.$loadingDialog = jQuery(document.createElement('div')) .dialog({ autoOpen: false, draggable: true, //fix for dragging: http://stackoverflow.com/questions/17247486/jquery-ui-dialog-dragging-issues drag: function(event, ui) { var fixPix = jQuery(document).scrollTop(); iObj = ui.position; iObj.top = iObj.top - fixPix; jQuery(this).closest(".ui-dialog").css("top", iObj.top + "px"); }, title: title, resizable: true, buttons: dialogButtons, }) .html('
' + LANG.plugins.davcard['loading'] + '
' ) .parent() .attr('id','dw_davcard__loading') .show() .appendTo('.dokuwiki:first'); jQuery('#dw_davcard__loading').position({ my: "center", at: "center", of: window }); // attach event handlers jQuery('#dw_davcard__loading .ui-dialog-titlebar-close').click(function(){ dw_davcard__modals.hideDialog(); }); }, hideEditContactDialog : function() { dw_davcard__modals.$editContactDialog.empty(); dw_davcard__modals.$editContactDialog.remove(); dw_davcard__modals.$editContactDialog = null; }, hideDialog: function() { dw_davcard__modals.$dialog.empty(); dw_davcard__modals.$dialog.remove(); dw_davcard__modals.$dialog = null; }, hideLoadingDialog: function() { dw_davcard__modals.$loadingDialog.empty(); dw_davcard__modals.$loadingDialog.remove(); dw_davcard__modals.$loadingDialog = null; }, showOverlay: function($link) { if(!$link.davcard_popup) { $link.davcard_popup = dw_page.insituPopup($link, $link.davcard_popup_id); $link.davcard_popup.addClass('plugin_davcard_popup_overlay'); $link.davcard_popup.load( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_davcard', sectok: JSINFO.plugin.davcard['sectok'], action: 'getContactAjax', id: $link.data('davcardid'), params: { uri: $link.data('davcarduri'), } } ); } $link.davcard_popup.show(); }, showDialog : function(confirm) { if(dw_davcard__modals.$confirmDialog) return; var dialogButtons = {}; var title = ''; if(confirm) { title = LANG.plugins.davcard['confirmation']; dialogButtons[LANG.plugins.davcard['yes']] = function() { jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_davcard', id: dw_davcard__modals.id, page: dw_davcard__modals.page, action: dw_davcard__modals.action, params: { uri: dw_davcard__modals.uri }, sectok: JSINFO.plugin.davcard['sectok'] }, function(data) { dw_davcard__modals.completeCb(data); } ); dw_davcard__modals.hideDialog(); }; dialogButtons[LANG.plugins.davcard['cancel']] = function() { dw_davcard__modals.hideDialog(); }; } else { title = LANG.plugins.davcard['info']; dialogButtons[LANG.plugins.davcard['ok']] = function() { dw_davcard__modals.hideDialog(); }; } dw_davcard__modals.$dialog = jQuery(document.createElement('div')) .dialog({ autoOpen: false, draggable: true, //fix for dragging: http://stackoverflow.com/questions/17247486/jquery-ui-dialog-dragging-issues drag: function(event, ui) { var fixPix = jQuery(document).scrollTop(); iObj = ui.position; iObj.top = iObj.top - fixPix; jQuery(this).closest(".ui-dialog").css("top", iObj.top + "px"); }, title: title, resizable: true, buttons: dialogButtons, }) .html( '
' + dw_davcard__modals.msg + '
' ) .parent() .attr('id','dw_davcard__confirm') .show() .appendTo('.dokuwiki:first'); jQuery('#dw_davcard__confirm').position({ my: "center", at: "center", of: window }); // attach event handlers jQuery('#dw_davcard__confirm .ui-dialog-titlebar-close').click(function(){ dw_davcard__modals.hideDialog(); }); }, };