You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by mm...@apache.org on 2014/05/05 18:09:48 UTC

[01/50] [abbrv] git commit: [CB-5565] Incremented plugin version on dev branch.

Repository: cordova-plugin-contacts
Updated Branches:
  refs/heads/cdvtest ab0bf0485 -> fa4717c82


[CB-5565] Incremented plugin version on dev branch.


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/22cbee63
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/22cbee63
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/22cbee63

Branch: refs/heads/cdvtest
Commit: 22cbee63d68677986eedc8ea5d2ce5e33744a8bf
Parents: d610c86
Author: Steven Gill <st...@gmail.com>
Authored: Wed Dec 4 15:32:03 2013 -0800
Committer: Steven Gill <st...@gmail.com>
Committed: Wed Dec 4 15:32:03 2013 -0800

----------------------------------------------------------------------
 plugin.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/22cbee63/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index d224766..b92196c 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -4,7 +4,7 @@
     xmlns:rim="http://www.blackberry.com/ns/widgets"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="org.apache.cordova.contacts"
-    version="0.2.6">
+    version="0.2.7-dev">
 
     <name>Contacts</name>
     <description>Cordova Contacts Plugin</description>


[47/50] [abbrv] git commit: CB-6452 Incremented plugin version on dev branch.

Posted by mm...@apache.org.
CB-6452 Incremented plugin version on dev branch.


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/e7d7d27a
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/e7d7d27a
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/e7d7d27a

Branch: refs/heads/cdvtest
Commit: e7d7d27ae303b98d14c08945cf831671a1c53ddd
Parents: 134b3a6
Author: Ian Clelland <ic...@chromium.org>
Authored: Thu Apr 17 11:16:03 2014 -0400
Committer: Ian Clelland <ic...@chromium.org>
Committed: Thu Apr 17 11:16:03 2014 -0400

----------------------------------------------------------------------
 plugin.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/e7d7d27a/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index 928ba20..676ffd5 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -22,7 +22,7 @@
     xmlns:rim="http://www.blackberry.com/ns/widgets"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="org.apache.cordova.contacts"
-    version="0.2.10">
+    version="0.2.11-dev">
 
     <name>Contacts</name>
     <description>Cordova Contacts Plugin</description>


[45/50] [abbrv] git commit: CB-6460: Update license headers

Posted by mm...@apache.org.
CB-6460: Update license headers


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/e55db4a9
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/e55db4a9
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/e55db4a9

Branch: refs/heads/cdvtest
Commit: e55db4a91c31b4dbc77954fc2de281a737ab31f6
Parents: f067e52
Author: Ian Clelland <ic...@chromium.org>
Authored: Wed Apr 16 16:15:52 2014 -0400
Committer: Ian Clelland <ic...@chromium.org>
Committed: Wed Apr 16 16:15:52 2014 -0400

----------------------------------------------------------------------
 plugin.xml | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/e55db4a9/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index d3981da..83d8470 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 
 <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
     xmlns:rim="http://www.blackberry.com/ns/widgets"


[27/50] [abbrv] git commit: CB-6086 Fix typo in ffos part of plugin.xml: Camera -> Contacts

Posted by mm...@apache.org.
CB-6086 Fix typo in ffos part of plugin.xml: Camera -> Contacts


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/4cad02e4
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/4cad02e4
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/4cad02e4

Branch: refs/heads/cdvtest
Commit: 4cad02e415fa5127e36ec25454453f3dc462bed7
Parents: f134edc
Author: Sebastien Blanc <sc...@gmail.com>
Authored: Fri Feb 21 18:00:01 2014 +0100
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Mon Feb 24 12:26:10 2014 -0500

----------------------------------------------------------------------
 plugin.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4cad02e4/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index 96042e9..86be535 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -180,7 +180,7 @@
     <!-- firefoxos -->
     <platform name="firefoxos">
         <config-file target="config.xml" parent="/*">
-            <feature name="Camera">
+            <feature name="Contacts">
                 <param name="firefoxos-package" value="Contacts" />
             </feature>
         </config-file>                                         


[41/50] [abbrv] git commit: Update docs with Windows 8 support info, fix contacts.find example error

Posted by mm...@apache.org.
Update docs with Windows 8 support info, fix contacts.find example error


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/a9711046
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/a9711046
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/a9711046

Branch: refs/heads/cdvtest
Commit: a97110465f11c9c4feb041bde8ac9aa9b954ea19
Parents: 2f76f2b
Author: Jesse MacFadyen <pu...@gmail.com>
Authored: Tue Mar 18 13:17:40 2014 -0700
Committer: Jesse MacFadyen <pu...@gmail.com>
Committed: Tue Mar 18 13:17:40 2014 -0700

----------------------------------------------------------------------
 doc/index.md | 32 +++++++++++++++++++++++++++-----
 1 file changed, 27 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/a9711046/doc/index.md
----------------------------------------------------------------------
diff --git a/doc/index.md b/doc/index.md
index 0a78d4c..ea6a643 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -135,12 +135,12 @@ _any_ of the specified fields, the contact is returned.
 - Firefox OS
 - iOS
 - Windows Phone 7 and 8
-- Windows 8
+- Windows 8 ( read-only support, search requires user interaction, contactFields are ignored, only contactFindOptions.multiple is used )
 
 ### Example
 
     function onSuccess(contacts) {
-        alert('Found ' + navigator.contacts.length + ' navigator.contacts.');
+        alert('Found ' + contacts.length + ' contacts.');
     };
 
     function onError(contactError) {
@@ -257,8 +257,8 @@ for details.
         alert("Error = " + contactError.code);
     };
 
-        // remove the contact from the device
-        contact.remove(onSuccess,onError);
+    // remove the contact from the device
+    contact.remove(onSuccess,onError);
 
 
 ### Android 2.X Quirks
@@ -427,6 +427,10 @@ a `ContactAddress[]` array.
 
 - __formatted__: Currently not supported.
 
+### Windows 8 Quirks
+
+- __pref__: Not supported
+
 
 ## ContactError
 
@@ -515,6 +519,10 @@ string.
 
 - __pref__: Not supported, returning `false`.
 
+### Windows8 Quirks
+
+- __pref__: Not supported, returning `false`.
+
 
 ## ContactName
 
@@ -588,10 +596,25 @@ Contains different kinds of information about a `Contact` object's name.
 
 - __formatted__: Partially supported, and read-only.  Returns a concatenation of `honorificPrefix`, `givenName`, `middleName`, `familyName`, and `honorificSuffix`.
 
+
 ### iOS Quirks
 
 - __formatted__: Partially supported.  Returns iOS Composite Name, but is read-only.
 
+### Windows 8 Quirks
+
+- __formatted__: This is the only name property, and is identical to `displayName`, and `nickname`
+
+- __familyName__: not supported
+
+- __givenName__: not supported
+
+- __middleName__: not supported
+
+- __honorificPrefix__: not supported
+
+- __honorificSuffix__: not supported
+
 
 ## ContactOrganization
 
@@ -619,7 +642,6 @@ properties.  A `Contact` object stores one or more
 - Firefox OS
 - iOS
 - Windows Phone 7 and 8
-- Windows 8
 
 ### Example
 


[02/50] [abbrv] git commit: fixed update contacts (if id is provided one needs to search for the contact) updateFromCordova moved to prototype of mozContact fields are fixed the right search is used

Posted by mm...@apache.org.
fixed update contacts (if id is provided one needs to search for the contact)
updateFromCordova moved to prototype of mozContact
fields are fixed
the right search is used


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/f7198066
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/f7198066
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/f7198066

Branch: refs/heads/cdvtest
Commit: f71980667f659b73ebcbcb47e91b9cee6a4e3743
Parents: 813d3e9
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Tue Dec 17 16:27:53 2013 +0100
Committer: Piotr Zalewa <pi...@zalewa.info>
Committed: Tue Dec 17 16:27:53 2013 +0100

----------------------------------------------------------------------
 src/firefoxos/ContactsProxy.js | 331 ++++++++++++++++++++++--------------
 1 file changed, 202 insertions(+), 129 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/f7198066/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --git a/src/firefoxos/ContactsProxy.js b/src/firefoxos/ContactsProxy.js
index a0c57bd..b48cf14 100644
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@ -29,10 +29,21 @@
 
 var Contact = require('./Contact');
 var ContactField = require('./ContactField');
+var ContactAddress = require('./ContactAddress');
 var ContactName = require('./ContactName');
 
+// XXX: a hack to check if id is "empty". Cordova inserts a
+// string "this string is supposed to be a unique identifier that will 
+// never show up on a device" if id is empty
+function hasId(id) {
+    if (!id || id.indexOf(' ') >= 0) {
+        return false;
+    }
+    return true;
+}
+
+mozContact.prototype.updateFromCordova = function(contact) {
 
-function createMozillaFromCordova(contact) {
     function exportContactFieldArray(contactFieldArray, key) {
         if (!key) {
             key = 'value';
@@ -58,52 +69,67 @@ function createMozillaFromCordova(contact) {
         return arr;
     } 
 
-    function exportPhoneNumbers(phoneNumbers) {
-        var mozNumbers = [];
-        for (var i=0; i < phoneNumbers.length; i++) {
-            var number = phoneNumbers[i];
-            mozNumbers.push({
-                type: number.type,
-                value: number.value,
-                pref: number.pref
-            });
+    function exportContactField(data) {
+        var contactFields = [];
+        for (var i=0; i < data.length; i++) {
+            var item = data[i];
+            if (item.value) {
+                var itemData = {value: item.value};
+                if (item.type) {
+                    itemData.type = [item.type];
+                }
+                if (item.pref) {
+                    itemData.pref = item.pref;
+                }
+                contactFields.push(itemData);
+            }
         }
-        return mozNumbers;
-    }
-
-    // prepare mozContact object
-    var moz = new mozContact();
-    if (contact.id) {
-        moz.id = contact.id;
+        return contactFields;
     }
     // adding simple fields [contactField, eventualMozContactField]
-    var arrayFields = [['givenName'], ['familyName'], ['displayName', 'name']];
-    var simpleFields = [['honorificPrefix'], ['honorificSuffix'], ['nickname'], ['birthday', 'bday'], ['note']];
-    j = 0; while(field = arrayFields[j++]) {
+    var nameFields = [['givenName'], ['familyName'],  
+                      ['honorificPrefix'], ['honorificSuffix'],
+                      ['middleName', 'additionalName']];
+    var baseArrayFields = [['displayName', 'name'], ['nickname']];
+    var baseStringFields = [];
+    var j = 0; while(field = nameFields[j++]) {
       if (contact.name[field[0]]) {
-        moz[field[1] || field[0]] = contact.name[field[0]].split(' ');
+        this[field[1] || field[0]] = contact.name[field[0]].split(' ');
+        // console.log(field[0], contact.name[field[0]], this[field[1] || field[0]]);
       }
     }
-    j = 0; while(field = simpleFields[j++]) {
-      if (contact.name[field[0]]) {
-        moz[field[1] || field[0]] = contact.name[field[0]];
+    j = 0; while(field = baseArrayFields[j++]) {
+      if (contact[field[0]]) {
+        this[field[1] || field[0]] = contact[field[0]].split(' ');
       }
     }
+    j = 0; while(field = baseStringFields[j++]) {
+      if (contact[field[0]]) {
+        this[field[1] || field[0]] = contact[field[0]];
+      }
+    }
+    if (contact.birthday) {
+      this.bday = new Date(contact.birthday);
+    }
     if (contact.emails) {
-        moz.email = exportContactFieldArray(contact.emails);
+        var emails = exportContactField(contact.emails)
+        this.email = emails;
     }
     if (contact.categories) {
-        moz.category = exportContactFieldArray(contact.categories);
+        this.category = exportContactFieldArray(contact.categories);
     }
     if (contact.addresses) {
-        moz.adr = exportAddress(contact.addresses);
+        this.adr = exportAddress(contact.addresses);
     }
     if (contact.phoneNumbers) {
-        moz.tel = exportPhoneNumbers(contact.phoneNumbers);
+        this.tel = exportContactField(contact.phoneNumbers);
     }
     if (contact.organizations) {
-        moz.org = exportContactFieldArray(contact.organizations, 'name');
-        moz.jobTitle = exportContactFieldArray(contact.organizations, 'title');
+        this.org = exportContactFieldArray(contact.organizations, 'name');
+        this.jobTitle = exportContactFieldArray(contact.organizations, 'title');
+    }
+    if (contact.note) {
+        this.note = [contact.note];
     }
     /*  Find out how to translate these parameters
         // photo: Blob
@@ -114,18 +140,44 @@ function createMozillaFromCordova(contact) {
         // genderIdentity
         // key
     */
-    return moz;
+}
+
+function createMozillaFromCordova(successCB, errorCB, contact) {
+
+    var mozC;
+    // get contact if exists
+    if (contact.id) {
+      var search = navigator.mozContacts.find({
+        filterBy: ['id'], filterValue: contact.id, filterOp: 'equals'});
+      search.onsuccess = function() {
+        mozC = search.result[0];
+        mozC.updateFromCordova(contact);
+        successCB(mozC);
+      };
+      search.onerror = errorCB;
+      return;
+    }
+
+    var mozC = new mozContact();
+    if ('init' in mozC) {
+      // 1.2 and below compatibility
+      mozC.init();
+    }
+    mozC.updateFromCordova(contact);
+
+    //console.log('cordova2moz ', contact.id, contact.birthday, Date.parse(mozC.bday), mozC.bday.toDateString());
+    successCB(mozC);
 }
 
 function createCordovaFromMozilla(moz) {
-    function exportPhoneNumbers(mozNumbers) {
-        var phoneNumbers = [];
-        for (var i=0; i < mozNumbers.length; i++) {
-            var number = mozNumbers[i];
-            phoneNumbers.push(
-                new ContactField( number.type, number.value, number.pref));
+    function exportContactField(data) {
+        var contactFields = [];
+        for (var i=0; i < data.length; i++) {
+            var item = data[i];
+            var itemData = new ContactField(item.type, item.value, item.pref);
+            contactFields.push(itemData);
         }
-        return phoneNumbers;
+        return contactFields;
     }
 
     var contact = new Contact();
@@ -133,31 +185,52 @@ function createCordovaFromMozilla(moz) {
     if (moz.id) {
         contact.id = moz.id;
     }
-    var arrayFields = [['givenName'], ['familyName'], ['name', 'displayName']];
-    var simpleFields = [['honorificPrefix'], ['honorificSuffix'], ['nickname'], ['bday', 'birthday'], ['note']];
+    var nameFields = [['givenName'], ['familyName'], 
+                       ['honorificPrefix'], ['honorificSuffix'],
+                       ['additionalName', 'middleName']];
+    var baseArrayFields = [['name', 'displayName'], 'nickname', ['note']];
+    var baseStringFields = [];
     var name = new ContactName();
-    var j = 0; while(field = arrayFields[j++]) {
-      if (moz[field[0]]) {
-        name[field[1] || field[0]] = moz[field[0]].join(' ');
-      }
-    }
-    j = 0; while(field = simpleFields[j++]) {
-      if (moz[field[0]]) {
-        name[field[1] || field[0]] = moz[field[0]];
-      }
+    var j = 0; while(field = nameFields[j++]) {
+        if (moz[field[0]]) {
+            name[field[1] || field[0]] = moz[field[0]].join(' ');
+        }
     }
     contact.name = name;
+    j = 0; while(field = baseArrayFields[j++]) {
+        if (moz[field[0]]) {
+            contact[field[1] || field[0]] = moz[field[0]].join(' ');
+        }
+    }
+    j = 0; while(field = baseStringFields[j++]) {
+        if (moz[field[0]]) {
+            contact[field[1] || field[0]] = moz[field[0]];
+        }
+    }
     // emails
+    if (moz.email) {
+        contact.emails = exportContactField(moz.email);
+    }
     // categories
     // addresses
     if (moz.tel) {
-        contact.phoneNumbers = exportPhoneNumbers(moz.tel);
+        contact.phoneNumbers = exportContactField(moz.tel);
+    }
+    // birthday
+    if (moz.bday) {
+      contact.birthday = Date.parse(moz.bday);
     }
     // organizations
     return contact;
 }
 
 
+function _inspect(obj) {
+  for (var k in obj) {
+    console.log(k, obj[k]);
+  }
+}
+
 function saveContacts(successCB, errorCB, contacts) {
     // a closure which is holding the right moz contact
     function makeSaveSuccessCB(moz) {
@@ -172,11 +245,13 @@ function saveContacts(successCB, errorCB, contacts) {
     var i=0;
     var contact;
     while(contact = contacts[i++]){
-        var moz = createMozillaFromCordova(contact);
-        var request = navigator.mozContacts.save(moz);
-        // success and/or fail will be called every time a contact is saved
-        request.onsuccess = makeSaveSuccessCB(moz);
-        request.onerror = errorCB;                
+        var moz = createMozillaFromCordova(function(moz) {
+          // console.log('before save ', moz.id, moz);
+          var request = navigator.mozContacts.save(moz);
+          // success and/or fail will be called every time a contact is saved
+          request.onsuccess = makeSaveSuccessCB(moz);
+          request.onerror = function(e) { console.log(e.target); errorCB(e); }                
+        }, function() {}, contact);
     }
 }   
 
@@ -185,6 +260,10 @@ function remove(successCB, errorCB, ids) {
     var i=0;
     var id;
     for (var i=0; i < ids.length; i++){
+        // throw an error if no id provided
+        if (!hasId(ids[i])) {
+          errorCB(0);
+        }
         var moz = new mozContact();
         moz.id = ids[i];
         var request = navigator.mozContacts.remove(moz);
@@ -194,92 +273,86 @@ function remove(successCB, errorCB, ids) {
 }
 
 
-var mozContactSearchFields = ['name', 'givenName', 'additionalName', 
-    'familyName', 'nickname', 'email', 'tel', 'jobTitle', 'note'];
+var mozContactSearchFields = [['name', 'displayName'], ['givenName'], 
+    ['familyName'], ['email'], ['tel'], ['jobTitle'], ['note'], 
+    ['tel', 'phoneNumbers'], ['email', 'emails']]; 
+// nickname and additionalName are forbidden in  1.3 and below
+// name is forbidden in 1.2 and below
 
-// function search(successCB, errorCB, params) {
-//     var options = params[1] || {}; 
-//     var filter = [];
-//     // filter out inallowed fields
-//     for (var i=0; i < params[0].length; i++) {
-//         if (mozContactSearchFields.indexOf([params[0][i]])) {
-//             filter.push(params[0][i]);
-//         } else if (params[0][i] == 'displayName') {
-//             filter.push('name');
-//         } else {
-//             console.log('FXOS ContactProxy: inallowed field passed to search filtered out: ' + params[0][i]);
-//         }
-//     }
-// 
-//     var request;
-//     // TODO find out how to handle searching by numbers
-//     // filterOp: The filter comparison operator to use. Possible values are 
-//     //           equals, startsWith, and match, the latter being specific 
-//     //           to telephone numbers.
-//     var mozOptions = {filterBy: filter, filterOp: 'startsWith'};
-//     if (!options.multiple) {
-//         mozOptions.filterLimit = 1;
-//     }
-//     if (!options.filter) {
-//         // this is returning 0 contacts
-//         request = navigator.mozContacts.getAll({});
-//     } else {
-//         // XXX This is searching for regardless of the filterValue !!!
-//         mozOptions.filterValue = options.filter;
-//         console.log('mozoptions: filterBy: ' + mozOptions.filterBy.join(' ') + '; fiterValue: ' + mozOptions.filterValue);
-//         request = navigator.mozContacts.find(mozOptions);
-//     }
-//     request.onsuccess = function() {
-//         var contacts = [];
-//         var mozContacts = request.result;
-//         for (var i=0; i < mozContacts.length; i++) {
-//             contacts.push(createCordovaFromMozilla(mozContacts[i]));
-//         }
-//         successCB(contacts);
-//     };
-//     request.onerror = errorCB;
-// }
+// finds if a value is inside array array and returns FFOS if different
+function getMozSearchField(arr, value) {
+    if (arr.indexOf([value]) >= 0) {
+        return value;
+    }
+    for (var i=0; i < arr.length; i++) {
+        if (arr[i].length > 1) {
+            if (arr[i][1] === value) {
+                return arr[i][0];
+            }
+        }
+    }
+    return false;
+}
 
 
-/* navigator.mozContacts.find has issues - using getAll 
- * https://bugzilla.mozilla.org/show_bug.cgi?id=941008
- */
-function hackedSearch(successCB, errorCB, params) {
-    // [contactField, eventualMozContactField]
-    var arrayFields = ['givenName', 'familyName', 'name'];
+function search(successCB, errorCB, params) {
     var options = params[1] || {}; 
-    var filter = [];
-    // filter out inallowed fields
+    if (!options.filter) {
+        return getAll(successCB, errorCB, params);
+    }
+    var filterBy = [];
+    // filter and translate fields
     for (var i=0; i < params[0].length; i++) {
-        if (mozContactSearchFields.indexOf([params[0][i]])) {
-            filter.push(params[0][i]);
-        } else if (params[0][i] == 'displayName') {
-            filter.push('name');
+        var searchField = params[0][i];
+        var mozField = getMozSearchField(mozContactSearchFields, searchField);
+        if (searchField === 'name') {
+            // Cordova uses name for search by all name fields.
+            filterBy.push('givenName');
+            filterBy.push('familyName');
+            continue;
+        } 
+        if (searchField === 'displayName' && 'init' in new mozContact()) {
+            // ``init`` in ``mozContact`` indicates FFOS version 1.2 or below
+            console.log('FFOS ContactProxy: Unable to search by displayName on FFOS 1.2');
+            continue;
+        } 
+        if (mozField) {
+            filterBy.push(mozField);
         } else {
-            console.log('FXOS ContactProxy: inallowed field passed to search filtered out: ' + params[0][i]);
+            console.log('FXOS ContactProxy: inallowed field passed to search filtered out: ' + searchField);
         }
     }
+
+    var mozOptions = {filterBy: filterBy, filterOp: 'startsWith'};
+    if (!options.multiple) {
+        mozOptions.filterLimit = 1;
+    }
+    mozOptions.filterValue = options.filter;
+    var request = navigator.mozContacts.find(mozOptions);
+    request.onsuccess = function() {
+        var contacts = [];
+        var mozContacts = request.result;
+        var moz = mozContacts[0];
+        for (var i=0; i < mozContacts.length; i++) {
+            contacts.push(createCordovaFromMozilla(mozContacts[i]));
+        }
+        successCB(contacts);
+    };
+    request.onerror = errorCB;
+}
+
+
+/* navigator.mozContacts.find has issues - using getAll 
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=941008
+ */
+function getAll(successCB, errorCB, params) {
+    // [contactField, eventualMozContactField]
     var getall = navigator.mozContacts.getAll({});
     var contacts = [];
 
-    function isValid(mozContact) {
-        if (!options.filter) {
-            // get all
-            return true;
-        }
-        for (var j=0; j < filter.length; j++) {
-            var field = filter[0];
-            var value = (arrayFields.indexOf(field) >= 0) ? mozContact[field].join(' ') : mozContact[field];
-            if (value.indexOf(options.filter) >= 0) {
-                return true;
-            }
-        }
-    }
     getall.onsuccess = function() {
         if (getall.result) {
-            if (isValid(getall.result)) {
-                contacts.push(createCordovaFromMozilla(getall.result));
-            }
+            contacts.push(createCordovaFromMozilla(getall.result));
             getall.continue();
         } else {
             successCB(contacts);
@@ -291,7 +364,7 @@ function hackedSearch(successCB, errorCB, params) {
 module.exports = {
     save: saveContacts,
     remove: remove,
-    search: hackedSearch
+    search: search
 };    
     
 require("cordova/firefoxos/commandProxy").add("Contacts", module.exports); 


[11/50] [abbrv] git commit: explanation about organizations added

Posted by mm...@apache.org.
explanation about organizations added


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/f7bc6883
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/f7bc6883
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/f7bc6883

Branch: refs/heads/cdvtest
Commit: f7bc6883653fc0628d10b50e4139c00bc20c31e4
Parents: e43a1a9
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Fri Dec 20 14:12:07 2013 +0100
Committer: Piotr Zalewa <pi...@zalewa.info>
Committed: Fri Dec 20 14:12:07 2013 +0100

----------------------------------------------------------------------
 src/firefoxos/ContactsProxy.js | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/f7bc6883/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --git a/src/firefoxos/ContactsProxy.js b/src/firefoxos/ContactsProxy.js
index 6d06a13..c24ad78 100644
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@ -133,6 +133,9 @@ mozContact.prototype.updateFromCordova = function(contact) {
         this.tel = exportContactField(contact.phoneNumbers);
     }
     if (contact.organizations) {
+        // XXX: organizations are saved in 2 arrays - org and jobTitle
+        //      depending on the usecase it might generate issues
+        //      where wrong title will be added to an organization
         this.org = exportContactFieldArray(contact.organizations, 'name');
         this.jobTitle = exportContactFieldArray(contact.organizations, 'title');
     }
@@ -254,6 +257,7 @@ Contact.prototype.updateFromMozilla = function(moz) {
     }
     // organizations
     if (moz.org || moz.jobTitle) {
+        // XXX: organizations array is created from org and jobTitle
         this.organizations = createOrganizations(moz.org, moz.jobTitle);
     }
 }


[03/50] [abbrv] git commit: check for id in the right way

Posted by mm...@apache.org.
check for id in the right way


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/510955f1
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/510955f1
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/510955f1

Branch: refs/heads/cdvtest
Commit: 510955f129311871aa218e3a013bd7c99f9bde6f
Parents: f719806
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Tue Dec 17 17:21:22 2013 +0100
Committer: Piotr Zalewa <pi...@zalewa.info>
Committed: Tue Dec 17 17:21:22 2013 +0100

----------------------------------------------------------------------
 src/firefoxos/ContactsProxy.js | 18 ++++--------------
 1 file changed, 4 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/510955f1/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --git a/src/firefoxos/ContactsProxy.js b/src/firefoxos/ContactsProxy.js
index b48cf14..13a3486 100644
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@ -35,7 +35,7 @@ var ContactName = require('./ContactName');
 // XXX: a hack to check if id is "empty". Cordova inserts a
 // string "this string is supposed to be a unique identifier that will 
 // never show up on a device" if id is empty
-function hasId(id) {
+function _hasId(id) {
     if (!id || id.indexOf(' ') >= 0) {
         return false;
     }
@@ -95,7 +95,6 @@ mozContact.prototype.updateFromCordova = function(contact) {
     var j = 0; while(field = nameFields[j++]) {
       if (contact.name[field[0]]) {
         this[field[1] || field[0]] = contact.name[field[0]].split(' ');
-        // console.log(field[0], contact.name[field[0]], this[field[1] || field[0]]);
       }
     }
     j = 0; while(field = baseArrayFields[j++]) {
@@ -146,7 +145,7 @@ function createMozillaFromCordova(successCB, errorCB, contact) {
 
     var mozC;
     // get contact if exists
-    if (contact.id) {
+    if (_hasId(contact.id)) {
       var search = navigator.mozContacts.find({
         filterBy: ['id'], filterValue: contact.id, filterOp: 'equals'});
       search.onsuccess = function() {
@@ -164,8 +163,6 @@ function createMozillaFromCordova(successCB, errorCB, contact) {
       mozC.init();
     }
     mozC.updateFromCordova(contact);
-
-    //console.log('cordova2moz ', contact.id, contact.birthday, Date.parse(mozC.bday), mozC.bday.toDateString());
     successCB(mozC);
 }
 
@@ -225,12 +222,6 @@ function createCordovaFromMozilla(moz) {
 }
 
 
-function _inspect(obj) {
-  for (var k in obj) {
-    console.log(k, obj[k]);
-  }
-}
-
 function saveContacts(successCB, errorCB, contacts) {
     // a closure which is holding the right moz contact
     function makeSaveSuccessCB(moz) {
@@ -246,11 +237,10 @@ function saveContacts(successCB, errorCB, contacts) {
     var contact;
     while(contact = contacts[i++]){
         var moz = createMozillaFromCordova(function(moz) {
-          // console.log('before save ', moz.id, moz);
           var request = navigator.mozContacts.save(moz);
           // success and/or fail will be called every time a contact is saved
           request.onsuccess = makeSaveSuccessCB(moz);
-          request.onerror = function(e) { console.log(e.target); errorCB(e); }                
+          request.onerror = errorCB;                
         }, function() {}, contact);
     }
 }   
@@ -261,7 +251,7 @@ function remove(successCB, errorCB, ids) {
     var id;
     for (var i=0; i < ids.length; i++){
         // throw an error if no id provided
-        if (!hasId(ids[i])) {
+        if (!_hasId(ids[i])) {
           errorCB(0);
         }
         var moz = new mozContact();


[40/50] [abbrv] git commit: CB-1291 Windows8 supports multiple, added some error checking, converts Windows8 Contact to Cordova Contact

Posted by mm...@apache.org.
CB-1291 Windows8 supports multiple, added some error checking, converts Windows8 Contact to Cordova Contact


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/2f76f2bf
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/2f76f2bf
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/2f76f2bf

Branch: refs/heads/cdvtest
Commit: 2f76f2bfbed5a6ba72e96275765a73023e3e6c22
Parents: 92ebe1a
Author: Jesse MacFadyen <pu...@gmail.com>
Authored: Mon Mar 17 18:35:42 2014 -0700
Committer: Jesse MacFadyen <pu...@gmail.com>
Committed: Mon Mar 17 18:35:42 2014 -0700

----------------------------------------------------------------------
 src/windows8/ContactProxy.js | 173 +++++++++++++++++++++++++-------------
 1 file changed, 115 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/2f76f2bf/src/windows8/ContactProxy.js
----------------------------------------------------------------------
diff --git a/src/windows8/ContactProxy.js b/src/windows8/ContactProxy.js
index db54a09..10f9402 100644
--- a/src/windows8/ContactProxy.js
+++ b/src/windows8/ContactProxy.js
@@ -1,4 +1,4 @@
-// cordova.define("org.apache.cordova.contacts.ContactProxy", function (require, exports, module) {
+//cordova.define("org.apache.cordova.contacts.ContactProxy", function (require, exports, module) {
 /*
  *
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -20,75 +20,132 @@
  *
 */
 
-var cordova = require('cordova');
 
 module.exports = {
     search:function(win,fail,args){
-        var fields = args[0];
+        var fields = args[0]; // ignored, always returns entire object
         var options = args[1];
 
-        var filter = options.filter;
-        var multiple = options.multiple;
+        var filter = options.filter;   // ignored
+        var multiple = true;//options.multiple;
 
         var picker = new Windows.ApplicationModel.Contacts.ContactPicker();
-        picker.selectionMode = Windows.ApplicationModel.Contacts.ContactSelectionMode.contacts;
-        picker.pickSingleContactAsync().done(function (res) {
-
-            var contact = {
-                id:"",
-                name: { formatted: res.name },  // ContactName
-                displayName: res.name,          // DOMString
-                nickname: res.name,             // DOMString
-                phoneNumbers: res.phoneNumbers, // ContactField[]
-                addresses: res.locations,       // ContactAddress[]
-                emails: [],                     // ContactField
-                ims: res.instantMessages,       // ContactField[]
-                organizations: [],              // ContactOrganization[]
-                birthday: null,                 // Date
-                note: "",                       // DOMString
-                photos: [],                     // ContactField[]
-                categories: [],                 // ContactField[]
-                urls: []                        // ContactField[]
-            };
-
-            if (contact.phoneNumbers && contact.phoneNumbers.length) {
-                contact.phoneNumbers[0].pref = true; // cordova contact field needs a 'prefered' property on  a contact
-            }
-
-            if (contact.addresses && contact.addresses.length) {
-                contact.addresses[0].pref = true;
-                // convert addresses/locations to Cordova.ContactAddresses
-                // pref: Set to true if this ContactAddress contains the user's preferred value. (boolean)
-                // type: A string indicating what type of field this is, home for example. (DOMString)
-                // formatted: The full address formatted for display. (DOMString)
-                // streetAddress: The full street address. (DOMString)
-                // locality: The city or locality. (DOMString)
-                // region: The state or region. (DOMString)
-                // postalCode: The zip code or postal code. (DOMString)
-                // country: The country name. (DOMString)
-            }
-            // Maybe, seems the types are compatible -jm
-            // convert ims to ContactField
-            //if (contact.ims && contact.ims.length) {
-            //    // MS ContactInstantMessageField has : displayText, launchUri, service, userName, category, type
-            //    for (var n = 0; n < contact.ims.length; n++) {
-            //        contact.ims[n] = new ContactField(contact.ims[n].type,contact.ims[n].value, false);
-            //        }
-            //    }
-            //}
-            win([contact]);
-        });
+        picker.selectionMode = Windows.ApplicationModel.Contacts.ContactSelectionMode.contacts;   // select entire contact
+        if (picker.pickContactAsync) {
+            // TODO: 8.1 has better contact support via the 'Contact' object
+        }
+        else {
+            // 8.0 use the ContactInformation class
+            // decide which function we will call
+            var pickerFunkName = multiple ? 'pickMultipleContactsAsync' : 'pickSingleContactAsync';
+            picker[pickerFunkName]().done(function (res) {
+                if (!res) {
+                    fail && setTimeout(function () {
+                        fail(new Error("User did not pick a contact."));
+                    }, 0);
+                    return;
+                }
+
+                var contactResults = [];
+
+                for (var i = 0; i < res.length; i++) {
+
+
+                    var index,
+                        contactResult = res[i],
+                        contact = {
+                            id: "",
+                            name: { formatted: contactResult.name },  // ContactName
+                            displayName: contactResult.name,          // DOMString
+                            nickname: contactResult.name,             // DOMString
+                            phoneNumbers: contactResult.phoneNumbers, // ContactField[]
+                            addresses: contactResult.locations,       // ContactAddress[]
+                            emails: [],                               // ContactField
+                            ims: contactResult.instantMessages,       // ContactField[]
+                            organizations: [],              // ContactOrganization[]
+                            birthday: null,                 // Date
+                            note: "",                       // DOMString
+                            photos: [],                     // ContactField[]
+                            categories: [],                 // ContactField[]
+                            urls: []                        // ContactField[]
+                        };
+
+                    // Win8-ContactField is {category, name, type, value};
+                    // Cordova ContactField is {type,value, pref:bool };
+                    // Win8 type means 'email' cordova type means 'work|home|...' so we convert them
+                    if (contact.emails && contact.emails.length) {
+                        contact.emails[0].pref = true; // add a preferred prop 
+                        for (index = 0; index < contacts.emails.length; index++) {
+                            contact.emails[index].type = contact.emails[index].category;
+                        }
+                    }
+
+                    if (contact.phoneNumbers && contact.phoneNumbers.length) {
+                        contact.phoneNumbers[0].pref = true; // cordova contact field needs a 'prefered' property on  a contact
+                        // change the meaning of type from 'telephonenumber' to 'work|home|...'
+                        for (index = 0; index < contact.phoneNumbers.length; index++) {
+                            contact.phoneNumbers[index].type = contact.phoneNumbers[index].category;
+                        }
+                    }
+
+                    if (contact.addresses && contact.addresses.length) {
+
+                        // convert addresses/locations to Cordova.ContactAddresses                    
+                        // constr: ContactAddress(pref, type, formatted, streetAddress, locality, region, postalCode, country)
+                        var address, formatted;
+                        for (index = 0; index < contact.addresses.length; index++) {
+                            address = contact.addresses[index];   // make an alias
+                            var formattedArray = [];
+                            // get rid of the empty fields.
+                            var fields = [address.street, address.city, address.region, address.country, address.postalCode];
+                            for (var n = 0; n < fields.length; n++) {
+                                if (fields[n].length > 0) {
+                                    formattedArray.push(fields[n]);
+                                }
+                            }
+                            formattedAddress = formattedArray.join(", ");
+                            console.log(contact.name.formatted + " formatted looks like " + formattedAddress);
+                            contact.addresses[index] = new ContactAddress(false,
+                                                                          address.name,
+                                                                          formattedAddress,
+                                                                          address.street,
+                                                                          address.city,
+                                                                          address.region,
+                                                                          address.postalCode,
+                                                                          address.country);
+                        }
+
+                    }
+
+                    // convert ims to ContactField
+                    if (contact.ims && contact.ims.length) {
+                        // MS ContactInstantMessageField has : displayText, launchUri, service, userName, category, type
+                        contact.ims[0].pref = true;
+                        for (index = 0; index < contact.ims.length; index++) {
+                            contact.ims[index] = new ContactField(contact.ims[index].type, contact.ims[index].value, false);
+                        }
+                    }
+
+                    contactResults.push(contact);
+
+                }
+                // send em back
+                win(contactResults);
+
+            });
+        }
     },
 
     save:function(win,fail,args){
-        console.error && console.error("Windows 8 does not support creating/saving contacts");
-        fail && setTimeout(function(){
-            fail(new Error("Contact create/save not supported on Windows8"));
-        },0);
+        console && console.error && console.error("Error : Windows 8 does not support creating/saving contacts");
+        fail && setTimeout(function () {
+            fail(new Error("Contact create/save not supported on Windows 8"));
+        }, 0);
+
     }
 
 
 }
 
-require("cordova/windows8/commandProxy").add("Contacts",module.exports);
-
+require("cordova/exec/proxy").add("Contacts", module.exports);
+// });


[48/50] [abbrv] git commit: Docs typo: navigator.contacts.length -> contacts.length

Posted by mm...@apache.org.
Docs typo: navigator.contacts.length -> contacts.length

Signed-off-by: Shazron Abdullah <sh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/55ba3f25
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/55ba3f25
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/55ba3f25

Branch: refs/heads/cdvtest
Commit: 55ba3f2580d2c3bbd1662f49d89043710446220a
Parents: e7d7d27
Author: huang.xinghui <hu...@gmail.com>
Authored: Thu Apr 10 14:53:33 2014 +0800
Committer: Shazron Abdullah <sh...@apache.org>
Committed: Mon Apr 21 17:15:41 2014 -0700

----------------------------------------------------------------------
 doc/index.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/55ba3f25/doc/index.md
----------------------------------------------------------------------
diff --git a/doc/index.md b/doc/index.md
index f21e907..83f5a30 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -353,7 +353,7 @@ a `ContactAddress[]` array.
     // display the address information for all contacts
 
     function onSuccess(contacts) {
-        for (var i = 0; i < navigator.contacts.length; i++) {
+        for (var i = 0; i < contacts.length; i++) {
             for (var j = 0; j < contacts[i].addresses.length; j++) {
                 alert("Pref: "         + contacts[i].addresses[j].pref          + "\n" +
                     "Type: "           + contacts[i].addresses[j].type          + "\n" +
@@ -537,7 +537,7 @@ Contains different kinds of information about a `Contact` object's name.
 ### Example
 
     function onSuccess(contacts) {
-        for (var i = 0; i < navigator.contacts.length; i++) {
+        for (var i = 0; i < contacts.length; i++) {
             alert("Formatted: "  + contacts[i].name.formatted       + "\n" +
                 "Family Name: "  + contacts[i].name.familyName      + "\n" +
                 "Given Name: "   + contacts[i].name.givenName       + "\n" +
@@ -628,7 +628,7 @@ properties.  A `Contact` object stores one or more
 ### Example
 
     function onSuccess(contacts) {
-        for (var i = 0; i < navigator.contacts.length; i++) {
+        for (var i = 0; i < contacts.length; i++) {
             for (var j = 0; j < contacts[i].organizations.length; j++) {
                 alert("Pref: "      + contacts[i].organizations[j].pref       + "\n" +
                     "Type: "        + contacts[i].organizations[j].type       + "\n" +


[04/50] [abbrv] git commit: CB-5658 Delete stale snapshot of plugin docs

Posted by mm...@apache.org.
CB-5658 Delete stale snapshot of plugin docs


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/4884d949
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/4884d949
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/4884d949

Branch: refs/heads/cdvtest
Commit: 4884d949872e42916ec33b5b328b7a24bcc4895d
Parents: 22cbee6
Author: Andrew Grieve <ag...@chromium.org>
Authored: Tue Dec 17 20:49:39 2013 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Tue Dec 17 20:49:39 2013 -0500

----------------------------------------------------------------------
 docs/Contact/contact.md                         | 238 -------------------
 docs/ContactAddress/contactaddress.md           | 161 -------------
 docs/ContactError/contactError.md               |  45 ----
 docs/ContactField/contactfield.md               | 148 ------------
 docs/ContactFindOptions/contactfindoptions.md   | 118 ---------
 docs/ContactName/contactname.md                 | 147 ------------
 docs/ContactOrganization/contactorganization.md | 148 ------------
 docs/contacts.create.md                         |  78 ------
 docs/contacts.find.md                           | 119 ----------
 docs/contacts.md                                | 104 --------
 docs/parameters/contactError.md                 |  27 ---
 docs/parameters/contactFields.md                |  25 --
 docs/parameters/contactFindOptions.md           |  35 ---
 docs/parameters/contactSuccess.md               |  40 ----
 14 files changed, 1433 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/Contact/contact.md
----------------------------------------------------------------------
diff --git a/docs/Contact/contact.md b/docs/Contact/contact.md
deleted file mode 100644
index 34d96db..0000000
--- a/docs/Contact/contact.md
+++ /dev/null
@@ -1,238 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-Contact
-=======
-
-Contains properties that describe a contact, such as a user's personal or business contact.
-
-Properties
-----------
-
-- __id:__ A globally unique identifier. _(DOMString)_
-- __displayName:__ The name of this Contact, suitable for display to end-users. _(DOMString)_
-- __name:__ An object containing all components of a persons name. _(ContactName)_
-- __nickname:__ A casual name to address the contact by. _(DOMString)_
-- __phoneNumbers:__ An array of all the contact's phone numbers. _(ContactField[])_
-- __emails:__ An array of all the contact's email addresses. _(ContactField[])_
-- __addresses:__ An array of all the contact's addresses. _(ContactAddress[])_
-- __ims:__ An array of all the contact's IM addresses. _(ContactField[])_
-- __organizations:__ An array of all the contact's organizations. _(ContactOrganization[])_
-- __birthday:__ The birthday of the contact. _(Date)_
-- __note:__ A note about the contact. _(DOMString)_
-- __photos:__ An array of the contact's photos. _(ContactField[])_
-- __categories:__  An array of all the contacts user defined categories. _(ContactField[])_
-- __urls:__  An array of web pages associated to the contact. _(ContactField[])_
-
-Methods
--------
-
-- __clone__: Returns a new Contact object that is a deep copy of the calling object, with the id property set to `null`. 
-- __remove__: Removes the contact from the device contacts database.  An error callback is called with a `ContactError` object if the removal is unsuccessful.
-- __save__: Saves a new contact to the device contacts database, or updates an existing contact if a contact with the same __id__ already exists.
-
-
-Details
--------
-
-The `Contact` object represents a user contact.  Contacts can be created, saved to, or removed from the device contacts database.  Contacts can also be retrieved (individually or in bulk) from the database by invoking the `contacts.find` method.
-
-_Note: Not all of the above contact fields are supported on every device platform.  Please check each platform's Quirks section for information about which fields are supported._
-
-Supported Platforms
--------------------
-
-- Android
-- BlackBerry WebWorks (OS 5.0 and higher)
-- iOS
-- Windows Phone 7 and 8
-- Bada 1.2 & 2.0
-- Windows 8
-
-Save Quick Example
-------------------
-
-	function onSuccess(contact) {
-		alert("Save Success");
-	};
-
-	function onError(contactError) {
-		alert("Error = " + contactError.code);
-	};
-
-	// create a new contact object
-    var contact = navigator.contacts.create();
-	contact.displayName = "Plumber";
-	contact.nickname = "Plumber"; 		//specify both to support all devices
-	
-	// populate some fields
-	var name = new ContactName();
-	name.givenName = "Jane";
-	name.familyName = "Doe";
-	contact.name = name;
-	
-	// save to device
-	contact.save(onSuccess,onError);
-
-Clone Quick Example
--------------------
-
-	// clone the contact object
-	var clone = contact.clone();
-	clone.name.givenName = "John";
-	console.log("Original contact name = " + contact.name.givenName);
-	console.log("Cloned contact name = " + clone.name.givenName); 
-
-Remove Quick Example
---------------------
-
-    function onSuccess() {
-        alert("Removal Success");
-    };
-
-    function onError(contactError) {
-        alert("Error = " + contactError.code);
-    };
-
-	// remove the contact from the device
-	contact.remove(onSuccess,onError);
-
-Full Example
-------------
-
-    <!DOCTYPE html>
-    <html>
-      <head>
-        <title>Contact Example</title>
-
-        <script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
-        <script type="text/javascript" charset="utf-8">
-
-        // Wait for Cordova to load
-        //
-        document.addEventListener("deviceready", onDeviceReady, false);
-
-        // Cordova is ready
-        //
-        function onDeviceReady() {
-		    // create
-		    var contact = navigator.contacts.create();
-			contact.displayName = "Plumber";
-			contact.nickname = "Plumber"; 		//specify both to support all devices
-			var name = new ContactName();
-			name.givenName = "Jane";
-			name.familyName = "Doe";
-			contact.name = name;
-
-			// save
-			contact.save(onSaveSuccess,onSaveError);
-			
-			// clone
-			var clone = contact.clone();
-			clone.name.givenName = "John";
-			console.log("Original contact name = " + contact.name.givenName);
-			console.log("Cloned contact name = " + clone.name.givenName); 
-			
-			// remove
-			contact.remove(onRemoveSuccess,onRemoveError);
-        }
-        
-        // onSaveSuccess: Get a snapshot of the current contacts
-        //
-        function onSaveSuccess(contact) {
-			alert("Save Success");
-        }
-    
-        // onSaveError: Failed to get the contacts
-        //
-        function onSaveError(contactError) {
-			alert("Error = " + contactError.code);
-        }
-        
-        // onRemoveSuccess: Get a snapshot of the current contacts
-        //
-        function onRemoveSuccess(contacts) {
-			alert("Removal Success");
-        }
-    
-        // onRemoveError: Failed to get the contacts
-        //
-        function onRemoveError(contactError) {
-			alert("Error = " + contactError.code);
-        }
-
-        </script>
-      </head>
-      <body>
-        <h1>Example</h1>
-        <p>Find Contacts</p>
-      </body>
-    </html>
-
-Android 2.X Quirks
-------------------
-
-- __categories:__  This property is not support by Android 2.X devices, and will always be returned as `null`.
-
-
-BlackBerry WebWorks (OS 5.0 and higher) Quirks
----------------------------------------------
-
-- __id:__ Supported.  Assigned by device when contact is saved.
-- __displayName:__ Supported.  Stored in BlackBerry __user1__ field.
-- __nickname:__ This property is not supported, and will always be returned as `null`. 
-- __phoneNumbers:__ Partially supported.  Phone numbers will be stored in BlackBerry fields __homePhone1__ and __homePhone2__ if _type_ is 'home', __workPhone1__ and __workPhone2__ if _type_ is 'work', __mobilePhone__ if _type_ is 'mobile', __faxPhone__ if _type_ is 'fax', __pagerPhone__ if _type_ is 'pager', and __otherPhone__ if _type_ is none of the above.
-- __emails:__ Partially supported.  The first three email addresses will be stored in the BlackBerry __email1__, __email2__, and __email3__ fields, respectively.
-- __addresses:__ Partially supported.  The first and second addresses will be stored in the BlackBerry __homeAddress__ and __workAddress__ fields, respectively.
-- __ims:__ This property is not supported, and will always be returned as `null`. 
-- __organizations:__ Partially supported.  The __name__ and __title__ of the first organization are stored in the BlackBerry __company__ and __title__ fields, respectively.
-- __photos:__ - Partially supported.  A single thumbnail-sized photo is supported.  To set a contact's photo, pass in a either a Base64 encoded image, or a URL pointing to the image.  The image will be scaled down before saving to the BlackBerry contacts database.   The contact photo is returned as a Base64 encoded image.
-- __categories:__  Partially supported.  Only 'Business' and 'Personal' categories are supported. 
-- __urls:__  Partially supported. The first url is stored in BlackBerry __webpage__ field.
-
-iOS Quirks
-----------
-- __displayName:__ This property is not supported by iOS and will be returned as `null` unless there is no ContactName specified.  If there is no ContactName, then composite name, __nickname__ or "" is returned for __displayName__, respectively. 
-- __birthday:__ For input, this property must be provided as a JavaScript Date object. It is returned as a JavaScript Date object.
-- __photos:__ Returned Photo is stored in the application's temporary directory and a File URL to photo is returned.  Contents of temporary folder is deleted when application exits. 
-- __categories:__  This property is not currently supported and will always be returned as `null`.
-
-Windows Phone 7 and 8 Quirks
------------
-
-- __displayName:__ When creating a contact, the value provided for the display name parameter differs from the display name retrieved when finding the contact. 
-- __urls:__ When creating a contact, user inputs multiple web addresses in the url field and saves the contact. While pulling the information during the contact search url field do not show up multiple web addresses
-- __phoneNumbers:__ _pref_ is not supported, _type_ is not supported in a _find_ operation, only supports one phoneNumber of each _type_
-- __emails:__ _pref_ is not supported, home and personal points to same email entry, supports only one entry for each _type_
-- __addresses:__ supports only _type_ of work, home/personal, _type_ home and personal points to same address entry, supports only one entry for each _type_
-- __organizations:__ Multiple _organizations_ are not supported, does not support the attributes: _pref_, _type_, _department_
-- __note:__ This property is not supported, and will always be returned as `null`. 
-- __ims:__ This property is not supported, and will always be returned as `null`. 
-- __birthdays:__ This property is not supported, and will always be returned as `null`. 
-- __categories:__ This property is not supported, and will always be returned as `null`. 
-
-
-Bada Quirks
------------
-
-- __displayName:__ This property is not supported
-- __birthday:__ This property is not supported
-- __photos:__ This property should be a list with one URL to a photo
-- __categories:__ This property is not supported
-- __ims:__ This property is not supported

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/ContactAddress/contactaddress.md
----------------------------------------------------------------------
diff --git a/docs/ContactAddress/contactaddress.md b/docs/ContactAddress/contactaddress.md
deleted file mode 100644
index 937e9de..0000000
--- a/docs/ContactAddress/contactaddress.md
+++ /dev/null
@@ -1,161 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-ContactAddress
-==============
-
-Contains address properties for a `Contact` object.
-
-Properties
-----------
-- __pref:__ Set to `true` if this `ContactAddress` contains the user's preferred value. _(boolean)_
-- __type:__ A string that tells you what type of field this is (example: 'home'). _(DOMString)
-- __formatted:__ The full address formatted for display. _(DOMString)_
-- __streetAddress:__ The full street address. _(DOMString)_
-- __locality:__ The city or locality. _(DOMString)_
-- __region:__ The state or region. _(DOMString)_
-- __postalCode:__ The zip code or postal code. _(DOMString)_
-- __country:__ The country name. _(DOMString)_
-
-Details
--------
-
-The `ContactAddress` object stores the properties of a single address of a contact.  A `Contact` object can have one or more addresses in a  `ContactAddress[]` array. 
-
-Supported Platforms
--------------------
-
-- Android
-- BlackBerry WebWorks (OS 5.0 and higher)
-- iOS
-- Bada 1.2 & 2.0
-- Windows Phone 7 and 8
-- Windows 8
-
-Quick Example
--------------
-
-	// display the address information for all contacts
-    function onSuccess(contacts) {
-		for (var i=0; i<contacts.length; i++) {
-			for (var j=0; j<contacts[i].addresses.length; j++) {
-				alert("Pref: " + contacts[i].addresses[j].pref + "\n" +
-						"Type: " + contacts[i].addresses[j].type + "\n" +
-						"Formatted: " + contacts[i].addresses[j].formatted + "\n" + 
-						"Street Address: "  + contacts[i].addresses[j].streetAddress + "\n" + 
-						"Locality: "  + contacts[i].addresses[j].locality + "\n" + 
-						"Region: "  + contacts[i].addresses[j].region + "\n" + 
-						"Postal Code: "  + contacts[i].addresses[j].postalCode + "\n" + 
-						"Country: "  + contacts[i].addresses[j].country);
-			}
-		}
-    };
-
-    function onError(contactError) {
-        alert('onError!');
-    };
-
-    // find all contacts
-    var options = new ContactFindOptions();
-	options.filter=""; 
-	var filter = ["displayName","addresses"];
-    navigator.contacts.find(filter, onSuccess, onError, options);
-
-Full Example
-------------
-
-    <!DOCTYPE html>
-    <html>
-      <head>
-        <title>Contact Example</title>
-
-        <script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
-        <script type="text/javascript" charset="utf-8">
-
-        // Wait for Cordova to load
-        //
-        document.addEventListener("deviceready", onDeviceReady, false);
-
-        // Cordova is ready
-        //
-        function onDeviceReady() {
-		    // find all contacts
-		    var options = new ContactFindOptions();
-			options.filter=""; 
-			var filter = ["displayName","addresses"];
-		    navigator.contacts.find(filter, onSuccess, onError, options);
-        }
-    
-        // onSuccess: Get a snapshot of the current contacts
-        //
-		function onSuccess(contacts) {
-			// display the address information for all contacts
-			for (var i=0; i<contacts.length; i++) {
-				for (var j=0; j<contacts[i].addresses.length; j++) {
-					alert("Pref: " + contacts[i].addresses[j].pref + "\n" +
-							"Type: " + contacts[i].addresses[j].type + "\n" +
-							"Formatted: " + contacts[i].addresses[j].formatted + "\n" + 
-							"Street Address: "  + contacts[i].addresses[j].streetAddress + "\n" + 
-							"Locality: "  + contacts[i].addresses[j].locality + "\n" + 
-							"Region: "  + contacts[i].addresses[j].region + "\n" + 
-							"Postal Code: "  + contacts[i].addresses[j].postalCode + "\n" + 
-							"Country: "  + contacts[i].addresses[j].country);
-				}
-			}
-		};
-    
-        // onError: Failed to get the contacts
-        //
-        function onError(contactError) {
-            alert('onError!');
-        }
-
-        </script>
-      </head>
-      <body>
-        <h1>Example</h1>
-        <p>Find Contacts</p>
-      </body>
-    </html>
-
-Android 2.X Quirks
-------------------
-
-- __pref:__ This property is not supported by Android 2.X devices and will always return `false`.
-
-BlackBerry WebWorks (OS 5.0 and higher) Quirks
---------------------------------------------
-- __pref:__ This property is not supported on Blackberry devices and will always return `false`.
-- __type:__ Partially supported.  Only one each of "Work" and "Home" type addresses can be stored per contact. 
-- __formatted:__ Partially supported.  Will return concatenation of all BlackBerry address fields.
-- __streetAddress:__ Supported.  Will return concatenation of BlackBerry __address1__ and __address2__ address fields. 
-- __locality:__ Supported.  Stored in BlackBerry __city__ address field.
-- __region:__ Supported.  Stored in BlackBerry __stateProvince__ address field.
-- __postalCode:__ Supported.  Stored in BlackBerry __zipPostal__ address field.
-- __country:__ Supported.
-
-iOS Quirks
-----------
-- __pref:__ This property is not supported on iOS devices and will always return `false`.
-- __formatted:__ Not currently supported.
-
-Bada Quirks
------------
-- __formatted:__ This property is not supported
-- __type:__ Has to be one of the following: WORK, HOME

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/ContactError/contactError.md
----------------------------------------------------------------------
diff --git a/docs/ContactError/contactError.md b/docs/ContactError/contactError.md
deleted file mode 100644
index 45b5873..0000000
--- a/docs/ContactError/contactError.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-ContactError
-========
-
-A `ContactError` object is returned to the `contactError` callback when an error occurs.
-
-Properties
-----------
-
-- __code:__ One of the predefined error codes listed below.
-
-Constants
----------
-
-- `ContactError.UNKNOWN_ERROR`
-- `ContactError.INVALID_ARGUMENT_ERROR`
-- `ContactError.TIMEOUT_ERROR`
-- `ContactError.PENDING_OPERATION_ERROR`
-- `ContactError.IO_ERROR`
-- `ContactError.NOT_SUPPORTED_ERROR`
-- `ContactError.PERMISSION_DENIED_ERROR`
-
-Description
------------
-
-The `ContactError` object is returned to the user through the `contactError` callback function when an error occurs.
-

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/ContactField/contactfield.md
----------------------------------------------------------------------
diff --git a/docs/ContactField/contactfield.md b/docs/ContactField/contactfield.md
deleted file mode 100644
index f85a704..0000000
--- a/docs/ContactField/contactfield.md
+++ /dev/null
@@ -1,148 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-ContactField
-============
-
-Supports generic fields in a `Contact` object.  Some properties that are stored as `ContactField` objects include email addresses, phone numbers, and urls.
-
-Properties
-----------
-
-- __type:__ A string that tells you what type of field this is (example: 'home'). _(DOMString)_
-- __value:__ The value of the field (such as a phone number or email address). _(DOMString)_
-- __pref:__ Set to `true` if this `ContactField` contains the user's preferred value. _(boolean)_
-
-Details
--------
-
-The `ContactField` object is a reusable component that is used to support contact fields in a generic fashion.  Each `ContactField` object contains a value property, a type property, and a pref property.  A `Contact` object stores several properties in `ContactField[]` arrays, such as phone numbers and email addresses.
-
-In most instances, there are no pre-determined values for the __type__ attribute of a `ContactField` object.  For example, a phone number can have __type__ values of 'home', 'work', 'mobile', 'iPhone', or any other value that is supported by the contact database on a particular device platform.  However, in the case of the `Contact` __photos__ field, Cordova makes use of the __type__ field to indicate the format of the returned image.  Cordova will return __type: 'url'__ when the __value__ attribute contains a URL to the photo image, or __type: 'base64'__ when the returned __value__ attribute contains a Base64 encoded image string.
-
-Supported Platforms
--------------------
-
-- Android
-- BlackBerry WebWorks (OS 5.0 and higher)
-- iOS
-- Bada 1.2 & 2.0
-- Windows Phone 7 and 8
-- Windows 8
-
-Quick Example
--------------
-
-	// create a new contact
-	var contact = navigator.contacts.create();
-	
-	// store contact phone numbers in ContactField[]
-	var phoneNumbers = [];
-	phoneNumbers[0] = new ContactField('work', '212-555-1234', false);
-	phoneNumbers[1] = new ContactField('mobile', '917-555-5432', true); // preferred number
-	phoneNumbers[2] = new ContactField('home', '203-555-7890', false);
-	contact.phoneNumbers = phoneNumbers;
-	
-	// save the contact
-	contact.save();
-
-Full Example
-------------
-
-    <!DOCTYPE html>
-    <html>
-      <head>
-        <title>Contact Example</title>
-
-        <script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
-        <script type="text/javascript" charset="utf-8">
-
-        // Wait for Cordova to load
-        //
-        document.addEventListener("deviceready", onDeviceReady, false);
-
-        // Cordova is ready
-        //
-        function onDeviceReady() {
-			// create a new contact
-			var contact = navigator.contacts.create();
-
-			// store contact phone numbers in ContactField[]
-			var phoneNumbers = [];
-			phoneNumbers[0] = new ContactField('work', '212-555-1234', false);
-			phoneNumbers[1] = new ContactField('mobile', '917-555-5432', true); // preferred number
-			phoneNumbers[2] = new ContactField('home', '203-555-7890', false);
-			contact.phoneNumbers = phoneNumbers;
-
-			// save the contact
-			contact.save();
-
-			// search contacts, returning display name and phone numbers
-			var options = new ContactFindOptions();
-			options.filter="";
-			filter = ["displayName","phoneNumbers"];
-			navigator.contacts.find(filter, onSuccess, onError, options);
-        }
-    
-        // onSuccess: Get a snapshot of the current contacts
-        //
-		function onSuccess(contacts) {
-			for (var i=0; i<contacts.length; i++) {
-				// display phone numbers
-				for (var j=0; j<contacts[i].phoneNumbers.length; j++) {
-					alert("Type: " + contacts[i].phoneNumbers[j].type + "\n" + 
-							"Value: "  + contacts[i].phoneNumbers[j].value + "\n" + 
-							"Preferred: "  + contacts[i].phoneNumbers[j].pref);
-				}
-			}
-		};
-    
-        // onError: Failed to get the contacts
-        //
-        function onError(contactError) {
-            alert('onError!');
-        }
-
-        </script>
-      </head>
-      <body>
-        <h1>Example</h1>
-        <p>Find Contacts</p>
-      </body>
-    </html>
-
-Android Quirks
---------------
-
-- __pref:__ This property is not support by Android devices, and will always return `false`.
-
-BlackBerry WebWorks (OS 5.0 and higher) Quirks
---------------------------------------------
-
-- __type:__ Partially supported.  Used for phone numbers.
-- __value:__ Supported.
-- __pref:__ This property is not supported, and will always return `false`.
-
-iOS Quirks
------------
-- __pref:__ This property is not supported on iOS devices and will always return `false`.
-
-Bada Quirks
------------
-- __type:__ Property has to be one of the following for Email or Address fields: "WORK", "HOME". Property has to be one of the following for Phone fields: "WORK", "HOME", "VOICE", "FAX", "MSG", "CELL", "PAGER","BBS", "MODEM", "CAR", "ISDN","VIDEO", "PCS"

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/ContactFindOptions/contactfindoptions.md
----------------------------------------------------------------------
diff --git a/docs/ContactFindOptions/contactfindoptions.md b/docs/ContactFindOptions/contactfindoptions.md
deleted file mode 100644
index 4acf254..0000000
--- a/docs/ContactFindOptions/contactfindoptions.md
+++ /dev/null
@@ -1,118 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-ContactFindOptions
-==================
-
-Contains properties that can be used to filter the results of a `contacts.find` operation.
-
-Properties
-----------
-
-- __filter:__ The search string used to find contacts. _(DOMString)_ (Default: "")
-- __multiple:__ Determines if the find operation should return multiple contacts. _(Boolean)_ (Default: false)
-
-
-Supported Platforms
--------------------
-
-- Android
-- BlackBerry WebWorks (OS 5.0 and higher)
-- iOS
-- Bada 1.2 & 2.0
-- Windows Phone 7 and 8
-- Windows 8
-
-Quick Example
--------------
-
-	// success callback
-    function onSuccess(contacts) {
-		for (var i=0; i<contacts.length; i++) {
-			alert(contacts[i].displayName);
-		}
-    };
-
-	// error callback
-    function onError(contactError) {
-        alert('onError!');
-    };
-
-	// specify contact search criteria
-    var options = new ContactFindOptions();
-	options.filter="";			// empty search string returns all contacts
-	options.multiple=true;		// return multiple results
-	filter = ["displayName"];	// return contact.displayName field
-	
-	// find contacts
-    navigator.contacts.find(filter, onSuccess, onError, options);
-
-Full Example
-------------
-
-    <!DOCTYPE html>
-    <html>
-      <head>
-        <title>Contact Example</title>
-
-        <script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
-        <script type="text/javascript" charset="utf-8">
-
-        // Wait for Cordova to load
-        //
-        document.addEventListener("deviceready", onDeviceReady, false);
-
-        // Cordova is ready
-        //
-        function onDeviceReady() {
-			// specify contact search criteria
-		    var options = new ContactFindOptions();
-			options.filter="";			// empty search string returns all contacts
-			options.multiple=true;		// return multiple results
-			filter = ["displayName"];	// return contact.displayName field
-
-			// find contacts
-		    navigator.contacts.find(filter, onSuccess, onError, options);
-        }
-    
-        // onSuccess: Get a snapshot of the current contacts
-        //
-		function onSuccess(contacts) {
-			for (var i=0; i<contacts.length; i++) {
-				alert(contacts[i].displayName);
-			}
-		};
-    
-        // onError: Failed to get the contacts
-        //
-        function onError(contactError) {
-            alert('onError!');
-        }
-
-        </script>
-      </head>
-      <body>
-        <h1>Example</h1>
-        <p>Find Contacts</p>
-      </body>
-    </html>
-
-Bada Quirks
------------
-__filter:__ Property can only apply to the following: "firstName", "lastName", "nickname", "phoneNumber", "email", "address"

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/ContactName/contactname.md
----------------------------------------------------------------------
diff --git a/docs/ContactName/contactname.md b/docs/ContactName/contactname.md
deleted file mode 100644
index 91915fb..0000000
--- a/docs/ContactName/contactname.md
+++ /dev/null
@@ -1,147 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-ContactName
-===========
-
-Contains name properties of a `Contact` object.
-
-Properties
-----------
-
-- __formatted:__ The complete name of the contact. _(DOMString)_
-- __familyName:__ The contacts family name. _(DOMString)_
-- __givenName:__ The contacts given name. _(DOMString)_
-- __middleName:__ The contacts middle name. _(DOMString)_
-- __honorificPrefix:__ The contacts prefix (example Mr. or Dr.) _(DOMString)_
-- __honorificSuffix:__ The contacts suffix (example Esq.). _(DOMString)_
-
-Details
--------
-
-The `ContactName` object stores name properties of a contact.
-
-Supported Platforms
--------------------
-
-- Android 2.X
-- BlackBerry WebWorks (OS 5.0 and higher)
-- iOS
-- Bada 1.2 & 2.0
-- Windows Phone 7 and 8
-- Windows 8
-
-Quick Example
--------------
-
-    function onSuccess(contacts) {
-		for (var i=0; i<contacts.length; i++) {
-			alert("Formatted: " + contacts[i].name.formatted + "\n" + 
-					"Family Name: "  + contacts[i].name.familyName + "\n" + 
-					"Given Name: "  + contacts[i].name.givenName + "\n" + 
-					"Middle Name: "  + contacts[i].name.middleName + "\n" + 
-					"Suffix: "  + contacts[i].name.honorificSuffix + "\n" + 
-					"Prefix: "  + contacts[i].name.honorificSuffix);
-		}
-    };
-
-    function onError(contactError) {
-        alert('onError!');
-    };
-
-    var options = new ContactFindOptions();
-	options.filter="";
-	filter = ["displayName","name"];
-    navigator.contacts.find(filter, onSuccess, onError, options);
-
-Full Example
-------------
-
-    <!DOCTYPE html>
-    <html>
-      <head>
-        <title>Contact Example</title>
-
-        <script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
-        <script type="text/javascript" charset="utf-8">
-
-        // Wait for Cordova to load
-        //
-        document.addEventListener("deviceready", onDeviceReady, false);
-
-        // Cordova is ready
-        //
-        function onDeviceReady() {
-			var options = new ContactFindOptions();
-			options.filter="";
-			filter = ["displayName","name"];
-			navigator.contacts.find(filter, onSuccess, onError, options);
-        }
-    
-        // onSuccess: Get a snapshot of the current contacts
-        //
-		function onSuccess(contacts) {
-			for (var i=0; i<contacts.length; i++) {
-				alert("Formatted: " + contacts[i].name.formatted + "\n" + 
-						"Family Name: "  + contacts[i].name.familyName + "\n" + 
-						"Given Name: "  + contacts[i].name.givenName + "\n" + 
-						"Middle Name: "  + contacts[i].name.middleName + "\n" + 
-						"Suffix: "  + contacts[i].name.honorificSuffix + "\n" + 
-						"Prefix: "  + contacts[i].name.honorificPrefix);
-			}
-		};
-    
-        // onError: Failed to get the contacts
-        //
-        function onError(contactError) {
-            alert('onError!');
-        }
-
-        </script>
-      </head>
-      <body>
-        <h1>Example</h1>
-        <p>Find Contacts</p>
-      </body>
-    </html>
-
-Android Quirks
-------------
-- __formatted:__ Partially supported.  Will return the concatenation of honorificPrefix, givenName, middleName, familyName and honorificSuffix but will not store.
-
-BlackBerry WebWorks (OS 5.0 and higher) Quirks
----------------------------------------------
-
-- __formatted:__ Partially supported.  Will return concatenation of BlackBerry __firstName__ and __lastName__ fields.
-- __familyName:__ Supported.  Stored in BlackBerry __lastName__ field.
-- __givenName:__ Supported.  Stored in BlackBerry __firstName__ field.
-- __middleName:__ This property is not supported, and will always return `null`.
-- __honorificPrefix:__ This property is not supported, and will always return `null`.
-- __honorificSuffix:__ This property is not supported, and will always return `null`.
-
-iOS Quirks
-------------
-- __formatted:__ Partially supported.  Will return iOS Composite Name but will not store.
-
-Bada Quirks
------------
-- __formatted:__ Property not supported
-- __middleName:__ Property not supported
-_ __honorificPrefix:__ Property not supported
-- __honorificSuffix:__ Property not supported

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/ContactOrganization/contactorganization.md
----------------------------------------------------------------------
diff --git a/docs/ContactOrganization/contactorganization.md b/docs/ContactOrganization/contactorganization.md
deleted file mode 100644
index aef1248..0000000
--- a/docs/ContactOrganization/contactorganization.md
+++ /dev/null
@@ -1,148 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-ContactOrganization
-===================
-
-Contains organization properties of a `Contact` object.
-
-Properties
-----------
-- __pref:__ Set to `true` if this `ContactOrganization` contains the user's preferred value. _(boolean)_
-- __type:__ A string that tells you what type of field this is (example: 'home'). _(DOMString)
-- __name:__ The name of the organization. _(DOMString)_
-- __department:__ The department the contract works for. _(DOMString)_
-- __title:__ The contacts title at the organization. _(DOMString)_
-
-Details
--------
-
-The `ContactOrganization` object stores a contact's organization properties.  A `Contact` object stores one or more `ContactOrganization` objects in an array. 
-
-Supported Platforms
--------------------
-
-- Android
-- BlackBerry WebWorks (OS 5.0 and higher)
-- iOS
-- Bada 1.2
-- Windows Phone 7 and 8
-- Windows 8
-
-Quick Example
--------------
-
-    function onSuccess(contacts) {
-		for (var i=0; i<contacts.length; i++) {
-			for (var j=0; j<contacts[i].organizations.length; j++) {
-				alert("Pref: " + contacts[i].organizations[j].pref + "\n" +
-						"Type: " + contacts[i].organizations[j].type + "\n" +
-						"Name: " + contacts[i].organizations[j].name + "\n" + 
-						"Department: "  + contacts[i].organizations[j].department + "\n" + 
-						"Title: "  + contacts[i].organizations[j].title);
-			}
-		}
-    };
-
-    function onError(contactError) {
-        alert('onError!');
-    };
-
-    var options = new ContactFindOptions();
-	options.filter="";
-	filter = ["displayName","organizations"];
-    navigator.contacts.find(filter, onSuccess, onError, options);
-
-Full Example
-------------
-
-    <!DOCTYPE html>
-    <html>
-      <head>
-        <title>Contact Example</title>
-
-        <script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
-        <script type="text/javascript" charset="utf-8">
-
-        // Wait for Cordova to load
-        //
-        document.addEventListener("deviceready", onDeviceReady, false);
-
-        // Cordova is ready
-        //
-        function onDeviceReady() {
-			var options = new ContactFindOptions();
-			options.filter="";
-			filter = ["displayName","organizations"];
-			navigator.contacts.find(filter, onSuccess, onError, options);
-        }
-    
-        // onSuccess: Get a snapshot of the current contacts
-        //
-		function onSuccess(contacts) {
-			for (var i=0; i<contacts.length; i++) {
-				for (var j=0; j<contacts[i].organizations.length; j++) {
-					alert("Pref: " + contacts[i].organizations[j].pref + "\n" +
-							"Type: " + contacts[i].organizations[j].type + "\n" +
-							"Name: " + contacts[i].organizations[j].name + "\n" + 
-							"Department: "  + contacts[i].organizations[j].department + "\n" + 
-							"Title: "  + contacts[i].organizations[j].title);
-				}
-			}
-		};
-    
-        // onError: Failed to get the contacts
-        //
-        function onError(contactError) {
-            alert('onError!');
-        }
-
-        </script>
-      </head>
-      <body>
-        <h1>Example</h1>
-        <p>Find Contacts</p>
-      </body>
-    </html>
-	
-
-Android 2.X Quirks
-------------------
-
-- __pref:__ This property is not supported by Android 2.X devices and will always return `false`.
-
-BlackBerry WebWorks (OS 5.0 and higher) Quirks
---------------------------------------------
-- __pref:__ This property is not supported by Blackberry devices and will always return `false`.
-- __type:__ This property is not supported by Blackberry devices and will always return `null`.
-- __name:__ Partially supported.  The first organization name will be stored in the BlackBerry __company__ field.
-- __department:__ This property is not supported, and will always be returned as `null`.
-- __title:__ Partially supported.  The first organization title will be stored in the BlackBerry __jobTitle__ field.
-
-iOS Quirks
------------
-- __pref:__ This property is not supported on iOS devices and will always return `false`.
-- __type:__ This property is not supported on iOS devices and will always return `null`.
-- __name:__ Partially supported.  The first organization name will be stored in the iOS __kABPersonOrganizationProperty__ field.
-- __department__: Partially supported.  The first department name will be stored in the iOS __kABPersonDepartmentProperty__ field.
-- __title__: Partially supported.  The first title will be stored in the iOS __kABPersonJobTitleProperty__ field.
-
-Bada 2.0 Quirks
----------------
-- ContactOrganization not supported

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/contacts.create.md
----------------------------------------------------------------------
diff --git a/docs/contacts.create.md b/docs/contacts.create.md
deleted file mode 100644
index 42e8cb3..0000000
--- a/docs/contacts.create.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-contacts.create
-===============
-
-Returns a new Contact object.
-
-    var contact = navigator.contacts.create(properties);
-
-Description
------------
-
-contacts.create is a synchronous function that returns a new `Contact` object.
-
-This method does not persist the Contact object to the device contacts database.  To persist the Contact object to the device, invoke the `Contact.save` method.
-
-Supported Platforms
--------------------
-
-- Android
-- BlackBerry WebWorks (OS 5.0 and higher)
-- iOS
-- Windows Phone 7 and 8
-- Bada 1.2 & 2.0
-
-Quick Example
--------------
-
-    var myContact = navigator.contacts.create({"displayName": "Test User"});
-
-Full Example
-------------
-
-    <!DOCTYPE html>
-    <html>
-      <head>
-        <title>Contact Example</title>
-
-        <script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
-        <script type="text/javascript" charset="utf-8">
-
-        // Wait for Cordova to load
-        //
-        document.addEventListener("deviceready", onDeviceReady, false);
-
-        // Cordova is ready
-        //
-        function onDeviceReady() {
-			var myContact = navigator.contacts.create({"displayName": "Test User"});
-			myContact.note = "This contact has a note.";
-			console.log("The contact, " + myContact.displayName + ", note: " + myContact.note);
-        }
-    
-
-        </script>
-      </head>
-      <body>
-        <h1>Example</h1>
-        <p>Create Contact</p>
-      </body>
-    </html>

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/contacts.find.md
----------------------------------------------------------------------
diff --git a/docs/contacts.find.md b/docs/contacts.find.md
deleted file mode 100644
index ad97108..0000000
--- a/docs/contacts.find.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-contacts.find
-=============
-
-Queries the device contacts database and returns one or more `Contact` objects, each containing the fields specified.
-
-    navigator.contacts.find(contactFields, contactSuccess, contactError, contactFindOptions);
-
-Description
------------
-
-contacts.find is an asynchronous function that queries the device contacts database and returns an array of `Contact` objects.  The resulting objects are passed to the `contactSuccess` callback function specified by the __contactSuccess__ parameter.  
-
-Users must specify the contact fields to be used as a search qualifier in the __contactFields__ parameter.  Only the fields specified in the __contactFields__ parameter will be returned as properties of the `Contact` objects that are passed to the __contactSuccess__ callback function.  A zero-length __contactFields__ parameter is invalid and will result in a `ContactError.INVALID_ARGUMENT_ERROR` . A __contactFields__ value of ["*"] will return all contact fields. 
-
-The __contactFindOptions.filter__ string can be used as a search filter when querying the contacts database.  If provided, a case-insensitive, partial value match is applied to each field specified in the __contactFields__ parameter.  If a match is found in a comparison with _any_ of the specified fields, the contact is returned.
-
-Parameters
-----------
-
-- __contactFields:__ Contact fields to be used as search qualifier. Only these fields will have values in the resulting `Contact` objects. _(DOMString[])_ [Required]
-- __contactSuccess:__ Success callback function that is invoked with the contacts returned from the contacts database. [Required]
-- __contactError:__ Error callback function. Invoked when error occurs. [Optional]
-- __contactFindOptions:__ Search options to filter contacts. [Optional]
-
-Supported Platforms
--------------------
-
-- Android
-- BlackBerry WebWorks (OS 5.0 and higher)
-- iOS
-- Windows Phone 7 and 8
-- Bada 1.2 & 2.0
-- Windows 8
-
-Quick Example
--------------
-
-    function onSuccess(contacts) {
-        alert('Found ' + contacts.length + ' contacts.');
-    };
-
-    function onError(contactError) {
-        alert('onError!');
-    };
-
-    // find all contacts with 'Bob' in any name field
-    var options = new ContactFindOptions();
-	options.filter="Bob";
-	options.multiple=true; 
-	var fields = ["displayName", "name"];
-    navigator.contacts.find(fields, onSuccess, onError, options);
-
-Full Example
-------------
-
-    <!DOCTYPE html>
-    <html>
-      <head>
-        <title>Contact Example</title>
-
-        <script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
-        <script type="text/javascript" charset="utf-8">
-
-        // Wait for Cordova to load
-        //
-        document.addEventListener("deviceready", onDeviceReady, false);
-
-        // Cordova is ready
-        //
-        function onDeviceReady() {
-		    // find all contacts with 'Bob' in any name field
-		    var options = new ContactFindOptions();
-			options.filter="Bob"; 
-			var fields = ["displayName", "name"];
-		    navigator.contacts.find(fields, onSuccess, onError, options);
-        }
-    
-        // onSuccess: Get a snapshot of the current contacts
-        //
-        function onSuccess(contacts) {
-			for (var i=0; i<contacts.length; i++) {
-				console.log("Display Name = " + contacts[i].displayName);
-			}
-        }
-    
-        // onError: Failed to get the contacts
-        //
-        function onError(contactError) {
-            alert('onError!');
-        }
-
-        </script>
-      </head>
-      <body>
-        <h1>Example</h1>
-        <p>Find Contacts</p>
-      </body>
-    </html>
-    
-

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/contacts.md
----------------------------------------------------------------------
diff --git a/docs/contacts.md b/docs/contacts.md
deleted file mode 100644
index 28e3e5e..0000000
--- a/docs/contacts.md
+++ /dev/null
@@ -1,104 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-Contacts
-========
-
-> The `contacts` object provides access to the device contacts database.
-
-Methods
--------
-
-- contacts.create
-- contacts.find
-
-Arguments
----------
-
-- contactFields
-- contactSuccess
-- contactError
-- contactFindOptions
-
-Objects
--------
-
-- Contact
-- ContactName
-- ContactField
-- ContactAddress
-- ContactOrganization
-- ContactFindOptions
-- ContactError
-
-Permissions
------------
-
-### Android
-
-#### app/res/xml/config.xml
-
-    <plugin name="Contacts" value="org.apache.cordova.ContactManager" />
-
-#### app/AndroidManifest.xml
-
-    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
-    <uses-permission android:name="android.permission.READ_CONTACTS" />
-    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
-
-### Bada
-
-#### manifest.xml
-
-    <Privilege>
-        <Name>ADDRESSBOOK</Name>
-    </Privilege>
-
-### BlackBerry WebWorks
-
-#### www/plugins.xml
-
-    <plugin name="Contact" value="org.apache.cordova.pim.Contact" />
-
-#### www/config.xml
-
-    <feature id="blackberry.find"        required="true" version="1.0.0.0" />
-    <feature id="blackberry.identity"    required="true" version="1.0.0.0" />
-    <feature id="blackberry.pim.Address" required="true" version="1.0.0.0" />
-    <feature id="blackberry.pim.Contact" required="true" version="1.0.0.0" />
-
-### iOS
-
-#### config.xml
-
-    <plugin name="Contacts" value="CDVContacts" />
-
-### webOS
-
-    No permissions are required.
-
-### Windows Phone
-
-#### Properties/WPAppManifest.xml
-
-    <Capabilities>
-        <Capability Name="ID_CAP_CONTACTS" />
-    </Capabilities>
-
-Reference: [Application Manifest for Windows Phone](http://msdn.microsoft.com/en-us/library/ff769509%28v=vs.92%29.aspx)

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/parameters/contactError.md
----------------------------------------------------------------------
diff --git a/docs/parameters/contactError.md b/docs/parameters/contactError.md
deleted file mode 100644
index 4ce8289..0000000
--- a/docs/parameters/contactError.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-contactError
-============
-
-Error callback function for contact functions.
-
-    function(error) {
-        // Handle the error
-    }

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/parameters/contactFields.md
----------------------------------------------------------------------
diff --git a/docs/parameters/contactFields.md b/docs/parameters/contactFields.md
deleted file mode 100644
index 66c9d3d..0000000
--- a/docs/parameters/contactFields.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-contactFields
-=============
-
-Required parameter of the `contacts.find` method.  Use this parameter to specify which fields should be included in the `Contact` objects resulting from a find operation.
-
-    ["name", "phoneNumbers", "emails"]

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/parameters/contactFindOptions.md
----------------------------------------------------------------------
diff --git a/docs/parameters/contactFindOptions.md b/docs/parameters/contactFindOptions.md
deleted file mode 100644
index 2eb9afc..0000000
--- a/docs/parameters/contactFindOptions.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-contactFindOptions
-==================
-
-Optional parameter of the `contacts.find` method.  Use this parameter to filter the contacts returned from the contacts database.
-
-    { 
-		filter: "",
-		multiple: true,
-	};
-
-Options
--------
-
-- __filter:__ The search string used to filter contacts. _(DOMString)_ (Default: "")
-- __multiple:__ Determines if the find operation should return multiple contacts. _(Boolean)_ (Default: false)
-

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4884d949/docs/parameters/contactSuccess.md
----------------------------------------------------------------------
diff --git a/docs/parameters/contactSuccess.md b/docs/parameters/contactSuccess.md
deleted file mode 100644
index 45b6d31..0000000
--- a/docs/parameters/contactSuccess.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-contactSuccess
-==============
-
-Success callback function that provides the `Contact` array resulting from a `contacts.find` operation.
-
-    function(contacts) {
-        // Do something
-    }
-
-Parameters
-----------
-
-- __contacts:__ The contact array resulting from a find operation. (`Contact`)
-
-Example
--------
-
-    function contactSuccess(contacts) {
-		for (var i=0; i<contacts.length; i++) {
-			console.log("Display Name = " + contacts[i].displayName;
-    }


[25/50] [abbrv] git commit: CB-5980 Incremented plugin version on dev branch.

Posted by mm...@apache.org.
CB-5980 Incremented plugin version on dev branch.


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/f134edc7
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/f134edc7
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/f134edc7

Branch: refs/heads/cdvtest
Commit: f134edc7b5f99fa1354f278dbc4ea8da10c9a8fe
Parents: adf7042
Author: Steven Gill <st...@gmail.com>
Authored: Wed Feb 5 18:13:30 2014 -0800
Committer: Steven Gill <st...@gmail.com>
Committed: Mon Feb 10 15:21:22 2014 -0800

----------------------------------------------------------------------
 plugin.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/f134edc7/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index 4f9db70..96042e9 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -4,7 +4,7 @@
     xmlns:rim="http://www.blackberry.com/ns/widgets"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="org.apache.cordova.contacts"
-    version="0.2.8">
+    version="0.2.9-dev">
 
     <name>Contacts</name>
     <description>Cordova Contacts Plugin</description>


[38/50] [abbrv] git commit: CB-1291 Windows8 added some contact conversion, console.error on save because it is not supported

Posted by mm...@apache.org.
CB-1291 Windows8 added some contact conversion, console.error on save because it is not supported


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/b1ec0bc4
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/b1ec0bc4
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/b1ec0bc4

Branch: refs/heads/cdvtest
Commit: b1ec0bc49ca291c559d8a9b583ee8b192c21ca75
Parents: 04b96dc
Author: Jesse MacFadyen <pu...@gmail.com>
Authored: Thu Mar 13 22:56:54 2014 -0700
Committer: Jesse MacFadyen <pu...@gmail.com>
Committed: Thu Mar 13 22:56:54 2014 -0700

----------------------------------------------------------------------
 src/windows8/ContactProxy.js | 61 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 59 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/b1ec0bc4/src/windows8/ContactProxy.js
----------------------------------------------------------------------
diff --git a/src/windows8/ContactProxy.js b/src/windows8/ContactProxy.js
index 888047a..db54a09 100644
--- a/src/windows8/ContactProxy.js
+++ b/src/windows8/ContactProxy.js
@@ -1,3 +1,4 @@
+// cordova.define("org.apache.cordova.contacts.ContactProxy", function (require, exports, module) {
 /*
  *
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -25,13 +26,69 @@ module.exports = {
     search:function(win,fail,args){
         var fields = args[0];
         var options = args[1];
+
+        var filter = options.filter;
+        var multiple = options.multiple;
+
+        var picker = new Windows.ApplicationModel.Contacts.ContactPicker();
+        picker.selectionMode = Windows.ApplicationModel.Contacts.ContactSelectionMode.contacts;
+        picker.pickSingleContactAsync().done(function (res) {
+
+            var contact = {
+                id:"",
+                name: { formatted: res.name },  // ContactName
+                displayName: res.name,          // DOMString
+                nickname: res.name,             // DOMString
+                phoneNumbers: res.phoneNumbers, // ContactField[]
+                addresses: res.locations,       // ContactAddress[]
+                emails: [],                     // ContactField
+                ims: res.instantMessages,       // ContactField[]
+                organizations: [],              // ContactOrganization[]
+                birthday: null,                 // Date
+                note: "",                       // DOMString
+                photos: [],                     // ContactField[]
+                categories: [],                 // ContactField[]
+                urls: []                        // ContactField[]
+            };
+
+            if (contact.phoneNumbers && contact.phoneNumbers.length) {
+                contact.phoneNumbers[0].pref = true; // cordova contact field needs a 'prefered' property on  a contact
+            }
+
+            if (contact.addresses && contact.addresses.length) {
+                contact.addresses[0].pref = true;
+                // convert addresses/locations to Cordova.ContactAddresses
+                // pref: Set to true if this ContactAddress contains the user's preferred value. (boolean)
+                // type: A string indicating what type of field this is, home for example. (DOMString)
+                // formatted: The full address formatted for display. (DOMString)
+                // streetAddress: The full street address. (DOMString)
+                // locality: The city or locality. (DOMString)
+                // region: The state or region. (DOMString)
+                // postalCode: The zip code or postal code. (DOMString)
+                // country: The country name. (DOMString)
+            }
+            // Maybe, seems the types are compatible -jm
+            // convert ims to ContactField
+            //if (contact.ims && contact.ims.length) {
+            //    // MS ContactInstantMessageField has : displayText, launchUri, service, userName, category, type
+            //    for (var n = 0; n < contact.ims.length; n++) {
+            //        contact.ims[n] = new ContactField(contact.ims[n].type,contact.ims[n].value, false);
+            //        }
+            //    }
+            //}
+            win([contact]);
+        });
     },
 
     save:function(win,fail,args){
-        var contact = args[0];
+        console.error && console.error("Windows 8 does not support creating/saving contacts");
+        fail && setTimeout(function(){
+            fail(new Error("Contact create/save not supported on Windows8"));
+        },0);
     }
 
 
 }
 
-require("cordova/windows8/commandProxy").add("Contacts",module.exports);
\ No newline at end of file
+require("cordova/windows8/commandProxy").add("Contacts",module.exports);
+


[13/50] [abbrv] git commit: CB-5719 Incremented plugin version on dev branch.

Posted by mm...@apache.org.
CB-5719 Incremented plugin version on dev branch.


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/5b25f584
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/5b25f584
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/5b25f584

Branch: refs/heads/cdvtest
Commit: 5b25f584420f0388d757f6380ef3733402322ec5
Parents: 322753f
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Jan 2 12:30:52 2014 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Jan 2 12:30:52 2014 -0500

----------------------------------------------------------------------
 plugin.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/5b25f584/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index 4ed6cc0..6b68593 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -4,7 +4,7 @@
     xmlns:rim="http://www.blackberry.com/ns/widgets"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="org.apache.cordova.contacts"
-    version="0.2.7">
+    version="0.2.8-dev">
 
     <name>Contacts</name>
     <description>Cordova Contacts Plugin</description>


[49/50] [abbrv] git commit: CB-6491 add CONTRIBUTING.md

Posted by mm...@apache.org.
CB-6491 add CONTRIBUTING.md


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/19445dca
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/19445dca
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/19445dca

Branch: refs/heads/cdvtest
Commit: 19445dca6d22d3bc0300f006abf3beb36cb2d937
Parents: 55ba3f2
Author: Marcel Kinard <cm...@gmail.com>
Authored: Wed Apr 30 09:22:09 2014 -0400
Committer: Marcel Kinard <cm...@gmail.com>
Committed: Wed Apr 30 09:22:09 2014 -0400

----------------------------------------------------------------------
 CONTRIBUTING.md | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/19445dca/CONTRIBUTING.md
----------------------------------------------------------------------
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..1594d12
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,16 @@
+# Contributing to Apache Cordova
+
+Anyone can contribute to Cordova. And we need your contributions.
+
+There are multiple ways to contribute: report bugs, improve the docs, and
+contribute code.
+
+For instructions on this, start with the 
+[contribution overview](http://cordova.apache.org/#contribute).
+
+The details are explained there, but the important items are:
+ - Sign and submit an Apache ICLA (Contributor License Agreement).
+ - Have a Jira issue open that corresponds to your contribution.
+ - Run the tests so your patch doesn't break existing functionality.
+
+We look forward to your contributions!


[44/50] [abbrv] git commit: Merge branch 'master' into dev

Posted by mm...@apache.org.
Merge branch 'master' into dev


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/f067e52f
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/f067e52f
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/f067e52f

Branch: refs/heads/cdvtest
Commit: f067e52f13930bf4ee2741e122117893e6e222fb
Parents: 3d79c90 6ed8b90
Author: Ian Clelland <ic...@chromium.org>
Authored: Wed Apr 16 10:54:37 2014 -0400
Committer: Ian Clelland <ic...@chromium.org>
Committed: Wed Apr 16 10:54:37 2014 -0400

----------------------------------------------------------------------
 doc/index.md                 |  40 ++++++++--
 plugin.xml                   |   7 +-
 src/windows8/ContactProxy.js | 151 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 189 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/f067e52f/doc/index.md
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/f067e52f/plugin.xml
----------------------------------------------------------------------


[50/50] [abbrv] git commit: Merge branch 'master' into cdvtest

Posted by mm...@apache.org.
Merge branch 'master' into cdvtest

Conflicts:
	plugin.xml


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/fa4717c8
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/fa4717c8
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/fa4717c8

Branch: refs/heads/cdvtest
Commit: fa4717c8269ac1b12c0c3b9935105a059c41b6e3
Parents: ab0bf04 19445dc
Author: Michal Mocny <mm...@gmail.com>
Authored: Mon May 5 12:09:35 2014 -0400
Committer: Michal Mocny <mm...@gmail.com>
Committed: Mon May 5 12:09:35 2014 -0400

----------------------------------------------------------------------
 CONTRIBUTING.md                                 |  16 +
 NOTICE                                          |   5 +
 README.md                                       |  25 +-
 RELEASENOTES.md                                 |  40 ++
 doc/index.md                                    | 687 +++++++++++++++++++
 docs/Contact/contact.md                         | 238 -------
 docs/ContactAddress/contactaddress.md           | 161 -----
 docs/ContactError/contactError.md               |  45 --
 docs/ContactField/contactfield.md               | 148 ----
 docs/ContactFindOptions/contactfindoptions.md   | 118 ----
 docs/ContactName/contactname.md                 | 147 ----
 docs/ContactOrganization/contactorganization.md | 148 ----
 docs/contacts.create.md                         |  78 ---
 docs/contacts.find.md                           | 119 ----
 docs/contacts.md                                | 104 ---
 docs/parameters/contactError.md                 |  27 -
 docs/parameters/contactFields.md                |  25 -
 docs/parameters/contactFindOptions.md           |  35 -
 docs/parameters/contactSuccess.md               |  40 --
 plugin.xml                                      |  63 +-
 src/android/ContactAccessorSdk5.java            |   4 +-
 src/blackberry10/plugin.xml                     |  41 --
 src/firefoxos/ContactsProxy.js                  | 507 ++++++++++++--
 src/ios/CDVContact.m                            |   2 +-
 src/ios/CDVContacts.m                           |  27 +-
 src/ubuntu/contacts.cpp                         | 576 ++++++++++++++++
 src/ubuntu/contacts.h                           |  70 ++
 src/windows8/ContactProxy.js                    | 151 ++++
 src/wp/Contacts.cs                              |  59 +-
 29 files changed, 2112 insertions(+), 1594 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/fa4717c8/plugin.xml
----------------------------------------------------------------------


[17/50] [abbrv] Delete stale test/ directory

Posted by mm...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/tests/contacts.tests.js
----------------------------------------------------------------------
diff --git a/test/autotest/tests/contacts.tests.js b/test/autotest/tests/contacts.tests.js
deleted file mode 100644
index de2955e..0000000
--- a/test/autotest/tests/contacts.tests.js
+++ /dev/null
@@ -1,538 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-// global to store a contact so it doesn't have to be created or retrieved multiple times
-// all of the setup/teardown test methods can reference the following variables to make sure to do the right cleanup
-var gContactObj = null,
-    gContactId = null,
-    isWindowsPhone = cordova.platformId == 'windowsphone';
-
-var removeContact = function(){
-    if (gContactObj) {
-        gContactObj.remove(function(){},function(){
-            console.log("[CONTACTS ERROR]: removeContact cleanup method failed to clean up test artifacts.");
-        });
-        gContactObj = null;
-    }
-};
-
-describe("Contacts (navigator.contacts)", function () {
-    it("contacts.spec.1 should exist", function() {
-        expect(navigator.contacts).toBeDefined();
-    });
-
-    it("contacts.spec.2 should contain a find function", function() {
-        expect(navigator.contacts.find).toBeDefined();
-        expect(typeof navigator.contacts.find).toBe('function');
-    });
-
-    describe("find method", function() {
-        it("contacts.spec.3 success callback should be called with an array", function() {
-            var win = jasmine.createSpy().andCallFake(function(result) {
-                    expect(result).toBeDefined();
-                    expect(result instanceof Array).toBe(true);
-                }),
-                fail = jasmine.createSpy(),
-                obj = new ContactFindOptions();
-
-            runs(function () {
-                obj.filter="";
-                obj.multiple=true;
-                navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], win, fail, obj);
-            });
-
-            waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
-
-            runs(function () {
-                expect(fail).not.toHaveBeenCalled();
-            });
-        });
-
-        it("success callback should be called with an array, even if partial ContactFindOptions specified", function () {
-            var win = jasmine.createSpy().andCallFake(function (result) {
-                expect(result).toBeDefined();
-                expect(result instanceof Array).toBe(true);
-            }),
-                fail = jasmine.createSpy();
-
-            runs(function () {
-                navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], win, fail, {
-                    multiple: true
-                });
-            });
-
-            waitsFor(function () { return win.wasCalled; }, "win never called", Tests.TEST_TIMEOUT);
-
-            runs(function () {
-                expect(fail).not.toHaveBeenCalled();
-            });
-        });
-
-        it("contacts.spec.4 should throw an exception if success callback is empty", function() {
-            var fail = function() {};
-            var obj = new ContactFindOptions();
-            obj.filter="";
-            obj.multiple=true;
-
-            expect(function () {
-                navigator.contacts.find(["displayName", "name", "emails", "phoneNumbers"], null, fail, obj);
-            }).toThrow();
-        });
-
-        it("contacts.spec.5 error callback should be called when no fields are specified", function() {
-            var win = jasmine.createSpy(),
-                fail = jasmine.createSpy(function(result) {
-                    expect(result).toBeDefined();
-                    expect(result.code).toBe(ContactError.INVALID_ARGUMENT_ERROR);
-                }),
-                obj = new ContactFindOptions();
-
-            runs(function () {
-                obj.filter="";
-                obj.multiple=true;
-                navigator.contacts.find([], win, fail, obj);
-            });
-
-            waitsFor(function () { return fail.wasCalled; }, Tests.TEST_TIMEOUT);
-
-            runs(function () {
-                expect(win).not.toHaveBeenCalled();
-                expect(fail).toHaveBeenCalled();
-            });
-        });
-
-        describe("with newly-created contact", function () {
-
-            afterEach(removeContact);
-
-            it("contacts.spec.6 should be able to find a contact by name", function() {
-
-                // this api requires manual user confirmation on WP7/8 so skip it
-                if (isWindowsPhone) return;
-
-                var foundName = jasmine.createSpy().andCallFake(function(result) {
-                        var bFound = false;
-                        try {
-                            for (var i=0; i < result.length; i++) {
-                                if (result[i].name.familyName == "Delete") {
-                                    bFound = true;
-                                    break;
-                                }
-                            }
-                        } catch(e) {
-                            return false;
-                        }
-                        return bFound;
-                    }),
-                    fail = jasmine.createSpy(),
-                    test = jasmine.createSpy().andCallFake(function(savedContact) {
-                        console.log('in test');
-                        // update so contact will get removed
-                        gContactObj = savedContact;
-                        // ----
-                        // Find asserts
-                        // ---
-                        var findWin = jasmine.createSpy().andCallFake(function(object) {
-                                console.log('in findwin');
-                                expect(object instanceof Array).toBe(true);
-                                expect(object.length >= 1).toBe(true);
-                                expect(foundName(object)).toBe(true);
-                            }),
-                            findFail = jasmine.createSpy(),
-                            obj = new ContactFindOptions();
-
-                        obj.filter="Delete";
-                        obj.multiple=true;
-
-                        runs(function () {
-                            navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], findWin, findFail, obj);
-                        });
-
-                        waitsFor(function () { return foundName.wasCalled; }, "foundName not done", Tests.TEST_TIMEOUT);
-
-                        runs(function () {
-                            expect(findFail).not.toHaveBeenCalled();
-                            expect(fail).not.toHaveBeenCalled();
-                        });
-                    });
-
-                runs(function () {
-                    gContactObj = new Contact();
-                    gContactObj.name = new ContactName();
-                    gContactObj.name.familyName = "Delete";
-                    gContactObj.save(test, fail);
-                });
-
-                waitsFor(function () { return test.wasCalled; }, "test not done", Tests.TEST_TIMEOUT);
-            });
-        });
-    });
-
-    describe('create method', function() {
-
-        it("contacts.spec.7 should exist", function() {
-            expect(navigator.contacts.create).toBeDefined();
-            expect(typeof navigator.contacts.create).toBe('function');
-        });
-
-        it("contacts.spec.8 should return a Contact object", function() {
-            var bDay = new Date(1976, 7,4);
-            var obj = navigator.contacts.create({"displayName": "test name", "gender": "male", "note": "my note", "name": {"formatted": "Mr. Test Name"}, "emails": [{"value": "here@there.com"}, {"value": "there@here.com"}], "birthday": bDay});
-
-            expect(obj).toBeDefined();
-            expect(obj.displayName).toBe('test name');
-            expect(obj.note).toBe('my note');
-            expect(obj.name.formatted).toBe('Mr. Test Name');
-            expect(obj.emails.length).toBe(2);
-            expect(obj.emails[0].value).toBe('here@there.com');
-            expect(obj.emails[1].value).toBe('there@here.com');
-            expect(obj.nickname).toBe(null);
-            expect(obj.birthday).toBe(bDay);
-        });
-    });
-
-    describe("Contact object", function () {
-        it("contacts.spec.9 should be able to create instance", function() {
-            var contact = new Contact("a", "b", new ContactName("a", "b", "c", "d", "e", "f"), "c", [], [], [], [], [], "f", "i",
-                [], [], []);
-            expect(contact).toBeDefined();
-            expect(contact.id).toBe("a");
-            expect(contact.displayName).toBe("b");
-            expect(contact.name.formatted).toBe("a");
-            expect(contact.nickname).toBe("c");
-            expect(contact.phoneNumbers).toBeDefined();
-            expect(contact.emails).toBeDefined();
-            expect(contact.addresses).toBeDefined();
-            expect(contact.ims).toBeDefined();
-            expect(contact.organizations).toBeDefined();
-            expect(contact.birthday).toBe("f");
-            expect(contact.note).toBe("i");
-            expect(contact.photos).toBeDefined();
-            expect(contact.categories).toBeDefined();
-            expect(contact.urls).toBeDefined();
-        });
-
-        it("contacts.spec.10 should be able to define a ContactName object", function() {
-            var contactName = new ContactName("Dr. First Last Jr.", "Last", "First", "Middle", "Dr.", "Jr.");
-            expect(contactName).toBeDefined();
-            expect(contactName.formatted).toBe("Dr. First Last Jr.");
-            expect(contactName.familyName).toBe("Last");
-            expect(contactName.givenName).toBe("First");
-            expect(contactName.middleName).toBe("Middle");
-            expect(contactName.honorificPrefix).toBe("Dr.");
-            expect(contactName.honorificSuffix).toBe("Jr.");
-        });
-
-        it("contacts.spec.11 should be able to define a ContactField object", function() {
-            var contactField = new ContactField("home", "8005551212", true);
-            expect(contactField).toBeDefined();
-            expect(contactField.type).toBe("home");
-            expect(contactField.value).toBe("8005551212");
-            expect(contactField.pref).toBe(true);
-        });
-
-        it("contacts.spec.12 ContactField object should coerce type and value properties to strings", function() {
-            var contactField = new ContactField(12345678, 12345678, true);
-            expect(contactField.type).toBe("12345678");
-            expect(contactField.value).toBe("12345678");
-        });
-
-        it("contacts.spec.13 should be able to define a ContactAddress object", function() {
-            var contactAddress = new ContactAddress(true, "home", "a","b","c","d","e","f");
-            expect(contactAddress).toBeDefined();
-            expect(contactAddress.pref).toBe(true);
-            expect(contactAddress.type).toBe("home");
-            expect(contactAddress.formatted).toBe("a");
-            expect(contactAddress.streetAddress).toBe("b");
-            expect(contactAddress.locality).toBe("c");
-            expect(contactAddress.region).toBe("d");
-            expect(contactAddress.postalCode).toBe("e");
-            expect(contactAddress.country).toBe("f");
-        });
-
-        it("contacts.spec.14 should be able to define a ContactOrganization object", function() {
-            var contactOrg = new ContactOrganization(true, "home", "a","b","c","d","e","f","g");
-            expect(contactOrg).toBeDefined();
-            expect(contactOrg.pref).toBe(true);
-            expect(contactOrg.type).toBe("home");
-            expect(contactOrg.name).toBe("a");
-            expect(contactOrg.department).toBe("b");
-            expect(contactOrg.title).toBe("c");
-        });
-
-        it("contacts.spec.15 should be able to define a ContactFindOptions object", function() {
-            var contactFindOptions = new ContactFindOptions("a", true, "b");
-            expect(contactFindOptions).toBeDefined();
-            expect(contactFindOptions.filter).toBe("a");
-            expect(contactFindOptions.multiple).toBe(true);
-        });
-
-        it("contacts.spec.16 should contain a clone function", function() {
-            var contact = new Contact();
-            expect(contact.clone).toBeDefined();
-            expect(typeof contact.clone).toBe('function');
-        });
-
-        it("contacts.spec.17 clone function should make deep copy of Contact Object", function() {
-            var contact = new Contact();
-            contact.id=1;
-            contact.displayName="Test Name";
-            contact.nickname="Testy";
-            contact.gender="male";
-            contact.note="note to be cloned";
-            contact.name = new ContactName("Mr. Test Name");
-
-            var clonedContact = contact.clone();
-
-            expect(contact.id).toBe(1);
-            expect(clonedContact.id).toBe(null);
-            expect(clonedContact.displayName).toBe(contact.displayName);
-            expect(clonedContact.nickname).toBe(contact.nickname);
-            expect(clonedContact.gender).toBe(contact.gender);
-            expect(clonedContact.note).toBe(contact.note);
-            expect(clonedContact.name.formatted).toBe(contact.name.formatted);
-            expect(clonedContact.connected).toBe(contact.connected);
-        });
-
-        it("contacts.spec.18 should contain a save function", function() {
-            var contact = new Contact();
-            expect(contact.save).toBeDefined();
-            expect(typeof contact.save).toBe('function');
-        });
-
-        it("contacts.spec.19 should contain a remove function", function() {
-            var contact = new Contact();
-            expect(contact.remove).toBeDefined();
-            expect(typeof contact.remove).toBe('function');
-        });
-    });
-
-    describe('save method', function () {
-        it("contacts.spec.20 should be able to save a contact", function() {
-
-            // this api requires manual user confirmation on WP7/8 so skip it
-            if (isWindowsPhone) return;
-
-            var bDay = new Date(1976, 6,4);
-            gContactObj = navigator.contacts.create({"gender": "male", "note": "my note", "name": {"familyName": "Delete", "givenName": "Test"}, "emails": [{"value": "here@there.com"}, {"value": "there@here.com"}], "birthday": bDay});
-
-            var saveSuccess = jasmine.createSpy().andCallFake(function(obj) {
-                    expect(obj).toBeDefined();
-                    expect(obj.note).toBe('my note');
-                    expect(obj.name.familyName).toBe('Delete');
-                    expect(obj.name.givenName).toBe('Test');
-                    expect(obj.emails.length).toBe(2);
-                    expect(obj.emails[0].value).toBe('here@there.com');
-                    expect(obj.emails[1].value).toBe('there@here.com');
-                    expect(obj.birthday.toDateString()).toBe(bDay.toDateString());
-                    expect(obj.addresses).toBe(null);
-                    // must store returned object in order to have id for update test below
-                    gContactObj = obj;
-                }),
-                saveFail = jasmine.createSpy();
-
-            runs(function () {
-                gContactObj.save(saveSuccess, saveFail);
-            });
-
-            waitsFor(function () { return saveSuccess.wasCalled; }, "saveSuccess never called", Tests.TEST_TIMEOUT);
-
-            runs(function () {
-                expect(saveFail).not.toHaveBeenCalled();
-            });
-         });
-        // HACK: there is a reliance between the previous and next test. This is bad form.
-        it("contacts.spec.21 update a contact", function() {
-
-            // this api requires manual user confirmation on WP7/8 so skip it
-            if (isWindowsPhone) return;
-
-            expect(gContactObj).toBeDefined();
-
-            var bDay = new Date(1975, 5,4);
-            var noteText = "an UPDATED note";
-
-            var win = jasmine.createSpy().andCallFake(function(obj) {
-                    expect(obj).toBeDefined();
-                    expect(obj.id).toBe(gContactObj.id);
-                    expect(obj.note).toBe(noteText);
-                    expect(obj.birthday.toDateString()).toBe(bDay.toDateString());
-                    expect(obj.emails.length).toBe(1);
-                    expect(obj.emails[0].value).toBe('here@there.com');
-                    removeContact();         // Clean up contact object
-                }), fail = jasmine.createSpy().andCallFake(removeContact);
-
-            runs(function () {
-                // remove an email
-                gContactObj.emails[1].value = "";
-                // change birthday
-                gContactObj.birthday = bDay;
-                // update note
-                gContactObj.note = noteText;
-                gContactObj.save(win, fail);
-            });
-
-            waitsFor(function () { return win.wasCalled; }, "saveSuccess never called", Tests.TEST_TIMEOUT);
-
-            runs(function () {
-                expect(fail).not.toHaveBeenCalled();
-            });
-        });
-    });
-
-    describe('Contact.remove method', function () {
-        afterEach(removeContact);
-
-        it("contacts.spec.22 calling remove on a contact has an id of null should return ContactError.UNKNOWN_ERROR", function() {
-            var win = jasmine.createSpy();
-            var fail = jasmine.createSpy().andCallFake(function(result) {
-                expect(result.code).toBe(ContactError.UNKNOWN_ERROR);
-            });
-
-            runs(function () {
-                var rmContact = new Contact();
-                rmContact.remove(win, fail);
-            });
-
-            waitsFor(function () { return fail.wasCalled; }, Tests.TEST_TIMEOUT);
-
-            runs(function () {
-                expect(win).not.toHaveBeenCalled();
-            });
-        });
-
-        it("contacts.spec.23 calling remove on a contact that does not exist should return ContactError.UNKNOWN_ERROR", function() {
-            var win = jasmine.createSpy();
-            var fail = jasmine.createSpy().andCallFake(function(result) {
-                expect(result.code).toBe(ContactError.UNKNOWN_ERROR);
-            });
-
-            runs(function () {
-                var rmContact = new Contact();
-                // this is a bit risky as some devices may have contact ids that large
-                var contact = new Contact("this string is supposed to be a unique identifier that will never show up on a device");
-                contact.remove(win, fail);
-            });
-
-            waitsFor(function () { return fail.wasCalled; }, Tests.TEST_TIMEOUT);
-
-            runs(function () {
-                expect(win).not.toHaveBeenCalled();
-            });
-        });
-    });
-
-    describe("Round trip Contact tests (creating + save + delete + find).", function () {
-        it("contacts.spec.24 Creating, saving, finding a contact should work, removing it should work, after which we should not be able to find it, and we should not be able to delete it again.", function() {
-
-            // this api requires manual user confirmation on WP7/8 so skip it
-            if (isWindowsPhone) return;
-
-            var done = false;
-            runs(function () {
-                gContactObj = new Contact();
-                gContactObj.name = new ContactName();
-                gContactObj.name.familyName = "DeleteMe";
-                gContactObj.save(function(c_obj) {
-                    var findWin = function(cs) {
-                        expect(cs.length).toBe(1);
-                        // update to have proper saved id
-                        gContactObj = cs[0];
-                        gContactObj.remove(function() {
-                            var findWinAgain = function(seas) {
-                                expect(seas.length).toBe(0);
-                                gContactObj.remove(function() {
-                                    throw("success callback called after non-existent Contact object called remove(). Test failed.");
-                                }, function(e) {
-                                    expect(e.code).toBe(ContactError.UNKNOWN_ERROR);
-                                    done = true;
-                                });
-                            };
-                            var findFailAgain = function(e) {
-                                throw("find error callback invoked after delete, test failed.");
-                            };
-                            var obj = new ContactFindOptions();
-                            obj.filter="DeleteMe";
-                            obj.multiple=true;
-                            navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], findWinAgain, findFailAgain, obj);
-                        }, function(e) {
-                            throw("Newly created contact's remove function invoked error callback. Test failed.");
-                        });
-                    };
-                    var findFail = function(e) {
-                        throw("Failure callback invoked in navigator.contacts.find call, test failed.");
-                    };
-                    var obj = new ContactFindOptions();
-                    obj.filter="DeleteMe";
-                    obj.multiple=true;
-                    navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], findWin, findFail, obj);
-                }, function(e) {
-                    throw("Contact creation failed, error callback was invoked.");
-                });
-            });
-
-            waitsFor(function () { return done; }, Tests.TEST_TIMEOUT);
-        });
-    });
-
-    describe('ContactError interface', function () {
-        it("contacts.spec.25 ContactError constants should be defined", function() {
-            expect(ContactError.UNKNOWN_ERROR).toBe(0);
-            expect(ContactError.INVALID_ARGUMENT_ERROR).toBe(1);
-            expect(ContactError.TIMEOUT_ERROR).toBe(2);
-            expect(ContactError.PENDING_OPERATION_ERROR).toBe(3);
-            expect(ContactError.IO_ERROR).toBe(4);
-            expect(ContactError.NOT_SUPPORTED_ERROR).toBe(5);
-            expect(ContactError.PERMISSION_DENIED_ERROR).toBe(20);
-        });
-    });
-
-    describe("Contacts autotests cleanup", function () {
-        it("contacts.spec.26 Cleanup any DeleteMe contacts from Contacts tests.", function() {
-            var done = false;
-            var obj = new ContactFindOptions();
-            obj.filter="DeleteMe";
-            obj.multiple=true;
-            runs(function () {
-                var findSuccess = function (cs) {
-                    var contactObj = new Contact();
-                    if (cs.length>0){
-                        contactObj = cs[0];
-                        contactObj.remove(function(){
-                            console.log("[CONTACTS CLEANUP] DeleteMe contact successfully removed");
-                            navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], findSuccess, findFail, obj);
-                        },function(){
-                            console.log("[CONTACTS CLEANUP ERROR]: failed to remove DeleteMe contact");
-                        });
-                    } else {
-                        done = true;
-                    }
-                };
-                var findFail = function(e) {
-                    throw("Failure callback invoked in navigator.contacts.find call, test failed.");
-                };
-                navigator.contacts.find(["displayName", "name", "phoneNumbers", "emails"], findSuccess, findFail, obj);
-            });
-            waitsFor(function () { return done; }, Tests.TEST_TIMEOUT);
-        });
-    });
-
-});

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/contacts/index.html
----------------------------------------------------------------------
diff --git a/test/contacts/index.html b/test/contacts/index.html
deleted file mode 100644
index b6a3a92..0000000
--- a/test/contacts/index.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE html>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-
-<html>
-  <head>
-    <meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,maximum-scale=1.0,initial-scale=1.0" />
-    <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <!-- ISO-8859-1 -->
-    <title>Cordova Mobile Spec</title>
-    <link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title" charset="utf-8">
-    <script type="text/javascript" charset="utf-8" src="../cordova-incl.js"></script>      
-
-      
-<script type="text/javascript" charset="utf-8">
-
-    var deviceReady = false;
-
-    //-------------------------------------------------------------------------
-    // Contacts
-    //-------------------------------------------------------------------------
-    function getContacts() {
-        obj = new ContactFindOptions();
-        // show all contacts, so don't filter
-        obj.multiple = true;
-        navigator.contacts.find(
-            ["displayName", "name", "phoneNumbers", "emails", "urls", "note"],
-            function(contacts) {
-                var s = "";
-                if (contacts.length == 0) {
-                    s = "No contacts found";
-                }
-                else {
-                    s = "Number of contacts: "+contacts.length+"<br><table width='100%'><tr><th>Name</th><td>Phone</td><td>Email</td></tr>";
-                    for (var i=0; i<contacts.length; i++) {
-                        var contact = contacts[i];
-                        s = s + "<tr><td>" + contact.name.formatted + "</td><td>";
-                        if (contact.phoneNumbers && contact.phoneNumbers.length > 0) {
-                            s = s + contact.phoneNumbers[0].value;
-                        }
-                        s = s + "</td><td>"
-                        if (contact.emails && contact.emails.length > 0) {
-                            s = s + contact.emails[0].value;
-                        }
-                        s = s + "</td></tr>";
-                    }
-                    s = s + "</table>";
-                }
-                document.getElementById('contacts_results').innerHTML = s;
-            },
-            function(e) {
-                document.getElementById('contacts_results').innerHTML = "Error: "+e.code;
-            },
-            obj);
-    };
-
-    function addContact(){
-        console.log("addContact()");
-        try{
-            var contact = navigator.contacts.create({"displayName": "Dooney Evans"});
-            var contactName = {
-                formatted: "Dooney Evans",
-                familyName: "Evans",
-                givenName: "Dooney",
-                middleName: ""
-            };
-
-            contact.name = contactName;
-
-            var phoneNumbers = [1];
-            phoneNumbers[0] = new ContactField('work', '512-555-1234', true);
-            contact.phoneNumbers = phoneNumbers;
-
-            contact.save(
-                function() { alert("Contact saved.");},
-                function(e) { alert("Contact save failed: " + e.code); }
-            );
-            console.log("you have saved the contact");
-        }
-        catch (e){
-            alert(e);
-        }
-
-    };
-    
-    /**
-     * Function called when page has finished loading.
-     */
-    function init() {
-        document.addEventListener("deviceready", function() {
-                deviceReady = true;
-                console.log("Device="+device.platform+" "+device.version);
-            }, false);
-        window.setTimeout(function() {
-        	if (!deviceReady) {
-        		alert("Error: Apache Cordova did not initialize.  Demo will not run correctly.");
-        	}
-        },1000);
-    }
-
-</script>
-
-  </head>
-  <body onload="init();" id="stage" class="theme">
-  
-    <h1>Contacts</h1>    
-    <div id="info">
-        <b>Results:</b><br>
-        <span id="contacts_results"> </span>
-    </div>
-    <h2>Action</h2>
-    <div class="btn large" onclick="getContacts();">Get phone's contacts</div>
-    <div class="btn large" onclick="addContact();">Add a new contact 'Dooney Evans'</div>
-    <h2> </h2><div class="backBtn" onclick="backHome();">Back</div>
-  </body>
-</html>      

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/cordova-incl.js
----------------------------------------------------------------------
diff --git a/test/cordova-incl.js b/test/cordova-incl.js
deleted file mode 100644
index bc1dd7a..0000000
--- a/test/cordova-incl.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var PLAT;
-if (/cordova-amazon-fireos/.exec(navigator.userAgent)) {
-    PLAT = 'amazon-fireos';
-}else if (/Android/.exec(navigator.userAgent)) {
-    PLAT = 'android';
-} else if (/(iPad)|(iPhone)|(iPod)/.exec(navigator.userAgent)) {
-    PLAT = 'ios';
-} else if (/(BB10)|(PlayBook)|(BlackBerry)/.exec(navigator.userAgent)) {
-    PLAT = 'blackberry';
-}
-
-var scripts = document.getElementsByTagName('script');
-var currentPath = scripts[scripts.length - 1].src;
-var platformCordovaPath = currentPath.replace("cordova-incl.js", "cordova." + PLAT + ".js");
-var normalCordovaPath = currentPath.replace("cordova-incl.js", "cordova.js");
-var cordovaPath = normalCordovaPath;
-
-if (PLAT) {
-    // XHR to local file is an error on some platforms, windowsphone for one 
-    try {
-        var xhr = new XMLHttpRequest();
-        xhr.open("GET", platformCordovaPath, false);
-        xhr.onreadystatechange = function() {
-
-            if (this.readyState == this.DONE && this.responseText.length > 0) {
-                if(parseInt(this.status) >= 400){
-                    cordovaPath = normalCordovaPath;
-                }else{
-                    cordovaPath = platformCordovaPath;
-                }
-            }
-        };
-        xhr.send(null);
-    }
-    catch(e){
-        cordovaPath = normalCordovaPath;
-    } // access denied!
-}
-
-if (!window._doNotWriteCordovaScript) {
-    document.write('<script type="text/javascript" charset="utf-8" src="' + cordovaPath + '"></script>');
-}
-
-function backHome() {
-	if (window.device && device.platform && (device.platform.toLowerCase() == 'android' || device.platform.toLowerCase() == 'amazon-fireos')) {
-            navigator.app.backHistory();
-	}
-	else {
-	    window.history.go(-1);
-	}
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/index.html
----------------------------------------------------------------------
diff --git a/test/index.html b/test/index.html
deleted file mode 100644
index 2c5447b..0000000
--- a/test/index.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE html>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-
-<html>
-  <head>
-    <meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,initial-scale=1.0" />
-    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
-    <title>Cordova Mobile Spec</title>
-	  <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title" charset="utf-8">
-	  <script type="text/javascript" charset="utf-8" src="cordova-incl.js"></script>
-	  <script type="text/javascript" charset="utf-8" src="main.js"></script>
-
-  </head>
-  <body onload="init();" id="stage" class="theme">
-    <h1>Apache Cordova Tests</h1>
-    <div id="info">
-        <h4>Platform: <span id="platform">  </span></h4>
-        <h4>Version: <span id="version"> </span></h4>
-        <h4>UUID: <span id="uuid">  </span></h4>
-        <h4>Name: <span id="name"> </span></h4>
-        <h4>Model: <span id="model"> </span></h4>
-        <h4>Width: <span id="width">  </span>,   Height: <span id="height"> 
-                   </span>, Color Depth: <span id="colorDepth"></span></h4>
-        <h4>User-Agent: <span id="user-agent"> </span></h4>
-     </div>
-    <a href="autotest/index.html" class="btn large">Automatic Test</a>
-    <a href="accelerometer/index.html" class="btn large">Accelerometer</a>
-    <a href="audio/index.html" class="btn large">Audio Play/Record</a>
-    <a href="battery/index.html" class="btn large">Battery</a>
-    <a href="camera/index.html" class="btn large">Camera</a>
-    <a href="compass/index.html" class="btn large">Compass</a>
-    <a href="contacts/index.html" class="btn large">Contacts</a>
-    <a href="events/index.html" class="btn large">Events</a>
-    <a href="location/index.html" class="btn large">Location</a>
-    <a href="lazyloadjs/index.html" class="btn large">Lazy Loading of cordova-incl.js</a>
-    <a href="misc/index.html" class="btn large">Misc Content</a>
-    <a href="network/index.html" class="btn large">Network</a>
-    <a href="notification/index.html" class="btn large">Notification</a>
-    <a href="splashscreen/index.html" class="btn large">Splashscreen</a>
-    <a href="sql/index.html" class="btn large">Web SQL</a>
-    <a href="storage/index.html" class="btn large">Local Storage</a>
-    <a href="benchmarks/index.html" class="btn large">Benchmarks</a>
-    <a href="inappbrowser/index.html" class="btn large">In App Browser</a>
-  </body>
-</html>

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/main.js
----------------------------------------------------------------------
diff --git a/test/main.js b/test/main.js
deleted file mode 100644
index 66c1bd3..0000000
--- a/test/main.js
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var deviceInfo = function() {
-    document.getElementById("platform").innerHTML = device.platform;
-    document.getElementById("version").innerHTML = device.version;
-    document.getElementById("uuid").innerHTML = device.uuid;
-    document.getElementById("name").innerHTML = device.name;
-    document.getElementById("model").innerHTML = device.model;
-    document.getElementById("width").innerHTML = screen.width;
-    document.getElementById("height").innerHTML = screen.height;
-    document.getElementById("colorDepth").innerHTML = screen.colorDepth;
-};
-
-var getLocation = function() {
-    var suc = function(p) {
-        alert(p.coords.latitude + " " + p.coords.longitude);
-    };
-    var locFail = function() {
-    };
-    navigator.geolocation.getCurrentPosition(suc, locFail);
-};
-
-var beep = function() {
-    navigator.notification.beep(2);
-};
-
-var vibrate = function() {
-    navigator.notification.vibrate(0);
-};
-
-function roundNumber(num) {
-    var dec = 3;
-    var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
-    return result;
-}
-
-var accelerationWatch = null;
-
-function updateAcceleration(a) {
-    document.getElementById('x').innerHTML = roundNumber(a.x);
-    document.getElementById('y').innerHTML = roundNumber(a.y);
-    document.getElementById('z').innerHTML = roundNumber(a.z);
-}
-
-var toggleAccel = function() {
-    if (accelerationWatch !== null) {
-        navigator.accelerometer.clearWatch(accelerationWatch);
-        updateAcceleration({
-            x : "",
-            y : "",
-            z : ""
-        });
-        accelerationWatch = null;
-    } else {
-        var options = {};
-        options.frequency = 1000;
-        accelerationWatch = navigator.accelerometer.watchAcceleration(
-                updateAcceleration, function(ex) {
-                    alert("accel fail (" + ex.name + ": " + ex.message + ")");
-                }, options);
-    }
-};
-
-var preventBehavior = function(e) {
-    e.preventDefault();
-};
-
-function dump_pic(data) {
-    var viewport = document.getElementById('viewport');
-    console.log(data);
-    viewport.style.display = "";
-    viewport.style.position = "absolute";
-    viewport.style.top = "10px";
-    viewport.style.left = "10px";
-    document.getElementById("test_img").src = "data:image/jpeg;base64," + data;
-}
-
-function fail(msg) {
-    alert(msg);
-}
-
-function show_pic() {
-    navigator.camera.getPicture(dump_pic, fail, {
-        quality : 50
-    });
-}
-
-function close() {
-    var viewport = document.getElementById('viewport');
-    viewport.style.position = "relative";
-    viewport.style.display = "none";
-}
-
-// This is just to do this.
-function readFile() {
-    navigator.file.read('/sdcard/cordova.txt', fail, fail);
-}
-
-function writeFile() {
-    navigator.file.write('foo.txt', "This is a test of writing to a file",
-            fail, fail);
-}
-
-function contacts_success(contacts) {
-    alert(contacts.length
-            + ' contacts returned.'
-            + (contacts[2] && contacts[2].name ? (' Third contact is ' + contacts[2].name.formatted)
-                    : ''));
-}
-
-function get_contacts() {
-    var obj = new ContactFindOptions();
-    obj.filter = "";
-    obj.multiple = true;
-    obj.limit = 5;
-    navigator.service.contacts.find(
-            [ "displayName", "name" ], contacts_success,
-            fail, obj);
-}
-
-var networkReachableCallback = function(reachability) {
-    // There is no consistency on the format of reachability
-    var networkState = reachability.code || reachability;
-
-    var currentState = {};
-    currentState[NetworkStatus.NOT_REACHABLE] = 'No network connection';
-    currentState[NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK] = 'Carrier data connection';
-    currentState[NetworkStatus.REACHABLE_VIA_WIFI_NETWORK] = 'WiFi connection';
-
-    confirm("Connection type:\n" + currentState[networkState]);
-};
-
-function check_network() {
-    navigator.network.isReachable("www.mobiledevelopersolutions.com",
-            networkReachableCallback, {});
-}
-
-function init() {
-    // the next line makes it impossible to see Contacts on the HTC Evo since it
-    // doesn't have a scroll button
-    // document.addEventListener("touchmove", preventBehavior, false);
-    document.addEventListener("deviceready", deviceInfo, true);
-    document.getElementById("user-agent").textContent = navigator.userAgent;
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/master.css
----------------------------------------------------------------------
diff --git a/test/master.css b/test/master.css
deleted file mode 100644
index e93c937..0000000
--- a/test/master.css
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-  body {
-    background:#222 none repeat scroll 0 0;
-    color:#666;
-    font-family:Helvetica;
-    font-size:72%;
-    line-height:1.5em;
-    margin:0;
-    border-top:1px solid #393939;
-  }
-
-  #info{
-    background:#ffa;
-    border: 1px solid #ffd324;
-    -webkit-border-radius: 5px;
-    border-radius: 5px;
-    clear:both;
-    margin:15px 6px 0;
-    min-width:295px;
-    max-width:97%;
-    padding:4px 0px 2px 10px;
-    word-wrap:break-word;
-    margin-bottom:10px;
-    display:inline-block;
-    min-height: 160px;
-    max-height: 300px;
-    overflow: auto;
-    -webkit-overflow-scrolling: touch;
-  }
-  
-  #info > h4{
-    font-size:.95em;
-    margin:5px 0;
-  }
- 	
-  #stage.theme{
-    padding-top:3px;
-  }
-
-  /* Definition List */
-  #stage.theme > dl{
-  	padding-top:10px;
-  	clear:both;
-  	margin:0;
-  	list-style-type:none;
-  	padding-left:10px;
-  	overflow:auto;
-  }
-
-  #stage.theme > dl > dt{
-  	font-weight:bold;
-  	float:left;
-  	margin-left:5px;
-  }
-
-  #stage.theme > dl > dd{
-  	width:45px;
-  	float:left;
-  	color:#a87;
-  	font-weight:bold;
-  }
-
-  /* Content Styling */
-  #stage.theme > h1, #stage.theme > h2, #stage.theme > p{
-    margin:1em 0 .5em 13px;
-  }
-
-  #stage.theme > h1{
-    color:#eee;
-    font-size:1.6em;
-    text-align:center;
-    margin:0;
-    margin-top:15px;
-    padding:0;
-  }
-
-  #stage.theme > h2{
-  	clear:both;
-    margin:0;
-    padding:3px;
-    font-size:1em;
-    text-align:center;
-  }
-
-  /* Stage Buttons */
-  #stage.theme .btn{
-  	border: 1px solid #555;
-  	-webkit-border-radius: 5px;
-  	border-radius: 5px;
-  	text-align:center;
-  	display:inline-block;
-  	background:#444;
-  	width:150px;
-  	color:#9ab;
-  	font-size:1.1em;
-  	text-decoration:none;
-  	padding:1.2em 0;
-  	margin:3px 0px 3px 5px;
-  }
-  
-  #stage.theme .large{
-  	width:308px;
-  	padding:1.2em 0;
-  }
-  
-  #stage.theme .wide{
-    width:100%;
-    padding:1.2em 0;
-  }
-  
-  #stage.theme .backBtn{
-   border: 1px solid #555;
-   -webkit-border-radius: 5px;
-   border-radius: 5px;
-   text-align:center;
-   display:block;
-   float:right;
-   background:#666;
-   width:75px;
-   color:#9ab;
-   font-size:1.1em;
-   text-decoration:none;
-   padding:1.2em 0;
-   margin:3px 5px 3px 5px;
-  }
-  
-  #stage.theme .input{
-   border: 1px solid #555;
-   -webkit-border-radius: 5px;
-   border-radius: 5px;
-   text-align:center;
-   display:block;
-   float:light;
-   background:#888;
-   color:#9cd;
-   font-size:1.1em;
-   text-decoration:none;
-   padding:1.2em 0;
-   margin:3px 0px 3px 5px;    
- }
-  
-  #stage.theme .numeric{
-   width:100%;
-  }


[28/50] [abbrv] git commit: CB-6114 Updated version and RELEASENOTES.md for release 0.2.9

Posted by mm...@apache.org.
CB-6114 Updated version and RELEASENOTES.md for release 0.2.9


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/c540c024
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/c540c024
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/c540c024

Branch: refs/heads/cdvtest
Commit: c540c0246b14ea986096dea6239b8bfb66b6a802
Parents: 4cad02e
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Feb 27 11:56:29 2014 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Feb 27 11:56:29 2014 -0500

----------------------------------------------------------------------
 RELEASENOTES.md | 4 ++++
 plugin.xml      | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/c540c024/RELEASENOTES.md
----------------------------------------------------------------------
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 4950f6c..c7e7464 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -72,3 +72,7 @@
 ### 0.2.8 (Feb 05, 2014)
 * [CB-3208] FFOS docs updated
 * CB-4590 - chooseContact in CDVContacts crashes app
+
+### 0.2.9 (Feb 26, 2014)
+* CB-6086 Fix typo in ffos part of plugin.xml: Camera -> Contacts
+* CB-5994 Switch Contact ID lookup to use Raw contact id.

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/c540c024/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index 86be535..bf2aeb8 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -4,7 +4,7 @@
     xmlns:rim="http://www.blackberry.com/ns/widgets"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="org.apache.cordova.contacts"
-    version="0.2.9-dev">
+    version="0.2.9">
 
     <name>Contacts</name>
     <description>Cordova Contacts Plugin</description>


[31/50] [abbrv] git commit: Add NOTICE file

Posted by mm...@apache.org.
Add NOTICE file


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/5738562d
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/5738562d
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/5738562d

Branch: refs/heads/cdvtest
Commit: 5738562d7e410fae2f1b0c94b0771cfe84820b40
Parents: 427d1d6
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Feb 27 15:36:31 2014 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Feb 27 15:36:31 2014 -0500

----------------------------------------------------------------------
 NOTICE | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/5738562d/NOTICE
----------------------------------------------------------------------
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..8ec56a5
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,5 @@
+Apache Cordova
+Copyright 2012 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).


[09/50] [abbrv] git commit: addresses added to the Proxy

Posted by mm...@apache.org.
addresses added to the Proxy


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/0beadd24
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/0beadd24
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/0beadd24

Branch: refs/heads/cdvtest
Commit: 0beadd247ed7f5bb2fc084888eee566f86335c94
Parents: 24eed63
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Thu Dec 19 14:59:26 2013 +0100
Committer: Piotr Zalewa <pi...@zalewa.info>
Committed: Thu Dec 19 14:59:26 2013 +0100

----------------------------------------------------------------------
 src/firefoxos/ContactsProxy.js | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/0beadd24/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --git a/src/firefoxos/ContactsProxy.js b/src/firefoxos/ContactsProxy.js
index ecdd0fb..62dc6dd 100644
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@ -63,7 +63,15 @@ mozContact.prototype.updateFromCordova = function(contact) {
         for (var i=0; i < addresses.length; i++) {
             var addr = {};
             for (var key in addresses[i]) {
-                addr[key] = addresses[i][key];    
+                if (key == 'formatted' || key == 'id') {
+                    continue;
+                } else if (key == 'type') {
+                    addr[key] = [addresses[i][key]];
+                } else if (key == 'country') {
+                    addr['countryName'] = addresses[i][key];
+                } else {
+                    addr[key] = addresses[i][key];    
+                }
             } 
             arr.push(addr);
         }                                 
@@ -155,6 +163,26 @@ Contact.prototype.updateFromMozilla = function(moz) {
         return contactFields;
     }
 
+    function exportAddresses(addresses) {
+        // TODO: check moz address format
+        var arr = [];
+        
+        for (var i=0; i < addresses.length; i++) {
+            var addr = {};
+            for (var key in addresses[i]) {
+                if (key == 'countryName') {
+                    addr['country'] = addresses[i][key];
+                } else if (key == 'type') {
+                    addr[key] = addresses[i][key].join(' ');
+                } else {
+                    addr[key] = addresses[i][key];    
+                }
+            } 
+            arr.push(addr);
+        }
+        return arr;
+    } 
+
 
     if (moz.id) {
         this.id = moz.id;
@@ -186,7 +214,13 @@ Contact.prototype.updateFromMozilla = function(moz) {
         this.emails = exportContactField(moz.email);
     }
     // categories
+
     // addresses
+    if (moz.adr) {
+        this.addresses = exportAddresses(moz.adr);
+    }
+
+    // phoneNumbers
     if (moz.tel) {
         this.phoneNumbers = exportContactField(moz.tel);
     }


[14/50] [abbrv] git commit: added readOnly formatted field

Posted by mm...@apache.org.
added readOnly formatted field


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/4ca5d1b1
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/4ca5d1b1
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/4ca5d1b1

Branch: refs/heads/cdvtest
Commit: 4ca5d1b12d7b5a48e25ff89d76896558182439d8
Parents: f7bc688
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Tue Jan 7 09:45:28 2014 +0100
Committer: Piotr Zalewa <pi...@zalewa.info>
Committed: Tue Jan 7 09:45:28 2014 +0100

----------------------------------------------------------------------
 src/firefoxos/ContactsProxy.js | 35 ++++++++++++++++++++++++++---------
 1 file changed, 26 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/4ca5d1b1/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --git a/src/firefoxos/ContactsProxy.js b/src/firefoxos/ContactsProxy.js
index c24ad78..354a746 100644
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@ -142,15 +142,6 @@ mozContact.prototype.updateFromCordova = function(contact) {
     if (contact.note) {
         this.note = [contact.note];
     }
-    /*  Find out how to translate these parameters
-        // photo: Blob
-        // url: Array with metadata (?)
-        // impp: exportIM(contact.ims), TODO: find the moz impp definition
-        // anniversary
-        // sex
-        // genderIdentity
-        // key
-    */
 }
 
 
@@ -207,6 +198,20 @@ Contact.prototype.updateFromMozilla = function(moz) {
         return organizations;
     }
 
+    function createFormatted(cordova) {
+        var f = '';
+        if (cordova.name.givenName) {
+            f = cordova.name.givenName;
+        }
+        if (cordova.name.familyName) {
+            if (f) {
+                f += ' ';
+            }
+            f += cordova.name.familyName;
+        }
+        return f;
+    }
+
 
     if (moz.id) {
         this.id = moz.id;
@@ -260,6 +265,18 @@ Contact.prototype.updateFromMozilla = function(moz) {
         // XXX: organizations array is created from org and jobTitle
         this.organizations = createOrganizations(moz.org, moz.jobTitle);
     }
+    // construct a read-only formatted value
+    this.name.formatted = createFormatted(this);
+
+    /*  Find out how to translate these parameters
+        // photo: Blob
+        // url: Array with metadata (?)
+        // impp: exportIM(contact.ims), TODO: find the moz impp definition
+        // anniversary
+        // sex
+        // genderIdentity
+        // key
+    */
 }
 
 


[05/50] [abbrv] git commit: search if contact does exist before remove

Posted by mm...@apache.org.
search if contact does exist before remove


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/b52fafd2
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/b52fafd2
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/b52fafd2

Branch: refs/heads/cdvtest
Commit: b52fafd2465a1b175fe00b4f3caa2ffc88898791
Parents: 510955f
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Wed Dec 18 09:45:31 2013 +0100
Committer: Piotr Zalewa <pi...@zalewa.info>
Committed: Wed Dec 18 09:45:31 2013 +0100

----------------------------------------------------------------------
 src/firefoxos/ContactsProxy.js | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/b52fafd2/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --git a/src/firefoxos/ContactsProxy.js b/src/firefoxos/ContactsProxy.js
index 13a3486..4d99428 100644
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@ -252,13 +252,24 @@ function remove(successCB, errorCB, ids) {
     for (var i=0; i < ids.length; i++){
         // throw an error if no id provided
         if (!_hasId(ids[i])) {
-          errorCB(0);
+            console.error('FFOS: Attempt to remove unsaved contact');
+            errorCB(0);
+            return;
         }
-        var moz = new mozContact();
-        moz.id = ids[i];
-        var request = navigator.mozContacts.remove(moz);
-        request.onsuccess = successCB;
-        request.onerror = errorCB;
+        var search = navigator.mozContacts.find({
+            filterBy: ['id'], filterValue: ids[i], filterOp: 'equals'});
+        search.onsuccess = function() {
+            if (search.result.length === 0) {
+                console.error('FFOS: Attempt to remove a non existing contact');
+                errorCB(0);
+                return;
+            }
+            var moz = search.result[0];
+            var request = navigator.mozContacts.remove(moz);
+            request.onsuccess = successCB;
+            request.onerror = errorCB;
+        };
+        search.onerror = errorCB;
     }
 }
 


[21/50] [abbrv] git commit: [CB-3208] FFOS docs updated

Posted by mm...@apache.org.
[CB-3208] FFOS docs updated


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/c561ba51
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/c561ba51
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/c561ba51

Branch: refs/heads/cdvtest
Commit: c561ba515ffc07cfc627d01e22286010b27d50a1
Parents: 8e89957
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Sat Jan 25 10:03:19 2014 +0100
Committer: Herm Wong <he...@gmail.com>
Committed: Mon Jan 27 09:50:49 2014 -0800

----------------------------------------------------------------------
 doc/index.md | 38 ++++++++++++++++++++++++++++++++++++--
 1 file changed, 36 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/c561ba51/doc/index.md
----------------------------------------------------------------------
diff --git a/doc/index.md b/doc/index.md
index 7d8bf36..4d2f944 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -44,10 +44,19 @@ contact data.  For more information, please see the Privacy Guide.
 
 ### Firefox OS Quirks
 
-Edit manifest.webapp and add permissions field as described in [Manifest Docs](https://developer.mozilla.org/en-US/Apps/Developing/Manifest#permissions).
+Create __www/manifest.webapp__ as described in 
+[Manifest Docs](https://developer.mozilla.org/en-US/Apps/Developing/Manifest).
+Add relevant permisions.
 There is also a need to change the webapp type to "privileged"  - [Manifest Docs](https://developer.mozilla.org/en-US/Apps/Developing/Manifest#type).
-All privileged apps enforce [Content Security Policy](https://developer.mozilla.org/en-US/Apps/CSP) which forbids inline script. Initialize your application in another way.
+__WARNING__: All privileged apps enforce [Content Security Policy](https://developer.mozilla.org/en-US/Apps/CSP) which forbids inline script. Initialize your application in another way.
 
+	"type": "privileged",
+	"permissions": {
+		"contacts": {
+			"access": "readwrite",
+			"description": "Describe why there is a need for such permission"
+		}
+	}
 
 ## navigator.contacts
 
@@ -77,6 +86,7 @@ database, for which you need to invoke the `Contact.save` method.
 
 - Android
 - BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 7 and 8
 
@@ -122,6 +132,7 @@ _any_ of the specified fields, the contact is returned.
 
 - Android
 - BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 7 and 8
 - Windows 8
@@ -199,6 +210,7 @@ for details.
 - Amazon Fire OS
 - Android
 - BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 7 and 8
 - Windows 8
@@ -277,6 +289,14 @@ for details.
 
 - __urls__:  Partially supported. The first URL is stored in BlackBerry __webpage__ field.
 
+### FirefoxOS Quirks
+
+- __categories__: Partially supported. Fields __pref__ and __type__ are returning `null`
+
+- __ims__: Not supported
+
+- __photos__: Not supported
+
 ### iOS Quirks
 
 - __displayName__: Not supported on iOS, returning `null` unless there is no `ContactName` specified, in which case it returns the composite name, __nickname__ or `""`, respectively.
@@ -340,6 +360,7 @@ a `ContactAddress[]` array.
 - Amazon Fire OS
 - Android
 - BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 7 and 8
 - Windows 8
@@ -453,6 +474,7 @@ string.
 - Amazon Fire OS
 - Android
 - BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 7 and 8
 - Windows 8
@@ -512,6 +534,7 @@ Contains different kinds of information about a `Contact` object's name.
 - Amazon Fire OS
 - Android 2.X
 - BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 7 and 8
 - Windows 8
@@ -584,6 +607,7 @@ properties.  A `Contact` object stores one or more
 
 - Android
 - BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 7 and 8
 - Windows 8
@@ -627,6 +651,16 @@ properties.  A `Contact` object stores one or more
 
 - __title__: Partially supported.  The first organization title is stored in the BlackBerry __jobTitle__ field.
 
+### Firefox OS Quirks
+
+- __pref__: Not supported
+
+- __type__: Not supported
+
+- __department__: Not supported
+
+- Fields __name__ and __title__ stored in __org__ and __jobTitle__.
+
 ### iOS Quirks
 
 - __pref__: Not supported on iOS devices, returning `false`.


[19/50] [abbrv] git commit: Delete stale test/ directory

Posted by mm...@apache.org.
Delete stale test/ directory


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/975913cd
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/975913cd
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/975913cd

Branch: refs/heads/cdvtest
Commit: 975913cd73612ca306ab18c2ff8ab27c7d205a0c
Parents: 5b25f58
Author: Andrew Grieve <ag...@chromium.org>
Authored: Wed Jan 8 21:11:09 2014 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Wed Jan 8 21:11:09 2014 -0500

----------------------------------------------------------------------
 test/autotest/html/HtmlReporter.js        |  101 -
 test/autotest/html/HtmlReporterHelpers.js |   60 -
 test/autotest/html/ReporterView.js        |  164 --
 test/autotest/html/SpecView.js            |   79 -
 test/autotest/html/SuiteView.js           |   22 -
 test/autotest/html/TrivialReporter.js     |  192 --
 test/autotest/index.html                  |   59 -
 test/autotest/jasmine.css                 |   81 -
 test/autotest/jasmine.js                  | 2530 ------------------------
 test/autotest/pages/.DS_Store             |  Bin 6148 -> 0 bytes
 test/autotest/pages/contacts.html         |   71 -
 test/autotest/test-runner.js              |   62 -
 test/autotest/tests/.DS_Store             |  Bin 6148 -> 0 bytes
 test/autotest/tests/contacts.tests.js     |  538 -----
 test/contacts/index.html                  |  134 --
 test/cordova-incl.js                      |   72 -
 test/index.html                           |   65 -
 test/main.js                              |  163 --
 test/master.css                           |  164 --
 19 files changed, 4557 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/html/HtmlReporter.js
----------------------------------------------------------------------
diff --git a/test/autotest/html/HtmlReporter.js b/test/autotest/html/HtmlReporter.js
deleted file mode 100644
index 7d9d924..0000000
--- a/test/autotest/html/HtmlReporter.js
+++ /dev/null
@@ -1,101 +0,0 @@
-jasmine.HtmlReporter = function(_doc) {
-  var self = this;
-  var doc = _doc || window.document;
-
-  var reporterView;
-
-  var dom = {};
-
-  // Jasmine Reporter Public Interface
-  self.logRunningSpecs = false;
-
-  self.reportRunnerStarting = function(runner) {
-    var specs = runner.specs() || [];
-
-    if (specs.length == 0) {
-      return;
-    }
-
-    createReporterDom(runner.env.versionString());
-    doc.body.appendChild(dom.reporter);
-
-    reporterView = new jasmine.HtmlReporter.ReporterView(dom);
-    reporterView.addSpecs(specs, self.specFilter);
-  };
-
-  self.reportRunnerResults = function(runner) {
-    reporterView && reporterView.complete();
-  };
-
-  self.reportSuiteResults = function(suite) {
-    reporterView.suiteComplete(suite);
-  };
-
-  self.reportSpecStarting = function(spec) {
-    if (self.logRunningSpecs) {
-      self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
-    }
-  };
-
-  self.reportSpecResults = function(spec) {
-    reporterView.specComplete(spec);
-  };
-
-  self.log = function() {
-    var console = jasmine.getGlobal().console;
-    if (console && console.log) {
-      if (console.log.apply) {
-        console.log.apply(console, arguments);
-      } else {
-        console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
-      }
-    }
-  };
-
-  self.specFilter = function(spec) {
-    if (!focusedSpecName()) {
-      return true;
-    }
-
-    return spec.getFullName().indexOf(focusedSpecName()) === 0;
-  };
-
-  return self;
-
-  function focusedSpecName() {
-    var specName;
-
-    (function memoizeFocusedSpec() {
-      if (specName) {
-        return;
-      }
-
-      var paramMap = [];
-      var params = doc.location.search.substring(1).split('&');
-
-      for (var i = 0; i < params.length; i++) {
-        var p = params[i].split('=');
-        paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
-      }
-
-      specName = paramMap.spec;
-    })();
-
-    return specName;
-  }
-
-  function createReporterDom(version) {
-    dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' },
-      dom.banner = self.createDom('div', { className: 'banner' },
-        self.createDom('span', { className: 'title' }, "Jasmine "),
-        self.createDom('span', { className: 'version' }, version)),
-
-      dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}),
-      dom.alert = self.createDom('div', {className: 'alert'}),
-      dom.results = self.createDom('div', {className: 'results'},
-        dom.summary = self.createDom('div', { className: 'summary' }),
-        dom.details = self.createDom('div', { id: 'details' }))
-    );
-  }
-};
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter);

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/html/HtmlReporterHelpers.js
----------------------------------------------------------------------
diff --git a/test/autotest/html/HtmlReporterHelpers.js b/test/autotest/html/HtmlReporterHelpers.js
deleted file mode 100644
index 745e1e0..0000000
--- a/test/autotest/html/HtmlReporterHelpers.js
+++ /dev/null
@@ -1,60 +0,0 @@
-jasmine.HtmlReporterHelpers = {};
-
-jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) {
-  var el = document.createElement(type);
-
-  for (var i = 2; i < arguments.length; i++) {
-    var child = arguments[i];
-
-    if (typeof child === 'string') {
-      el.appendChild(document.createTextNode(child));
-    } else {
-      if (child) {
-        el.appendChild(child);
-      }
-    }
-  }
-
-  for (var attr in attrs) {
-    if (attr == "className") {
-      el[attr] = attrs[attr];
-    } else {
-      el.setAttribute(attr, attrs[attr]);
-    }
-  }
-
-  return el;
-};
-
-jasmine.HtmlReporterHelpers.getSpecStatus = function(child) {
-  var results = child.results();
-  var status = results.passed() ? 'passed' : 'failed';
-  if (results.skipped) {
-    status = 'skipped';
-  }
-
-  return status;
-};
-
-jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) {
-  var parentDiv = this.dom.summary;
-  var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite';
-  var parent = child[parentSuite];
-
-  if (parent) {
-    if (typeof this.views.suites[parent.id] == 'undefined') {
-      this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views);
-    }
-    parentDiv = this.views.suites[parent.id].element;
-  }
-
-  parentDiv.appendChild(childElement);
-};
-
-
-jasmine.HtmlReporterHelpers.addHelpers = function(ctor) {
-  for(var fn in jasmine.HtmlReporterHelpers) {
-    ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn];
-  }
-};
-

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/html/ReporterView.js
----------------------------------------------------------------------
diff --git a/test/autotest/html/ReporterView.js b/test/autotest/html/ReporterView.js
deleted file mode 100644
index 6a6d005..0000000
--- a/test/autotest/html/ReporterView.js
+++ /dev/null
@@ -1,164 +0,0 @@
-jasmine.HtmlReporter.ReporterView = function(dom) {
-  this.startedAt = new Date();
-  this.runningSpecCount = 0;
-  this.completeSpecCount = 0;
-  this.passedCount = 0;
-  this.failedCount = 0;
-  this.skippedCount = 0;
-
-  this.createResultsMenu = function() {
-    this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'},
-      this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'),
-      ' | ',
-      this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing'));
-
-    this.summaryMenuItem.onclick = function() {
-      dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, '');
-    };
-
-    this.detailsMenuItem.onclick = function() {
-      showDetails();
-    };
-  };
-
-  this.addSpecs = function(specs, specFilter) {
-    this.totalSpecCount = specs.length;
-
-    this.views = {
-      specs: {},
-      suites: {}
-    };
-
-    for (var i = 0; i < specs.length; i++) {
-      var spec = specs[i];
-      this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views);
-      if (specFilter(spec)) {
-        this.runningSpecCount++;
-      }
-    }
-  };
-
-  this.specComplete = function(spec) {
-    this.completeSpecCount++;
-
-    if (isUndefined(this.views.specs[spec.id])) {
-      this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom);
-    }
-
-    var specView = this.views.specs[spec.id];
-
-    switch (specView.status()) {
-      case 'passed':
-        this.passedCount++;
-        break;
-
-      case 'failed':
-        this.failedCount++;
-        break;
-
-      case 'skipped':
-        this.skippedCount++;
-        break;
-    }
-
-    specView.refresh();
-    this.refresh();
-  };
-
-  this.suiteComplete = function(suite) {
-    var suiteView = this.views.suites[suite.id];
-    if (isUndefined(suiteView)) {
-      return;
-    }
-    suiteView.refresh();
-  };
-
-  this.refresh = function() {
-
-    if (isUndefined(this.resultsMenu)) {
-      this.createResultsMenu();
-    }
-
-    // currently running UI
-    if (isUndefined(this.runningAlert)) {
-      this.runningAlert = this.createDom('a', {href: "?", className: "runningAlert bar"});
-      dom.alert.appendChild(this.runningAlert);
-    }
-    this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount);
-
-    // skipped specs UI
-    if (isUndefined(this.skippedAlert)) {
-      this.skippedAlert = this.createDom('a', {href: "?", className: "skippedAlert bar"});
-    }
-
-    this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
-
-    if (this.skippedCount === 1 && isDefined(dom.alert)) {
-      dom.alert.appendChild(this.skippedAlert);
-    }
-
-    // passing specs UI
-    if (isUndefined(this.passedAlert)) {
-      this.passedAlert = this.createDom('span', {href: "?", className: "passingAlert bar"});
-    }
-    this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount);
-
-    // failing specs UI
-    if (isUndefined(this.failedAlert)) {
-      this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"});
-    }
-    this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount);
-
-    if (this.failedCount === 1 && isDefined(dom.alert)) {
-      dom.alert.appendChild(this.failedAlert);
-      dom.alert.appendChild(this.resultsMenu);
-    }
-
-    // summary info
-    this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount);
-    this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing";
-  };
-
-  this.complete = function() {
-    dom.alert.removeChild(this.runningAlert);
-
-    this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
-
-    if (this.failedCount === 0) {
-      dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount)));
-    } else {
-      showDetails();
-    }
-
-    dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"));
-  };
-
-  return this;
-
-  function showDetails() {
-    if (dom.reporter.className.search(/showDetails/) === -1) {
-      dom.reporter.className += " showDetails";
-    }
-  }
-
-  function isUndefined(obj) {
-    return typeof obj === 'undefined';
-  }
-
-  function isDefined(obj) {
-    return !isUndefined(obj);
-  }
-
-  function specPluralizedFor(count) {
-    var str = count + " spec";
-    if (count > 1) {
-      str += "s"
-    }
-    return str;
-  }
-
-};
-
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView);
-
-

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/html/SpecView.js
----------------------------------------------------------------------
diff --git a/test/autotest/html/SpecView.js b/test/autotest/html/SpecView.js
deleted file mode 100644
index e8a3c23..0000000
--- a/test/autotest/html/SpecView.js
+++ /dev/null
@@ -1,79 +0,0 @@
-jasmine.HtmlReporter.SpecView = function(spec, dom, views) {
-  this.spec = spec;
-  this.dom = dom;
-  this.views = views;
-
-  this.symbol = this.createDom('li', { className: 'pending' });
-  this.dom.symbolSummary.appendChild(this.symbol);
-
-  this.summary = this.createDom('div', { className: 'specSummary' },
-      this.createDom('a', {
-        className: 'description',
-        href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
-        title: this.spec.getFullName()
-      }, this.spec.description)
-  );
-
-  this.detail = this.createDom('div', { className: 'specDetail' },
-      this.createDom('a', {
-        className: 'description',
-        href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
-        title: this.spec.getFullName()
-      }, this.spec.getFullName())
-  );
-};
-
-jasmine.HtmlReporter.SpecView.prototype.status = function() {
-  return this.getSpecStatus(this.spec);
-};
-
-jasmine.HtmlReporter.SpecView.prototype.refresh = function() {
-  this.symbol.className = this.status();
-
-  switch (this.status()) {
-    case 'skipped':
-      break;
-
-    case 'passed':
-      this.appendSummaryToSuiteDiv();
-      break;
-
-    case 'failed':
-      this.appendSummaryToSuiteDiv();
-      this.appendFailureDetail();
-      break;
-  }
-};
-
-jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function() {
-  this.summary.className += ' ' + this.status();
-  this.appendToSummary(this.spec, this.summary);
-};
-
-jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {
-  this.detail.className += ' ' + this.status();
-
-  var resultItems = this.spec.results().getItems();
-  var messagesDiv = this.createDom('div', { className: 'messages' });
-
-  for (var i = 0; i < resultItems.length; i++) {
-    var result = resultItems[i];
-
-    if (result.type == 'log') {
-      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
-    } else if (result.type == 'expect' && result.passed && !result.passed()) {
-      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
-
-      if (result.trace.stack) {
-        messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
-      }
-    }
-  }
-
-  if (messagesDiv.childNodes.length > 0) {
-    this.detail.appendChild(messagesDiv);
-    this.dom.details.appendChild(this.detail);
-  }
-};
-
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/html/SuiteView.js
----------------------------------------------------------------------
diff --git a/test/autotest/html/SuiteView.js b/test/autotest/html/SuiteView.js
deleted file mode 100644
index 19a1efa..0000000
--- a/test/autotest/html/SuiteView.js
+++ /dev/null
@@ -1,22 +0,0 @@
-jasmine.HtmlReporter.SuiteView = function(suite, dom, views) {
-  this.suite = suite;
-  this.dom = dom;
-  this.views = views;
-
-  this.element = this.createDom('div', { className: 'suite' },
-      this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(this.suite.getFullName()) }, this.suite.description)
-  );
-
-  this.appendToSummary(this.suite, this.element);
-};
-
-jasmine.HtmlReporter.SuiteView.prototype.status = function() {
-  return this.getSpecStatus(this.suite);
-};
-
-jasmine.HtmlReporter.SuiteView.prototype.refresh = function() {
-  this.element.className += " " + this.status();
-};
-
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView);
-

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/html/TrivialReporter.js
----------------------------------------------------------------------
diff --git a/test/autotest/html/TrivialReporter.js b/test/autotest/html/TrivialReporter.js
deleted file mode 100644
index 167ac50..0000000
--- a/test/autotest/html/TrivialReporter.js
+++ /dev/null
@@ -1,192 +0,0 @@
-/* @deprecated Use jasmine.HtmlReporter instead
- */
-jasmine.TrivialReporter = function(doc) {
-  this.document = doc || document;
-  this.suiteDivs = {};
-  this.logRunningSpecs = false;
-};
-
-jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
-  var el = document.createElement(type);
-
-  for (var i = 2; i < arguments.length; i++) {
-    var child = arguments[i];
-
-    if (typeof child === 'string') {
-      el.appendChild(document.createTextNode(child));
-    } else {
-      if (child) { el.appendChild(child); }
-    }
-  }
-
-  for (var attr in attrs) {
-    if (attr == "className") {
-      el[attr] = attrs[attr];
-    } else {
-      el.setAttribute(attr, attrs[attr]);
-    }
-  }
-
-  return el;
-};
-
-jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
-  var showPassed, showSkipped;
-
-  this.outerDiv = this.createDom('div', { id: 'TrivialReporter', className: 'jasmine_reporter' },
-      this.createDom('div', { className: 'banner' },
-        this.createDom('div', { className: 'logo' },
-            this.createDom('span', { className: 'title' }, "Jasmine"),
-            this.createDom('span', { className: 'version' }, runner.env.versionString())),
-        this.createDom('div', { className: 'options' },
-            "Show ",
-            showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),
-            this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),
-            showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),
-            this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")
-            )
-          ),
-
-      this.runnerDiv = this.createDom('div', { className: 'runner running' },
-          this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
-          this.runnerMessageSpan = this.createDom('span', {}, "Running..."),
-          this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))
-      );
-
-  this.document.body.appendChild(this.outerDiv);
-
-  var suites = runner.suites();
-  for (var i = 0; i < suites.length; i++) {
-    var suite = suites[i];
-    var suiteDiv = this.createDom('div', { className: 'suite' },
-        this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
-        this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
-    this.suiteDivs[suite.id] = suiteDiv;
-    var parentDiv = this.outerDiv;
-    if (suite.parentSuite) {
-      parentDiv = this.suiteDivs[suite.parentSuite.id];
-    }
-    parentDiv.appendChild(suiteDiv);
-  }
-
-  this.startedAt = new Date();
-
-  var self = this;
-  showPassed.onclick = function(evt) {
-    if (showPassed.checked) {
-      self.outerDiv.className += ' show-passed';
-    } else {
-      self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
-    }
-  };
-
-  showSkipped.onclick = function(evt) {
-    if (showSkipped.checked) {
-      self.outerDiv.className += ' show-skipped';
-    } else {
-      self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
-    }
-  };
-};
-
-jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
-  var results = runner.results();
-  var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
-  this.runnerDiv.setAttribute("class", className);
-  //do it twice for IE
-  this.runnerDiv.setAttribute("className", className);
-  var specs = runner.specs();
-  var specCount = 0;
-  for (var i = 0; i < specs.length; i++) {
-    if (this.specFilter(specs[i])) {
-      specCount++;
-    }
-  }
-  var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
-  message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
-  this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
-
-  this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
-};
-
-jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
-  var results = suite.results();
-  var status = results.passed() ? 'passed' : 'failed';
-  if (results.totalCount === 0) { // todo: change this to check results.skipped
-    status = 'skipped';
-  }
-  this.suiteDivs[suite.id].className += " " + status;
-};
-
-jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
-  if (this.logRunningSpecs) {
-    this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
-  }
-};
-
-jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
-  var results = spec.results();
-  var status = results.passed() ? 'passed' : 'failed';
-  if (results.skipped) {
-    status = 'skipped';
-  }
-  var specDiv = this.createDom('div', { className: 'spec '  + status },
-      this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
-      this.createDom('a', {
-        className: 'description',
-        href: '?spec=' + encodeURIComponent(spec.getFullName()),
-        title: spec.getFullName()
-      }, spec.description));
-
-
-  var resultItems = results.getItems();
-  var messagesDiv = this.createDom('div', { className: 'messages' });
-  for (var i = 0; i < resultItems.length; i++) {
-    var result = resultItems[i];
-
-    if (result.type == 'log') {
-      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
-    } else if (result.type == 'expect' && result.passed && !result.passed()) {
-      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
-
-      if (result.trace.stack) {
-        messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
-      }
-    }
-  }
-
-  if (messagesDiv.childNodes.length > 0) {
-    specDiv.appendChild(messagesDiv);
-  }
-
-  this.suiteDivs[spec.suite.id].appendChild(specDiv);
-};
-
-jasmine.TrivialReporter.prototype.log = function() {
-  var console = jasmine.getGlobal().console;
-  if (console && console.log) {
-    if (console.log.apply) {
-      console.log.apply(console, arguments);
-    } else {
-      console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
-    }
-  }
-};
-
-jasmine.TrivialReporter.prototype.getLocation = function() {
-  return this.document.location;
-};
-
-jasmine.TrivialReporter.prototype.specFilter = function(spec) {
-  var paramMap = {};
-  var params = this.getLocation().search.substring(1).split('&');
-  for (var i = 0; i < params.length; i++) {
-    var p = params[i].split('=');
-    paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
-  }
-
-  if (!paramMap.spec) {
-    return true;
-  }
-  return spec.getFullName().indexOf(paramMap.spec) === 0;
-};

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/index.html
----------------------------------------------------------------------
diff --git a/test/autotest/index.html b/test/autotest/index.html
deleted file mode 100644
index 6ebccbd..0000000
--- a/test/autotest/index.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
-    <meta name="viewport" content="width=device-width, height=device-height, user-scalable=yes, initial-scale=1.0;" />
-
-    <title>Cordova API Specs</title>
-
-    <link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title" charset="utf-8">
-    <script type="text/javascript" src="../cordova-incl.js"></script>
-  </head>
-  <body id="stage" class="theme">
-    <h1>Cordova API Specs</h1>
-
-    <a href="pages/all.html" class="btn large" style="width:100%;">Run All Tests</a>
-    <a href="pages/accelerometer.html" class="btn large" style="width:100%;">Run Accelerometer Tests</a>
-    <a href="pages/battery.html" class="btn large" style="width:100%;">Run Battery Tests</a>
-    <a href="pages/camera.html" class="btn large" style="width:100%;">Run Camera Tests</a>
-    <a href="pages/capture.html" class="btn large" style="width:100%;">Run Capture Tests</a>
-    <a href="pages/compass.html" class="btn large" style="width:100%;">Run Compass Tests</a>
-    <a href="pages/contacts.html" class="btn large" style="width:100%;">Run Contacts Tests</a>
-    <a href="pages/datauri.html" class="btn large" style="width:100%;">Run Data URI Tests</a>
-    <a href="pages/device.html" class="btn large" style="width:100%;">Run Device Tests</a>
-    <a href="pages/file.html" class="btn large" style="width:100%;">Run File Tests</a>
-    <a href="pages/filetransfer.html" class="btn large" style="width:100%;">Run FileTransfer Tests</a>
-    <a href="pages/geolocation.html" class="btn large" style="width:100%;">Run Geolocation Tests</a>
-    <a href="pages/globalization.html" class="btn large" style="width:100%;">Run Globalization Tests</a>
-    <a href="pages/media.html" class="btn large" style="width:100%;">Run Media Tests</a>
-    <a href="pages/network.html" class="btn large" style="width:100%;">Run Network Tests</a>
-    <a href="pages/notification.html" class="btn large" style="width:100%;">Run Notification Tests</a>
-    <a href="pages/platform.html" class="btn large" style="width:100%;">Run Platform Tests</a>
-    <a href="pages/storage.html" class="btn large" style="width:100%;">Run Storage Tests</a>
-    <a href="pages/bridge.html" class="btn large" style="width:100%;">Run Bridge Tests</a>
-
-    <h2> </h2><div class="backBtn" onclick="backHome();">Back</div>
-  </body>
-</html>

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/jasmine.css
----------------------------------------------------------------------
diff --git a/test/autotest/jasmine.css b/test/autotest/jasmine.css
deleted file mode 100644
index 826e575..0000000
--- a/test/autotest/jasmine.css
+++ /dev/null
@@ -1,81 +0,0 @@
-body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
-
-#HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
-#HTMLReporter a { text-decoration: none; }
-#HTMLReporter a:hover { text-decoration: underline; }
-#HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; }
-#HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; }
-#HTMLReporter #jasmine_content { position: fixed; right: 100%; }
-#HTMLReporter .version { color: #aaaaaa; }
-#HTMLReporter .banner { margin-top: 14px; }
-#HTMLReporter .duration { color: #aaaaaa; float: right; }
-#HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; }
-#HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; }
-#HTMLReporter .symbolSummary li.passed { font-size: 14px; }
-#HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; }
-#HTMLReporter .symbolSummary li.failed { line-height: 9px; }
-#HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; }
-#HTMLReporter .symbolSummary li.skipped { font-size: 14px; }
-#HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; }
-#HTMLReporter .symbolSummary li.pending { line-height: 11px; }
-#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; }
-#HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
-#HTMLReporter .runningAlert { background-color: #666666; }
-#HTMLReporter .skippedAlert { background-color: #aaaaaa; }
-#HTMLReporter .skippedAlert:first-child { background-color: #333333; }
-#HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; }
-#HTMLReporter .passingAlert { background-color: #a6b779; }
-#HTMLReporter .passingAlert:first-child { background-color: #5e7d00; }
-#HTMLReporter .failingAlert { background-color: #cf867e; }
-#HTMLReporter .failingAlert:first-child { background-color: #b03911; }
-#HTMLReporter .results { margin-top: 14px; }
-#HTMLReporter #details { display: none; }
-#HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; }
-#HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
-#HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
-#HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
-#HTMLReporter.showDetails .summary { display: none; }
-#HTMLReporter.showDetails #details { display: block; }
-#HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
-#HTMLReporter .summary { margin-top: 14px; }
-#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; }
-#HTMLReporter .summary .specSummary.passed a { color: #5e7d00; }
-#HTMLReporter .summary .specSummary.failed a { color: #b03911; }
-#HTMLReporter .description + .suite { margin-top: 0; }
-#HTMLReporter .suite { margin-top: 14px; }
-#HTMLReporter .suite a { color: #333333; }
-#HTMLReporter #details .specDetail { margin-bottom: 28px; }
-#HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; }
-#HTMLReporter .resultMessage { padding-top: 14px; color: #333333; }
-#HTMLReporter .resultMessage span.result { display: block; }
-#HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
-
-#TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ }
-#TrivialReporter a:visited, #TrivialReporter a { color: #303; }
-#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; }
-#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; }
-#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; }
-#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; }
-#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; }
-#TrivialReporter .runner.running { background-color: yellow; }
-#TrivialReporter .options { text-align: right; font-size: .8em; }
-#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; }
-#TrivialReporter .suite .suite { margin: 5px; }
-#TrivialReporter .suite.passed { background-color: #dfd; }
-#TrivialReporter .suite.failed { background-color: #fdd; }
-#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; }
-#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; }
-#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; }
-#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; }
-#TrivialReporter .spec.skipped { background-color: #bbb; }
-#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; }
-#TrivialReporter .passed { background-color: #cfc; display: none; }
-#TrivialReporter .failed { background-color: #fbb; }
-#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; }
-#TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; }
-#TrivialReporter .resultMessage .mismatch { color: black; }
-#TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; }
-#TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; }
-#TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; }
-#TrivialReporter #jasmine_content { position: fixed; right: 100%; }
-#TrivialReporter .runner { border: 1px solid gray; display: block; margin: 5px 0; padding: 2px 0 2px 10px; }


[39/50] [abbrv] git commit: Merge pull request #1 from purplecabbage/CB-1291-Windows8

Posted by mm...@apache.org.
Merge pull request #1 from purplecabbage/CB-1291-Windows8

Cb 1291 windows8

Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/92ebe1aa
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/92ebe1aa
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/92ebe1aa

Branch: refs/heads/cdvtest
Commit: 92ebe1aaf95de85d95b319fba11570605eea4706
Parents: 431eeea b1ec0bc
Author: Jesse MacFadyen <pu...@gmail.com>
Authored: Thu Mar 13 22:58:26 2014 -0700
Committer: Jesse MacFadyen <pu...@gmail.com>
Committed: Thu Mar 13 22:58:26 2014 -0700

----------------------------------------------------------------------
 plugin.xml                   |  7 ++-
 src/windows8/ContactProxy.js | 94 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 100 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[22/50] [abbrv] git commit: CB-5980 Updated version and RELEASENOTES.md for release 0.2.8

Posted by mm...@apache.org.
CB-5980 Updated version and RELEASENOTES.md for release 0.2.8


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/55f62484
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/55f62484
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/55f62484

Branch: refs/heads/cdvtest
Commit: 55f6248444757f4c6a11d0fcb26dbee741ae6f35
Parents: c561ba5
Author: Steven Gill <st...@gmail.com>
Authored: Wed Feb 5 17:53:58 2014 -0800
Committer: Steven Gill <st...@gmail.com>
Committed: Wed Feb 5 17:53:58 2014 -0800

----------------------------------------------------------------------
 RELEASENOTES.md | 4 ++++
 plugin.xml      | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/55f62484/RELEASENOTES.md
----------------------------------------------------------------------
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index b1494fb..4950f6c 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -68,3 +68,7 @@
 
 ### 0.2.7 (Jan 02, 2014)
 * B-5658 Add doc/index.md for Contacts plugin
+
+### 0.2.8 (Feb 05, 2014)
+* [CB-3208] FFOS docs updated
+* CB-4590 - chooseContact in CDVContacts crashes app

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/55f62484/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index 6b68593..4f9db70 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -4,7 +4,7 @@
     xmlns:rim="http://www.blackberry.com/ns/widgets"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="org.apache.cordova.contacts"
-    version="0.2.8-dev">
+    version="0.2.8">
 
     <name>Contacts</name>
     <description>Cordova Contacts Plugin</description>


[10/50] [abbrv] git commit: added organizations and categories

Posted by mm...@apache.org.
added organizations and categories


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/e43a1a9f
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/e43a1a9f
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/e43a1a9f

Branch: refs/heads/cdvtest
Commit: e43a1a9f3782598737b575e4dacadd883ab62449
Parents: 0beadd2
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Thu Dec 19 15:56:29 2013 +0100
Committer: Piotr Zalewa <pi...@zalewa.info>
Committed: Thu Dec 19 15:56:29 2013 +0100

----------------------------------------------------------------------
 src/firefoxos/ContactsProxy.js | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/e43a1a9f/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --git a/src/firefoxos/ContactsProxy.js b/src/firefoxos/ContactsProxy.js
index 62dc6dd..6d06a13 100644
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@ -163,6 +163,15 @@ Contact.prototype.updateFromMozilla = function(moz) {
         return contactFields;
     }
 
+    function makeContactFieldFromArray(data) {
+        var contactFields = [];
+        for (var i=0; i < data.length; i++) {
+            var itemData = new ContactField(null, data[i]);
+            contactFields.push(itemData);
+        }
+        return contactFields;
+    }
+
     function exportAddresses(addresses) {
         // TODO: check moz address format
         var arr = [];
@@ -183,6 +192,18 @@ Contact.prototype.updateFromMozilla = function(moz) {
         return arr;
     } 
 
+    function createOrganizations(orgs, jobs) {
+        orgs = (orgs) ? orgs : [];
+        jobs = (jobs) ? jobs : [];
+        var max_length = Math.max(orgs.length, jobs.length);
+        var organizations = [];
+        for (var i=0; i < max_length; i++) {
+            organizations.push(new ContactOrganization(
+                  null, null, orgs[i] || null, null, jobs[i] || null));
+        }
+        return organizations;
+    }
+
 
     if (moz.id) {
         this.id = moz.id;
@@ -214,6 +235,9 @@ Contact.prototype.updateFromMozilla = function(moz) {
         this.emails = exportContactField(moz.email);
     }
     // categories
+    if (moz.category) {
+        this.categories = makeContactFieldFromArray(moz.category);
+    }
 
     // addresses
     if (moz.adr) {
@@ -229,6 +253,9 @@ Contact.prototype.updateFromMozilla = function(moz) {
       this.birthday = Date.parse(moz.bday);
     }
     // organizations
+    if (moz.org || moz.jobTitle) {
+        this.organizations = createOrganizations(moz.org, moz.jobTitle);
+    }
 }
 
 


[16/50] [abbrv] git commit: * FirefoxOS quirks updated * name.formatted constructed with respect to honorific pre- and suffix

Posted by mm...@apache.org.
* FirefoxOS quirks updated
* name.formatted constructed with respect to honorific pre- and suffix


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/3478011b
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/3478011b
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/3478011b

Branch: refs/heads/cdvtest
Commit: 3478011b5c691da0d9f0c1edbc90b22294fa89c0
Parents: 8400410
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Tue Jan 7 13:06:29 2014 +0100
Committer: Piotr Zalewa <pi...@zalewa.info>
Committed: Tue Jan 7 13:06:29 2014 +0100

----------------------------------------------------------------------
 doc/index.md                   | 14 ++++++++++++++
 src/firefoxos/ContactsProxy.js | 19 ++++++++++---------
 2 files changed, 24 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/3478011b/doc/index.md
----------------------------------------------------------------------
diff --git a/doc/index.md b/doc/index.md
index 7d8bf36..190bf05 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -277,6 +277,12 @@ for details.
 
 - __urls__:  Partially supported. The first URL is stored in BlackBerry __webpage__ field.
 
+### FirefoxOS Quirks
+
+- __categories__: Partially supported. Fields __pref__ and __type__ are returning `null`
+
+- __organizations__: Partially supported. Fields __pref__, __type__ and __department__ are returning `null`. Fields __name__ and __title__ stored in __org__ and __jobTitle__.
+
 ### iOS Quirks
 
 - __displayName__: Not supported on iOS, returning `null` unless there is no `ContactName` specified, in which case it returns the composite name, __nickname__ or `""`, respectively.
@@ -395,6 +401,10 @@ a `ContactAddress[]` array.
 
 - __country__: Supported.
 
+### FirefoxOS Quirks
+
+- __formatted__: Currently not supported
+
 ### iOS Quirks
 
 - __pref__: Not supported on iOS devices, returning `false`.
@@ -556,6 +566,10 @@ Contains different kinds of information about a `Contact` object's name.
 
 - __honorificSuffix__: Not supported, returning `null`.
 
+### FirefoxOS Quirks
+
+- __formatted__: Partially supported, and read-only.  Returns a concatenation of `honorificPrefix`, `givenName`, `middleName`, `familyName`, and `honorificSuffix`.
+
 ### iOS Quirks
 
 - __formatted__: Partially supported.  Returns iOS Composite Name, but is read-only.

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/3478011b/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --git a/src/firefoxos/ContactsProxy.js b/src/firefoxos/ContactsProxy.js
index 1ccbed7..b0e2706 100644
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@ -196,16 +196,17 @@ Contact.prototype.updateFromMozilla = function(moz) {
         return organizations;
     }
 
-    function createFormatted(cordova) {
+    function createFormatted(name) {
+        var fields = ['honorificPrefix', 'givenName', 'middleName', 
+                      'familyName', 'honorificSuffix'];
         var f = '';
-        if (cordova.name.givenName) {
-            f = cordova.name.givenName;
-        }
-        if (cordova.name.familyName) {
-            if (f) {
-                f += ' ';
+        for (var i = 0; i < fields.length; i++) {
+            if (name[fields[i]]) {
+                if (f) {
+                    f += ' ';
+                }
+                f += name[fields[i]];
             }
-            f += cordova.name.familyName;
         }
         return f;
     }
@@ -264,7 +265,7 @@ Contact.prototype.updateFromMozilla = function(moz) {
         this.organizations = createOrganizations(moz.org, moz.jobTitle);
     }
     // construct a read-only formatted value
-    this.name.formatted = createFormatted(this);
+    this.name.formatted = createFormatted(this.name);
 
     /*  Find out how to translate these parameters
         // photo: Blob


[32/50] [abbrv] git commit: Add NOTICE file

Posted by mm...@apache.org.
Add NOTICE file


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/431eeea9
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/431eeea9
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/431eeea9

Branch: refs/heads/cdvtest
Commit: 431eeea9f5d7ea738b3b8277162a4ab4313dc32f
Parents: 716ead0
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Feb 27 15:45:10 2014 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Feb 27 15:45:10 2014 -0500

----------------------------------------------------------------------
 NOTICE | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/431eeea9/NOTICE
----------------------------------------------------------------------
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..8ec56a5
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,5 @@
+Apache Cordova
+Copyright 2012 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).


[29/50] [abbrv] git commit: Merge branch 'master' into dev

Posted by mm...@apache.org.
Merge branch 'master' into dev


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/716ead02
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/716ead02
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/716ead02

Branch: refs/heads/cdvtest
Commit: 716ead023a0025a5f10f272f3a53e84c30d6a492
Parents: c540c02 71d66ef
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Feb 27 12:00:27 2014 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Feb 27 12:00:27 2014 -0500

----------------------------------------------------------------------
 doc/index.md                   |   9 +
 src/firefoxos/ContactsProxy.js | 480 ++++++++++++++++++++++++------------
 2 files changed, 331 insertions(+), 158 deletions(-)
----------------------------------------------------------------------



[34/50] [abbrv] git commit: manually merging CB-3208

Posted by mm...@apache.org.
manually merging CB-3208


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/db17e0b2
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/db17e0b2
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/db17e0b2

Branch: refs/heads/cdvtest
Commit: db17e0b241ec9124537db09d8778e05385bd60bf
Parents: 9712e9b
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Wed Feb 26 16:04:25 2014 +0100
Committer: hermwong <he...@gmail.com>
Committed: Tue Mar 4 11:54:57 2014 -0800

----------------------------------------------------------------------
 src/firefoxos/ContactsProxy.js | 58 ++++++++++++++++++-------------------
 1 file changed, 29 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/db17e0b2/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --git a/src/firefoxos/ContactsProxy.js b/src/firefoxos/ContactsProxy.js
index b0e2706..a5b6667 100644
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@ -41,7 +41,7 @@ function _hasId(id) {
 }
 
 // Extend mozContact prototype to provide update from Cordova
-mozContact.prototype.updateFromCordova = function(contact) {
+function updateFromCordova(contact, fromContact) {
 
     function exportContactFieldArray(contactFieldArray, key) {
         if (!key) {
@@ -100,45 +100,45 @@ mozContact.prototype.updateFromCordova = function(contact) {
     var baseArrayFields = [['displayName', 'name'], ['nickname']];
     var baseStringFields = [];
     var j = 0; while(field = nameFields[j++]) {
-      if (contact.name[field[0]]) {
-        this[field[1] || field[0]] = contact.name[field[0]].split(' ');
+      if (fromContact.name[field[0]]) {
+        contact[field[1] || field[0]] = fromContact.name[field[0]].split(' ');
       }
     }
     j = 0; while(field = baseArrayFields[j++]) {
-      if (contact[field[0]]) {
-        this[field[1] || field[0]] = contact[field[0]].split(' ');
+      if (fromContact[field[0]]) {
+        contact[field[1] || field[0]] = fromContact[field[0]].split(' ');
       }
     }
     j = 0; while(field = baseStringFields[j++]) {
-      if (contact[field[0]]) {
-        this[field[1] || field[0]] = contact[field[0]];
+      if (fromContact[field[0]]) {
+        contact[field[1] || field[0]] = fromContact[field[0]];
       }
     }
-    if (contact.birthday) {
-      this.bday = new Date(contact.birthday);
+    if (fromContact.birthday) {
+      contact.bday = new Date(fromContact.birthday);
     }
-    if (contact.emails) {
-        var emails = exportContactField(contact.emails)
-        this.email = emails;
+    if (fromContact.emails) {
+        var emails = exportContactField(fromContact.emails)
+        contact.email = emails;
     }
-    if (contact.categories) {
-        this.category = exportContactFieldArray(contact.categories);
+    if (fromContact.categories) {
+        contact.category = exportContactFieldArray(fromContact.categories);
     }
-    if (contact.addresses) {
-        this.adr = exportAddress(contact.addresses);
+    if (fromContact.addresses) {
+        contact.adr = exportAddress(fromContact.addresses);
     }
-    if (contact.phoneNumbers) {
-        this.tel = exportContactField(contact.phoneNumbers);
+    if (fromContact.phoneNumbers) {
+        contact.tel = exportContactField(fromContact.phoneNumbers);
     }
-    if (contact.organizations) {
+    if (fromContact.organizations) {
         // XXX: organizations are saved in 2 arrays - org and jobTitle
         //      depending on the usecase it might generate issues
         //      where wrong title will be added to an organization
-        this.org = exportContactFieldArray(contact.organizations, 'name');
-        this.jobTitle = exportContactFieldArray(contact.organizations, 'title');
+        contact.org = exportContactFieldArray(fromContact.organizations, 'name');
+        contact.jobTitle = exportContactFieldArray(fromContact.organizations, 'title');
     }
-    if (contact.note) {
-        this.note = [contact.note];
+    if (fromContact.note) {
+        contact.note = [fromContact.note];
     }
 }
 
@@ -287,7 +287,7 @@ function createMozillaFromCordova(successCB, errorCB, contact) {
         filterBy: ['id'], filterValue: contact.id, filterOp: 'equals'});
       search.onsuccess = function() {
         moz = search.result[0];
-        moz.updateFromCordova(contact);
+        updateFromCordova(moz, contact);
         successCB(moz);
       };
       search.onerror = errorCB;
@@ -296,11 +296,11 @@ function createMozillaFromCordova(successCB, errorCB, contact) {
 
     // create empty contact
     moz = new mozContact();
-    if ('init' in moz) {
+    // if ('init' in moz) {
       // 1.2 and below compatibility
-      moz.init();
-    }
-    moz.updateFromCordova(contact);
+      // moz.init();
+    // }
+    updateFromCordova(moz, contact);
     successCB(moz);
 }
 
@@ -461,4 +461,4 @@ module.exports = {
     search: search
 };    
     
-require("cordova/firefoxos/commandProxy").add("Contacts", module.exports); 
+require("cordova/firefoxos/commandProxy").add("Contacts", module.exports);
\ No newline at end of file


[42/50] [abbrv] git commit: Windows 8 - added some more #Quirks info

Posted by mm...@apache.org.
Windows 8 - added some more #Quirks info


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/6ed8b906
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/6ed8b906
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/6ed8b906

Branch: refs/heads/cdvtest
Commit: 6ed8b906b78a445e0521d416fbc07d88987a0745
Parents: a971104
Author: Jesse MacFadyen <pu...@gmail.com>
Authored: Tue Mar 18 13:41:04 2014 -0700
Committer: Jesse MacFadyen <pu...@gmail.com>
Committed: Tue Mar 18 13:41:04 2014 -0700

----------------------------------------------------------------------
 doc/index.md | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/6ed8b906/doc/index.md
----------------------------------------------------------------------
diff --git a/doc/index.md b/doc/index.md
index ea6a643..2f41254 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -89,6 +89,9 @@ database, for which you need to invoke the `Contact.save` method.
 - Firefox OS
 - iOS
 - Windows Phone 7 and 8
+- Windows 8 ( Note: Windows 8 Contacts are readonly via the Cordova API
+Contacts are not queryable/searchable, you should inform the user to pick a contact as a call to contacts.find will open the 'People' app where the user must choose a contact.
+Any contacts returned are readonly, so your application cannot modify them. )
 
 ### Example
 
@@ -124,9 +127,9 @@ _any_ of the specified fields, the contact is returned.
 
 - __contactFindOptions__: Search options to filter navigator.contacts. [Optional] Keys include:
 
-    - __filter__: The search string used to find navigator.contacts. _(DOMString)_ (Default: `""`)
+- __filter__: The search string used to find navigator.contacts. _(DOMString)_ (Default: `""`)
 
-    - __multiple__: Determines if the find operation returns multiple navigator.contacts. _(Boolean)_ (Default: `false`)
+- __multiple__: Determines if the find operation returns multiple navigator.contacts. _(Boolean)_ (Default: `false`)
 
 ### Supported Platforms
 
@@ -135,7 +138,7 @@ _any_ of the specified fields, the contact is returned.
 - Firefox OS
 - iOS
 - Windows Phone 7 and 8
-- Windows 8 ( read-only support, search requires user interaction, contactFields are ignored, only contactFindOptions.multiple is used )
+- Windows 8 ( read-only support, search requires user interaction, contactFields are ignored, only contactFindOptions.multiple is used to enable the user to select 1 or many contacts. )
 
 ### Example
 
@@ -213,7 +216,6 @@ for details.
 - Firefox OS
 - iOS
 - Windows Phone 7 and 8
-- Windows 8
 
 ### Save Example
 


[36/50] [abbrv] git commit: CB-1291 Windows8 Adding contact picker apis

Posted by mm...@apache.org.
CB-1291 Windows8 Adding contact picker apis


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/04b96dc9
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/04b96dc9
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/04b96dc9

Branch: refs/heads/cdvtest
Commit: 04b96dc9426cc0c2504f0a36ba9acacb4ce52e6a
Parents: 431eeea
Author: Jesse MacFadyen <pu...@gmail.com>
Authored: Wed Mar 12 17:33:53 2014 -0700
Committer: Jesse MacFadyen <pu...@gmail.com>
Committed: Wed Mar 12 17:33:53 2014 -0700

----------------------------------------------------------------------
 plugin.xml                   |  7 ++++++-
 src/windows8/ContactProxy.js | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/04b96dc9/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index bf2aeb8..acfc080 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -187,6 +187,11 @@
         <js-module src="src/firefoxos/ContactsProxy.js" name="ContactsProxy">
             <runs />
         </js-module>
-    </platform>    
+    </platform>  
+
+        <!-- wp8 -->
+    <js-module src="src/windows8/ContactProxy.js" name="ContactProxy">
+        <merges target="" />
+    </js-module>
 
 </plugin>

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/04b96dc9/src/windows8/ContactProxy.js
----------------------------------------------------------------------
diff --git a/src/windows8/ContactProxy.js b/src/windows8/ContactProxy.js
new file mode 100644
index 0000000..888047a
--- /dev/null
+++ b/src/windows8/ContactProxy.js
@@ -0,0 +1,37 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var cordova = require('cordova');
+
+module.exports = {
+    search:function(win,fail,args){
+        var fields = args[0];
+        var options = args[1];
+    },
+
+    save:function(win,fail,args){
+        var contact = args[0];
+    }
+
+
+}
+
+require("cordova/windows8/commandProxy").add("Contacts",module.exports);
\ No newline at end of file


[12/50] [abbrv] git commit: CB-5719 Updated version and RELEASENOTES.md for release 0.2.7

Posted by mm...@apache.org.
CB-5719 Updated version and RELEASENOTES.md for release 0.2.7


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/322753fe
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/322753fe
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/322753fe

Branch: refs/heads/cdvtest
Commit: 322753fe37b3a0f1f0c9d4f39b5af1aeebbde153
Parents: 7be7d6f
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Jan 2 12:24:02 2014 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Jan 2 12:24:02 2014 -0500

----------------------------------------------------------------------
 RELEASENOTES.md | 3 +++
 plugin.xml      | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/322753fe/RELEASENOTES.md
----------------------------------------------------------------------
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 249feea..b1494fb 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -65,3 +65,6 @@
 * 1. Added amazon-fireos platform. 2. Change to use amazon-fireos as the platform if user agent string contains 'cordova-amazon-fireos'.
 * CB-5198 [BlackBerry10] Update dependencies to point to registry
 * handle null filter when fields are specified. ( long standing pull-req from @kevfromireland )
+
+### 0.2.7 (Jan 02, 2014)
+* B-5658 Add doc/index.md for Contacts plugin

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/322753fe/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index b92196c..4ed6cc0 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -4,7 +4,7 @@
     xmlns:rim="http://www.blackberry.com/ns/widgets"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="org.apache.cordova.contacts"
-    version="0.2.7-dev">
+    version="0.2.7">
 
     <name>Contacts</name>
     <description>Cordova Contacts Plugin</description>


[20/50] [abbrv] git commit: CB-4590 - chooseContact in CDVContacts crashes app

Posted by mm...@apache.org.
CB-4590 - chooseContact in CDVContacts crashes app


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/8e89957c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/8e89957c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/8e89957c

Branch: refs/heads/cdvtest
Commit: 8e89957ccc8b4a29229d4335c39a1ccf961d2498
Parents: 975913c
Author: Shazron Abdullah <sh...@apache.org>
Authored: Thu Jan 23 16:35:38 2014 -0800
Committer: Shazron Abdullah <sh...@apache.org>
Committed: Thu Jan 23 16:35:38 2014 -0800

----------------------------------------------------------------------
 src/ios/CDVContacts.m | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/8e89957c/src/ios/CDVContacts.m
----------------------------------------------------------------------
diff --git a/src/ios/CDVContacts.m b/src/ios/CDVContacts.m
index 7ca6c80..aa0c9c7 100644
--- a/src/ios/CDVContacts.m
+++ b/src/ios/CDVContacts.m
@@ -195,7 +195,12 @@
     pickerController.callbackId = callbackId;
     pickerController.options = options;
     pickerController.pickedContactDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:kABRecordInvalidID], kW3ContactId, nil];
-    pickerController.allowsEditing = (BOOL)[options existsValue : @"true" forKey : @"allowsEditing"];
+    id allowsEditingValue = [options valueForKey:@"allowsEditing"];
+    BOOL allowsEditing = NO;
+    if ([allowsEditingValue isKindOfClass:[NSNumber class]]) {
+        allowsEditing = [(NSNumber*)allowsEditingValue boolValue];
+    }
+    pickerController.allowsEditing = allowsEditing;
 
     SEL selector = NSSelectorFromString(@"presentViewController:animated:completion:");
     if ([self.viewController respondsToSelector:selector]) {


[08/50] [abbrv] git commit: CB-5658 Update license comment formatting of doc/index.md

Posted by mm...@apache.org.
CB-5658 Update license comment formatting of doc/index.md


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/7be7d6f0
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/7be7d6f0
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/7be7d6f0

Branch: refs/heads/cdvtest
Commit: 7be7d6f0a4d88796fdeb38308d0e060d937f9606
Parents: 0752457
Author: Andrew Grieve <ag...@chromium.org>
Authored: Wed Dec 18 21:11:02 2013 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Wed Dec 18 21:11:02 2013 -0500

----------------------------------------------------------------------
 doc/index.md | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/7be7d6f0/doc/index.md
----------------------------------------------------------------------
diff --git a/doc/index.md b/doc/index.md
index 3677f06..7d8bf36 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -1,20 +1,20 @@
 <!---
- license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
 -->
 
 # org.apache.cordova.contacts


[46/50] [abbrv] git commit: CB-6452 Updated version and RELEASENOTES.md for release 0.2.10

Posted by mm...@apache.org.
CB-6452 Updated version and RELEASENOTES.md for release 0.2.10


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/134b3a6b
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/134b3a6b
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/134b3a6b

Branch: refs/heads/cdvtest
Commit: 134b3a6ba14e7bdecd934bf8af8b7caa5ef26349
Parents: e55db4a
Author: Ian Clelland <ic...@chromium.org>
Authored: Thu Apr 17 10:53:20 2014 -0400
Committer: Ian Clelland <ic...@chromium.org>
Committed: Thu Apr 17 10:53:20 2014 -0400

----------------------------------------------------------------------
 RELEASENOTES.md | 6 ++++++
 plugin.xml      | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/134b3a6b/RELEASENOTES.md
----------------------------------------------------------------------
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index c7e7464..30f2c2f 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -76,3 +76,9 @@
 ### 0.2.9 (Feb 26, 2014)
 * CB-6086 Fix typo in ffos part of plugin.xml: Camera -> Contacts
 * CB-5994 Switch Contact ID lookup to use Raw contact id.
+
+### 0.2.10 (Apr 17, 2014)
+* CB-6126: [BlackBerry10] Update docs quirks section for fields which are supported
+* CB-6212: [iOS] fix warnings compiled under arm64 64-bit
+* CB-6460: Update license headers
+* Add NOTICE file

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/134b3a6b/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index 83d8470..928ba20 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -22,7 +22,7 @@
     xmlns:rim="http://www.blackberry.com/ns/widgets"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="org.apache.cordova.contacts"
-    version="0.2.10-dev">
+    version="0.2.10">
 
     <name>Contacts</name>
     <description>Cordova Contacts Plugin</description>


[18/50] [abbrv] Delete stale test/ directory

Posted by mm...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/jasmine.js
----------------------------------------------------------------------
diff --git a/test/autotest/jasmine.js b/test/autotest/jasmine.js
deleted file mode 100644
index bccb66c..0000000
--- a/test/autotest/jasmine.js
+++ /dev/null
@@ -1,2530 +0,0 @@
-var isCommonJS = typeof window == "undefined";
-
-/**
- * Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework.
- *
- * @namespace
- */
-var jasmine = {};
-if (isCommonJS) exports.jasmine = jasmine;
-/**
- * @private
- */
-jasmine.unimplementedMethod_ = function() {
-  throw new Error("unimplemented method");
-};
-
-/**
- * Use <code>jasmine.undefined</code> instead of <code>undefined</code>, since <code>undefined</code> is just
- * a plain old variable and may be redefined by somebody else.
- *
- * @private
- */
-jasmine.undefined = jasmine.___undefined___;
-
-/**
- * Show diagnostic messages in the console if set to true
- *
- */
-jasmine.VERBOSE = false;
-
-/**
- * Default interval in milliseconds for event loop yields (e.g. to allow network activity or to refresh the screen with the HTML-based runner). Small values here may result in slow test running. Zero means no updates until all tests have completed.
- *
- */
-jasmine.DEFAULT_UPDATE_INTERVAL = 250;
-
-/**
- * Default timeout interval in milliseconds for waitsFor() blocks.
- */
-jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
-
-jasmine.getGlobal = function() {
-  function getGlobal() {
-    return this;
-  }
-
-  return getGlobal();
-};
-
-/**
- * Allows for bound functions to be compared.  Internal use only.
- *
- * @ignore
- * @private
- * @param base {Object} bound 'this' for the function
- * @param name {Function} function to find
- */
-jasmine.bindOriginal_ = function(base, name) {
-  var original = base[name];
-  if (original.apply) {
-    return function() {
-      return original.apply(base, arguments);
-    };
-  } else {
-    // IE support
-    return jasmine.getGlobal()[name];
-  }
-};
-
-jasmine.setTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'setTimeout');
-jasmine.clearTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearTimeout');
-jasmine.setInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'setInterval');
-jasmine.clearInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearInterval');
-
-jasmine.MessageResult = function(values) {
-  this.type = 'log';
-  this.values = values;
-  this.trace = new Error(); // todo: test better
-};
-
-jasmine.MessageResult.prototype.toString = function() {
-  var text = "";
-  for (var i = 0; i < this.values.length; i++) {
-    if (i > 0) text += " ";
-    if (jasmine.isString_(this.values[i])) {
-      text += this.values[i];
-    } else {
-      text += jasmine.pp(this.values[i]);
-    }
-  }
-  return text;
-};
-
-jasmine.ExpectationResult = function(params) {
-  this.type = 'expect';
-  this.matcherName = params.matcherName;
-  this.passed_ = params.passed;
-  this.expected = params.expected;
-  this.actual = params.actual;
-  this.message = this.passed_ ? 'Passed.' : params.message;
-
-  var trace = (params.trace || new Error(this.message));
-  this.trace = this.passed_ ? '' : trace;
-};
-
-jasmine.ExpectationResult.prototype.toString = function () {
-  return this.message;
-};
-
-jasmine.ExpectationResult.prototype.passed = function () {
-  return this.passed_;
-};
-
-/**
- * Getter for the Jasmine environment. Ensures one gets created
- */
-jasmine.getEnv = function() {
-  var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env();
-  return env;
-};
-
-/**
- * @ignore
- * @private
- * @param value
- * @returns {Boolean}
- */
-jasmine.isArray_ = function(value) {
-  return jasmine.isA_("Array", value);
-};
-
-/**
- * @ignore
- * @private
- * @param value
- * @returns {Boolean}
- */
-jasmine.isString_ = function(value) {
-  return jasmine.isA_("String", value);
-};
-
-/**
- * @ignore
- * @private
- * @param value
- * @returns {Boolean}
- */
-jasmine.isNumber_ = function(value) {
-  return jasmine.isA_("Number", value);
-};
-
-/**
- * @ignore
- * @private
- * @param {String} typeName
- * @param value
- * @returns {Boolean}
- */
-jasmine.isA_ = function(typeName, value) {
-  return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
-};
-
-/**
- * Pretty printer for expecations.  Takes any object and turns it into a human-readable string.
- *
- * @param value {Object} an object to be outputted
- * @returns {String}
- */
-jasmine.pp = function(value) {
-  var stringPrettyPrinter = new jasmine.StringPrettyPrinter();
-  stringPrettyPrinter.format(value);
-  return stringPrettyPrinter.string;
-};
-
-/**
- * Returns true if the object is a DOM Node.
- *
- * @param {Object} obj object to check
- * @returns {Boolean}
- */
-jasmine.isDomNode = function(obj) {
-  return obj.nodeType > 0;
-};
-
-/**
- * Returns a matchable 'generic' object of the class type.  For use in expecations of type when values don't matter.
- *
- * @example
- * // don't care about which function is passed in, as long as it's a function
- * expect(mySpy).toHaveBeenCalledWith(jasmine.any(Function));
- *
- * @param {Class} clazz
- * @returns matchable object of the type clazz
- */
-jasmine.any = function(clazz) {
-  return new jasmine.Matchers.Any(clazz);
-};
-
-/**
- * Returns a matchable subset of a JSON object. For use in expectations when you don't care about all of the
- * attributes on the object.
- *
- * @example
- * // don't care about any other attributes than foo.
- * expect(mySpy).toHaveBeenCalledWith(jasmine.objectContaining({foo: "bar"});
- *
- * @param sample {Object} sample
- * @returns matchable object for the sample
- */
-jasmine.objectContaining = function (sample) {
-    return new jasmine.Matchers.ObjectContaining(sample);
-};
-
-/**
- * Jasmine Spies are test doubles that can act as stubs, spies, fakes or when used in an expecation, mocks.
- *
- * Spies should be created in test setup, before expectations.  They can then be checked, using the standard Jasmine
- * expectation syntax. Spies can be checked if they were called or not and what the calling params were.
- *
- * A Spy has the following fields: wasCalled, callCount, mostRecentCall, and argsForCall (see docs).
- *
- * Spies are torn down at the end of every spec.
- *
- * Note: Do <b>not</b> call new jasmine.Spy() directly - a spy must be created using spyOn, jasmine.createSpy or jasmine.createSpyObj.
- *
- * @example
- * // a stub
- * var myStub = jasmine.createSpy('myStub');  // can be used anywhere
- *
- * // spy example
- * var foo = {
- *   not: function(bool) { return !bool; }
- * }
- *
- * // actual foo.not will not be called, execution stops
- * spyOn(foo, 'not');
-
- // foo.not spied upon, execution will continue to implementation
- * spyOn(foo, 'not').andCallThrough();
- *
- * // fake example
- * var foo = {
- *   not: function(bool) { return !bool; }
- * }
- *
- * // foo.not(val) will return val
- * spyOn(foo, 'not').andCallFake(function(value) {return value;});
- *
- * // mock example
- * foo.not(7 == 7);
- * expect(foo.not).toHaveBeenCalled();
- * expect(foo.not).toHaveBeenCalledWith(true);
- *
- * @constructor
- * @see spyOn, jasmine.createSpy, jasmine.createSpyObj
- * @param {String} name
- */
-jasmine.Spy = function(name) {
-  /**
-   * The name of the spy, if provided.
-   */
-  this.identity = name || 'unknown';
-  /**
-   *  Is this Object a spy?
-   */
-  this.isSpy = true;
-  /**
-   * The actual function this spy stubs.
-   */
-  this.plan = function() {
-  };
-  /**
-   * Tracking of the most recent call to the spy.
-   * @example
-   * var mySpy = jasmine.createSpy('foo');
-   * mySpy(1, 2);
-   * mySpy.mostRecentCall.args = [1, 2];
-   */
-  this.mostRecentCall = {};
-
-  /**
-   * Holds arguments for each call to the spy, indexed by call count
-   * @example
-   * var mySpy = jasmine.createSpy('foo');
-   * mySpy(1, 2);
-   * mySpy(7, 8);
-   * mySpy.mostRecentCall.args = [7, 8];
-   * mySpy.argsForCall[0] = [1, 2];
-   * mySpy.argsForCall[1] = [7, 8];
-   */
-  this.argsForCall = [];
-  this.calls = [];
-};
-
-/**
- * Tells a spy to call through to the actual implemenatation.
- *
- * @example
- * var foo = {
- *   bar: function() { // do some stuff }
- * }
- *
- * // defining a spy on an existing property: foo.bar
- * spyOn(foo, 'bar').andCallThrough();
- */
-jasmine.Spy.prototype.andCallThrough = function() {
-  this.plan = this.originalValue;
-  return this;
-};
-
-/**
- * For setting the return value of a spy.
- *
- * @example
- * // defining a spy from scratch: foo() returns 'baz'
- * var foo = jasmine.createSpy('spy on foo').andReturn('baz');
- *
- * // defining a spy on an existing property: foo.bar() returns 'baz'
- * spyOn(foo, 'bar').andReturn('baz');
- *
- * @param {Object} value
- */
-jasmine.Spy.prototype.andReturn = function(value) {
-  this.plan = function() {
-    return value;
-  };
-  return this;
-};
-
-/**
- * For throwing an exception when a spy is called.
- *
- * @example
- * // defining a spy from scratch: foo() throws an exception w/ message 'ouch'
- * var foo = jasmine.createSpy('spy on foo').andThrow('baz');
- *
- * // defining a spy on an existing property: foo.bar() throws an exception w/ message 'ouch'
- * spyOn(foo, 'bar').andThrow('baz');
- *
- * @param {String} exceptionMsg
- */
-jasmine.Spy.prototype.andThrow = function(exceptionMsg) {
-  this.plan = function() {
-    throw exceptionMsg;
-  };
-  return this;
-};
-
-/**
- * Calls an alternate implementation when a spy is called.
- *
- * @example
- * var baz = function() {
- *   // do some stuff, return something
- * }
- * // defining a spy from scratch: foo() calls the function baz
- * var foo = jasmine.createSpy('spy on foo').andCall(baz);
- *
- * // defining a spy on an existing property: foo.bar() calls an anonymnous function
- * spyOn(foo, 'bar').andCall(function() { return 'baz';} );
- *
- * @param {Function} fakeFunc
- */
-jasmine.Spy.prototype.andCallFake = function(fakeFunc) {
-  this.plan = fakeFunc;
-  return this;
-};
-
-/**
- * Resets all of a spy's the tracking variables so that it can be used again.
- *
- * @example
- * spyOn(foo, 'bar');
- *
- * foo.bar();
- *
- * expect(foo.bar.callCount).toEqual(1);
- *
- * foo.bar.reset();
- *
- * expect(foo.bar.callCount).toEqual(0);
- */
-jasmine.Spy.prototype.reset = function() {
-  this.wasCalled = false;
-  this.callCount = 0;
-  this.argsForCall = [];
-  this.calls = [];
-  this.mostRecentCall = {};
-};
-
-jasmine.createSpy = function(name) {
-
-  var spyObj = function() {
-    spyObj.wasCalled = true;
-    spyObj.callCount++;
-    var args = jasmine.util.argsToArray(arguments);
-    spyObj.mostRecentCall.object = this;
-    spyObj.mostRecentCall.args = args;
-    spyObj.argsForCall.push(args);
-    spyObj.calls.push({object: this, args: args});
-    return spyObj.plan.apply(this, arguments);
-  };
-
-  var spy = new jasmine.Spy(name);
-
-  for (var prop in spy) {
-    spyObj[prop] = spy[prop];
-  }
-
-  spyObj.reset();
-
-  return spyObj;
-};
-
-/**
- * Determines whether an object is a spy.
- *
- * @param {jasmine.Spy|Object} putativeSpy
- * @returns {Boolean}
- */
-jasmine.isSpy = function(putativeSpy) {
-  return putativeSpy && putativeSpy.isSpy;
-};
-
-/**
- * Creates a more complicated spy: an Object that has every property a function that is a spy.  Used for stubbing something
- * large in one call.
- *
- * @param {String} baseName name of spy class
- * @param {Array} methodNames array of names of methods to make spies
- */
-jasmine.createSpyObj = function(baseName, methodNames) {
-  if (!jasmine.isArray_(methodNames) || methodNames.length === 0) {
-    throw new Error('createSpyObj requires a non-empty array of method names to create spies for');
-  }
-  var obj = {};
-  for (var i = 0; i < methodNames.length; i++) {
-    obj[methodNames[i]] = jasmine.createSpy(baseName + '.' + methodNames[i]);
-  }
-  return obj;
-};
-
-/**
- * All parameters are pretty-printed and concatenated together, then written to the current spec's output.
- *
- * Be careful not to leave calls to <code>jasmine.log</code> in production code.
- */
-jasmine.log = function() {
-  var spec = jasmine.getEnv().currentSpec;
-  spec.log.apply(spec, arguments);
-};
-
-/**
- * Function that installs a spy on an existing object's method name.  Used within a Spec to create a spy.
- *
- * @example
- * // spy example
- * var foo = {
- *   not: function(bool) { return !bool; }
- * }
- * spyOn(foo, 'not'); // actual foo.not will not be called, execution stops
- *
- * @see jasmine.createSpy
- * @param obj
- * @param methodName
- * @returns a Jasmine spy that can be chained with all spy methods
- */
-var spyOn = function(obj, methodName) {
-  return jasmine.getEnv().currentSpec.spyOn(obj, methodName);
-};
-if (isCommonJS) exports.spyOn = spyOn;
-
-/**
- * Creates a Jasmine spec that will be added to the current suite.
- *
- * // TODO: pending tests
- *
- * @example
- * it('should be true', function() {
- *   expect(true).toEqual(true);
- * });
- *
- * @param {String} desc description of this specification
- * @param {Function} func defines the preconditions and expectations of the spec
- */
-var it = function(desc, func) {
-  return jasmine.getEnv().it(desc, func);
-};
-if (isCommonJS) exports.it = it;
-
-/**
- * Creates a <em>disabled</em> Jasmine spec.
- *
- * A convenience method that allows existing specs to be disabled temporarily during development.
- *
- * @param {String} desc description of this specification
- * @param {Function} func defines the preconditions and expectations of the spec
- */
-var xit = function(desc, func) {
-  return jasmine.getEnv().xit(desc, func);
-};
-if (isCommonJS) exports.xit = xit;
-
-/**
- * Starts a chain for a Jasmine expectation.
- *
- * It is passed an Object that is the actual value and should chain to one of the many
- * jasmine.Matchers functions.
- *
- * @param {Object} actual Actual value to test against and expected value
- */
-var expect = function(actual) {
-  return jasmine.getEnv().currentSpec.expect(actual);
-};
-if (isCommonJS) exports.expect = expect;
-
-/**
- * Defines part of a jasmine spec.  Used in cominbination with waits or waitsFor in asynchrnous specs.
- *
- * @param {Function} func Function that defines part of a jasmine spec.
- */
-var runs = function(func) {
-  jasmine.getEnv().currentSpec.runs(func);
-};
-if (isCommonJS) exports.runs = runs;
-
-/**
- * Waits a fixed time period before moving to the next block.
- *
- * @deprecated Use waitsFor() instead
- * @param {Number} timeout milliseconds to wait
- */
-var waits = function(timeout) {
-  jasmine.getEnv().currentSpec.waits(timeout);
-};
-if (isCommonJS) exports.waits = waits;
-
-/**
- * Waits for the latchFunction to return true before proceeding to the next block.
- *
- * @param {Function} latchFunction
- * @param {String} optional_timeoutMessage
- * @param {Number} optional_timeout
- */
-var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
-  jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments);
-};
-if (isCommonJS) exports.waitsFor = waitsFor;
-
-/**
- * A function that is called before each spec in a suite.
- *
- * Used for spec setup, including validating assumptions.
- *
- * @param {Function} beforeEachFunction
- */
-var beforeEach = function(beforeEachFunction) {
-  jasmine.getEnv().beforeEach(beforeEachFunction);
-};
-if (isCommonJS) exports.beforeEach = beforeEach;
-
-/**
- * A function that is called after each spec in a suite.
- *
- * Used for restoring any state that is hijacked during spec execution.
- *
- * @param {Function} afterEachFunction
- */
-var afterEach = function(afterEachFunction) {
-  jasmine.getEnv().afterEach(afterEachFunction);
-};
-if (isCommonJS) exports.afterEach = afterEach;
-
-/**
- * Defines a suite of specifications.
- *
- * Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared
- * are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization
- * of setup in some tests.
- *
- * @example
- * // TODO: a simple suite
- *
- * // TODO: a simple suite with a nested describe block
- *
- * @param {String} description A string, usually the class under test.
- * @param {Function} specDefinitions function that defines several specs.
- */
-var describe = function(description, specDefinitions) {
-  return jasmine.getEnv().describe(description, specDefinitions);
-};
-if (isCommonJS) exports.describe = describe;
-
-/**
- * Disables a suite of specifications.  Used to disable some suites in a file, or files, temporarily during development.
- *
- * @param {String} description A string, usually the class under test.
- * @param {Function} specDefinitions function that defines several specs.
- */
-var xdescribe = function(description, specDefinitions) {
-  return jasmine.getEnv().xdescribe(description, specDefinitions);
-};
-if (isCommonJS) exports.xdescribe = xdescribe;
-
-
-// Provide the XMLHttpRequest class for IE 5.x-6.x:
-jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() {
-  function tryIt(f) {
-    try {
-      return f();
-    } catch(e) {
-    }
-    return null;
-  }
-
-  var xhr = tryIt(function() {
-    return new ActiveXObject("Msxml2.XMLHTTP.6.0");
-  }) ||
-    tryIt(function() {
-      return new ActiveXObject("Msxml2.XMLHTTP.3.0");
-    }) ||
-    tryIt(function() {
-      return new ActiveXObject("Msxml2.XMLHTTP");
-    }) ||
-    tryIt(function() {
-      return new ActiveXObject("Microsoft.XMLHTTP");
-    });
-
-  if (!xhr) throw new Error("This browser does not support XMLHttpRequest.");
-
-  return xhr;
-} : XMLHttpRequest;
-/**
- * @namespace
- */
-jasmine.util = {};
-
-/**
- * Declare that a child class inherit it's prototype from the parent class.
- *
- * @private
- * @param {Function} childClass
- * @param {Function} parentClass
- */
-jasmine.util.inherit = function(childClass, parentClass) {
-  /**
-   * @private
-   */
-  var subclass = function() {
-  };
-  subclass.prototype = parentClass.prototype;
-  childClass.prototype = new subclass();
-};
-
-jasmine.util.formatException = function(e) {
-  var lineNumber;
-  if (e.line) {
-    lineNumber = e.line;
-  }
-  else if (e.lineNumber) {
-    lineNumber = e.lineNumber;
-  }
-
-  var file;
-
-  if (e.sourceURL) {
-    file = e.sourceURL;
-  }
-  else if (e.fileName) {
-    file = e.fileName;
-  }
-
-  var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString();
-
-  if (file && lineNumber) {
-    message += ' in ' + file + ' (line ' + lineNumber + ')';
-  }
-
-  return message;
-};
-
-jasmine.util.htmlEscape = function(str) {
-  if (!str) return str;
-  return str.replace(/&/g, '&amp;')
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;');
-};
-
-jasmine.util.argsToArray = function(args) {
-  var arrayOfArgs = [];
-  for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]);
-  return arrayOfArgs;
-};
-
-jasmine.util.extend = function(destination, source) {
-  for (var property in source) destination[property] = source[property];
-  return destination;
-};
-
-/**
- * Environment for Jasmine
- *
- * @constructor
- */
-jasmine.Env = function() {
-  this.currentSpec = null;
-  this.currentSuite = null;
-  this.currentRunner_ = new jasmine.Runner(this);
-
-  this.reporter = new jasmine.MultiReporter();
-
-  this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL;
-  this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL;
-  this.lastUpdate = 0;
-  this.specFilter = function() {
-    return true;
-  };
-
-  this.nextSpecId_ = 0;
-  this.nextSuiteId_ = 0;
-  this.equalityTesters_ = [];
-
-  // wrap matchers
-  this.matchersClass = function() {
-    jasmine.Matchers.apply(this, arguments);
-  };
-  jasmine.util.inherit(this.matchersClass, jasmine.Matchers);
-
-  jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass);
-};
-
-
-jasmine.Env.prototype.setTimeout = jasmine.setTimeout;
-jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout;
-jasmine.Env.prototype.setInterval = jasmine.setInterval;
-jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
-
-/**
- * @returns an object containing jasmine version build info, if set.
- */
-jasmine.Env.prototype.version = function () {
-  if (jasmine.version_) {
-    return jasmine.version_;
-  } else {
-    throw new Error('Version not set');
-  }
-};
-
-/**
- * @returns string containing jasmine version build info, if set.
- */
-jasmine.Env.prototype.versionString = function() {
-  if (!jasmine.version_) {
-    return "version unknown";
-  }
-
-  var version = this.version();
-  var versionString = version.major + "." + version.minor + "." + version.build;
-  if (version.release_candidate) {
-    versionString += ".rc" + version.release_candidate;
-  }
-  versionString += " revision " + version.revision;
-  return versionString;
-};
-
-/**
- * @returns a sequential integer starting at 0
- */
-jasmine.Env.prototype.nextSpecId = function () {
-  return this.nextSpecId_++;
-};
-
-/**
- * @returns a sequential integer starting at 0
- */
-jasmine.Env.prototype.nextSuiteId = function () {
-  return this.nextSuiteId_++;
-};
-
-/**
- * Register a reporter to receive status updates from Jasmine.
- * @param {jasmine.Reporter} reporter An object which will receive status updates.
- */
-jasmine.Env.prototype.addReporter = function(reporter) {
-  this.reporter.addReporter(reporter);
-};
-
-jasmine.Env.prototype.execute = function() {
-  this.currentRunner_.execute();
-};
-
-jasmine.Env.prototype.describe = function(description, specDefinitions) {
-  var suite = new jasmine.Suite(this, description, specDefinitions, this.currentSuite);
-
-  var parentSuite = this.currentSuite;
-  if (parentSuite) {
-    parentSuite.add(suite);
-  } else {
-    this.currentRunner_.add(suite);
-  }
-
-  this.currentSuite = suite;
-
-  var declarationError = null;
-  try {
-    specDefinitions.call(suite);
-  } catch(e) {
-    declarationError = e;
-  }
-
-  if (declarationError) {
-    this.it("encountered a declaration exception", function() {
-      throw declarationError;
-    });
-  }
-
-  this.currentSuite = parentSuite;
-
-  return suite;
-};
-
-jasmine.Env.prototype.beforeEach = function(beforeEachFunction) {
-  if (this.currentSuite) {
-    this.currentSuite.beforeEach(beforeEachFunction);
-  } else {
-    this.currentRunner_.beforeEach(beforeEachFunction);
-  }
-};
-
-jasmine.Env.prototype.currentRunner = function () {
-  return this.currentRunner_;
-};
-
-jasmine.Env.prototype.afterEach = function(afterEachFunction) {
-  if (this.currentSuite) {
-    this.currentSuite.afterEach(afterEachFunction);
-  } else {
-    this.currentRunner_.afterEach(afterEachFunction);
-  }
-
-};
-
-jasmine.Env.prototype.xdescribe = function(desc, specDefinitions) {
-  return {
-    execute: function() {
-    }
-  };
-};
-
-jasmine.Env.prototype.it = function(description, func) {
-  var spec = new jasmine.Spec(this, this.currentSuite, description);
-  this.currentSuite.add(spec);
-  this.currentSpec = spec;
-
-  if (func) {
-    spec.runs(func);
-  }
-
-  return spec;
-};
-
-jasmine.Env.prototype.xit = function(desc, func) {
-  return {
-    id: this.nextSpecId(),
-    runs: function() {
-    }
-  };
-};
-
-jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) {
-  if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) {
-    return true;
-  }
-
-  a.__Jasmine_been_here_before__ = b;
-  b.__Jasmine_been_here_before__ = a;
-
-  var hasKey = function(obj, keyName) {
-    return obj !== null && obj[keyName] !== jasmine.undefined;
-  };
-
-  for (var property in b) {
-    if (!hasKey(a, property) && hasKey(b, property)) {
-      mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
-    }
-  }
-  for (property in a) {
-    if (!hasKey(b, property) && hasKey(a, property)) {
-      mismatchKeys.push("expected missing key '" + property + "', but present in actual.");
-    }
-  }
-  for (property in b) {
-    if (property == '__Jasmine_been_here_before__') continue;
-    if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) {
-      mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual.");
-    }
-  }
-
-  if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) {
-    mismatchValues.push("arrays were not the same length");
-  }
-
-  delete a.__Jasmine_been_here_before__;
-  delete b.__Jasmine_been_here_before__;
-  return (mismatchKeys.length === 0 && mismatchValues.length === 0);
-};
-
-jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) {
-  mismatchKeys = mismatchKeys || [];
-  mismatchValues = mismatchValues || [];
-
-  for (var i = 0; i < this.equalityTesters_.length; i++) {
-    var equalityTester = this.equalityTesters_[i];
-    var result = equalityTester(a, b, this, mismatchKeys, mismatchValues);
-    if (result !== jasmine.undefined) return result;
-  }
-
-  if (a === b) return true;
-
-  if (a === jasmine.undefined || a === null || b === jasmine.undefined || b === null) {
-    return (a == jasmine.undefined && b == jasmine.undefined);
-  }
-
-  if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) {
-    return a === b;
-  }
-
-  if (a instanceof Date && b instanceof Date) {
-    return a.getTime() == b.getTime();
-  }
-
-  if (a.jasmineMatches) {
-    return a.jasmineMatches(b);
-  }
-
-  if (b.jasmineMatches) {
-    return b.jasmineMatches(a);
-  }
-
-  if (a instanceof jasmine.Matchers.ObjectContaining) {
-    return a.matches(b);
-  }
-
-  if (b instanceof jasmine.Matchers.ObjectContaining) {
-    return b.matches(a);
-  }
-
-  if (jasmine.isString_(a) && jasmine.isString_(b)) {
-    return (a == b);
-  }
-
-  if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) {
-    return (a == b);
-  }
-
-  if (typeof a === "object" && typeof b === "object") {
-    return this.compareObjects_(a, b, mismatchKeys, mismatchValues);
-  }
-
-  //Straight check
-  return (a === b);
-};
-
-jasmine.Env.prototype.contains_ = function(haystack, needle) {
-  if (jasmine.isArray_(haystack)) {
-    for (var i = 0; i < haystack.length; i++) {
-      if (this.equals_(haystack[i], needle)) return true;
-    }
-    return false;
-  }
-  return haystack.indexOf(needle) >= 0;
-};
-
-jasmine.Env.prototype.addEqualityTester = function(equalityTester) {
-  this.equalityTesters_.push(equalityTester);
-};
-/** No-op base class for Jasmine reporters.
- *
- * @constructor
- */
-jasmine.Reporter = function() {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportRunnerStarting = function(runner) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportRunnerResults = function(runner) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportSuiteResults = function(suite) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportSpecStarting = function(spec) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportSpecResults = function(spec) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.log = function(str) {
-};
-
-/**
- * Blocks are functions with executable code that make up a spec.
- *
- * @constructor
- * @param {jasmine.Env} env
- * @param {Function} func
- * @param {jasmine.Spec} spec
- */
-jasmine.Block = function(env, func, spec) {
-  this.env = env;
-  this.func = func;
-  this.spec = spec;
-};
-
-jasmine.Block.prototype.execute = function(onComplete) {  
-  try {
-    this.func.apply(this.spec);
-  } catch (e) {
-    this.spec.fail(e);
-  }
-  onComplete();
-};
-/** JavaScript API reporter.
- *
- * @constructor
- */
-jasmine.JsApiReporter = function() {
-  this.started = false;
-  this.finished = false;
-  this.suites_ = [];
-  this.results_ = {};
-};
-
-jasmine.JsApiReporter.prototype.reportRunnerStarting = function(runner) {
-  this.started = true;
-  var suites = runner.topLevelSuites();
-  for (var i = 0; i < suites.length; i++) {
-    var suite = suites[i];
-    this.suites_.push(this.summarize_(suite));
-  }
-};
-
-jasmine.JsApiReporter.prototype.suites = function() {
-  return this.suites_;
-};
-
-jasmine.JsApiReporter.prototype.summarize_ = function(suiteOrSpec) {
-  var isSuite = suiteOrSpec instanceof jasmine.Suite;
-  var summary = {
-    id: suiteOrSpec.id,
-    name: suiteOrSpec.description,
-    type: isSuite ? 'suite' : 'spec',
-    children: []
-  };
-  
-  if (isSuite) {
-    var children = suiteOrSpec.children();
-    for (var i = 0; i < children.length; i++) {
-      summary.children.push(this.summarize_(children[i]));
-    }
-  }
-  return summary;
-};
-
-jasmine.JsApiReporter.prototype.results = function() {
-  return this.results_;
-};
-
-jasmine.JsApiReporter.prototype.resultsForSpec = function(specId) {
-  return this.results_[specId];
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.reportRunnerResults = function(runner) {
-  this.finished = true;
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.reportSuiteResults = function(suite) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.reportSpecResults = function(spec) {
-  this.results_[spec.id] = {
-    messages: spec.results().getItems(),
-    result: spec.results().failedCount > 0 ? "failed" : "passed"
-  };
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.log = function(str) {
-};
-
-jasmine.JsApiReporter.prototype.resultsForSpecs = function(specIds){
-  var results = {};
-  for (var i = 0; i < specIds.length; i++) {
-    var specId = specIds[i];
-    results[specId] = this.summarizeResult_(this.results_[specId]);
-  }
-  return results;
-};
-
-jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){
-  var summaryMessages = [];
-  var messagesLength = result.messages.length;
-  for (var messageIndex = 0; messageIndex < messagesLength; messageIndex++) {
-    var resultMessage = result.messages[messageIndex];
-    summaryMessages.push({
-      text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined,
-      passed: resultMessage.passed ? resultMessage.passed() : true,
-      type: resultMessage.type,
-      message: resultMessage.message,
-      trace: {
-        stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined
-      }
-    });
-  }
-
-  return {
-    result : result.result,
-    messages : summaryMessages
-  };
-};
-
-/**
- * @constructor
- * @param {jasmine.Env} env
- * @param actual
- * @param {jasmine.Spec} spec
- */
-jasmine.Matchers = function(env, actual, spec, opt_isNot) {
-  this.env = env;
-  this.actual = actual;
-  this.spec = spec;
-  this.isNot = opt_isNot || false;
-  this.reportWasCalled_ = false;
-};
-
-// todo: @deprecated as of Jasmine 0.11, remove soon [xw]
-jasmine.Matchers.pp = function(str) {
-  throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!");
-};
-
-// todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw]
-jasmine.Matchers.prototype.report = function(result, failing_message, details) {
-  throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs");
-};
-
-jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) {
-  for (var methodName in prototype) {
-    if (methodName == 'report') continue;
-    var orig = prototype[methodName];
-    matchersClass.prototype[methodName] = jasmine.Matchers.matcherFn_(methodName, orig);
-  }
-};
-
-jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) {
-  return function() {
-    var matcherArgs = jasmine.util.argsToArray(arguments);
-    var result = matcherFunction.apply(this, arguments);
-
-    if (this.isNot) {
-      result = !result;
-    }
-
-    if (this.reportWasCalled_) return result;
-
-    var message;
-    if (!result) {
-      if (this.message) {
-        message = this.message.apply(this, arguments);
-        if (jasmine.isArray_(message)) {
-          message = message[this.isNot ? 1 : 0];
-        }
-      } else {
-        var englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });
-        message = "Expected " + jasmine.pp(this.actual) + (this.isNot ? " not " : " ") + englishyPredicate;
-        if (matcherArgs.length > 0) {
-          for (var i = 0; i < matcherArgs.length; i++) {
-            if (i > 0) message += ",";
-            message += " " + jasmine.pp(matcherArgs[i]);
-          }
-        }
-        message += ".";
-      }
-    }
-    var expectationResult = new jasmine.ExpectationResult({
-      matcherName: matcherName,
-      passed: result,
-      expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0],
-      actual: this.actual,
-      message: message
-    });
-    this.spec.addMatcherResult(expectationResult);
-    return jasmine.undefined;
-  };
-};
-
-
-
-
-/**
- * toBe: compares the actual to the expected using ===
- * @param expected
- */
-jasmine.Matchers.prototype.toBe = function(expected) {
-  return this.actual === expected;
-};
-
-/**
- * toNotBe: compares the actual to the expected using !==
- * @param expected
- * @deprecated as of 1.0. Use not.toBe() instead.
- */
-jasmine.Matchers.prototype.toNotBe = function(expected) {
-  return this.actual !== expected;
-};
-
-/**
- * toEqual: compares the actual to the expected using common sense equality. Handles Objects, Arrays, etc.
- *
- * @param expected
- */
-jasmine.Matchers.prototype.toEqual = function(expected) {
-  return this.env.equals_(this.actual, expected);
-};
-
-/**
- * toNotEqual: compares the actual to the expected using the ! of jasmine.Matchers.toEqual
- * @param expected
- * @deprecated as of 1.0. Use not.toEqual() instead.
- */
-jasmine.Matchers.prototype.toNotEqual = function(expected) {
-  return !this.env.equals_(this.actual, expected);
-};
-
-/**
- * Matcher that compares the actual to the expected using a regular expression.  Constructs a RegExp, so takes
- * a pattern or a String.
- *
- * @param expected
- */
-jasmine.Matchers.prototype.toMatch = function(expected) {
-  return new RegExp(expected).test(this.actual);
-};
-
-/**
- * Matcher that compares the actual to the expected using the boolean inverse of jasmine.Matchers.toMatch
- * @param expected
- * @deprecated as of 1.0. Use not.toMatch() instead.
- */
-jasmine.Matchers.prototype.toNotMatch = function(expected) {
-  return !(new RegExp(expected).test(this.actual));
-};
-
-/**
- * Matcher that compares the actual to jasmine.undefined.
- */
-jasmine.Matchers.prototype.toBeDefined = function() {
-  return (this.actual !== jasmine.undefined);
-};
-
-/**
- * Matcher that compares the actual to jasmine.undefined.
- */
-jasmine.Matchers.prototype.toBeUndefined = function() {
-  return (this.actual === jasmine.undefined);
-};
-
-/**
- * Matcher that compares the actual to null.
- */
-jasmine.Matchers.prototype.toBeNull = function() {
-  return (this.actual === null);
-};
-
-/**
- * Matcher that boolean not-nots the actual.
- */
-jasmine.Matchers.prototype.toBeTruthy = function() {
-  return !!this.actual;
-};
-
-
-/**
- * Matcher that boolean nots the actual.
- */
-jasmine.Matchers.prototype.toBeFalsy = function() {
-  return !this.actual;
-};
-
-
-/**
- * Matcher that checks to see if the actual, a Jasmine spy, was called.
- */
-jasmine.Matchers.prototype.toHaveBeenCalled = function() {
-  if (arguments.length > 0) {
-    throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');
-  }
-
-  if (!jasmine.isSpy(this.actual)) {
-    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
-  }
-
-  this.message = function() {
-    return [
-      "Expected spy " + this.actual.identity + " to have been called.",
-      "Expected spy " + this.actual.identity + " not to have been called."
-    ];
-  };
-
-  return this.actual.wasCalled;
-};
-
-/** @deprecated Use expect(xxx).toHaveBeenCalled() instead */
-jasmine.Matchers.prototype.wasCalled = jasmine.Matchers.prototype.toHaveBeenCalled;
-
-/**
- * Matcher that checks to see if the actual, a Jasmine spy, was not called.
- *
- * @deprecated Use expect(xxx).not.toHaveBeenCalled() instead
- */
-jasmine.Matchers.prototype.wasNotCalled = function() {
-  if (arguments.length > 0) {
-    throw new Error('wasNotCalled does not take arguments');
-  }
-
-  if (!jasmine.isSpy(this.actual)) {
-    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
-  }
-
-  this.message = function() {
-    return [
-      "Expected spy " + this.actual.identity + " to not have been called.",
-      "Expected spy " + this.actual.identity + " to have been called."
-    ];
-  };
-
-  return !this.actual.wasCalled;
-};
-
-/**
- * Matcher that checks to see if the actual, a Jasmine spy, was called with a set of parameters.
- *
- * @example
- *
- */
-jasmine.Matchers.prototype.toHaveBeenCalledWith = function() {
-  var expectedArgs = jasmine.util.argsToArray(arguments);
-  if (!jasmine.isSpy(this.actual)) {
-    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
-  }
-  this.message = function() {
-    if (this.actual.callCount === 0) {
-      // todo: what should the failure message for .not.toHaveBeenCalledWith() be? is this right? test better. [xw]
-      return [
-        "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but it was never called.",
-        "Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but it was."
-      ];
-    } else {
-      return [
-        "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall),
-        "Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall)
-      ];
-    }
-  };
-
-  return this.env.contains_(this.actual.argsForCall, expectedArgs);
-};
-
-/** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */
-jasmine.Matchers.prototype.wasCalledWith = jasmine.Matchers.prototype.toHaveBeenCalledWith;
-
-/** @deprecated Use expect(xxx).not.toHaveBeenCalledWith() instead */
-jasmine.Matchers.prototype.wasNotCalledWith = function() {
-  var expectedArgs = jasmine.util.argsToArray(arguments);
-  if (!jasmine.isSpy(this.actual)) {
-    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
-  }
-
-  this.message = function() {
-    return [
-      "Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was",
-      "Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was"
-    ];
-  };
-
-  return !this.env.contains_(this.actual.argsForCall, expectedArgs);
-};
-
-/**
- * Matcher that checks that the expected item is an element in the actual Array.
- *
- * @param {Object} expected
- */
-jasmine.Matchers.prototype.toContain = function(expected) {
-  return this.env.contains_(this.actual, expected);
-};
-
-/**
- * Matcher that checks that the expected item is NOT an element in the actual Array.
- *
- * @param {Object} expected
- * @deprecated as of 1.0. Use not.toContain() instead.
- */
-jasmine.Matchers.prototype.toNotContain = function(expected) {
-  return !this.env.contains_(this.actual, expected);
-};
-
-jasmine.Matchers.prototype.toBeLessThan = function(expected) {
-  return this.actual < expected;
-};
-
-jasmine.Matchers.prototype.toBeGreaterThan = function(expected) {
-  return this.actual > expected;
-};
-
-/**
- * Matcher that checks that the expected item is equal to the actual item
- * up to a given level of decimal precision (default 2).
- *
- * @param {Number} expected
- * @param {Number} precision
- */
-jasmine.Matchers.prototype.toBeCloseTo = function(expected, precision) {
-  if (!(precision === 0)) {
-    precision = precision || 2;
-  }
-  var multiplier = Math.pow(10, precision);
-  var actual = Math.round(this.actual * multiplier);
-  expected = Math.round(expected * multiplier);
-  return expected == actual;
-};
-
-/**
- * Matcher that checks that the expected exception was thrown by the actual.
- *
- * @param {String} expected
- */
-jasmine.Matchers.prototype.toThrow = function(expected) {
-  var result = false;
-  var exception;
-  if (typeof this.actual != 'function') {
-    throw new Error('Actual is not a function');
-  }
-  try {
-    this.actual();
-  } catch (e) {
-    exception = e;
-  }
-  if (exception) {
-    result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected));
-  }
-
-  var not = this.isNot ? "not " : "";
-
-  this.message = function() {
-    if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) {
-      return ["Expected function " + not + "to throw", expected ? expected.message || expected : "an exception", ", but it threw", exception.message || exception].join(' ');
-    } else {
-      return "Expected function to throw an exception.";
-    }
-  };
-
-  return result;
-};
-
-jasmine.Matchers.Any = function(expectedClass) {
-  this.expectedClass = expectedClass;
-};
-
-jasmine.Matchers.Any.prototype.jasmineMatches = function(other) {
-  if (this.expectedClass == String) {
-    return typeof other == 'string' || other instanceof String;
-  }
-
-  if (this.expectedClass == Number) {
-    return typeof other == 'number' || other instanceof Number;
-  }
-
-  if (this.expectedClass == Function) {
-    return typeof other == 'function' || other instanceof Function;
-  }
-
-  if (this.expectedClass == Object) {
-    return typeof other == 'object';
-  }
-
-  return other instanceof this.expectedClass;
-};
-
-jasmine.Matchers.Any.prototype.jasmineToString = function() {
-  return '<jasmine.any(' + this.expectedClass + ')>';
-};
-
-jasmine.Matchers.ObjectContaining = function (sample) {
-  this.sample = sample;
-};
-
-jasmine.Matchers.ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) {
-  mismatchKeys = mismatchKeys || [];
-  mismatchValues = mismatchValues || [];
-
-  var env = jasmine.getEnv();
-
-  var hasKey = function(obj, keyName) {
-    return obj != null && obj[keyName] !== jasmine.undefined;
-  };
-
-  for (var property in this.sample) {
-    if (!hasKey(other, property) && hasKey(this.sample, property)) {
-      mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
-    }
-    else if (!env.equals_(this.sample[property], other[property], mismatchKeys, mismatchValues)) {
-      mismatchValues.push("'" + property + "' was '" + (other[property] ? jasmine.util.htmlEscape(other[property].toString()) : other[property]) + "' in expected, but was '" + (this.sample[property] ? jasmine.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in actual.");
-    }
-  }
-
-  return (mismatchKeys.length === 0 && mismatchValues.length === 0);
-};
-
-jasmine.Matchers.ObjectContaining.prototype.jasmineToString = function () {
-  return "<jasmine.objectContaining(" + jasmine.pp(this.sample) + ")>";
-};
-// Mock setTimeout, clearTimeout
-// Contributed by Pivotal Computer Systems, www.pivotalsf.com
-
-jasmine.FakeTimer = function() {
-  this.reset();
-
-  var self = this;
-  self.setTimeout = function(funcToCall, millis) {
-    self.timeoutsMade++;
-    self.scheduleFunction(self.timeoutsMade, funcToCall, millis, false);
-    return self.timeoutsMade;
-  };
-
-  self.setInterval = function(funcToCall, millis) {
-    self.timeoutsMade++;
-    self.scheduleFunction(self.timeoutsMade, funcToCall, millis, true);
-    return self.timeoutsMade;
-  };
-
-  self.clearTimeout = function(timeoutKey) {
-    self.scheduledFunctions[timeoutKey] = jasmine.undefined;
-  };
-
-  self.clearInterval = function(timeoutKey) {
-    self.scheduledFunctions[timeoutKey] = jasmine.undefined;
-  };
-
-};
-
-jasmine.FakeTimer.prototype.reset = function() {
-  this.timeoutsMade = 0;
-  this.scheduledFunctions = {};
-  this.nowMillis = 0;
-};
-
-jasmine.FakeTimer.prototype.tick = function(millis) {
-  var oldMillis = this.nowMillis;
-  var newMillis = oldMillis + millis;
-  this.runFunctionsWithinRange(oldMillis, newMillis);
-  this.nowMillis = newMillis;
-};
-
-jasmine.FakeTimer.prototype.runFunctionsWithinRange = function(oldMillis, nowMillis) {
-  var scheduledFunc;
-  var funcsToRun = [];
-  for (var timeoutKey in this.scheduledFunctions) {
-    scheduledFunc = this.scheduledFunctions[timeoutKey];
-    if (scheduledFunc != jasmine.undefined &&
-        scheduledFunc.runAtMillis >= oldMillis &&
-        scheduledFunc.runAtMillis <= nowMillis) {
-      funcsToRun.push(scheduledFunc);
-      this.scheduledFunctions[timeoutKey] = jasmine.undefined;
-    }
-  }
-
-  if (funcsToRun.length > 0) {
-    funcsToRun.sort(function(a, b) {
-      return a.runAtMillis - b.runAtMillis;
-    });
-    for (var i = 0; i < funcsToRun.length; ++i) {
-      try {
-        var funcToRun = funcsToRun[i];
-        this.nowMillis = funcToRun.runAtMillis;
-        funcToRun.funcToCall();
-        if (funcToRun.recurring) {
-          this.scheduleFunction(funcToRun.timeoutKey,
-              funcToRun.funcToCall,
-              funcToRun.millis,
-              true);
-        }
-      } catch(e) {
-      }
-    }
-    this.runFunctionsWithinRange(oldMillis, nowMillis);
-  }
-};
-
-jasmine.FakeTimer.prototype.scheduleFunction = function(timeoutKey, funcToCall, millis, recurring) {
-  this.scheduledFunctions[timeoutKey] = {
-    runAtMillis: this.nowMillis + millis,
-    funcToCall: funcToCall,
-    recurring: recurring,
-    timeoutKey: timeoutKey,
-    millis: millis
-  };
-};
-
-/**
- * @namespace
- */
-jasmine.Clock = {
-  defaultFakeTimer: new jasmine.FakeTimer(),
-
-  reset: function() {
-    jasmine.Clock.assertInstalled();
-    jasmine.Clock.defaultFakeTimer.reset();
-  },
-
-  tick: function(millis) {
-    jasmine.Clock.assertInstalled();
-    jasmine.Clock.defaultFakeTimer.tick(millis);
-  },
-
-  runFunctionsWithinRange: function(oldMillis, nowMillis) {
-    jasmine.Clock.defaultFakeTimer.runFunctionsWithinRange(oldMillis, nowMillis);
-  },
-
-  scheduleFunction: function(timeoutKey, funcToCall, millis, recurring) {
-    jasmine.Clock.defaultFakeTimer.scheduleFunction(timeoutKey, funcToCall, millis, recurring);
-  },
-
-  useMock: function() {
-    if (!jasmine.Clock.isInstalled()) {
-      var spec = jasmine.getEnv().currentSpec;
-      spec.after(jasmine.Clock.uninstallMock);
-
-      jasmine.Clock.installMock();
-    }
-  },
-
-  installMock: function() {
-    jasmine.Clock.installed = jasmine.Clock.defaultFakeTimer;
-  },
-
-  uninstallMock: function() {
-    jasmine.Clock.assertInstalled();
-    jasmine.Clock.installed = jasmine.Clock.real;
-  },
-
-  real: {
-    setTimeout: jasmine.getGlobal().setTimeout,
-    clearTimeout: jasmine.getGlobal().clearTimeout,
-    setInterval: jasmine.getGlobal().setInterval,
-    clearInterval: jasmine.getGlobal().clearInterval
-  },
-
-  assertInstalled: function() {
-    if (!jasmine.Clock.isInstalled()) {
-      throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()");
-    }
-  },
-
-  isInstalled: function() {
-    return jasmine.Clock.installed == jasmine.Clock.defaultFakeTimer;
-  },
-
-  installed: null
-};
-jasmine.Clock.installed = jasmine.Clock.real;
-
-//else for IE support
-jasmine.getGlobal().setTimeout = function(funcToCall, millis) {
-  if (jasmine.Clock.installed.setTimeout.apply) {
-    return jasmine.Clock.installed.setTimeout.apply(this, arguments);
-  } else {
-    return jasmine.Clock.installed.setTimeout(funcToCall, millis);
-  }
-};
-
-jasmine.getGlobal().setInterval = function(funcToCall, millis) {
-  if (jasmine.Clock.installed.setInterval.apply) {
-    return jasmine.Clock.installed.setInterval.apply(this, arguments);
-  } else {
-    return jasmine.Clock.installed.setInterval(funcToCall, millis);
-  }
-};
-
-jasmine.getGlobal().clearTimeout = function(timeoutKey) {
-  if (jasmine.Clock.installed.clearTimeout.apply) {
-    return jasmine.Clock.installed.clearTimeout.apply(this, arguments);
-  } else {
-    return jasmine.Clock.installed.clearTimeout(timeoutKey);
-  }
-};
-
-jasmine.getGlobal().clearInterval = function(timeoutKey) {
-  if (jasmine.Clock.installed.clearTimeout.apply) {
-    return jasmine.Clock.installed.clearInterval.apply(this, arguments);
-  } else {
-    return jasmine.Clock.installed.clearInterval(timeoutKey);
-  }
-};
-
-/**
- * @constructor
- */
-jasmine.MultiReporter = function() {
-  this.subReporters_ = [];
-};
-jasmine.util.inherit(jasmine.MultiReporter, jasmine.Reporter);
-
-jasmine.MultiReporter.prototype.addReporter = function(reporter) {
-  this.subReporters_.push(reporter);
-};
-
-(function() {
-  var functionNames = [
-    "reportRunnerStarting",
-    "reportRunnerResults",
-    "reportSuiteResults",
-    "reportSpecStarting",
-    "reportSpecResults",
-    "log"
-  ];
-  for (var i = 0; i < functionNames.length; i++) {
-    var functionName = functionNames[i];
-    jasmine.MultiReporter.prototype[functionName] = (function(functionName) {
-      return function() {
-        for (var j = 0; j < this.subReporters_.length; j++) {
-          var subReporter = this.subReporters_[j];
-          if (subReporter[functionName]) {
-            subReporter[functionName].apply(subReporter, arguments);
-          }
-        }
-      };
-    })(functionName);
-  }
-})();
-/**
- * Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults
- *
- * @constructor
- */
-jasmine.NestedResults = function() {
-  /**
-   * The total count of results
-   */
-  this.totalCount = 0;
-  /**
-   * Number of passed results
-   */
-  this.passedCount = 0;
-  /**
-   * Number of failed results
-   */
-  this.failedCount = 0;
-  /**
-   * Was this suite/spec skipped?
-   */
-  this.skipped = false;
-  /**
-   * @ignore
-   */
-  this.items_ = [];
-};
-
-/**
- * Roll up the result counts.
- *
- * @param result
- */
-jasmine.NestedResults.prototype.rollupCounts = function(result) {
-  this.totalCount += result.totalCount;
-  this.passedCount += result.passedCount;
-  this.failedCount += result.failedCount;
-};
-
-/**
- * Adds a log message.
- * @param values Array of message parts which will be concatenated later.
- */
-jasmine.NestedResults.prototype.log = function(values) {
-  this.items_.push(new jasmine.MessageResult(values));
-};
-
-/**
- * Getter for the results: message & results.
- */
-jasmine.NestedResults.prototype.getItems = function() {
-  return this.items_;
-};
-
-/**
- * Adds a result, tracking counts (total, passed, & failed)
- * @param {jasmine.ExpectationResult|jasmine.NestedResults} result
- */
-jasmine.NestedResults.prototype.addResult = function(result) {
-  if (result.type != 'log') {
-    if (result.items_) {
-      this.rollupCounts(result);
-    } else {
-      this.totalCount++;
-      if (result.passed()) {
-        this.passedCount++;
-      } else {
-        this.failedCount++;
-      }
-    }
-  }
-  this.items_.push(result);
-};
-
-/**
- * @returns {Boolean} True if <b>everything</b> below passed
- */
-jasmine.NestedResults.prototype.passed = function() {
-  return this.passedCount === this.totalCount;
-};
-/**
- * Base class for pretty printing for expectation results.
- */
-jasmine.PrettyPrinter = function() {
-  this.ppNestLevel_ = 0;
-};
-
-/**
- * Formats a value in a nice, human-readable string.
- *
- * @param value
- */
-jasmine.PrettyPrinter.prototype.format = function(value) {
-  if (this.ppNestLevel_ > 40) {
-    throw new Error('jasmine.PrettyPrinter: format() nested too deeply!');
-  }
-
-  this.ppNestLevel_++;
-  try {
-    if (value === jasmine.undefined) {
-      this.emitScalar('undefined');
-    } else if (value === null) {
-      this.emitScalar('null');
-    } else if (value === jasmine.getGlobal()) {
-      this.emitScalar('<global>');
-    } else if (value.jasmineToString) {
-      this.emitScalar(value.jasmineToString());
-    } else if (typeof value === 'string') {
-      this.emitString(value);
-    } else if (jasmine.isSpy(value)) {
-      this.emitScalar("spy on " + value.identity);
-    } else if (value instanceof RegExp) {
-      this.emitScalar(value.toString());
-    } else if (typeof value === 'function') {
-      this.emitScalar('Function');
-    } else if (typeof value.nodeType === 'number') {
-      this.emitScalar('HTMLNode');
-    } else if (value instanceof Date) {
-      this.emitScalar('Date(' + value + ')');
-    } else if (value.__Jasmine_been_here_before__) {
-      this.emitScalar('<circular reference: ' + (jasmine.isArray_(value) ? 'Array' : 'Object') + '>');
-    } else if (jasmine.isArray_(value) || typeof value == 'object') {
-      value.__Jasmine_been_here_before__ = true;
-      if (jasmine.isArray_(value)) {
-        this.emitArray(value);
-      } else {
-        this.emitObject(value);
-      }
-      delete value.__Jasmine_been_here_before__;
-    } else {
-      this.emitScalar(value.toString());
-    }
-  } finally {
-    this.ppNestLevel_--;
-  }
-};
-
-jasmine.PrettyPrinter.prototype.iterateObject = function(obj, fn) {
-  for (var property in obj) {
-    if (property == '__Jasmine_been_here_before__') continue;
-    fn(property, obj.__lookupGetter__ ? (obj.__lookupGetter__(property) !== jasmine.undefined && 
-                                         obj.__lookupGetter__(property) !== null) : false);
-  }
-};
-
-jasmine.PrettyPrinter.prototype.emitArray = jasmine.unimplementedMethod_;
-jasmine.PrettyPrinter.prototype.emitObject = jasmine.unimplementedMethod_;
-jasmine.PrettyPrinter.prototype.emitScalar = jasmine.unimplementedMethod_;
-jasmine.PrettyPrinter.prototype.emitString = jasmine.unimplementedMethod_;
-
-jasmine.StringPrettyPrinter = function() {
-  jasmine.PrettyPrinter.call(this);
-
-  this.string = '';
-};
-jasmine.util.inherit(jasmine.StringPrettyPrinter, jasmine.PrettyPrinter);
-
-jasmine.StringPrettyPrinter.prototype.emitScalar = function(value) {
-  this.append(value);
-};
-
-jasmine.StringPrettyPrinter.prototype.emitString = function(value) {
-  this.append("'" + value + "'");
-};
-
-jasmine.StringPrettyPrinter.prototype.emitArray = function(array) {
-  this.append('[ ');
-  for (var i = 0; i < array.length; i++) {
-    if (i > 0) {
-      this.append(', ');
-    }
-    this.format(array[i]);
-  }
-  this.append(' ]');
-};
-
-jasmine.StringPrettyPrinter.prototype.emitObject = function(obj) {
-  var self = this;
-  this.append('{ ');
-  var first = true;
-
-  this.iterateObject(obj, function(property, isGetter) {
-    if (first) {
-      first = false;
-    } else {
-      self.append(', ');
-    }
-
-    self.append(property);
-    self.append(' : ');
-    if (isGetter) {
-      self.append('<getter>');
-    } else {
-      self.format(obj[property]);
-    }
-  });
-
-  this.append(' }');
-};
-
-jasmine.StringPrettyPrinter.prototype.append = function(value) {
-  this.string += value;
-};
-jasmine.Queue = function(env) {
-  this.env = env;
-  this.blocks = [];
-  this.running = false;
-  this.index = 0;
-  this.offset = 0;
-  this.abort = false;
-};
-
-jasmine.Queue.prototype.addBefore = function(block) {
-  this.blocks.unshift(block);
-};
-
-jasmine.Queue.prototype.add = function(block) {
-  this.blocks.push(block);
-};
-
-jasmine.Queue.prototype.insertNext = function(block) {
-  this.blocks.splice((this.index + this.offset + 1), 0, block);
-  this.offset++;
-};
-
-jasmine.Queue.prototype.start = function(onComplete) {
-  this.running = true;
-  this.onComplete = onComplete;
-  this.next_();
-};
-
-jasmine.Queue.prototype.isRunning = function() {
-  return this.running;
-};
-
-jasmine.Queue.LOOP_DONT_RECURSE = true;
-
-jasmine.Queue.prototype.next_ = function() {
-  var self = this;
-  var goAgain = true;
-
-  while (goAgain) {
-    goAgain = false;
-    
-    if (self.index < self.blocks.length && !this.abort) {
-      var calledSynchronously = true;
-      var completedSynchronously = false;
-
-      var onComplete = function () {
-        if (jasmine.Queue.LOOP_DONT_RECURSE && calledSynchronously) {
-          completedSynchronously = true;
-          return;
-        }
-
-        if (self.blocks[self.index].abort) {
-          self.abort = true;
-        }
-
-        self.offset = 0;
-        self.index++;
-
-        var now = new Date().getTime();
-        if (self.env.updateInterval && now - self.env.lastUpdate > self.env.updateInterval) {
-          self.env.lastUpdate = now;
-          self.env.setTimeout(function() {
-            self.next_();
-          }, 0);
-        } else {
-          if (jasmine.Queue.LOOP_DONT_RECURSE && completedSynchronously) {
-            goAgain = true;
-          } else {
-            self.next_();
-          }
-        }
-      };
-      self.blocks[self.index].execute(onComplete);
-
-      calledSynchronously = false;
-      if (completedSynchronously) {
-        onComplete();
-      }
-      
-    } else {
-      self.running = false;
-      if (self.onComplete) {
-        self.onComplete();
-      }
-    }
-  }
-};
-
-jasmine.Queue.prototype.results = function() {
-  var results = new jasmine.NestedResults();
-  for (var i = 0; i < this.blocks.length; i++) {
-    if (this.blocks[i].results) {
-      results.addResult(this.blocks[i].results());
-    }
-  }
-  return results;
-};
-
-
-/**
- * Runner
- *
- * @constructor
- * @param {jasmine.Env} env
- */
-jasmine.Runner = function(env) {
-  var self = this;
-  self.env = env;
-  self.queue = new jasmine.Queue(env);
-  self.before_ = [];
-  self.after_ = [];
-  self.suites_ = [];
-};
-
-jasmine.Runner.prototype.execute = function() {
-  var self = this;
-  if (self.env.reporter.reportRunnerStarting) {
-    self.env.reporter.reportRunnerStarting(this);
-  }
-  self.queue.start(function () {
-    self.finishCallback();
-  });
-};
-
-jasmine.Runner.prototype.beforeEach = function(beforeEachFunction) {
-  beforeEachFunction.typeName = 'beforeEach';
-  this.before_.splice(0,0,beforeEachFunction);
-};
-
-jasmine.Runner.prototype.afterEach = function(afterEachFunction) {
-  afterEachFunction.typeName = 'afterEach';
-  this.after_.splice(0,0,afterEachFunction);
-};
-
-
-jasmine.Runner.prototype.finishCallback = function() {
-  this.env.reporter.reportRunnerResults(this);
-};
-
-jasmine.Runner.prototype.addSuite = function(suite) {
-  this.suites_.push(suite);
-};
-
-jasmine.Runner.prototype.add = function(block) {
-  if (block instanceof jasmine.Suite) {
-    this.addSuite(block);
-  }
-  this.queue.add(block);
-};
-
-jasmine.Runner.prototype.specs = function () {
-  var suites = this.suites();
-  var specs = [];
-  for (var i = 0; i < suites.length; i++) {
-    specs = specs.concat(suites[i].specs());
-  }
-  return specs;
-};
-
-jasmine.Runner.prototype.suites = function() {
-  return this.suites_;
-};
-
-jasmine.Runner.prototype.topLevelSuites = function() {
-  var topLevelSuites = [];
-  for (var i = 0; i < this.suites_.length; i++) {
-    if (!this.suites_[i].parentSuite) {
-      topLevelSuites.push(this.suites_[i]);
-    }
-  }
-  return topLevelSuites;
-};
-
-jasmine.Runner.prototype.results = function() {
-  return this.queue.results();
-};
-/**
- * Internal representation of a Jasmine specification, or test.
- *
- * @constructor
- * @param {jasmine.Env} env
- * @param {jasmine.Suite} suite
- * @param {String} description
- */
-jasmine.Spec = function(env, suite, description) {
-  if (!env) {
-    throw new Error('jasmine.Env() required');
-  }
-  if (!suite) {
-    throw new Error('jasmine.Suite() required');
-  }
-  var spec = this;
-  spec.id = env.nextSpecId ? env.nextSpecId() : null;
-  spec.env = env;
-  spec.suite = suite;
-  spec.description = description;
-  spec.queue = new jasmine.Queue(env);
-
-  spec.afterCallbacks = [];
-  spec.spies_ = [];
-
-  spec.results_ = new jasmine.NestedResults();
-  spec.results_.description = description;
-  spec.matchersClass = null;
-};
-
-jasmine.Spec.prototype.getFullName = function() {
-  return this.suite.getFullName() + ' ' + this.description + '.';
-};
-
-
-jasmine.Spec.prototype.results = function() {
-  return this.results_;
-};
-
-/**
- * All parameters are pretty-printed and concatenated together, then written to the spec's output.
- *
- * Be careful not to leave calls to <code>jasmine.log</code> in production code.
- */
-jasmine.Spec.prototype.log = function() {
-  return this.results_.log(arguments);
-};
-
-jasmine.Spec.prototype.runs = function (func) {
-  var block = new jasmine.Block(this.env, func, this);
-  this.addToQueue(block);
-  return this;
-};
-
-jasmine.Spec.prototype.addToQueue = function (block) {
-  if (this.queue.isRunning()) {
-    this.queue.insertNext(block);
-  } else {
-    this.queue.add(block);
-  }
-};
-
-/**
- * @param {jasmine.ExpectationResult} result
- */
-jasmine.Spec.prototype.addMatcherResult = function(result) {
-  this.results_.addResult(result);
-};
-
-jasmine.Spec.prototype.expect = function(actual) {
-  var positive = new (this.getMatchersClass_())(this.env, actual, this);
-  positive.not = new (this.getMatchersClass_())(this.env, actual, this, true);
-  return positive;
-};
-
-/**
- * Waits a fixed time period before moving to the next block.
- *
- * @deprecated Use waitsFor() instead
- * @param {Number} timeout milliseconds to wait
- */
-jasmine.Spec.prototype.waits = function(timeout) {
-  var waitsFunc = new jasmine.WaitsBlock(this.env, timeout, this);
-  this.addToQueue(waitsFunc);
-  return this;
-};
-
-/**
- * Waits for the latchFunction to return true before proceeding to the next block.
- *
- * @param {Function} latchFunction
- * @param {String} optional_timeoutMessage
- * @param {Number} optional_timeout
- */
-jasmine.Spec.prototype.waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
-  var latchFunction_ = null;
-  var optional_timeoutMessage_ = null;
-  var optional_timeout_ = null;
-
-  for (var i = 0; i < arguments.length; i++) {
-    var arg = arguments[i];
-    switch (typeof arg) {
-      case 'function':
-        latchFunction_ = arg;
-        break;
-      case 'string':
-        optional_timeoutMessage_ = arg;
-        break;
-      case 'number':
-        optional_timeout_ = arg;
-        break;
-    }
-  }
-
-  var waitsForFunc = new jasmine.WaitsForBlock(this.env, optional_timeout_, latchFunction_, optional_timeoutMessage_, this);
-  this.addToQueue(waitsForFunc);
-  return this;
-};
-
-jasmine.Spec.prototype.fail = function (e) {
-  var expectationResult = new jasmine.ExpectationResult({
-    passed: false,
-    message: e ? jasmine.util.formatException(e) : 'Exception',
-    trace: { stack: e.stack }
-  });
-  this.results_.addResult(expectationResult);
-};
-
-jasmine.Spec.prototype.getMatchersClass_ = function() {
-  return this.matchersClass || this.env.matchersClass;
-};
-
-jasmine.Spec.prototype.addMatchers = function(matchersPrototype) {
-  var parent = this.getMatchersClass_();
-  var newMatchersClass = function() {
-    parent.apply(this, arguments);
-  };
-  jasmine.util.inherit(newMatchersClass, parent);
-  jasmine.Matchers.wrapInto_(matchersPrototype, newMatchersClass);
-  this.matchersClass = newMatchersClass;
-};
-
-jasmine.Spec.prototype.finishCallback = function() {
-  this.env.reporter.reportSpecResults(this);
-};
-
-jasmine.Spec.prototype.finish = function(onComplete) {
-  this.removeAllSpies();
-  this.finishCallback();
-  if (onComplete) {
-    onComplete();
-  }
-};
-
-jasmine.Spec.prototype.after = function(doAfter) {
-  if (this.queue.isRunning()) {
-    this.queue.add(new jasmine.Block(this.env, doAfter, this));
-  } else {
-    this.afterCallbacks.unshift(doAfter);
-  }
-};
-
-jasmine.Spec.prototype.execute = function(onComplete) {
-  var spec = this;
-  if (!spec.env.specFilter(spec)) {
-    spec.results_.skipped = true;
-    spec.finish(onComplete);
-    return;
-  }
-
-  this.env.reporter.reportSpecStarting(this);
-
-  spec.env.currentSpec = spec;
-
-  spec.addBeforesAndAftersToQueue();
-
-  spec.queue.start(function () {
-    spec.finish(onComplete);
-  });
-};
-
-jasmine.Spec.prototype.addBeforesAndAftersToQueue = function() {
-  var runner = this.env.currentRunner();
-  var i;
-
-  for (var suite = this.suite; suite; suite = suite.parentSuite) {
-    for (i = 0; i < suite.before_.length; i++) {
-      this.queue.addBefore(new jasmine.Block(this.env, suite.before_[i], this));
-    }
-  }
-  for (i = 0; i < runner.before_.length; i++) {
-    this.queue.addBefore(new jasmine.Block(this.env, runner.before_[i], this));
-  }
-  for (i = 0; i < this.afterCallbacks.length; i++) {
-    this.queue.add(new jasmine.Block(this.env, this.afterCallbacks[i], this));
-  }
-  for (suite = this.suite; suite; suite = suite.parentSuite) {
-    for (i = 0; i < suite.after_.length; i++) {
-      this.queue.add(new jasmine.Block(this.env, suite.after_[i], this));
-    }
-  }
-  for (i = 0; i < runner.after_.length; i++) {
-    this.queue.add(new jasmine.Block(this.env, runner.after_[i], this));
-  }
-};
-
-jasmine.Spec.prototype.explodes = function() {
-  throw 'explodes function should not have been called';
-};
-
-jasmine.Spec.prototype.spyOn = function(obj, methodName, ignoreMethodDoesntExist) {
-  if (obj == jasmine.undefined) {
-    throw "spyOn could not find an object to spy upon for " + methodName + "()";
-  }
-
-  if (!ignoreMethodDoesntExist && obj[methodName] === jasmine.undefined) {
-    throw methodName + '() method does not exist';
-  }
-
-  if (!ignoreMethodDoesntExist && obj[methodName] && obj[methodName].isSpy) {
-    throw new Error(methodName + ' has already been spied upon');
-  }
-
-  var spyObj = jasmine.createSpy(methodName);
-
-  this.spies_.push(spyObj);
-  spyObj.baseObj = obj;
-  spyObj.methodName = methodName;
-  spyObj.originalValue = obj[methodName];
-
-  obj[methodName] = spyObj;
-
-  return spyObj;
-};
-
-jasmine.Spec.prototype.removeAllSpies = function() {
-  for (var i = 0; i < this.spies_.length; i++) {
-    var spy = this.spies_[i];
-    spy.baseObj[spy.methodName] = spy.originalValue;
-  }
-  this.spies_ = [];
-};
-
-/**
- * Internal representation of a Jasmine suite.
- *
- * @constructor
- * @param {jasmine.Env} env
- * @param {String} description
- * @param {Function} specDefinitions
- * @param {jasmine.Suite} parentSuite
- */
-jasmine.Suite = function(env, description, specDefinitions, parentSuite) {
-  var self = this;
-  self.id = env.nextSuiteId ? env.nextSuiteId() : null;
-  self.description = description;
-  self.queue = new jasmine.Queue(env);
-  self.parentSuite = parentSuite;
-  self.env = env;
-  self.before_ = [];
-  self.after_ = [];
-  self.children_ = [];
-  self.suites_ = [];
-  self.specs_ = [];
-};
-
-jasmine.Suite.prototype.getFullName = function() {
-  var fullName = this.description;
-  for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
-    fullName = parentSuite.description + ' ' + fullName;
-  }
-  return fullName;
-};
-
-jasmine.Suite.prototype.finish = function(onComplete) {
-  this.env.reporter.reportSuiteResults(this);
-  this.finished = true;
-  if (typeof(onComplete) == 'function') {
-    onComplete();
-  }
-};
-
-jasmine.Suite.prototype.beforeEach = function(beforeEachFunction) {
-  beforeEachFunction.typeName = 'beforeEach';
-  this.before_.unshift(beforeEachFunction);
-};
-
-jasmine.Suite.prototype.afterEach = function(afterEachFunction) {
-  afterEachFunction.typeName = 'afterEach';
-  this.after_.unshift(afterEachFunction);
-};
-
-jasmine.Suite.prototype.results = function() {
-  return this.queue.results();
-};
-
-jasmine.Suite.prototype.add = function(suiteOrSpec) {
-  this.children_.push(suiteOrSpec);
-  if (suiteOrSpec instanceof jasmine.Suite) {
-    this.suites_.push(suiteOrSpec);
-    this.env.currentRunner().addSuite(suiteOrSpec);
-  } else {
-    this.specs_.push(suiteOrSpec);
-  }
-  this.queue.add(suiteOrSpec);
-};
-
-jasmine.Suite.prototype.specs = function() {
-  return this.specs_;
-};
-
-jasmine.Suite.prototype.suites = function() {
-  return this.suites_;
-};
-
-jasmine.Suite.prototype.children = function() {
-  return this.children_;
-};
-
-jasmine.Suite.prototype.execute = function(onComplete) {
-  var self = this;
-  this.queue.start(function () {
-    self.finish(onComplete);
-  });
-};
-jasmine.WaitsBlock = function(env, timeout, spec) {
-  this.timeout = timeout;
-  jasmine.Block.call(this, env, null, spec);
-};
-
-jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block);
-
-jasmine.WaitsBlock.prototype.execute = function (onComplete) {
-  if (jasmine.VERBOSE) {
-    this.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...');
-  }
-  this.env.setTimeout(function () {
-    onComplete();
-  }, this.timeout);
-};
-/**
- * A block which waits for some condition to become true, with timeout.
- *
- * @constructor
- * @extends jasmine.Block
- * @param {jasmine.Env} env The Jasmine environment.
- * @param {Number} timeout The maximum time in milliseconds to wait for the condition to become true.
- * @param {Function} latchFunction A function which returns true when the desired condition has been met.
- * @param {String} message The message to display if the desired condition hasn't been met within the given time period.
- * @param {jasmine.Spec} spec The Jasmine spec.
- */
-jasmine.WaitsForBlock = function(env, timeout, latchFunction, message, spec) {
-  this.timeout = timeout || env.defaultTimeoutInterval;
-  this.latchFunction = latchFunction;
-  this.message = message;
-  this.totalTimeSpentWaitingForLatch = 0;
-  jasmine.Block.call(this, env, null, spec);
-};
-jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block);
-
-jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 10;
-
-jasmine.WaitsForBlock.prototype.execute = function(onComplete) {
-  if (jasmine.VERBOSE) {
-    this.env.reporter.log('>> Jasmine waiting for ' + (this.message || 'something to happen'));
-  }
-  var latchFunctionResult;
-  try {
-    latchFunctionResult = this.latchFunction.apply(this.spec);
-  } catch (e) {
-    this.spec.fail(e);
-    onComplete();
-    return;
-  }
-
-  if (latchFunctionResult) {
-    onComplete();
-  } else if (this.totalTimeSpentWaitingForLatch >= this.timeout) {
-    var message = 'timed out after ' + this.timeout + ' msec waiting for ' + (this.message || 'something to happen');
-    this.spec.fail({
-      name: 'timeout',
-      message: message
-    });
-
-    this.abort = true;
-    onComplete();
-  } else {
-    this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT;
-    var self = this;
-    this.env.setTimeout(function() {
-      self.execute(onComplete);
-    }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT);
-  }
-};
-
-jasmine.version_= {
-  "major": 1,
-  "minor": 2,
-  "build": 0,
-  "revision": 1333310630,
-  "release_candidate": 1
-};

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/pages/.DS_Store
----------------------------------------------------------------------
diff --git a/test/autotest/pages/.DS_Store b/test/autotest/pages/.DS_Store
deleted file mode 100644
index 5008ddf..0000000
Binary files a/test/autotest/pages/.DS_Store and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/pages/contacts.html
----------------------------------------------------------------------
diff --git a/test/autotest/pages/contacts.html b/test/autotest/pages/contacts.html
deleted file mode 100644
index 1518f19..0000000
--- a/test/autotest/pages/contacts.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!DOCTYPE html>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-
-<html>
-
-<head>
-  <title>Cordova: Contacts API Specs</title>
-
-  <meta name="viewport" content="width=device-width, height=device-height, user-scalable=yes, initial-scale=1.0;" />
-  <!-- Load jasmine -->
-  <link href="../jasmine.css" rel="stylesheet"/>
-  <script type="text/javascript" src="../jasmine.js"></script>
-  <script type="text/javascript" src="../html/HtmlReporterHelpers.js"></script>
-  <script type="text/javascript" src="../html/HtmlReporter.js"></script>
-  <script type="text/javascript" src="../html/ReporterView.js"></script>
-  <script type="text/javascript" src="../html/SpecView.js"></script>
-  <script type="text/javascript" src="../html/SuiteView.js"></script>
-  <script type="text/javascript" src="../html/TrivialReporter.js"></script>
-
-  <!-- Source -->
-  <script type="text/javascript" src="../../cordova-incl.js"></script>
-
-  <!-- Load Test Runner -->
-  <script type="text/javascript" src="../test-runner.js"></script>
-
-  <!-- Tests -->
-  <script type="text/javascript" src="../tests/contacts.tests.js"></script>
-
-  <script type="text/javascript">
-    document.addEventListener('deviceready', function () {
-      var jasmineEnv = jasmine.getEnv();
-      jasmineEnv.updateInterval = 1000;
-
-      var htmlReporter = new jasmine.HtmlReporter();
-
-      jasmineEnv.addReporter(htmlReporter);
-
-      jasmineEnv.specFilter = function(spec) {
-        return htmlReporter.specFilter(spec);
-      };
-
-      jasmineEnv.execute();
-    }, false);
-  </script>
-</head>
-
-<body>
-  <a href="javascript:" class="backBtn" onclick="backHome();">Back</a>
-</body>
-</html>
-

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/test-runner.js
----------------------------------------------------------------------
diff --git a/test/autotest/test-runner.js b/test/autotest/test-runner.js
deleted file mode 100644
index f72b3cc..0000000
--- a/test/autotest/test-runner.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-if (window.sessionStorage != null) {
-    window.sessionStorage.clear();
-}
-
-// Timeout is 2 seconds to allow physical devices enough
-// time to query the response. This is important for some
-// Android devices.
-var Tests = function() {};
-Tests.TEST_TIMEOUT = 7500;
-
-// Creates a spy that will fail if called.
-function createDoNotCallSpy(name, opt_extraMessage) {
-    return jasmine.createSpy().andCallFake(function() {
-        var errorMessage = name + ' should not have been called.';
-        if (arguments.length) {
-            errorMessage += ' Got args: ' + JSON.stringify(arguments);
-        }
-        if (opt_extraMessage) {
-            errorMessage += '\n' + opt_extraMessage;
-        }
-        expect(false).toBe(true, errorMessage);
-    });
-}
-
-// Waits for any of the given spys to be called.
-// Last param may be a custom timeout duration.
-function waitsForAny() {
-    var spys = [].slice.call(arguments);
-    var timeout = Tests.TEST_TIMEOUT;
-    if (typeof spys[spys.length - 1] == 'number') {
-        timeout = spys.pop();
-    }
-    waitsFor(function() {
-        for (var i = 0; i < spys.length; ++i) {
-            if (spys[i].wasCalled) {
-                return true;
-            }
-        }
-        return false;
-    }, "Expecting callbacks to be called.", timeout);
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/975913cd/test/autotest/tests/.DS_Store
----------------------------------------------------------------------
diff --git a/test/autotest/tests/.DS_Store b/test/autotest/tests/.DS_Store
deleted file mode 100644
index 5008ddf..0000000
Binary files a/test/autotest/tests/.DS_Store and /dev/null differ


[23/50] [abbrv] git commit: merged in dev

Posted by mm...@apache.org.
merged in dev


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/71d66efe
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/71d66efe
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/71d66efe

Branch: refs/heads/cdvtest
Commit: 71d66efe1fa6a347b97335fdf80c2e614e15f5b0
Parents: 3478011 55f6248
Author: Steven Gill <st...@gmail.com>
Authored: Wed Feb 5 18:11:22 2014 -0800
Committer: Steven Gill <st...@gmail.com>
Committed: Wed Feb 5 18:11:22 2014 -0800

----------------------------------------------------------------------
 RELEASENOTES.md                           |    4 +
 doc/index.md                              |   35 +-
 plugin.xml                                |    2 +-
 src/ios/CDVContacts.m                     |    7 +-
 test/autotest/html/HtmlReporter.js        |  101 -
 test/autotest/html/HtmlReporterHelpers.js |   60 -
 test/autotest/html/ReporterView.js        |  164 --
 test/autotest/html/SpecView.js            |   79 -
 test/autotest/html/SuiteView.js           |   22 -
 test/autotest/html/TrivialReporter.js     |  192 --
 test/autotest/index.html                  |   59 -
 test/autotest/jasmine.css                 |   81 -
 test/autotest/jasmine.js                  | 2530 ------------------------
 test/autotest/pages/.DS_Store             |  Bin 6148 -> 0 bytes
 test/autotest/pages/contacts.html         |   71 -
 test/autotest/test-runner.js              |   62 -
 test/autotest/tests/.DS_Store             |  Bin 6148 -> 0 bytes
 test/autotest/tests/contacts.tests.js     |  538 -----
 test/contacts/index.html                  |  134 --
 test/cordova-incl.js                      |   72 -
 test/index.html                           |   65 -
 test/main.js                              |  163 --
 test/master.css                           |  164 --
 23 files changed, 43 insertions(+), 4562 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/71d66efe/doc/index.md
----------------------------------------------------------------------
diff --cc doc/index.md
index 190bf05,4d2f944..0a78d4c
--- a/doc/index.md
+++ b/doc/index.md
@@@ -281,8 -293,10 +293,11 @@@ for details
  
  - __categories__: Partially supported. Fields __pref__ and __type__ are returning `null`
  
- - __organizations__: Partially supported. Fields __pref__, __type__ and __department__ are returning `null`. Fields __name__ and __title__ stored in __org__ and __jobTitle__.
+ - __ims__: Not supported
+ 
+ - __photos__: Not supported
+ 
 +
  ### iOS Quirks
  
  - __displayName__: Not supported on iOS, returning `null` unless there is no `ContactName` specified, in which case it returns the composite name, __nickname__ or `""`, respectively.


[30/50] [abbrv] git commit: CB-6114 Incremented plugin version on dev branch.

Posted by mm...@apache.org.
CB-6114 Incremented plugin version on dev branch.


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/427d1d60
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/427d1d60
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/427d1d60

Branch: refs/heads/cdvtest
Commit: 427d1d60c43e65d25331d587dcdf2ac9996b87c1
Parents: 716ead0
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Feb 27 12:29:15 2014 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Feb 27 12:29:15 2014 -0500

----------------------------------------------------------------------
 plugin.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/427d1d60/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index bf2aeb8..1294b13 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -4,7 +4,7 @@
     xmlns:rim="http://www.blackberry.com/ns/widgets"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="org.apache.cordova.contacts"
-    version="0.2.9">
+    version="0.2.10-dev">
 
     <name>Contacts</name>
     <description>Cordova Contacts Plugin</description>


[35/50] [abbrv] git commit: CB-6212 iOS: fix warnings compiled under arm64 64-bit

Posted by mm...@apache.org.
CB-6212 iOS: fix warnings compiled under arm64 64-bit


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/0d7bf398
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/0d7bf398
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/0d7bf398

Branch: refs/heads/cdvtest
Commit: 0d7bf3980516b577deae0ff7f365b5c53116cbc1
Parents: db17e0b
Author: James Jong <wj...@gmail.com>
Authored: Tue Mar 11 13:28:34 2014 -0400
Committer: James Jong <wj...@gmail.com>
Committed: Tue Mar 11 13:28:34 2014 -0400

----------------------------------------------------------------------
 src/ios/CDVContact.m | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/0d7bf398/src/ios/CDVContact.m
----------------------------------------------------------------------
diff --git a/src/ios/CDVContact.m b/src/ios/CDVContact.m
index 82704ea..5bf9f3c 100644
--- a/src/ios/CDVContact.m
+++ b/src/ios/CDVContact.m
@@ -1706,7 +1706,7 @@ static NSDictionary* org_apache_cordova_contacts_defaultFields = nil;
     BOOL bFound = NO;
 
     NSArray* values = [self valuesForProperty:propId inRecord:self.record];  // array of dictionaries (as CFDictionaryRef)
-    int dictCount = [values count];
+    NSUInteger dictCount = [values count];
 
     // for ims dictionary contains with service (w3C type) and username (W3c value)
     // for addresses dictionary contains street, city, state, zip, country


[26/50] [abbrv] git commit: CB-5980 Updated version and RELEASENOTES.md for release 0.2.8

Posted by mm...@apache.org.
CB-5980 Updated version and RELEASENOTES.md for release 0.2.8


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/adf7042a
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/adf7042a
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/adf7042a

Branch: refs/heads/cdvtest
Commit: adf7042ae9e074cbcc282214a53edc8cb553eb30
Parents: e426029
Author: Steven Gill <st...@gmail.com>
Authored: Wed Feb 5 17:53:58 2014 -0800
Committer: Steven Gill <st...@gmail.com>
Committed: Mon Feb 10 15:21:22 2014 -0800

----------------------------------------------------------------------
 RELEASENOTES.md | 4 ++++
 plugin.xml      | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/adf7042a/RELEASENOTES.md
----------------------------------------------------------------------
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index b1494fb..4950f6c 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -68,3 +68,7 @@
 
 ### 0.2.7 (Jan 02, 2014)
 * B-5658 Add doc/index.md for Contacts plugin
+
+### 0.2.8 (Feb 05, 2014)
+* [CB-3208] FFOS docs updated
+* CB-4590 - chooseContact in CDVContacts crashes app

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/adf7042a/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index 6b68593..4f9db70 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -4,7 +4,7 @@
     xmlns:rim="http://www.blackberry.com/ns/widgets"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="org.apache.cordova.contacts"
-    version="0.2.8-dev">
+    version="0.2.8">
 
     <name>Contacts</name>
     <description>Cordova Contacts Plugin</description>


[37/50] [abbrv] git commit: CB-6212 iOS: fix warnings compiled under arm64 64-bit

Posted by mm...@apache.org.
CB-6212 iOS: fix warnings compiled under arm64 64-bit

-for CDVContacts.m


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/910f80fa
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/910f80fa
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/910f80fa

Branch: refs/heads/cdvtest
Commit: 910f80fae8fe79eb8342bcd737b663c2d5f62d78
Parents: 0d7bf39
Author: James Jong <wj...@gmail.com>
Authored: Thu Mar 13 09:39:14 2014 -0400
Committer: James Jong <wj...@gmail.com>
Committed: Thu Mar 13 09:42:04 2014 -0400

----------------------------------------------------------------------
 src/ios/CDVContacts.m | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/910f80fa/src/ios/CDVContacts.m
----------------------------------------------------------------------
diff --git a/src/ios/CDVContacts.m b/src/ios/CDVContacts.m
index aa0c9c7..56ca2ab 100644
--- a/src/ios/CDVContacts.m
+++ b/src/ios/CDVContacts.m
@@ -135,7 +135,7 @@
     [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError* errCode) {
         if (addrBook == NULL) {
             // permission was denied or other error - return error
-            CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:errCode ? errCode.errorCode:UNKNOWN_ERROR];
+            CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:errCode ? (int)errCode.errorCode:UNKNOWN_ERROR];
             [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId];
             return;
         }
@@ -269,7 +269,7 @@
             // iOS 4 & 5
             addrBook = ABAddressBookCreate();
         }
-        ABRecordRef person = ABAddressBookGetPersonWithRecordID(addrBook, [[picker.pickedContactDictionary objectForKey:kW3ContactId] integerValue]);
+        ABRecordRef person = ABAddressBookGetPersonWithRecordID(addrBook, (int)[[picker.pickedContactDictionary objectForKey:kW3ContactId] integerValue]);
         if (person) {
             CDVContact* pickedContact = [[CDVContact alloc] initFromABRecord:(ABRecordRef)person];
             NSArray* fields = [picker.options objectForKey:@"fields"];
@@ -304,7 +304,7 @@
         [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError* errCode) {
             if (addrBook == NULL) {
                 // permission was denied or other error - return error
-                CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:errCode ? errCode.errorCode:UNKNOWN_ERROR];
+                CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:errCode ? (int)errCode.errorCode:UNKNOWN_ERROR];
                 [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId];
                 return;
             }
@@ -333,7 +333,7 @@
                 if (foundRecords && ([foundRecords count] > 0)) {
                     // create Contacts and put into matches array
                     // doesn't make sense to ask for all records when multiple == NO but better check
-                    int xferCount = multiple == YES ? [foundRecords count] : 1;
+                    int xferCount = multiple == YES ? (int)[foundRecords count] : 1;
                     matches = [NSMutableArray arrayWithCapacity:xferCount];
 
                     for (int k = 0; k < xferCount; k++) {
@@ -346,7 +346,7 @@
                 foundRecords = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addrBook);
                 matches = [NSMutableArray arrayWithCapacity:1];
                 BOOL bFound = NO;
-                int testCount = [foundRecords count];
+                int testCount = (int)[foundRecords count];
 
                 for (int j = 0; j < testCount; j++) {
                     CDVContact* testContact = [[CDVContact alloc] initFromABRecord:(__bridge ABRecordRef)[foundRecords objectAtIndex:j]];
@@ -365,7 +365,7 @@
                 // convert to JS Contacts format and return in callback
                 // - returnFields  determines what properties to return
                 @autoreleasepool {
-                    int count = multiple == YES ? [matches count] : 1;
+                    int count = multiple == YES ? (int)[matches count] : 1;
 
                     for (int i = 0; i < count; i++) {
                         CDVContact* newContact = [matches objectAtIndex:i];
@@ -401,7 +401,7 @@
             CDVPluginResult* result = nil;
             if (addrBook == NULL) {
                 // permission was denied or other error - return error
-                result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errorCode ? errorCode.errorCode:UNKNOWN_ERROR];
+                result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errorCode ? (int)errorCode.errorCode:UNKNOWN_ERROR];
                 [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId];
                 return;
             }
@@ -450,7 +450,7 @@
             CFRelease(addrBook);
 
             if (bIsError) {
-                result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errCode];
+                result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:(int)errCode];
             }
 
             if (result) {
@@ -472,7 +472,7 @@
         CDVPluginResult* result = nil;
         if (addrBook == NULL) {
             // permission was denied or other error - return error
-            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errorCode ? errorCode.errorCode:UNKNOWN_ERROR];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errorCode ? (int)errorCode.errorCode:UNKNOWN_ERROR];
             [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId];
             return;
         }
@@ -516,7 +516,7 @@
             CFRelease(addrBook);
         }
         if (bIsError) {
-            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errCode];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:(int)errCode];
         }
         if (result) {
             [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId];


[33/50] [abbrv] git commit: Merge branch 'master' into dev

Posted by mm...@apache.org.
Merge branch 'master' into dev


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/9712e9be
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/9712e9be
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/9712e9be

Branch: refs/heads/cdvtest
Commit: 9712e9be9469af5082727544d5f069e03ffa2ff6
Parents: 5738562 431eeea
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Feb 27 16:04:37 2014 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Feb 27 16:04:37 2014 -0500

----------------------------------------------------------------------

----------------------------------------------------------------------



[06/50] [abbrv] git commit: refactoring * update from Mozilla moved to Contact prototype * some comments added/modified

Posted by mm...@apache.org.
refactoring
* update from Mozilla moved to Contact prototype
* some comments added/modified


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/24eed638
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/24eed638
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/24eed638

Branch: refs/heads/cdvtest
Commit: 24eed63867fe02253cbbcb004e0044c416904828
Parents: b52fafd
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Wed Dec 18 10:10:05 2013 +0100
Committer: Piotr Zalewa <pi...@zalewa.info>
Committed: Wed Dec 18 10:10:05 2013 +0100

----------------------------------------------------------------------
 src/firefoxos/ContactsProxy.js | 140 +++++++++++++++++++-----------------
 1 file changed, 76 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/24eed638/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --git a/src/firefoxos/ContactsProxy.js b/src/firefoxos/ContactsProxy.js
index 4d99428..ecdd0fb 100644
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@ -42,6 +42,7 @@ function _hasId(id) {
     return true;
 }
 
+// Extend mozContact prototype to provide update from Cordova
 mozContact.prototype.updateFromCordova = function(contact) {
 
     function exportContactFieldArray(contactFieldArray, key) {
@@ -141,32 +142,9 @@ mozContact.prototype.updateFromCordova = function(contact) {
     */
 }
 
-function createMozillaFromCordova(successCB, errorCB, contact) {
-
-    var mozC;
-    // get contact if exists
-    if (_hasId(contact.id)) {
-      var search = navigator.mozContacts.find({
-        filterBy: ['id'], filterValue: contact.id, filterOp: 'equals'});
-      search.onsuccess = function() {
-        mozC = search.result[0];
-        mozC.updateFromCordova(contact);
-        successCB(mozC);
-      };
-      search.onerror = errorCB;
-      return;
-    }
 
-    var mozC = new mozContact();
-    if ('init' in mozC) {
-      // 1.2 and below compatibility
-      mozC.init();
-    }
-    mozC.updateFromCordova(contact);
-    successCB(mozC);
-}
-
-function createCordovaFromMozilla(moz) {
+// Extend Cordova Contact prototype to provide update from FFOS contact
+Contact.prototype.updateFromMozilla = function(moz) {
     function exportContactField(data) {
         var contactFields = [];
         for (var i=0; i < data.length; i++) {
@@ -177,10 +155,9 @@ function createCordovaFromMozilla(moz) {
         return contactFields;
     }
 
-    var contact = new Contact();
 
     if (moz.id) {
-        contact.id = moz.id;
+        this.id = moz.id;
     }
     var nameFields = [['givenName'], ['familyName'], 
                        ['honorificPrefix'], ['honorificSuffix'],
@@ -193,35 +170,69 @@ function createCordovaFromMozilla(moz) {
             name[field[1] || field[0]] = moz[field[0]].join(' ');
         }
     }
-    contact.name = name;
+    this.name = name;
     j = 0; while(field = baseArrayFields[j++]) {
         if (moz[field[0]]) {
-            contact[field[1] || field[0]] = moz[field[0]].join(' ');
+            this[field[1] || field[0]] = moz[field[0]].join(' ');
         }
     }
     j = 0; while(field = baseStringFields[j++]) {
         if (moz[field[0]]) {
-            contact[field[1] || field[0]] = moz[field[0]];
+            this[field[1] || field[0]] = moz[field[0]];
         }
     }
     // emails
     if (moz.email) {
-        contact.emails = exportContactField(moz.email);
+        this.emails = exportContactField(moz.email);
     }
     // categories
     // addresses
     if (moz.tel) {
-        contact.phoneNumbers = exportContactField(moz.tel);
+        this.phoneNumbers = exportContactField(moz.tel);
     }
     // birthday
     if (moz.bday) {
-      contact.birthday = Date.parse(moz.bday);
+      this.birthday = Date.parse(moz.bday);
     }
     // organizations
+}
+
+
+function createMozillaFromCordova(successCB, errorCB, contact) {
+    var moz;
+    // get contact if exists
+    if (_hasId(contact.id)) {
+      var search = navigator.mozContacts.find({
+        filterBy: ['id'], filterValue: contact.id, filterOp: 'equals'});
+      search.onsuccess = function() {
+        moz = search.result[0];
+        moz.updateFromCordova(contact);
+        successCB(moz);
+      };
+      search.onerror = errorCB;
+      return;
+    }
+
+    // create empty contact
+    moz = new mozContact();
+    if ('init' in moz) {
+      // 1.2 and below compatibility
+      moz.init();
+    }
+    moz.updateFromCordova(contact);
+    successCB(moz);
+}
+
+
+function createCordovaFromMozilla(moz) {
+    var contact = new Contact();
+    contact.updateFromMozilla(moz);
     return contact;
 }
 
 
+// However API requires the ability to save multiple contacts, it is 
+// used to save only one element array
 function saveContacts(successCB, errorCB, contacts) {
     // a closure which is holding the right moz contact
     function makeSaveSuccessCB(moz) {
@@ -246,6 +257,7 @@ function saveContacts(successCB, errorCB, contacts) {
 }   
 
 
+// API provides a list of ids to be removed
 function remove(successCB, errorCB, ids) {
     var i=0;
     var id;
@@ -256,6 +268,7 @@ function remove(successCB, errorCB, ids) {
             errorCB(0);
             return;
         }
+        // check if provided id actually exists 
         var search = navigator.mozContacts.find({
             filterBy: ['id'], filterValue: ids[i], filterOp: 'equals'});
         search.onsuccess = function() {
@@ -277,18 +290,18 @@ function remove(successCB, errorCB, ids) {
 var mozContactSearchFields = [['name', 'displayName'], ['givenName'], 
     ['familyName'], ['email'], ['tel'], ['jobTitle'], ['note'], 
     ['tel', 'phoneNumbers'], ['email', 'emails']]; 
-// nickname and additionalName are forbidden in  1.3 and below
-// name is forbidden in 1.2 and below
+// Searching by nickname and additionalName is forbidden in  1.3 and below
+// Searching by name is forbidden in 1.2 and below
 
-// finds if a value is inside array array and returns FFOS if different
-function getMozSearchField(arr, value) {
-    if (arr.indexOf([value]) >= 0) {
-        return value;
+// finds if a key is allowed and returns FFOS name if different
+function getMozSearchField(key) {
+    if (mozContactSearchFields.indexOf([key]) >= 0) {
+        return key;
     }
-    for (var i=0; i < arr.length; i++) {
-        if (arr[i].length > 1) {
-            if (arr[i][1] === value) {
-                return arr[i][0];
+    for (var i=0; i < mozContactSearchFields.length; i++) {
+        if (mozContactSearchFields[i].length > 1) {
+            if (mozContactSearchFields[i][1] === key) {
+                return mozContactSearchFields[i][0];
             }
         }
     }
@@ -296,16 +309,33 @@ function getMozSearchField(arr, value) {
 }
 
 
+function _getAll(successCB, errorCB, params) {
+    // [contactField, eventualMozContactField]
+    var getall = navigator.mozContacts.getAll({});
+    var contacts = [];
+
+    getall.onsuccess = function() {
+        if (getall.result) {
+            contacts.push(createCordovaFromMozilla(getall.result));
+            getall.continue();
+        } else {
+            successCB(contacts);
+        }
+    };
+    getall.onerror = errorCB;
+}
+
+
 function search(successCB, errorCB, params) {
     var options = params[1] || {}; 
     if (!options.filter) {
-        return getAll(successCB, errorCB, params);
+        return _getAll(successCB, errorCB, params);
     }
     var filterBy = [];
     // filter and translate fields
     for (var i=0; i < params[0].length; i++) {
         var searchField = params[0][i];
-        var mozField = getMozSearchField(mozContactSearchFields, searchField);
+        var mozField = getMozSearchField(searchField);
         if (searchField === 'name') {
             // Cordova uses name for search by all name fields.
             filterBy.push('givenName');
@@ -314,6 +344,7 @@ function search(successCB, errorCB, params) {
         } 
         if (searchField === 'displayName' && 'init' in new mozContact()) {
             // ``init`` in ``mozContact`` indicates FFOS version 1.2 or below
+            // Searching by name (in moz) is then forbidden
             console.log('FFOS ContactProxy: Unable to search by displayName on FFOS 1.2');
             continue;
         } 
@@ -343,25 +374,6 @@ function search(successCB, errorCB, params) {
 }
 
 
-/* navigator.mozContacts.find has issues - using getAll 
- * https://bugzilla.mozilla.org/show_bug.cgi?id=941008
- */
-function getAll(successCB, errorCB, params) {
-    // [contactField, eventualMozContactField]
-    var getall = navigator.mozContacts.getAll({});
-    var contacts = [];
-
-    getall.onsuccess = function() {
-        if (getall.result) {
-            contacts.push(createCordovaFromMozilla(getall.result));
-            getall.continue();
-        } else {
-            successCB(contacts);
-        }
-    };
-    getall.onerror = errorCB;
-}
-
 module.exports = {
     save: saveContacts,
     remove: remove,


[07/50] [abbrv] git commit: B-5658 Add doc.index.md for Contacts plugin

Posted by mm...@apache.org.
B-5658 Add doc.index.md for Contacts plugin


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/0752457e
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/0752457e
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/0752457e

Branch: refs/heads/cdvtest
Commit: 0752457e0d4464cd1ba266e3a1700ab85c415b60
Parents: 4884d94
Author: Andrew Grieve <ag...@chromium.org>
Authored: Wed Dec 18 11:55:44 2013 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Wed Dec 18 11:55:44 2013 -0500

----------------------------------------------------------------------
 README.md    |  27 ++-
 doc/index.md | 640 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 659 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/0752457e/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index f536c6e..5b74138 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,22 @@
-cordova-plugin-contacts
---------------------------------
-To install this plugin, follow the [Command-line Interface Guide](http://cordova.apache.org/docs/en/edge/guide_cli_index.md.html#The%20Command-line%20Interface).
+<!---
+ license: Licensed to the Apache Software Foundation (ASF) under one
+         or more contributor license agreements.  See the NOTICE file
+         distributed with this work for additional information
+         regarding copyright ownership.  The ASF licenses this file
+         to you under the Apache License, Version 2.0 (the
+         "License"); you may not use this file except in compliance
+         with the License.  You may obtain a copy of the License at
 
-If you are not using the Cordova Command-line Interface, follow [Using Plugman to Manage Plugins](http://cordova.apache.org/docs/en/edge/plugin_ref_plugman.md.html).
+           http://www.apache.org/licenses/LICENSE-2.0
 
-## Using Contacts in Firefox OS
+         Unless required by applicable law or agreed to in writing,
+         software distributed under the License is distributed on an
+         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+         KIND, either express or implied.  See the License for the
+         specific language governing permissions and limitations
+         under the License.
+-->
 
-Edit manifest.webapp and add permissions field as described in [Manifest Docs](https://developer.mozilla.org/en-US/Apps/Developing/Manifest#permissions).
-There is also a need to change the webapp type to "privileged"  - [Manifest Docs](https://developer.mozilla.org/en-US/Apps/Developing/Manifest#type).
-All privileged apps enforce [Content Security Policy](https://developer.mozilla.org/en-US/Apps/CSP) which forbids inline script. Initialize your application in another way.
+# org.apache.cordova.contacts
+
+Plugin documentation: [doc/index.md](doc/index.md)

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/0752457e/doc/index.md
----------------------------------------------------------------------
diff --git a/doc/index.md b/doc/index.md
new file mode 100644
index 0000000..3677f06
--- /dev/null
+++ b/doc/index.md
@@ -0,0 +1,640 @@
+<!---
+ license: Licensed to the Apache Software Foundation (ASF) under one
+         or more contributor license agreements.  See the NOTICE file
+         distributed with this work for additional information
+         regarding copyright ownership.  The ASF licenses this file
+         to you under the Apache License, Version 2.0 (the
+         "License"); you may not use this file except in compliance
+         with the License.  You may obtain a copy of the License at
+
+           http://www.apache.org/licenses/LICENSE-2.0
+
+         Unless required by applicable law or agreed to in writing,
+         software distributed under the License is distributed on an
+         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+         KIND, either express or implied.  See the License for the
+         specific language governing permissions and limitations
+         under the License.
+-->
+
+# org.apache.cordova.contacts
+
+Provides access to the device contacts database.
+
+__WARNING__: Collection and use of contact data raises
+important privacy issues.  Your app's privacy policy should discuss
+how the app uses contact data and whether it is shared with any other
+parties.  Contact information is considered sensitive because it
+reveals the people with whom a person communicates.  Therefore, in
+addition to the app's privacy policy, you should strongly consider
+providing a just-in-time notice before the app accesses or uses
+contact data, if the device operating system doesn't do so
+already. That notice should provide the same information noted above,
+as well as obtaining the user's permission (e.g., by presenting
+choices for __OK__ and __No Thanks__).  Note that some app
+marketplaces may require the app to provide a just-in-time notice and
+obtain the user's permission before accessing contact data.  A
+clear and easy-to-understand user experience surrounding the use of
+contact data helps avoid user confusion and perceived misuse of
+contact data.  For more information, please see the Privacy Guide.
+
+## Installation
+
+    cordova plugin add org.apache.cordova.contacts
+
+### Firefox OS Quirks
+
+Edit manifest.webapp and add permissions field as described in [Manifest Docs](https://developer.mozilla.org/en-US/Apps/Developing/Manifest#permissions).
+There is also a need to change the webapp type to "privileged"  - [Manifest Docs](https://developer.mozilla.org/en-US/Apps/Developing/Manifest#type).
+All privileged apps enforce [Content Security Policy](https://developer.mozilla.org/en-US/Apps/CSP) which forbids inline script. Initialize your application in another way.
+
+
+## navigator.contacts
+
+### Methods
+
+- navigator.contacts.create
+- navigator.contacts.find
+
+### Objects
+
+- Contact
+- ContactName
+- ContactField
+- ContactAddress
+- ContactOrganization
+- ContactFindOptions
+- ContactError
+
+## navigator.contacts.create
+
+The `navigator.contacts.create` method is synchronous, and returns a new `Contact` object.
+
+This method does not retain the Contact object in the device contacts
+database, for which you need to invoke the `Contact.save` method.
+
+### Supported Platforms
+
+- Android
+- BlackBerry 10
+- iOS
+- Windows Phone 7 and 8
+
+### Example
+
+    var myContact = navigator.contacts.create({"displayName": "Test User"});
+
+## navigator.contacts.find
+
+The `navigator.contacts.find` method executes asynchronously, querying the
+device contacts database and returning an array of `Contact` objects.
+The resulting objects are passed to the `contactSuccess` callback
+function specified by the __contactSuccess__ parameter.
+
+The __contactFields__ parameter specifies the fields to be used as a
+search qualifier, and only those results are passed to the
+__contactSuccess__ callback function.  A zero-length __contactFields__
+parameter is invalid and results in
+`ContactError.INVALID_ARGUMENT_ERROR`. A __contactFields__ value of
+`"*"` returns all contact fields.
+
+The __contactFindOptions.filter__ string can be used as a search
+filter when querying the contacts database.  If provided, a
+case-insensitive, partial value match is applied to each field
+specified in the __contactFields__ parameter.  If there's a match for
+_any_ of the specified fields, the contact is returned.
+
+### Parameters
+
+- __contactFields__: Contact fields to use as a search qualifier. The resulting `Contact` object only features values for these fields. _(DOMString[])_ [Required]
+
+- __contactSuccess__: Success callback function invoked with the array of Contact objects returned from the database. [Required]
+
+- __contactError__: Error callback function, invoked when an error occurs. [Optional]
+
+- __contactFindOptions__: Search options to filter navigator.contacts. [Optional] Keys include:
+
+    - __filter__: The search string used to find navigator.contacts. _(DOMString)_ (Default: `""`)
+
+    - __multiple__: Determines if the find operation returns multiple navigator.contacts. _(Boolean)_ (Default: `false`)
+
+### Supported Platforms
+
+- Android
+- BlackBerry 10
+- iOS
+- Windows Phone 7 and 8
+- Windows 8
+
+### Example
+
+    function onSuccess(contacts) {
+        alert('Found ' + navigator.contacts.length + ' navigator.contacts.');
+    };
+
+    function onError(contactError) {
+        alert('onError!');
+    };
+
+    // find all contacts with 'Bob' in any name field
+    var options      = new ContactFindOptions();
+    options.filter   = "Bob";
+    options.multiple = true;
+    var fields       = ["displayName", "name"];
+    navigator.contacts.find(fields, onSuccess, onError, options);
+
+
+## Contact
+
+The `Contact` object represents a user's contact.  Contacts can be
+created, stored, or removed from the device contacts database.
+Contacts can also be retrieved (individually or in bulk) from the
+database by invoking the `navigator.contacts.find` method.
+
+__NOTE__: Not all of the contact fields listed above are supported on
+every device platform.  Please check each platform's _Quirks_ section
+for details.
+
+
+### Properties
+
+- __id__: A globally unique identifier. _(DOMString)_
+
+- __displayName__: The name of this Contact, suitable for display to end users. _(DOMString)_
+
+- __name__: An object containing all components of a persons name. _(ContactName)_
+
+- __nickname__: A casual name by which to address the contact. _(DOMString)_
+
+- __phoneNumbers__: An array of all the contact's phone numbers. _(ContactField[])_
+
+- __emails__: An array of all the contact's email addresses. _(ContactField[])_
+
+- __addresses__: An array of all the contact's addresses. _(ContactAddress[])_
+
+- __ims__: An array of all the contact's IM addresses. _(ContactField[])_
+
+- __organizations__: An array of all the contact's organizations. _(ContactOrganization[])_
+
+- __birthday__: The birthday of the contact. _(Date)_
+
+- __note__: A note about the contact. _(DOMString)_
+
+- __photos__: An array of the contact's photos. _(ContactField[])_
+
+- __categories__:  An array of all the user-defined categories associated with the contact. _(ContactField[])_
+
+- __urls__:  An array of web pages associated with the contact. _(ContactField[])_
+
+### Methods
+
+- __clone__: Returns a new `Contact` object that is a deep copy of the calling object, with the `id` property set to `null`.
+
+- __remove__: Removes the contact from the device contacts database, otherwise executes an error callback with a `ContactError` object.
+
+- __save__: Saves a new contact to the device contacts database, or updates an existing contact if a contact with the same __id__ already exists.
+
+### Supported Platforms
+
+- Amazon Fire OS
+- Android
+- BlackBerry 10
+- iOS
+- Windows Phone 7 and 8
+- Windows 8
+
+### Save Example
+
+    function onSuccess(contact) {
+        alert("Save Success");
+    };
+
+    function onError(contactError) {
+        alert("Error = " + contactError.code);
+    };
+
+    // create a new contact object
+    var contact = navigator.contacts.create();
+    contact.displayName = "Plumber";
+    contact.nickname = "Plumber";            // specify both to support all devices
+
+    // populate some fields
+    var name = new ContactName();
+    name.givenName = "Jane";
+    name.familyName = "Doe";
+    contact.name = name;
+
+    // save to device
+    contact.save(onSuccess,onError);
+
+### Clone Example
+
+        // clone the contact object
+        var clone = contact.clone();
+        clone.name.givenName = "John";
+        console.log("Original contact name = " + contact.name.givenName);
+        console.log("Cloned contact name = " + clone.name.givenName);
+
+### Remove Example
+
+    function onSuccess() {
+        alert("Removal Success");
+    };
+
+    function onError(contactError) {
+        alert("Error = " + contactError.code);
+    };
+
+        // remove the contact from the device
+        contact.remove(onSuccess,onError);
+
+
+### Android 2.X Quirks
+
+- __categories__:  Not supported on Android 2.X devices, returning `null`.
+
+### BlackBerry 10 Quirks
+
+- __id__: Supported.  Assigned by the device when saving the contact.
+
+- __displayName__: Supported.  Stored in BlackBerry __user1__ field.
+
+- __nickname__: Not supported, returning `null`.
+
+- __phoneNumbers__: Partially supported.  Phone numbers are stored in BlackBerry fields __homePhone1__ and __homePhone2__ if _type_ is 'home', __workPhone1__ and __workPhone2__ if _type_ is 'work', __mobilePhone__ if _type_ is 'mobile', __faxPhone__ if _type_ is 'fax', __pagerPhone__ if _type_ is 'pager', and __otherPhone__ if _type_ is none of the above.
+
+- __emails__: Partially supported.  The first three email addresses are stored in the BlackBerry __email1__, __email2__, and __email3__ fields, respectively.
+
+- __addresses__: Partially supported.  The first and second addresses are stored in the BlackBerry __homeAddress__ and __workAddress__ fields, respectively.
+
+- __ims__: Not supported, returning `null`.
+
+- __organizations__: Partially supported.  The __name__ and __title__ of the first organization are stored in the BlackBerry __company__ and __title__ fields, respectively.
+
+- __photos__: Partially supported.  A single thumbnail-sized photo is supported.  To set a contact's photo, pass in a either a base64-encoded image, or a URL pointing to the image.  The image is scaled down before saving to the BlackBerry contacts database.   The contact photo is returned as a base64-encoded image.
+
+- __categories__:  Partially supported.  Only _Business_ and _Personal_ categories are supported.
+
+- __urls__:  Partially supported. The first URL is stored in BlackBerry __webpage__ field.
+
+### iOS Quirks
+
+- __displayName__: Not supported on iOS, returning `null` unless there is no `ContactName` specified, in which case it returns the composite name, __nickname__ or `""`, respectively.
+
+- __birthday__: Must be input as a JavaScript `Date` object, the same way it is returned.
+
+- __photos__: Returns a File URL to the image, which is stored in the application's temporary directory.  Contents of the temporary directory are removed when the application exits.
+
+- __categories__:  This property is currently not supported, returning `null`.
+
+### Windows Phone 7 and 8 Quirks
+
+- __displayName__: When creating a contact, the value provided for the display name parameter differs from the display name retrieved when finding the contact.
+
+- __urls__: When creating a contact, users can input and save more than one web address, but only one is available when searching the contact.
+
+- __phoneNumbers__: The _pref_ option is not supported. The _type_ is not supported in a _find_ operation. Only one `phoneNumber` is allowed for each _type_.
+
+- __emails__: The _pref_ option is not supported. Home and personal references same email entry. Only one entry is allowed for each _type_.
+
+- __addresses__: Supports only work, and home/personal _type_. The home and personal _type_ reference the same address entry. Only one entry is allowed for each _type_.
+
+- __organizations__: Only one is allowed, and does not support the _pref_, _type_, and _department_ attributes.
+
+- __note__: Not supported, returning `null`.
+
+- __ims__: Not supported, returning `null`.
+
+- __birthdays__: Not supported, returning `null`.
+
+- __categories__: Not supported, returning `null`.
+
+
+## ContactAddress
+
+The `ContactAddress` object stores the properties of a single address
+of a contact.  A `Contact` object may include more than one address in
+a `ContactAddress[]` array.
+
+
+### Properties
+
+- __pref__: Set to `true` if this `ContactAddress` contains the user's preferred value. _(boolean)_
+
+- __type__: A string indicating what type of field this is, _home_ for example. _(DOMString)_
+
+- __formatted__: The full address formatted for display. _(DOMString)_
+
+- __streetAddress__: The full street address. _(DOMString)_
+
+- __locality__: The city or locality. _(DOMString)_
+
+- __region__: The state or region. _(DOMString)_
+
+- __postalCode__: The zip code or postal code. _(DOMString)_
+
+- __country__: The country name. _(DOMString)_
+
+### Supported Platforms
+
+- Amazon Fire OS
+- Android
+- BlackBerry 10
+- iOS
+- Windows Phone 7 and 8
+- Windows 8
+
+### Example
+
+    // display the address information for all contacts
+
+    function onSuccess(contacts) {
+        for (var i = 0; i < navigator.contacts.length; i++) {
+            for (var j = 0; j < contacts[i].addresses.length; j++) {
+                alert("Pref: "         + contacts[i].addresses[j].pref          + "\n" +
+                    "Type: "           + contacts[i].addresses[j].type          + "\n" +
+                    "Formatted: "      + contacts[i].addresses[j].formatted     + "\n" +
+                    "Street Address: " + contacts[i].addresses[j].streetAddress + "\n" +
+                    "Locality: "       + contacts[i].addresses[j].locality      + "\n" +
+                    "Region: "         + contacts[i].addresses[j].region        + "\n" +
+                    "Postal Code: "    + contacts[i].addresses[j].postalCode    + "\n" +
+                    "Country: "        + contacts[i].addresses[j].country);
+            }
+        }
+    };
+
+    function onError(contactError) {
+        alert('onError!');
+    };
+
+    // find all contacts
+    var options = new ContactFindOptions();
+    options.filter = "";
+    var filter = ["displayName", "addresses"];
+    navigator.contacts.find(filter, onSuccess, onError, options);
+
+### Android 2.X Quirks
+
+- __pref__: Not supported, returning `false` on Android 2.X devices.
+
+### BlackBerry 10 Quirks
+
+- __pref__: Not supported on BlackBerry devices, returning `false`.
+
+- __type__: Partially supported.  Only one each of _Work_ and _Home_ type addresses can be stored per contact.
+
+- __formatted__: Partially supported.  Returns a concatenation of all BlackBerry address fields.
+
+- __streetAddress__: Supported.  Returns a concatenation of BlackBerry __address1__ and __address2__ address fields.
+
+- __locality__: Supported.  Stored in BlackBerry __city__ address field.
+
+- __region__: Supported.  Stored in BlackBerry __stateProvince__ address field.
+
+- __postalCode__: Supported.  Stored in BlackBerry __zipPostal__ address field.
+
+- __country__: Supported.
+
+### iOS Quirks
+
+- __pref__: Not supported on iOS devices, returning `false`.
+
+- __formatted__: Currently not supported.
+
+
+## ContactError
+
+The `ContactError` object is returned to the user through the
+`contactError` callback function when an error occurs.
+
+### Properties
+
+- __code__: One of the predefined error codes listed below.
+
+### Constants
+
+- `ContactError.UNKNOWN_ERROR`
+- `ContactError.INVALID_ARGUMENT_ERROR`
+- `ContactError.TIMEOUT_ERROR`
+- `ContactError.PENDING_OPERATION_ERROR`
+- `ContactError.IO_ERROR`
+- `ContactError.NOT_SUPPORTED_ERROR`
+- `ContactError.PERMISSION_DENIED_ERROR`
+
+
+## ContactField
+
+The `ContactField` object is a reusable component that represents
+contact fields generically.  Each `ContactField` object contains a
+`value`, `type`, and `pref` property.  A `Contact` object stores
+several properties in `ContactField[]` arrays, such as phone numbers
+and email addresses.
+
+In most instances, there are no pre-determined values for a
+`ContactField` object's __type__ attribute.  For example, a phone
+number can specify __type__ values of _home_, _work_, _mobile_,
+_iPhone_, or any other value that is supported by a particular device
+platform's contact database.  However, for the `Contact` __photos__
+field, the __type__ field indicates the format of the returned image:
+__url__ when the __value__ attribute contains a URL to the photo
+image, or _base64_ when the __value__ contains a base64-encoded image
+string.
+
+### Properties
+
+- __type__: A string that indicates what type of field this is, _home_ for example. _(DOMString)_
+
+- __value__: The value of the field, such as a phone number or email address. _(DOMString)_
+
+- __pref__: Set to `true` if this `ContactField` contains the user's preferred value. _(boolean)_
+
+### Supported Platforms
+
+- Amazon Fire OS
+- Android
+- BlackBerry 10
+- iOS
+- Windows Phone 7 and 8
+- Windows 8
+
+### Example
+
+        // create a new contact
+        var contact = navigator.contacts.create();
+
+        // store contact phone numbers in ContactField[]
+        var phoneNumbers = [];
+        phoneNumbers[0] = new ContactField('work', '212-555-1234', false);
+        phoneNumbers[1] = new ContactField('mobile', '917-555-5432', true); // preferred number
+        phoneNumbers[2] = new ContactField('home', '203-555-7890', false);
+        contact.phoneNumbers = phoneNumbers;
+
+        // save the contact
+        contact.save();
+
+### Android Quirks
+
+- __pref__: Not supported, returning `false`.
+
+### BlackBerry 10 Quirks
+
+- __type__: Partially supported.  Used for phone numbers.
+
+- __value__: Supported.
+
+- __pref__: Not supported, returning `false`.
+
+### iOS Quirks
+
+- __pref__: Not supported, returning `false`.
+
+
+## ContactName
+
+Contains different kinds of information about a `Contact` object's name.
+
+### Properties
+
+- __formatted__: The complete name of the contact. _(DOMString)_
+
+- __familyName__: The contact's family name. _(DOMString)_
+
+- __givenName__: The contact's given name. _(DOMString)_
+
+- __middleName__: The contact's middle name. _(DOMString)_
+
+- __honorificPrefix__: The contact's prefix (example _Mr._ or _Dr._) _(DOMString)_
+
+- __honorificSuffix__: The contact's suffix (example _Esq._). _(DOMString)_
+
+### Supported Platforms
+
+- Amazon Fire OS
+- Android 2.X
+- BlackBerry 10
+- iOS
+- Windows Phone 7 and 8
+- Windows 8
+
+### Example
+
+    function onSuccess(contacts) {
+        for (var i = 0; i < navigator.contacts.length; i++) {
+            alert("Formatted: "  + contacts[i].name.formatted       + "\n" +
+                "Family Name: "  + contacts[i].name.familyName      + "\n" +
+                "Given Name: "   + contacts[i].name.givenName       + "\n" +
+                "Middle Name: "  + contacts[i].name.middleName      + "\n" +
+                "Suffix: "       + contacts[i].name.honorificSuffix + "\n" +
+                "Prefix: "       + contacts[i].name.honorificSuffix);
+        }
+    };
+
+    function onError(contactError) {
+        alert('onError!');
+    };
+
+    var options = new ContactFindOptions();
+    options.filter = "";
+    filter = ["displayName", "name"];
+    navigator.contacts.find(filter, onSuccess, onError, options);
+
+### Android Quirks
+
+- __formatted__: Partially supported, and read-only.  Returns a concatenation of `honorificPrefix`, `givenName`, `middleName`, `familyName`, and `honorificSuffix`.
+
+### BlackBerry 10 Quirks
+
+- __formatted__: Partially supported.  Returns a concatenation of BlackBerry __firstName__ and __lastName__ fields.
+
+- __familyName__: Supported.  Stored in BlackBerry __lastName__ field.
+
+- __givenName__: Supported.  Stored in BlackBerry __firstName__ field.
+
+- __middleName__: Not supported, returning `null`.
+
+- __honorificPrefix__: Not supported, returning `null`.
+
+- __honorificSuffix__: Not supported, returning `null`.
+
+### iOS Quirks
+
+- __formatted__: Partially supported.  Returns iOS Composite Name, but is read-only.
+
+
+## ContactOrganization
+
+The `ContactOrganization` object stores a contact's organization
+properties.  A `Contact` object stores one or more
+`ContactOrganization` objects in an array.
+
+### Properties
+
+- __pref__: Set to `true` if this `ContactOrganization` contains the user's preferred value. _(boolean)_
+
+- __type__: A string that indicates what type of field this is, _home_ for example. _(DOMString)
+
+- __name__: The name of the organization. _(DOMString)_
+
+- __department__: The department the contract works for. _(DOMString)_
+
+- __title__: The contact's title at the organization. _(DOMString)_
+
+
+### Supported Platforms
+
+- Android
+- BlackBerry 10
+- iOS
+- Windows Phone 7 and 8
+- Windows 8
+
+### Example
+
+    function onSuccess(contacts) {
+        for (var i = 0; i < navigator.contacts.length; i++) {
+            for (var j = 0; j < contacts[i].organizations.length; j++) {
+                alert("Pref: "      + contacts[i].organizations[j].pref       + "\n" +
+                    "Type: "        + contacts[i].organizations[j].type       + "\n" +
+                    "Name: "        + contacts[i].organizations[j].name       + "\n" +
+                    "Department: "  + contacts[i].organizations[j].department + "\n" +
+                    "Title: "       + contacts[i].organizations[j].title);
+            }
+        }
+    };
+
+    function onError(contactError) {
+        alert('onError!');
+    };
+
+    var options = new ContactFindOptions();
+    options.filter = "";
+    filter = ["displayName", "organizations"];
+    navigator.contacts.find(filter, onSuccess, onError, options);
+
+### Android 2.X Quirks
+
+- __pref__: Not supported by Android 2.X devices, returning `false`.
+
+### BlackBerry 10 Quirks
+
+- __pref__: Not supported by BlackBerry devices, returning `false`.
+
+- __type__: Not supported by BlackBerry devices, returning `null`.
+
+- __name__: Partially supported.  The first organization name is stored in the BlackBerry __company__ field.
+
+- __department__: Not supported, returning `null`.
+
+- __title__: Partially supported.  The first organization title is stored in the BlackBerry __jobTitle__ field.
+
+### iOS Quirks
+
+- __pref__: Not supported on iOS devices, returning `false`.
+
+- __type__: Not supported on iOS devices, returning `null`.
+
+- __name__: Partially supported.  The first organization name is stored in the iOS __kABPersonOrganizationProperty__ field.
+
+- __department__: Partially supported.  The first department name is stored in the iOS __kABPersonDepartmentProperty__ field.
+
+- __title__: Partially supported.  The first title is stored in the iOS __kABPersonJobTitleProperty__ field.


[15/50] [abbrv] git commit: Merge branch 'master' of github.com:apache/cordova-plugin-contacts

Posted by mm...@apache.org.
Merge branch 'master' of github.com:apache/cordova-plugin-contacts

Conflicts:
	README.md
	src/firefoxos/ContactsProxy.js


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/84004104
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/84004104
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/84004104

Branch: refs/heads/cdvtest
Commit: 84004104a97ee1c550cdc2f919cfae6de50c6e5a
Parents: 4ca5d1b 322753f
Author: Piotr Zalewa <pi...@zalewa.info>
Authored: Tue Jan 7 12:49:20 2014 +0100
Committer: Piotr Zalewa <pi...@zalewa.info>
Committed: Tue Jan 7 12:49:20 2014 +0100

----------------------------------------------------------------------
 README.md                                       |  27 +-
 RELEASENOTES.md                                 |  26 +
 doc/index.md                                    | 640 +++++++++++++++++++
 docs/Contact/contact.md                         | 238 -------
 docs/ContactAddress/contactaddress.md           | 161 -----
 docs/ContactError/contactError.md               |  45 --
 docs/ContactField/contactfield.md               | 148 -----
 docs/ContactFindOptions/contactfindoptions.md   | 118 ----
 docs/ContactName/contactname.md                 | 147 -----
 docs/ContactOrganization/contactorganization.md | 148 -----
 docs/contacts.create.md                         |  78 ---
 docs/contacts.find.md                           | 119 ----
 docs/contacts.md                                | 104 ---
 docs/parameters/contactError.md                 |  27 -
 docs/parameters/contactFields.md                |  25 -
 docs/parameters/contactFindOptions.md           |  35 -
 docs/parameters/contactSuccess.md               |  40 --
 plugin.xml                                      |  36 +-
 src/blackberry10/plugin.xml                     |  41 --
 src/firefoxos/ContactsProxy.js                  |   2 -
 src/ubuntu/contacts.cpp                         | 576 +++++++++++++++++
 src/ubuntu/contacts.h                           |  70 ++
 src/wp/Contacts.cs                              |  59 +-
 test/autotest/tests/contacts.tests.js           |  76 ++-
 test/cordova-incl.js                            |   6 +-
 25 files changed, 1476 insertions(+), 1516 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/84004104/src/firefoxos/ContactsProxy.js
----------------------------------------------------------------------
diff --cc src/firefoxos/ContactsProxy.js
index 354a746,afd43a4..1ccbed7
--- a/src/firefoxos/ContactsProxy.js
+++ b/src/firefoxos/ContactsProxy.js
@@@ -19,8 -19,8 +19,6 @@@
   *
  */ 
  
--// somehow call this function by this:
--// exec(success, fail, "Contacts", "save", [dupContact]);
  // Cordova contact definition: 
  // http://cordova.apache.org/docs/en/2.5.0/cordova_contacts_contacts.md.html#Contact
  // FxOS contact definition:


[24/50] [abbrv] git commit: CB-5994 Switch Contact ID lookup to use Raw contact id.

Posted by mm...@apache.org.
CB-5994 Switch Contact ID lookup to use Raw contact id.

When saving a contact it is the raw contact ID that is returned and so the check in ContactManager after the save needs to be using that.  This requires this change to work on 4.3/4.2.


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/e4260290
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/e4260290
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/e4260290

Branch: refs/heads/cdvtest
Commit: e42602901cd8b1a6c24b465ac725e4132f5c7a1e
Parents: c561ba5
Author: Lou Sacco <oc...@gmail.com>
Authored: Tue Dec 10 15:46:57 2013 -0800
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Sat Feb 8 21:39:47 2014 -0500

----------------------------------------------------------------------
 src/android/ContactAccessorSdk5.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/e4260290/src/android/ContactAccessorSdk5.java
----------------------------------------------------------------------
diff --git a/src/android/ContactAccessorSdk5.java b/src/android/ContactAccessorSdk5.java
index 486424f..d8b9592 100644
--- a/src/android/ContactAccessorSdk5.java
+++ b/src/android/ContactAccessorSdk5.java
@@ -284,9 +284,9 @@ public class ContactAccessorSdk5 extends ContactAccessor {
         // Do the id query
         Cursor c = mApp.getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
                 null,
-                ContactsContract.Data.CONTACT_ID + " = ? ",
+                ContactsContract.Data.RAW_CONTACT_ID + " = ? ",
                 new String[] { id },
-                ContactsContract.Data.CONTACT_ID + " ASC");
+                ContactsContract.Data.RAW_CONTACT_ID + " ASC");
 
         JSONArray fields = new JSONArray();
         fields.put("*");


[43/50] [abbrv] git commit: CB-6126 [BlackBerry10] Update docs quirks section for fields which are supported

Posted by mm...@apache.org.
CB-6126 [BlackBerry10] Update docs quirks section for fields which are supported


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/3d79c903
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/3d79c903
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/3d79c903

Branch: refs/heads/cdvtest
Commit: 3d79c9035b5c0e46db8fd2ac180efba538dd6cf6
Parents: 910f80f
Author: Bryan Higgins <bh...@blackberry.com>
Authored: Mon Apr 14 09:11:06 2014 -0400
Committer: Bryan Higgins <bh...@blackberry.com>
Committed: Mon Apr 14 09:11:54 2014 -0400

----------------------------------------------------------------------
 doc/index.md | 22 +---------------------
 1 file changed, 1 insertion(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/3d79c903/doc/index.md
----------------------------------------------------------------------
diff --git a/doc/index.md b/doc/index.md
index 0a78d4c..f27ab52 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -267,27 +267,7 @@ for details.
 
 ### BlackBerry 10 Quirks
 
-- __id__: Supported.  Assigned by the device when saving the contact.
-
-- __displayName__: Supported.  Stored in BlackBerry __user1__ field.
-
-- __nickname__: Not supported, returning `null`.
-
-- __phoneNumbers__: Partially supported.  Phone numbers are stored in BlackBerry fields __homePhone1__ and __homePhone2__ if _type_ is 'home', __workPhone1__ and __workPhone2__ if _type_ is 'work', __mobilePhone__ if _type_ is 'mobile', __faxPhone__ if _type_ is 'fax', __pagerPhone__ if _type_ is 'pager', and __otherPhone__ if _type_ is none of the above.
-
-- __emails__: Partially supported.  The first three email addresses are stored in the BlackBerry __email1__, __email2__, and __email3__ fields, respectively.
-
-- __addresses__: Partially supported.  The first and second addresses are stored in the BlackBerry __homeAddress__ and __workAddress__ fields, respectively.
-
-- __ims__: Not supported, returning `null`.
-
-- __organizations__: Partially supported.  The __name__ and __title__ of the first organization are stored in the BlackBerry __company__ and __title__ fields, respectively.
-
-- __photos__: Partially supported.  A single thumbnail-sized photo is supported.  To set a contact's photo, pass in a either a base64-encoded image, or a URL pointing to the image.  The image is scaled down before saving to the BlackBerry contacts database.   The contact photo is returned as a base64-encoded image.
-
-- __categories__:  Partially supported.  Only _Business_ and _Personal_ categories are supported.
-
-- __urls__:  Partially supported. The first URL is stored in BlackBerry __webpage__ field.
+- __id__: Assigned by the device when saving the contact.
 
 ### FirefoxOS Quirks