[Bedework-commit] carddav r202 - in
trunk/clients/javascript/bwAddrbookClient: . config/lang resources
svnadmin at bedework.org
svnadmin at bedework.org
Sat Nov 20 00:59:58 EST 2010
Author: johnsa
Date: 2010-11-20 00:59:58 -0500 (Sat, 20 Nov 2010)
New Revision: 202
Modified:
trunk/clients/javascript/bwAddrbookClient/config/lang/en_US.js
trunk/clients/javascript/bwAddrbookClient/index.html
trunk/clients/javascript/bwAddrbookClient/resources/addressbook.css
trunk/clients/javascript/bwAddrbookClient/resources/addressbook.js
Log:
javascript client: allow for multiple email addresses
Modified: trunk/clients/javascript/bwAddrbookClient/config/lang/en_US.js
===================================================================
--- trunk/clients/javascript/bwAddrbookClient/config/lang/en_US.js 2010-11-18 22:02:57 UTC (rev 201)
+++ trunk/clients/javascript/bwAddrbookClient/config/lang/en_US.js 2010-11-20 05:59:58 UTC (rev 202)
@@ -77,6 +77,8 @@
var bwAbDispImportDoneButton = "Refresh List";
var bwAbDispImportProcessingTitle = "Processing Import";
var bwAbDispImportProcessing = "We are processing the import (this may take a moment...)";
+var bwAbDispImportNew = "(new)";
+var bwAbDispImportUpdate = "(update)";
var bwAbDispExportTitle = "Export";
var bwAbDispExported = "Your data has been exported.";
Modified: trunk/clients/javascript/bwAddrbookClient/index.html
===================================================================
--- trunk/clients/javascript/bwAddrbookClient/index.html 2010-11-18 22:02:57 UTC (rev 201)
+++ trunk/clients/javascript/bwAddrbookClient/index.html 2010-11-20 05:59:58 UTC (rev 202)
@@ -77,9 +77,11 @@
<li class="import" id="importContacts">
import
</li>
+ <!--
<li class="export" id="exportContacts">
export
</li>
+ -->
<li class="viewUrl" id="viewBookUrl">
view book url
</li>
@@ -172,14 +174,18 @@
<fieldset>
<legend>Contact information</legend>
<div class="bwFormData">
-
- <label class="bwField" for="EMAIL-01">Email:</label>
- <div class="bwValue">
- <select id="EMAILTYPE-01">
- <option value="work">work</option>
- <option value="home">home</option>
- </select>
- <input type="text" size="40" value="" id="EMAIL-01"/>
+
+ <div id="bwContactEmailHolder">
+ <div class="emailFields" id="emailFields-0">
+ <label class="bwField" for="EMAIL-0">Email:</label>
+ <div class="bwValue">
+ <select id="EMAILTYPE-0">
+ <option value="work">work</option>
+ <option value="home">home</option>
+ </select>
+ <input type="text" size="40" value="" id="EMAIL-0"/>
+ </div>
+ </div>
</div>
<div class="bwAppend" id="bwAppendEmail"></div>
Modified: trunk/clients/javascript/bwAddrbookClient/resources/addressbook.css
===================================================================
--- trunk/clients/javascript/bwAddrbookClient/resources/addressbook.css 2010-11-18 22:02:57 UTC (rev 201)
+++ trunk/clients/javascript/bwAddrbookClient/resources/addressbook.css 2010-11-20 05:59:58 UTC (rev 202)
@@ -432,4 +432,14 @@
}
.ui-widget-content a {
text-decoration: underline;
+}
+.ui-widget-content ol li {
+ list-style: decimal;
+ margin: 0 0 0.5em 1.5em;
+}
+.pre {
+ white-space: pre;
+}
+strong {
+ font-weight: bold;
}
\ No newline at end of file
Modified: trunk/clients/javascript/bwAddrbookClient/resources/addressbook.js
===================================================================
--- trunk/clients/javascript/bwAddrbookClient/resources/addressbook.js 2010-11-18 22:02:57 UTC (rev 201)
+++ trunk/clients/javascript/bwAddrbookClient/resources/addressbook.js 2010-11-20 05:59:58 UTC (rev 202)
@@ -402,7 +402,9 @@
vcData += "NICKNAME:" + $("#NICKNAME").val() + "\n";
vcData += "CLASS:PRIVATE\n";
vcData += "REV:" + getRevDate() + "\n";
- vcData += "EMAIL;TYPE=" + $("#EMAILTYPE-01").val() + ":" + $("#EMAIL-01").val() + "\n";
+ $(".emailFields").each(function(index) {
+ vcData += "EMAIL;TYPE=" + $("#EMAILTYPE-" + index).val() + ":" + $("#EMAIL-" + index).val() + "\n";
+ });
vcData += "TEL;TYPE=" + $("#PHONETYPE-01").val() + ":" + $("#PHONE-01").val() + "\n";
vcData += "ADR;TYPE=" + $("#ADDRTYPE-01").val() + ":" + $("#POBOX-01").val() + ";" + $("#EXTADDR-01").val() + ";" + $("#STREET-01").val() + ";" + $("#CITY-01").val() + ";" + $("#STATE-01").val() + ";" + $("#POSTAL-01").val() + ";" + $("#COUNTRY-01").val() + "\n";
//vcData += "GEO:TYPE=" + $("#ADDRTYPE-01").val() + ":geo:" + $("#GEO-01").val() + "\n";;
@@ -433,7 +435,9 @@
vcData += "NICKNAME:" + $("#NICKNAME").val() + "\n";
vcData += "CLASS:PRIVATE\n";
vcData += "REV:" + getRevDate() + "\n";
- vcData += "EMAIL;TYPE=" + $("#EMAILTYPE-01").val() + ":" + $("#EMAIL-01").val() + "\n";
+ $(".emailFields").each(function(index) {
+ vcData += "EMAIL;TYPE=" + $("#EMAILTYPE-" + index).val() + ":" + $("#EMAIL-" + index).val() + "\n";
+ });
vcData += "TEL;TYPE=" + $("#PHONETYPE-01").val() + ":" + $("#PHONE-01").val() + "\n";
vcData += "ADR;TYPE=" + $("#ADDRTYPE-01").val() + ":" + $("#POBOX-01").val() + ";" + $("#EXTADDR-01").val() + ";" + $("#STREET-01").val() + ";" + $("#CITY-01").val() + ";" + $("#STATE-01").val() + ";" + $("#POSTAL-01").val() + ";" + $("#COUNTRY-01").val() + "\n";
//vcData += "GEO:TYPE=" + $("#ADDRTYPE-01").val() + ":geo:" + $("#GEO-01").val() + "\n";;
@@ -452,7 +456,7 @@
this.importVcards = function() {
var vcardData = $("#bwImportText").val();
var curCards = new Array();
- var importMessages = "";
+ var importMessages = "<ol>";
curCards = separateIntoCards(vcardData);
showMessage(bwAbDispImportProcessingTitle,bwAbDispImportProcessing,true);
@@ -465,7 +469,7 @@
var etag = "";
// no UID? Make one.
- if (!UUID) {
+ if (!UUID || UUID == undefined) {
UUID = "BwABC-Imp-" + Math.uuid();
} else {
// see if we already have a card with this UUID
@@ -473,10 +477,12 @@
var book = bwAddressBook.books[j];
for (var k=0; k < book.vcards.length; k++) {
var existingCard = jQuery.parseJSON(book.vcards[k]);
- if (existingCard.UID[0].value == UUID) {
- isNew = false;
- etag = existingCard.etag;
- break;
+ if (existingCard.UID != undefined && existingCard.UID[0].value != undefined) {
+ if (existingCard.UID[0].value == UUID) {
+ isNew = false;
+ etag = existingCard.etag;
+ break;
+ }
}
}
if (!isNew) {
@@ -504,17 +510,29 @@
xhrobj.setRequestHeader("Content-Type", "text/vcard");
},
success: function(responseData, status){
- importMessages += i + ". " + status + " " + responseData + "<br/>";
+ importMessages += '<li>' + status + ' ' + responseData;
+ if (isNew) {
+ importMessages += bwAbDispImportNew;
+ } else {
+ importMessages += bwAbDispImportUpdate;
+ }
+ if (curCards[i].FN != undefined) {
+ if (curCards[i].FN[0].value != "") {
+ importMessages += '<br/>' + curCards[i].FN[0].value.stripTags();
+ }
+ }
+ importMessages += '</li>';
},
error: function(msg) {
// there was a problem
- importMessages += i + ". " + msg.status + " " + msg.statusText + "<br/>";
+ importMessages += '<li><strong>' + msg.status + ' ' + msg.statusText + '</strong><br/>';
+ importMessages += '<span class="pre">' + $ESAPI.encoder().encodeForHTML(String(curCards[i])) + '</span></li>';
}
});
};
// we can show all messages at the end because we are synchronous
- importMessages += '<div style="text-align: center; margin-top: 2em;"><button type="button" onclick="window.location.reload();">' + bwAbDispImportDoneButton + '</button>';
+ importMessages += '</ol><div style="text-align: center; margin-top: 2em;"><button type="button" onclick="window.location.reload();">' + bwAbDispImportDoneButton + '</button>';
showMessage(bwAbDispImportStatus,importMessages,true);
clearFields("#importForm");
@@ -527,9 +545,8 @@
// Should only export the currently selected book.
// For now, that's the single personal book
this.exportVcards = function() {
-
- // perform a report query on the address book
- var content = '<?xml version="1.0" encoding="utf-8" ?><C:addressbook-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav"><D:prop><D:getetag/><C:address-data/></D:prop><C:filter></C:filter></C:addressbook-query>';
+
+ // perform a get on the book, setting the accept headers and content type
$.ajax({
type: "get",
url: bwAddressBook.defPersBookUrl,
@@ -538,7 +555,6 @@
async: false,
//data: content,
beforeSend: function(xhrobj) {
- //xhrobj.setRequestHeader("X-HTTP-Method-Override", "REPORT");
xhrobj.setRequestHeader("Depth", "1");
xhrobj.setRequestHeader("Content-Type", "text/vcard;charset=UTF-8");
xhrobj.setRequestHeader("Accept", "text/vcard");
@@ -558,9 +574,9 @@
});
});*/
showMessage(bwAbDispExportTitle,bwAbDispExported,true);
- var exportWindow = window.open();
+ /*var exportWindow = window.open();
exportWindow.document.write(String(responseData));
- exportWindow.document.close();
+ exportWindow.document.close();*/
},
error: function(msg) {
@@ -794,7 +810,7 @@
vcData += "ADR:" + $.trim($("#LOCATION-POBOX").val()) + ";" + $.trim($("#LOCATION-EXTADDR").val()) + ";" + $.trim($("#LOCATION-STREET").val()) + ";" + $.trim($("#LOCATION-CITY").val()) + ";" + $.trim($("#LOCATION-STATE").val()) + ";" + $.trim($("#LOCATION-POSTAL").val()) + ";" + $.trim($("#LOCATION-COUNTRY").val()) + "\n";
//vcData += "GEO:TYPE=" + $.trim($("#ADDRTYPE-01").val()) + ":geo:" + $.trim($("#GEO-01").val()) + "\n";;
vcData += "URL:" + $.trim($("#LOCATION-WEBPAGE").val()) + "\n";
- vcData += "PHOTO:VALUE=uri:" + $.trim($("#LOCATION-PHOTOURL").val()) + "\n";
+ vcData += "PHOTO;VALUE=uri:" + $.trim($("#LOCATION-PHOTOURL").val()) + "\n";
vcData += "NOTE:" + $.trim($("#LOCATION-NOTE").val()) + "\n";
vcData += "END:VCARD";
@@ -824,7 +840,7 @@
vcData += "ADR:" + $.trim($("#LOCATION-POBOX").val()) + ";" + $.trim($("#LOCATION-EXTADDR").val()) + ";" + $.trim($("#LOCATION-STREET").val()) + ";" + $.trim($("#LOCATION-CITY").val()) + ";" + $.trim($("#LOCATION-STATE").val()) + ";" + $.trim($("#LOCATION-POSTAL").val()) + ";" + $.trim($("#LOCATION-COUNTRY").val()) + "\n";
//vcData += "GEO:TYPE=" + $.trim($("#ADDRTYPE-01").val()) + ":geo:" + $.trim($("#GEO-01").val()) + "\n";;
vcData += "URL:" + $.trim($("#LOCATION-WEBPAGE").val()) + "\n";
- vcData += "PHOTO:VALUE=uri:" + $.trim($("#LOCATION-PHOTOURL").val()) + "\n";
+ vcData += "PHOTO;VALUE=uri:" + $.trim($("#LOCATION-PHOTOURL").val()) + "\n";
vcData += "NOTE:" + $.trim($("#LOCATION-NOTE").val()) + "\n";
vcData += "END:VCARD";
@@ -1429,8 +1445,18 @@
// add a new email address field to the add contact form
$("#bwAppendEmail").click(function() {
- showMessage(bwAbDispUnimplementedTitle,bwAbDispUnimplemented,true);
- return false;
+ // get the id of the last email group
+ var lastEmailId = $(".emailFields:last").attr("id");
+ // extract the number from the id and increment it
+ var i = Number(lastEmailId.substring(lastEmailId.indexOf("-")+1))+1;
+ // build the new fields with the new index (i)
+ var newEmailFields = '<div class="emailFields" id="emailFields-' + i + '">'
+ newEmailFields += '<label class="bwField" for="EMAIL-' + i + '">';
+ newEmailFields += 'Email:</label><div class="bwValue"><select id="EMAILTYPE-' + i + '">';
+ newEmailFields += '<option value="work">work</option><option value="home">home</option>';
+ newEmailFields += '</select> <input type="text" size="40" value="" id="EMAIL-' + i + '"/></div></div>';
+ // append the result to the dom
+ $("#bwContactEmailHolder").append(newEmailFields);
});
// add a new phone field to the add contact form
@@ -1482,15 +1508,30 @@
if (curCard.NICKNAME != undefined) $("#NICKNAME").val(curCard.NICKNAME[0].value.stripTags());
if (curCard.TITLE != undefined) $("#TITLE").val(curCard.TITLE[0].value.stripTags());
if (curCard.EMAIL != undefined) {
- $("#EMAILTYPE-01").val(curCard.EMAIL[0].params['parameter-value'].stripTags()); // this won't do
- $("#EMAIL-01").val(curCard.EMAIL[0].value.stripTags());
+ for (var i=0; i < curCard.EMAIL.length; i++) {
+ if (i > 0) {
+ var newEmailFields = '<div class="emailFields" id="emailFields-' + i + '"><label class="bwField" for="EMAIL-' + i + '">';
+ newEmailFields += 'Email:</label><div class="bwValue"><select id="EMAILTYPE-' + i + '">';
+ newEmailFields += '<option value="work">work</option><option value="home">home</option>';
+ newEmailFields += '</select> <input type="text" size="40" value="" id="EMAIL-' + i + '"/></div></div>';
+ $("#bwContactEmailHolder").append(newEmailFields);
+ }
+ if (curCard.EMAIL[i].params['parameter-value'] != undefined) {
+ $("#EMAILTYPE-" + i).val(curCard.EMAIL[i].params['parameter-value'].stripTags()); // this won't do
+ }
+ $("#EMAIL-" + i).val(curCard.EMAIL[i].value);
+ }
}
if (curCard.TEL != undefined) {
- $("#PHONETYPE-01").val(curCard.TEL[0].params['parameter-value'].stripTags()); // this won't do
+ if (curCard.TEL[0].params['parameter-value'] != undefined) {
+ $("#PHONETYPE-01").val(curCard.TEL[0].params['parameter-value'].stripTags()); // this won't do
+ }
$("#PHONE-01").val(curCard.TEL[0].values.number.stripTags());
}
if (curCard.ADR != undefined) {
- $("#ADDRTYPE-01").val(curCard.ADR[0].params['parameter-value'].stripTags()); // also won't do
+ if (curCard.ADR[0].params['parameter-value'] != undefined) {
+ $("#ADDRTYPE-01").val(curCard.ADR[0].params['parameter-value'].stripTags()); // also won't do
+ }
$("#POBOX-01").val(curCard.ADR[0].values.po_box.stripTags());
$("#EXTADDR-01").val(curCard.ADR[0].values.extended_address.stripTags());
$("#STREET-01").val(curCard.ADR[0].values.street_address.stripTags());
More information about the Bedework-commit
mailing list