Update PhoneGap definitions and tests

This commit is contained in:
Boris Yankov
2012-11-05 04:19:08 +02:00
parent 185f815b8b
commit 4cfd38ca15
3 changed files with 563 additions and 1 deletions
+226
View File
@@ -48,7 +48,233 @@ interface Camera {
cleanup(cameraSuccess: (imageData: string) => void , cameraError: (message: string) => void ): void;
}
interface CaptureAudioOptions {
limit: number;
duration: number;
mode: number;
}
interface MediaFile {
name: string;
fullPath: string;
type: string;
lastModifiedDate: Date;
size: number;
getFormatData(successCallback: Function, errorCallback?: Function): void;
}
interface Capture {
captureAudio(captureSuccess: (mediaFiles: MediaFile[]) => void , captureError: (error: CaptureError) =>void , options?: CaptureAudioOptions);
}
interface CompassOptions {
frequency?: number;
filter?: number;
}
interface CompassHeading {
magneticHeading?: number;
trueHeading?: number;
headingAccuracy?: number;
timestamp?: number;
}
interface CompassError {
code: number;
}
interface Compass {
getCurrentHeading(compassSuccess: (heading: CompassHeading) => void , compassError: (error: CompassError) => void , compassOptions?: CompassOptions): void;
watchHeading(compassSuccess: (heading: CompassHeading) => void , compassError: (error: CompassError) => void , compassOptions?: CompassOptions): void;
clearWatch(watchID: number): void;
}
interface Connection {
type: number;
}
interface ContactAddress {
pref: bool;
type: string;
formatted: string;
streetAddress: string;
locality: string;
region: string;
postalCode: string;
country: string;
}
interface ContactField {
type: string;
value: string;
pref: bool;
}
interface Contact {
id: string;
displayName: string;
name: ContactName;
nickname: string;
phoneNumbers: ContactField[];
emails: ContactField[];
addresses: ContactAddress[];
ims: ContactField[];
organizations: ContactOrganization[];
birthday: Date;
note: string;
photos: ContactField[];
categories: ContactField[];
urls: ContactField[];
}
interface ContactFindOptions {
filter?: string;
multiple?: bool;
}
interface ContactName {
formatted: string;
familyName: string;
givenName: string;
middleName: string;
honorificPrefix: string;
honorificSuffix: string;
}
interface ContactOrganization {
pref: bool;
type: string;
name: string;
department: string;
title: string;
}
interface ContactError {
code: number;
}
interface Contacts {
create(properties: any): void;
find(contactFields: string[], contactSuccess: (contacts: Contact[]) => void , contactError: (error: ContactError) => void , contactFindOptions?: ContactFindOptions): void;
}
interface Device {
name: string;
cordova: string;
platform: string;
uuid: string;
version: string;
}
interface File {
}
interface GeolocationOptions {
enableHighAccuracy: bool;
timeout: number;
maximumAge: number;
}
interface Geolocation {
getCurrentPosition(geolocationSuccess: (position: Position) => void , geolocationError?: PositionErrorCallback, geolocationOptions?: GeolocationOptions): void;
watchPosition(geolocationSuccess: (position: Position) => void , geolocationError?: PositionErrorCallback, geolocationOptions?: GeolocationOptions): void;
clearWatch(watchID: number): void;
}
interface GlobalizationError {
code: number;
message: string;
}
interface Globalization {
getPreferredLanguage(successCB, errorCB): void;
getLocaleName(successCB, errorCB): void;
dateToString(date, successCB, errorCB, options): void;
stringToDate(dateString, successCB, errorCB, options): void;
getDatePattern(successCB, errorCB, options): void;
getDateNames(successCB, errorCB, options): void;
isDayLightSavingsTime(date, successCB, errorCB): void;
getFirstDayOfWeek(successCB, errorCB): void;
numberToString(number, successCB, errorCB, options): void;
stringToNumber(string, successCB, errorCB, options): void;
getNumberPattern(successCB, errorCB, options): void;
getCurrencyPattern(currencyCode, successCB, errorCB): void;
}
interface Media {
new (src: string, mediaSuccess: Function, mediaError?: MediaError, mediaStatus?: Function);
getCurrentPosition(mediaSuccess: Function, mediaError?: MediaError): void;
getDuration(): void;
play(): void;
pause(): void;
release(): void;
seekTo(milliseconds: number): void;
startRecord(): void;
stopRecord(): void;
stop(): void;
}
interface Notification {
alert(message: string, alertCallback: Function, title?: string, buttonName?: string): void;
confirm(message: string, confirmCallback: Function, title?: string, buttonLabels?: string): void;
beep(times: number): void;
vibrate(milliseconds: number): void;
}
interface Splashscreen {
show(): void;
hide(): void;
}
interface Database {
transaction();
changeVersion();
}
interface SQLResultSetRowList {
length: number;
item(index: number): any;
}
interface SQLError {
code: number;
message: string;
}
interface SQLResultSet {
insertId: number;
rowsAffected: number;
rows: SQLResultSetRowList;
}
interface SQLTransaction {
executeSql(sql: string): SQLResultSet;
}
interface LocalStorage {
key;
getItem;
setItem;
removeItem;
clear;
}
interface NavigatorPhonegap {
accelerometer: Accelerometer;
camera: Camera;
capture: Capture;
compass: Compass;
connection: Connection;
contacts: Contacts;
device: Device;
geolocation: Geolocation;
globalization: Globalization;
notification: Notification;
splashscreen: Splashscreen;
}
interface WindowPhonegap {
openDatabase(database_name: string, database_version: string, database_displayname: string, database_size: number): Database;
localStorage: LocalStorage;
}
+1 -1
View File
@@ -38,6 +38,7 @@ Complete
* [Node.js](http://nodejs.org/) (from TypeScript samples)
* [node_redis](https://github.com/mranney/node_redis)
* [node-sqlserver](https://github.com/WindowsAzure/node-sqlserver)
* [PhoneGap](http://phonegap.com)
* [PreloadJS](http://www.createjs.com/#!/PreloadJS) (by [Pedro Ferreira](https://bitbucket.org/drk4))
* [QUnit](http://qunitjs.com/) (by [Diullei Gomes](https://github.com/Diullei))
* [Raphael](http://raphaeljs.com/) (by [CheCoxshall](https://github.com/CheCoxshall))
@@ -54,7 +55,6 @@ Next
* jQuery.Validate
* google.visualization
* Meteor
* PhoneGap
* Isotope
* Zepto
* Socket.IO
+336
View File
@@ -76,4 +76,340 @@ function test_camera() {
function onFail(message) {
alert('Failed because: ' + message);
}
}
function test_capture() {
var capture = navigator.device.capture;
function captureSuccess(mediaFiles) {
var i, len;
for (i = 0, len = mediaFiles.length; i < len; i += 1) {
uploadFile(mediaFiles[i]);
}
}
function captureError(error) {
var msg = 'An error occurred during capture: ' + error.code;
navigator.notification.alert(msg, null, 'Uh oh!');
}
function captureAudio() {
navigator.device.capture.captureAudio(captureSuccess, captureError, { limit: 2 });
}
function uploadFile(mediaFile) {
var ft = new FileTransfer(),
path = mediaFile.fullPath,
name = mediaFile.name;
ft.upload(path,
"http://my.domain.com/upload.php",
function (result) {
console.log('Upload success: ' + result.responseCode);
console.log(result.bytesSent + ' bytes sent');
},
function (error) {
console.log('Error uploading file ' + path + ': ' + error.code);
},
{ fileName: name });
}
var options = { limit: 3, duration: 10 };
navigator.device.capture.captureAudio(captureSuccess, captureError, options);
var captureSuccess = function (mediaFiles) {
var i, path, len;
for (i = 0, len = mediaFiles.length; i < len; i += 1) {
path = mediaFiles[i].fullPath;
}
};
var captureError = function (error) {
navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};
navigator.device.capture.captureImage(captureSuccess, captureError, { limit: 2 });
function captureSuccess(mediaFiles) {
var i, len;
for (i = 0, len = mediaFiles.length; i < len; i += 1) {
uploadFile(mediaFiles[i]);
}
}
function captureError(error) {
var msg = 'An error occurred during capture: ' + error.code;
navigator.notification.alert(msg, null, 'Uh oh!');
}
function captureImage() {
navigator.device.capture.captureImage(captureSuccess, captureError, { limit: 2 });
}
function uploadFile(mediaFile) {
var ft = new FileTransfer(),
path = mediaFile.fullPath,
name = mediaFile.name;
ft.upload(path,
"http://my.domain.com/upload.php",
function (result) {
console.log('Upload success: ' + result.responseCode);
console.log(result.bytesSent + ' bytes sent');
},
function (error) {
console.log('Error uploading file ' + path + ': ' + error.code);
},
{ fileName: name });
}
function captureSuccess(mediaFiles) {
var i, len;
for (i = 0, len = mediaFiles.length; i < len; i += 1) {
uploadFile(mediaFiles[i]);
}
}
function captureError(error) {
var msg = 'An error occurred during capture: ' + error.code;
navigator.notification.alert(msg, null, 'Uh oh!');
}
function captureVideo() {
navigator.device.capture.captureVideo(captureSuccess, captureError, { limit: 2 });
}
function uploadFile(mediaFile) {
var ft = new FileTransfer(),
path = mediaFile.fullPath,
name = mediaFile.name;
ft.upload(path,
"http://my.domain.com/upload.php",
function (result) {
console.log('Upload success: ' + result.responseCode);
console.log(result.bytesSent + ' bytes sent');
},
function (error) {
console.log('Error uploading file ' + path + ': ' + error.code);
},
{ fileName: name });
}
}
function test_compass() {
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
navigator.compass.getCurrentHeading(onSuccess, onError);
}
function onSuccess(heading) {
alert('Heading: ' + heading.magneticHeading);
}
function onError(compassError) {
alert('Compass Error: ' + compassError.code);
}
var watchID = null;
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
startWatch();
}
function startWatch() {
var options = { frequency: 3000 };
watchID = navigator.compass.watchHeading(onSuccess, onError, options);
}
function stopWatch() {
if (watchID) {
navigator.compass.clearWatch(watchID);
watchID = null;
}
}
function onSuccess(heading) {
var element = document.getElementById('heading');
element.innerHTML = 'Heading: ' + heading.magneticHeading;
}
function onError(compassError) {
alert('Compass error: ' + compassError.code);
}
function startWatch() {
var options = { frequency: 3000 };
watchID = navigator.compass.watchHeading(onSuccess, onError, options);
}
function stopWatch() {
if (watchID) {
navigator.compass.clearWatch(watchID);
watchID = null;
}
}
function onSuccess(heading) {
var element = document.getElementById('heading');
element.innerHTML = 'Heading: ' + heading.magneticHeading;
}
function onError(compassError) {
alert('Compass error: ' + compassError.code);
}
}
function test_connection() {
var networkState = navigator.connection.type;
var states = {};
states[Connection.UNKNOWN] = 'Unknown connection';
states[Connection.ETHERNET] = 'Ethernet connection';
states[Connection.WIFI] = 'WiFi connection';
states[Connection.CELL_2G] = 'Cell 2G connection';
states[Connection.CELL_3G] = 'Cell 3G connection';
states[Connection.CELL_4G] = 'Cell 4G connection';
states[Connection.NONE] = 'No network connection';
alert('Connection type: ' + states[networkState]);
}
function test_contacts() {
var myContact = navigator.contacts.create({ "displayName": "Test User" });
myContact.note = "This contact has a note.";
console.log("The contact, " + myContact.displayName + ", note: " + myContact.note);
function onDeviceReady() {
var options = new ContactFindOptions();
options.filter = "Bob";
var fields = ["displayName", "name"];
navigator.contacts.find(fields, onSuccess, onError, options);
}
function onSuccess(contacts) {
for (var i = 0; i < contacts.length; i++) {
console.log("Display Name = " + contacts[i].displayName);
}
}
function onError(contactError) {
alert('onError!');
}
var contact = navigator.contacts.create();
contact.displayName = "Plumber";
contact.nickname = "Plumber";
var name = new ContactName();
name.givenName = "Jane";
name.familyName = "Doe";
contact.name = name;
contact.save(onSuccess, onError);
var clone = contact.clone();
clone.name.givenName = "John";
console.log("Original contact name = " + contact.name.givenName);
console.log("Cloned contact name = " + clone.name.givenName);
contact.remove(onSuccess, onError);
function onDeviceReady() {
var contact = navigator.contacts.create();
contact.displayName = "Plumber";
contact.nickname = "Plumber";
var name = new ContactName();
name.givenName = "Jane";
name.familyName = "Doe";
contact.name = name;
contact.save(onSuccess, onError);
var clone = contact.clone();
clone.name.givenName = "John";
console.log("Original contact name = " + contact.name.givenName);
console.log("Cloned contact name = " + clone.name.givenName);
contact.remove(onSuccess, onError);
}
var options = new ContactFindOptions();
options.filter = "";
var filter = ["displayName", "addresses"];
navigator.contacts.find(filter, onSuccess, onError, options);
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);
}
}
var contact = navigator.contacts.create();
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;
contact.save();
var options = new ContactFindOptions();
options.filter = "";
options.multiple = true;
filter = ["displayName"];
navigator.contacts.find(filter, onSuccess, onError, options);
}
function test_device() {
element.innerHTML = 'Device Name: ' + device.name + '<br />' +
'Device Cordova: ' + device.cordova + '<br />' +
'Device Platform: ' + device.platform + '<br />' +
'Device UUID: ' + device.uuid + '<br />' +
'Device Version: ' + device.version + '<br />';
}
function test_file() {
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}
function gotFS(fileSystem) {
fileSystem.root.getFile("readme.txt", null, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
fileEntry.file(gotFile, fail);
}
function gotFile(file) {
readDataUrl(file);
readAsText(file);
}
function readDataUrl(file) {
var reader = new FileReader();
reader.onloadend = function (evt) {
console.log("Read as data URL");
console.log(evt.target.result);
};
reader.readAsDataURL(file);
}
function readAsText(file) {
var reader = new FileReader();
reader.onloadend = function (evt) {
console.log("Read as text");
console.log(evt.target.result);
};
reader.readAsText(file);
}
function fail(evt) {
console.log(evt.target.error.code);
}
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}
function gotFS(fileSystem) {
fileSystem.root.getFile("readme.txt", { create: true, exclusive: false }, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
fileEntry.createWriter(gotFileWriter, fail);
}
function gotFileWriter(writer) {
writer.onwriteend = function (evt) {
console.log("contents of file now 'some sample text'");
writer.truncate(11);
writer.onwriteend = function (evt) {
console.log("contents of file now 'some sample'");
writer.seek(4);
writer.write(" different text");
writer.onwriteend = function (evt) {
console.log("contents of file now 'some different text'");
}
};
};
writer.write("some sample text");
}
function fail(error) {
console.log(error.code);
}
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);
}
function onFileSystemSuccess(fileSystem) {
console.log(fileSystem.name);
console.log(fileSystem.root.name);
}
function fail(evt) {
console.log(evt.target.error.code);
}
}