Killed the cordova-wp7 master branch
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 6a504ba..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,12 +0,0 @@
-
-Licensed 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.
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index c38e7d7..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-Apache Cordova
-Copyright 2012 The Apache Software Foundation
-
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org)
\ No newline at end of file
diff --git a/README.md b/README.md
index f1da509..dc69fba 100644
--- a/README.md
+++ b/README.md
@@ -1,53 +1 @@
-###Project has been merged into the [cordova-wp8](https://github.com/apache/cordova-wp8) repository for now.
-
-
-Apache Cordova for Windows Phone 7
-===
-
-Apache Cordova WP7 is a .net application library that lets you create Apache Cordova applications targeting Windows Phone 7 devices.
-Apache Cordova based applications are, at the core, an application written with web technology: HTML, CSS and JavaScript.
-
-Requires
----
-
-- Windows Phone SDK 7.1 [http://create.msdn.com/en-us/home/getting_started]
-
-
-Getting Started
----
-
-- copy the file templates/CordovaStarter-x.x.x.zip to the folder : \My Documents\Visual Studio 2010\Templates\ProjectTemplates\
- - if you have just installed VisualStudio, you should launch it once to create this folder
- - if you prefer, you may add the project instead to the "Silverlight for Windows Phone" subfolder of "Visual C#". This is up to you, and only affects where the project template is shown when creating a new project. Also, You may need to create this folder.
-- Launch Visual Studio 2010 and select to create a new project
- - CordovaStarter should be listed as an option, give your new project a name
- - Note: The description will let you know the version of Cordova you are targeting, if you have multiple templates.
- - If you do not see it, you may have to select the top level 'Visual C#' to see it
-- Build and Run it!
-
-Important!!!
----
-
-When you add or remove files/folders in the www folder you will need to do the following :
-
-- ensure the new item is included in the project ( Content ) This includes ALL images/css/html/js/* and anything that you want available at runtime.
-- Do not modify the CordovaSourceDictionary.xml file which is included in the project, it is auto-generated for you when you build.
-
-Known Problem Areas
----
-
-Many of the Media APIs will not function as expected when debugging while connect to the device with the Zune software.
-To get around this, you need to use the Windows Phone Connect tool. For details, please check out this [MSDN blog article](http://blogs.msdn.com/b/jaimer/archive/2010/11/03/tips-for-debugging-wp7-media-apps-with-wpconnect.aspx).
-
-
-BUGS?
------
-File them at Apache Incubator
-https://issues.apache.org/jira/browse/CB
-
-
-Further Reading
----
-
-- [http://docs.cordova.io](http://docs.cordova.io)
-- [http://wiki.cordova.io](http://wiki.cordova.io)
+###Project has now been merged into the [cordova-wp8](https://github.com/apache/cordova-wp8) repository.
\ No newline at end of file
diff --git a/VERSION b/VERSION
deleted file mode 100644
index c8e38b6..0000000
--- a/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2.9.0
diff --git a/bin/check_reqs b/bin/check_reqs
deleted file mode 100755
index d1b9bc0..0000000
--- a/bin/check_reqs
+++ /dev/null
@@ -1,24 +0,0 @@
-#! /bin/sh
-
-#
-# 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.
-#
-
-echo "ERROR: Cordova tooling for Windows Phone requires a Windows OS with the 'msbuild' command "
-echo " in the PATH environment variable as well as having .NET Framework 4.0 (from WP SDK's)"
-exit 1
\ No newline at end of file
diff --git a/bin/check_reqs.bat b/bin/check_reqs.bat
deleted file mode 100644
index 26e7393..0000000
--- a/bin/check_reqs.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST %full_path%check_reqs.js (
- cscript "%full_path%check_reqs.js" %* //nologo
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find 'check_reqs.js' in 'bin' folder, aborting...>&2
- EXIT /B 1
-)
\ No newline at end of file
diff --git a/bin/check_reqs.js b/bin/check_reqs.js
deleted file mode 100644
index 3dc1496..0000000
--- a/bin/check_reqs.js
+++ /dev/null
@@ -1,111 +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 args = WScript.Arguments;
-var wscript_shell = WScript.CreateObject("WScript.Shell");
-
-var REQUIRE_GIT = false;
-
-function Usage() {
- Log("Usage: [ check_reqs | cscript check_reqs.js ]");
- Log("examples:");
- Log(" cscript C:\\Users\\anonymous\\cordova-wp7\\bin\\check_reqs.js");
- Log(" CordovaWindowsPhone\\bin\\check_reqs");
-
-}
-
-// log to stdout or stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-// gets the output from a command, failing with the given error message
-function check_command(cmd, fail_msg) {
- var out = wscript_shell.Exec(cmd);
- while (out.Status == 0) {
- WScript.Sleep(100);
- }
-
- //Check that command executed
- if (!out.StdErr.AtEndOfStream) {
- var line = out.StdErr.ReadLine();
- Log(fail_msg, true);
- Log('Output : ' + line, true);
- WScript.Quit(1);
- }
-
- if (!out.StdOut.AtEndOfStream) {
- var line = out.StdOut.ReadAll();
- return line;
- }
- else {
- Log('Unable to get output from command "' + cmd + '"', true);
- WScript.Quit(1);
- }
-}
-
-/* The tooling for cordova windows phone requires these commands
- * in the environment PATH variable.
- * - msbuild (C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319)
- * - git? (for dynamic cli loading of projects?)
- */
-function SystemRequiermentsMet() {
- var cmd = 'msbuild -version'
- var fail_msg = 'The command `msbuild` failed. Make sure you have the latest Windows Phone SDKs installed, and the `msbuild.exe` command (inside C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319) is added to your path.'
- var output = check_command(cmd, fail_msg);
- var msversion = output.match(/\.NET\sFramework\,\sversion\s4\.0/);
- if (!msversion) {
- Log('Please install the .NET Framwork v4.0.30319 (in the latest windows phone SDK\'s).', true);
- Log('Make sure the "msbuild" command in your path is pointing to v4.0.30319 of msbuild as well (inside C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319).', true);
- WScript.Quit(1);
- }
-
- if(REQUIRE_GIT) {
- cmd = 'git --version';
- fail_msg = 'The command `git` failed. Make sure you have git installed as well ad in your PATH environment so the tool can use it';
- output = check_command(cmd, fail_msg);
- var gitVersion = output.match(/git\sversion\s1\./);
- if (!gitVersion) {
- Log('Please ensure you have at least git v1 installed and added to you PATH so this tool can use it to get the latest codova.');
- }
- }
-}
-
-
-if (args.Count() > 0) {
- // support help flags
- if (args(0) == "--help" || args(0) == "/?" ||
- args(0) == "help" || args(0) == "-help" || args(0) == "/help" || args(0) == "-h") {
- Usage();
- WScript.Quit(1);
- }
- else {
- Log('Error : Did not recognize argument ' + args(0), true)
- Usage();
- WScript.Quit(1);
- }
-}
-
-SystemRequiermentsMet();
\ No newline at end of file
diff --git a/bin/create.bat b/bin/create.bat
deleted file mode 100644
index 329048e..0000000
--- a/bin/create.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST %full_path%create.js (
- cscript "%full_path%create.js" %* //nologo
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find 'create.js' in 'bin' folder, aborting...>&2
- EXIT /B 1
-)
\ No newline at end of file
diff --git a/bin/create.js b/bin/create.js
deleted file mode 100644
index 93236f8..0000000
--- a/bin/create.js
+++ /dev/null
@@ -1,267 +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.
-*/
-
-/*
- * create a cordova/wp7 project
- *
- * USAGE
- * ./create [path package activity]
-
- ./bin/create.bat C:\Users\Me\MyTestProj "test.proj" "TestProject"
- */
-
-
-var fso=WScript.CreateObject("Scripting.FileSystemObject");
-var wscript_shell = WScript.CreateObject("WScript.Shell");
-// working dir
-var ROOT = WScript.ScriptFullName.split('\\bin\\create.js').join('');
-
-var args = WScript.Arguments,
- FRAMEWORK_PATH = '\\framework',
- TOOLING_PATH = '\\tooling',
- TEMPLATES_PATH = '\\templates',
- // sub folder for standalone project
- STANDALONE_PATH = TEMPLATES_PATH + '\\standalone',
- // default template to use when creating the project
- CREATE_TEMPLATE = STANDALONE_PATH,
- USE_DLL = false,
- PROJECT_PATH,
- PACKAGE,
- NAME;
-
- // get version number
-var VERSION=read(ROOT+'\\VERSION').replace(/\r\n/,'').replace(/\n/,'');
-var BASE_VERSION = VERSION.split('rc', 1) + ".0";
-
-function Usage() {
- Log("Usage: create PathTONewProject [ PackageName AppName ]");
- Log(" PathTONewProject : The path to where you wish to create the project");
- Log(" PackageName : The namespace for the project (default is Cordova.Example)")
- Log(" AppName : The name of the application (default is CordovaAppProj)");
- Log("examples:");
- Log(" create C:\\Users\\anonymous\\Desktop\\MyProject");
- Log(" create C:\\Users\\anonymous\\Desktop\\MyProject io.Cordova.Example AnApp");
-}
-
-// logs messaged to stdout and stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-var ForReading = 1, ForWriting = 2, ForAppending = 8;
-var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;
-
-function read(filename) {
- var f=fso.OpenTextFile(filename, 1,2);
- var s=f.ReadAll();
- f.Close();
- return s;
-}
-
-function write(filename, contents) {
- var f=fso.OpenTextFile(filename, ForWriting, TristateTrue);
- f.Write(contents);
- f.Close();
-}
-
-function replaceInFile(filename, regexp, replacement) {
- write(filename,read(filename).replace(regexp,replacement));
-}
-
-
-// executes a commmand in the shell
-function exec(command) {
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status == 0) {
- WScript.sleep(100);
- }
-}
-
-// executes a commmand in the shell
-function exec_verbose(command) {
- //Log("Command: " + command);
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status == 0) {
- //Wait a little bit so we're not super looping
- WScript.sleep(100);
- //Print any stdout output from the script
- if (!oShell.StdOut.AtEndOfStream) {
- var line = oShell.StdOut.ReadLine();
- Log(line);
- }
- }
- //Check to make sure our scripts did not encounter an error
- if (!oShell.StdErr.AtEndOfStream) {
- var line = oShell.StdErr.ReadAll();
- Log(line, true);
- WScript.Quit(1);
- }
-}
-
-//generate guid for the project
-function genGuid() {
- var TypeLib = WScript.CreateObject("Scriptlet.TypeLib");
- strGuid = TypeLib.Guid.split("}")[0]; // there is extra crap after the } that is causing file streams to break, probably an EOF ...
- strGuid = strGuid.replace(/[\{\}]/g,"");
- return strGuid;
-}
-
-// builds the new cordova dll from the framework
-function build_dll(path) {
- if (fso.FolderExists(path + FRAMEWORK_PATH + '\\Bin')) {
- fso.DeleteFolder(path + FRAMEWORK_PATH + '\\Bin');
- }
- if (fso.FolderExists(path + FRAMEWORK_PATH + '\\obj')) {
- fso.DeleteFolder(path + FRAMEWORK_PATH + '\\obj');
- }
- // move to framework directory
- wscript_shell.CurrentDirectory = path + FRAMEWORK_PATH;
- // build .dll in Release
- exec_verbose('msbuild /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo /p:Configuration=Release;VersionNumber=' + VERSION + ';BaseVersionNumber=' + BASE_VERSION);
- //Check if file dll was created
- if (!fso.FileExists(path + FRAMEWORK_PATH + '\\Bin\\Release\\WPCordovaClassLib.dll')) {
- Log('ERROR: MSBuild failed to create .dll when building WPCordovaClassLib.dll', true);
- WScript.Quit(1);
- }
- Log("SUCCESS BUILDING DLL");
-}
-
-// creates new project in path, with the given package and app name
-function create(path, namespace, name) {
- Log("Creating Cordova-WP7 Project:");
- Log("\tApp Name : " + name);
- Log("\tNamespace : " + namespace);
- Log("\tPath : " + path);
-
- // Copy the template source files to the new destination
- fso.CopyFolder(ROOT + CREATE_TEMPLATE, path);
-
- var newProjGuid = genGuid();
- // replace the guid in the AppManifest
- replaceInFile(path + "\\Properties\\WMAppManifest.xml","$guid1$",newProjGuid);
- // replace safe-project-name in AppManifest
- replaceInFile(path + "\\Properties\\WMAppManifest.xml",/\$safeprojectname\$/g,name);
- replaceInFile(path + "\\Properties\\WMAppManifest.xml",/\$projectname\$/g,name);
-
-
- replaceInFile(path + "\\App.xaml",/\$safeprojectname\$/g,namespace);
- replaceInFile(path + "\\App.xaml.cs",/\$safeprojectname\$/g,namespace);
-
- replaceInFile(path + "\\MainPage.xaml",/\$safeprojectname\$/g,namespace);
- replaceInFile(path + "\\MainPage.xaml.cs",/\$safeprojectname\$/g,namespace);
- replaceInFile(path + "\\CordovaAppProj.csproj",/\$safeprojectname\$/g,namespace);
- if (name != "CordovaAppProj") {
- var valid_name = name.replace(/(\.\s|\s\.|\s+|\.+)/g, '_');
- replaceInFile(path + "\\CordovaSolution.sln", /CordovaAppProj/g, valid_name);
- // rename project and solution
- exec('%comspec% /c ren ' + path + "\\CordovaSolution.sln " + valid_name + '.sln');
- exec('%comspec% /c ren ' + path + "\\CordovaAppProj.csproj " + valid_name + '.csproj');
- }
-
- //copy .dll if necessary
- if (USE_DLL) {
- var dllPath = ROOT + FRAMEWORK_PATH + '\\Bin\\Release\\WPCordovaClassLib.dll';
- if (fso.FileExists(dllPath)) {
- Log("WPCordovaClassLib.dll Found, creating project");
- }
- else {
- Log("WPCordovaClassLib.dll was not Found in " + dllPath);
- Log('BUILDING: WPCordovaClassLib.dll');
- build_dll(ROOT);
- }
-
- if (!fso.FolderExists(path + '\\CordovaLib')) {
- fso.CreateFolder(path + '\\CordovaLib');
- }
- exec('%comspec% /c xcopy ' + ROOT + FRAMEWORK_PATH + '\\Bin\\Release\\WPCordovaClassLib.dll ' + path + '\\CordovaLib');
- if (!fso.FileExists(path + '\\CordovaLib\\WPCordovaClassLib.dll')) {
- Log('ERROR: Failed to copy WPCordovaClassLib.dll to project from', true);
- Log('\t' + ROOT + FRAMEWORK_PATH + '\\Bin\\Release\\WPCordovaClassLib.dll', true);
- Log('\tto', true);
- Log('\t' + path + '\\CordovaLib', true)
- WScript.Quit(1);
- }
- }
-
- //clean up any Bin/obj or other generated files
- exec('cscript ' + path + '\\cordova\\lib\\clean.js //nologo');
-
- // delete any .user and .sou files if any
- if (fso.FolderExists(path)) {
- var proj_folder = fso.GetFolder(path);
- var proj_files = new Enumerator(proj_folder.Files);
- for (;!proj_files.atEnd(); proj_files.moveNext()) {
- if (fso.GetExtensionName(proj_files.item()) == 'user') {
- fso.DeleteFile(proj_files.item());
- } else if (fso.GetExtensionName(proj_files.item()) == 'sou') {
- fso.DeleteFile(proj_files.item());
- }
- }
- }
-
- Log("CREATE SUCCESS : " + path);
-
- // TODO:
- // index.html title set to project name?
-}
-
-
-
-if (args.Count() > 0) {
- // support help flags
- if (args(0) == "--help" || args(0) == "/?" ||
- args(0) == "help" || args(0) == "-help" || args(0) == "/help" || args(0) == "-h") {
- Usage();
- WScript.Quit(1);
- }
-
- PROJECT_PATH = args(0);
- if (fso.FolderExists(PROJECT_PATH)) {
- Log("Project directory already exists:", true);
- Log("\t" + PROJECT_PATH, true);
- Log("CREATE FAILED.", true);
- WScript.Quit(1);
- }
-
- if (args.Count() > 1) {
- PACKAGE = args(1);
- }
- else {
- PACKAGE = "Cordova.Example";
- }
-
- if (args.Count() > 2) {
- NAME = args(2);
- }
- else {
- NAME = "CordovaAppProj";
- }
-
- create(PROJECT_PATH, PACKAGE, NAME);
-}
-else {
- Usage();
- WScript.Quit(1);
-}
-
diff --git a/bin/update.bat b/bin/update.bat
deleted file mode 100644
index 9da7e3c..0000000
--- a/bin/update.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST %full_path%update.js (
- cscript "%full_path%update.js" %* //nologo
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find 'update.js' in 'bin' folder, aborting...>&2
- EXIT /B 1
-)
\ No newline at end of file
diff --git a/bin/update.js b/bin/update.js
deleted file mode 100644
index 8ea38a8..0000000
--- a/bin/update.js
+++ /dev/null
@@ -1,353 +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 fso = WScript.CreateObject("Scripting.FileSystemObject");
-var wscript_shell = WScript.CreateObject("WScript.Shell");
-var shell = WScript.CreateObject("shell.application");
-var args = WScript.Arguments;
-// working dir
-var ROOT = WScript.ScriptFullName.split('\\bin\\update.js').join('');
-//Get version number
-var VERSION = read(ROOT+'\\VERSION').replace(/\r\n/,'').replace(/\n/,'');
-var plugins_folder = "\\Plugins";
-var template_folder = "\\templates\\standalone";
-// anything thats missing to the project
-var overwrite = false;
-var replace = false;
-
-// usage function
-function Usage() {
- Log("WARNING : Make sure to back up your project before updating!")
- Log("Usage: update Path-To-Project ");//[ -f | -r ] ");
- Log(" Path-To-Old-Project : The path the project you would like to update.");
- //Log(" -f : Will forcefully overwrite and add all core components of the application.");
- //Log(" -r : Will create an updated project, only keeping the www assets. *NOTE: no native code will be preserved*");
- Log("examples:");
- Log(" update C:\\Users\\anonymous\\Desktop\\MyProject");
-}
-
-// logs messaged to stdout and stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-// executes a commmand in the shell
-function exec(command) {
- //Log("Command : " + command);
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status === 0) {
- WScript.sleep(100);
- }
-}
-
-// executes a commmand in the shell
-function exec_verbose(command) {
- Log("Command: " + command);
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status == 0) {
- //Wait a little bit so we're not super looping
- WScript.sleep(100);
- //Print any stdout output from the script
- if (!oShell.StdOut.AtEndOfStream) {
- var line = oShell.StdOut.ReadAll();
- Log(line);
- }
- }
- //Check to make sure our scripts did not encounter an error
- if (!oShell.StdErr.AtEndOfStream) {
- var line = oShell.StdErr.ReadAll();
- Log(line, true);
- WScript.Quit(2);
- }
-}
-
-var ForReading = 1, ForWriting = 2, ForAppending = 8;
-var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;
-
-// returns the contents of a file
-function read(filename) {
- if (fso.FileExists(filename)) {
- var f=fso.OpenTextFile(filename, 1, 2);
- var s=f.ReadAll();
- f.Close();
- return s;
- }
- else {
- Log('Cannot read non-existant file : ' + filename, true);
- WScript.Quit(2);
- }
- return null;
-}
-
-// writes the contents to the specified file
-function write(filename, contents) {
- var f=fso.OpenTextFile(filename, ForWriting, TristateTrue);
- f.Write(contents);
- f.Close();
-}
-
-// replaces the matches of regexp with replacement
-function replaceInFile(filename, regexp, replacement) {
- var text = read(filename).replace(regexp,replacement);
- write(filename,text);
-}
-
-// returns true if the given path is the root of a cordova windows phone project
-// currently returns true if the folder contains a .csproj file.
-function is_windows_phone_project(path) {
- if (fso.FolderExists(path)) {
- var proj_folder = fso.GetFolder(path);
- var proj_files = new Enumerator(proj_folder.Files);
- for (;!proj_files.atEnd(); proj_files.moveNext()) {
- if (fso.GetExtensionName(proj_files.item()) == 'csproj') {
- return true;
- }
- }
- }
- return false;
-}
-
-// returns the name of the application
-function get_app_name(path) {
- var WMAppManifest = read(path + '\\Properties\\WMAppManifest.xml').split('\n');
- for (line in WMAppManifest) {
- if (WMAppManifest[line].match(/Title\=\"/)) {
- return WMAppManifest[line].split('Title="')[1].split('"')[0];
- }
- }
- Log("Error : unable to find applicaiton name in the project.", true);
- Log(" Path : " + path, true);
- WScript.Quit(2);
-}
-
-// returns the name of the application package
-function get_package_name(path) {
- var WMAppManifest = read(path + '\\Properties\\WMAppManifest.xml').split('\n');
- for (line in WMAppManifest) {
- if (WMAppManifest[line].match(/Title\=\"/)) {
- return WMAppManifest[line].split('Title="')[1].split('"')[0];
- }
- }
- Log("Error : unable to find applicaiton name in the project.", true);
- Log(" Path : " + path, true);
- WScript.Quit(2);
-}
-
-// returns the GUID ame of the application
-function get_app_GUID(path) {
- var AppXAML = read(path + '\\App.xaml').split('\n');
- for (line in AppXAML) {
- if (AppXAML[line].match(/x\:Class\=\"/)) {
- return AppXAML[line].split('Class="')[1].split('"')[0];
- }
- }
- Log("Error : unable to find package name in the project.", true);
- Log(" Path : " + path, true);
- WScript.Quit(2);
-}
-
-// updates the cordova.js and all references in the given project with this repositories version
-function update_cordova_js(path) {
- // remove old cordova.js
- var www_contents = shell.NameSpace(path + '\\www').Items();
- for(i = 0; i < www_contents.Count; i++)
- {
- if(www_contents.Item(i).Name.match(/cordova\-(\d+)[.](\d+)[.](\d+)(rc\d)?[.]js/))
- {
- fso.DeleteFile(path + '\\www\\' + www_contents.Item(i).Name);
- }
- }
- // update version file
- copy_to(ROOT + "\\VERSION", path + "\\VERSION");
- // copy over new cordova.js
- copy_to(ROOT + template_folder + "\\www\\cordova.js", path + "\\www\\cordova.js");
-
- // update corodva references
- var cordova_regex = /cordova-(\d+)[.](\d+)[.](\d+)(rc\d)?/g; //Matches *first* cordova-x.x.x[rcx] (just ad g at end to make global)
- // update references in index.html
- replaceInFile(path + '\\www\\index.html', cordova_regex, "cordova");
- version_regex = /return\s*\"(\d+)[.](\d+)[.](\d+)(rc\d)?/; //Matches return "x.x.x[rcx]
- // update references in Device.cs
- replaceInFile(path + '\\Plugins\\Device.cs', version_regex, "return \"" + VERSION);
-}
-
-// Copies assets that need to be saved from source to desination.
-// TODO : Add all critical assets here
-function save_restore(source, destination) {
- fso.CreateFolder(destination + '\\www');
- copy_to(source + '\\www', destination + '\\www');
- copy_to(source + '\\SplashScreenImage.jpg', destination + '\\SplashScreenImage.jpg');
- copy_to(source + '\\Background.png', destination + '\\Background.png');
- copy_to(source + '\\ApplicationIcon.png', destination + '\\ApplicationIcon.png');
- copy_to(source + '\\config.xml', destination + '\\config.xml');
-}
-
-// deletes the path element if it exists
-function delete_if_exists(path) {
- if (fso.FolderExists(path)) {
- fso.DeleteFolder(path);
- }
- else if (fso.FileExists(path)) {
- fso.DeleteFile(path);
- }
-}
-
-// copies a folder or file from source to destination
-function copy_to(source, destination) {
- // check that source exists
- if (!fso.FolderExists(source)) {
- if (!fso.FileExists(source)) {
- Log("Error : Could not copy file/folder because it doesn't exist.", true);
- Log(" File/Folder : " + source, true);
- WScript.Quit(2);
- }
- }
- // if source is a folder, then copy all folder contents
- if (fso.FolderExists(source)) {
- fso.CopyFolder(source, destination, true);
- }
- // if it's a file, just copy it.
- else {
- exec('%comspec% /c copy /Y /V ' + source + ' ' + destination);
- }
-}
-
-// updates the cordova.js in project along with the cordova tooling.
-function update_project(path) {
- // update cordova folder
- delete_if_exists(path + '\\cordova');
- fso.CreateFolder(path + '\\cordova');
- copy_to(ROOT + template_folder + '\\cordova', path + '\\cordova');
- // clean project (all generated files)
- exec(path + '\\cordova\\clean.bat');
-
- // update core cordovalib
- delete_if_exists(path + '\\cordovalib');
- fso.CreateFolder(path + '\\cordovalib');
- copy_to(ROOT + template_folder + '\\cordovalib', path + '\\cordovalib');
-
- // update core plugins
- // TODO : Remove for 3.0.0
- delete_if_exists(path + '\\Plugins');
- fso.CreateFolder(path + '\\Plugins');
- copy_to(ROOT + template_folder + '\\Plugins', path + '\\Plugins');
-
- // update cordova.js
- update_cordova_js(path);
-}
-
-// Replaces the current project with a newly created project, keeping important assets to preserve the app.
-// TODO: Things that need to be kept other then www
-// - WMAppManifest (capabilities etc...)
-// - GUID (for marketplace apps etc...)
-// - Splashscreen and other images etc...
-// - Find more things that should be kept
-function replace_project(path) {
- //create new project and move www assets into it.
- Log("WARNING : Upgrading your app with the \'-r\' flag will delete all native and plugin");
- Log(" components of your application and replace them with the updated core components given");
- Log(" by this platforms \'bin\\create\' script. It is *HIGHLY RECOMMENDED* to back up your app");
- Log(" before continuing. The name and package name along with all of the www assets will be");
- Log(" preserved. Are you sure you wish to continue? (Y/N)");
- var response;
- while (response != 'Y') {
- response = WScript.StdIn.ReadLine();
- if (response == 'N') {
- WScript.Quit(2);
- } else if (response != "Y") {
- Log("Error : did not recognize '" + response + "'");
- Log("Are you sure you wish to continue? (Y/N)");
- }
- }
- // place all assets to be preserved in a temperary folder
- delete_if_exists(ROOT + '\\temp');
- fso.CreateFolder(ROOT + '\\temp');
- save_restore(path, ROOT + '\\temp');
-
- // get app name from WMAppManifest
- var app_name = get_app_name(path);
- // get package name from App.xaml
- var package_name = get_package_name(path);
- // get the GUID so that app stays the same
- var app_GUID = get_app_GUID(path);
- // delete previous project
- delete_if_exists(path);
- // create the new project from the current repository
- exec(ROOT + '\\bin\\create.bat ' + path + ' ' + app_name + ' ' + package_name);
- // remove default www assets
- delete_if_exists(path + '\\www');
- // move www assets back to project folder
- save_restore(ROOT + '\\temp', path);
- // cleanup temp folder
- delete_if_exists(ROOT + '\\temp');
-}
-
-
-
-if (args.Count() > 0) {
- if(args.Count() > 2) {
- Log("Error : too many arguments provided.", true);
- WScript.Quit(1);
- }
-
- if (args(0).indexOf("--help") > -1 ||
- args(0).indexOf("/?") > -1 ) {
- Usage();
- WScript.Quit(1);
- }
- else if (fso.FolderExists(args(0)) && is_windows_phone_project(args(0))) {
- if(args.Count() > 1) {
- /*if(args(1) == '-f' || args(1) == '--force') {
- //TODO: do something for this
- Log("ERROR : NOT IMPLEMENTED", true);
- WScript.Quit(2);
- }
- else if(args(1) == '-r' || args(1) == '--replace') {
- replace_project(args(0));
- }
- else {
- Log('Error : \'' + args(1) + '\' is not regognized as an update option', true);
- }*/
- Usage();
- Log('Error : too many arguments', true);
- } else if (args.Count() == 1) {
- update_project(args(0));
- }
- }
- else if (fso.FolderExists(args(0))) {
- Log("The path provided is not a path to a cordova windows phone project.", true);
- Log(" Please provide the path to the root folder of your cordova windows phone project.", true);
- WScript.Quit(2);
- }
- else {
- Log("The given path to the project does not exist.", true);
- Log(" Please provide a path to the project you would like to update.", true);
- Usage();
- WScript.Quit(2);
- }
-}
-else {
- Usage();
- WScript.Quit(1);
-}
\ No newline at end of file
diff --git a/framework/Images/appbar.back.rest.png b/framework/Images/appbar.back.rest.png
deleted file mode 100644
index 4bc2b92..0000000
--- a/framework/Images/appbar.back.rest.png
+++ /dev/null
Binary files differ
diff --git a/framework/Images/appbar.close.rest.png b/framework/Images/appbar.close.rest.png
deleted file mode 100644
index 8166a1c..0000000
--- a/framework/Images/appbar.close.rest.png
+++ /dev/null
Binary files differ
diff --git a/framework/Images/appbar.feature.video.rest.png b/framework/Images/appbar.feature.video.rest.png
deleted file mode 100644
index baff565..0000000
--- a/framework/Images/appbar.feature.video.rest.png
+++ /dev/null
Binary files differ
diff --git a/framework/Images/appbar.next.rest.png b/framework/Images/appbar.next.rest.png
deleted file mode 100644
index ed577d7..0000000
--- a/framework/Images/appbar.next.rest.png
+++ /dev/null
Binary files differ
diff --git a/framework/Images/appbar.save.rest.png b/framework/Images/appbar.save.rest.png
deleted file mode 100644
index d49940e..0000000
--- a/framework/Images/appbar.save.rest.png
+++ /dev/null
Binary files differ
diff --git a/framework/Images/appbar.stop.rest.png b/framework/Images/appbar.stop.rest.png
deleted file mode 100644
index 4dd724f..0000000
--- a/framework/Images/appbar.stop.rest.png
+++ /dev/null
Binary files differ
diff --git a/framework/Properties/AssemblyInfo.cs b/framework/Properties/AssemblyInfo.cs
deleted file mode 100644
index 84143db..0000000
--- a/framework/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("WPCordovaClassLib")]
-[assembly: AssemblyDescription("2.9.0")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Apache Cordova")]
-[assembly: AssemblyProduct("WPCordovaClassLib")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("633ee7ad-9a75-4b68-96e9-281528c50275")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
-
-[assembly: AssemblyVersion("2.9.0.0")]
-[assembly: AssemblyFileVersion("2.6.0rc1")]
-
diff --git a/framework/WPCordovaClassLib.csproj b/framework/WPCordovaClassLib.csproj
deleted file mode 100644
index b8f76ae..0000000
--- a/framework/WPCordovaClassLib.csproj
+++ /dev/null
@@ -1,297 +0,0 @@
-<?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.
--->
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>10.0.20506</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{FC6A1A70-892D-46AD-9E4A-9793F72AF780}</ProjectGuid>
- <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>WPCordovaClassLib</RootNamespace>
- <AssemblyName>WPCordovaClassLib</AssemblyName>
- <AssemblyVersion>$(BaseVersionNumber)</AssemblyVersion>
- <AssemblyFileVersion>$(VersionNumber)</AssemblyFileVersion>
- <AssemblyDescription>$(VersionNumber)</AssemblyDescription>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
- <TargetFrameworkProfile>WindowsPhone71</TargetFrameworkProfile>
- <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>
- <SilverlightApplication>false</SilverlightApplication>
- <ValidateXaml>true</ValidateXaml>
- <ThrowErrorsInValidation>true</ThrowErrorsInValidation>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>Bin\Debug</OutputPath>
- <DefineConstants>TRACE;DEBUG;SILVERLIGHT;WINDOWS_PHONE;CORDOVA_CLASSLIB</DefineConstants>
- <NoStdLib>true</NoStdLib>
- <NoConfig>true</NoConfig>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>Bin\Release</OutputPath>
- <DefineConstants>TRACE;DEBUG;SILVERLIGHT;WINDOWS_PHONE;CORDOVA_CLASSLIB</DefineConstants>
- <NoStdLib>true</NoStdLib>
- <NoConfig>true</NoConfig>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <DocumentationFile>
- </DocumentationFile>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="Microsoft.Devices.Sensors" />
- <Reference Include="Microsoft.Phone" />
- <Reference Include="Microsoft.Phone.Interop" />
- <Reference Include="Microsoft.Xna.Framework" />
- <Reference Include="System.Device" />
- <Reference Include="System.Runtime.Serialization" />
- <Reference Include="System.Servicemodel" />
- <Reference Include="System.Servicemodel.Web" />
- <Reference Include="System.Windows" />
- <Reference Include="system" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml" />
- <Reference Include="System.Net" />
- <Reference Include="System.Xml.Linq" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\templates\standalone\cordovalib\BaseCommand.cs">
- <Link>CordovaLib\BaseCommand.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\BrowserMouseHelper.cs">
- <Link>CordovaLib\BrowserMouseHelper.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\CommandFactory.cs">
- <Link>CordovaLib\CommandFactory.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\ConfigHandler.cs">
- <Link>CordovaLib\ConfigHandler.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\CordovaCommandCall.cs">
- <Link>CordovaLib\CordovaCommandCall.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\CordovaView.xaml.cs">
- <Link>CordovaLib\CordovaView.xaml.cs</Link>
- <DependentUpon>CordovaView.xaml</DependentUpon>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\DOMStorageHelper.cs">
- <Link>CordovaLib\DOMStorageHelper.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\ImageExifHelper.cs">
- <Link>CordovaLib\ImageExifHelper.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\JSON\JsonHelper.cs">
- <Link>CordovaLib\JSON\JsonHelper.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\NativeExecution.cs">
- <Link>CordovaLib\NativeExecution.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\OrientationHelper.cs">
- <Link>CordovaLib\OrientationHelper.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\PluginResult.cs">
- <Link>CordovaLib\PluginResult.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\cordovalib\ScriptCallback.cs">
- <Link>CordovaLib\ScriptCallback.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\Accelerometer.cs">
- <Link>CordovaLib\Plugins\Accelerometer.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\AudioFormatsHelper.cs">
- <Link>CordovaLib\Plugins\AudioFormatsHelper.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\AudioPlayer.cs">
- <Link>CordovaLib\Plugins\AudioPlayer.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\Battery.cs">
- <Link>CordovaLib\Plugins\Battery.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\Camera.cs">
- <Link>CordovaLib\Plugins\Camera.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\Capture.cs">
- <Link>CordovaLib\Plugins\Capture.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\Compass.cs">
- <Link>CordovaLib\Plugins\Compass.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\Contacts.cs">
- <Link>CordovaLib\Plugins\Contacts.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\DebugConsole.cs">
- <Link>CordovaLib\Plugins\DebugConsole.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\Device.cs">
- <Link>CordovaLib\Plugins\Device.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\File.cs">
- <Link>CordovaLib\Plugins\File.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\FileTransfer.cs">
- <Link>CordovaLib\Plugins\FileTransfer.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\GeoLocation.cs">
- <Link>CordovaLib\Plugins\GeoLocation.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\Globalization.cs">
- <Link>CordovaLib\Plugins\Globalization.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\InAppBrowser.cs">
- <Link>CordovaLib\Plugins\InAppBrowser.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\Media.cs">
- <Link>CordovaLib\Plugins\Media.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\MimeTypeMapper.cs">
- <Link>CordovaLib\Plugins\MimeTypeMapper.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\NetworkStatus.cs">
- <Link>CordovaLib\Plugins\NetworkStatus.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\Notification.cs">
- <Link>CordovaLib\Plugins\Notification.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\UI\AudioCaptureTask.cs">
- <Link>CordovaLib\Plugins\UI\AudioCaptureTask.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\UI\AudioRecorder.xaml.cs">
- <Link>CordovaLib\Plugins\UI\AudioRecorder.xaml.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\UI\ImageCapture.xaml.cs">
- <Link>CordovaLib\Plugins\UI\ImageCapture.xaml.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\UI\NotificationBox.xaml.cs">
- <Link>CordovaLib\Plugins\UI\NotificationBox.xaml.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\UI\VideoCaptureTask.cs">
- <Link>CordovaLib\Plugins\UI\VideoCaptureTask.cs</Link>
- </Compile>
- <Compile Include="..\templates\standalone\Plugins\UI\VideoRecorder.xaml.cs">
- <Link>CordovaLib\Plugins\UI\VideoRecorder.xaml.cs</Link>
- </Compile>
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <Content Include="..\templates\standalone\cordovalib\resources\notification-beep.wav">
- <Link>CordovaLib\resources\notification-beep.wav</Link>
- </Content>
- <Content Include="..\templates\standalone\Images\appbar.back.rest.png">
- <Link>CordovaLib\Images\appbar.back.rest.png</Link>
- </Content>
- <Content Include="..\templates\standalone\Images\appbar.close.rest.png">
- <Link>CordovaLib\Images\appbar.close.rest.png</Link>
- </Content>
- <Content Include="..\templates\standalone\Images\appbar.feature.video.rest.png">
- <Link>CordovaLib\Images\appbar.feature.video.rest.png</Link>
- </Content>
- <Content Include="..\templates\standalone\Images\appbar.next.rest.png">
- <Link>CordovaLib\Images\appbar.next.rest.png</Link>
- </Content>
- <Content Include="..\templates\standalone\Images\appbar.save.rest.png">
- <Link>CordovaLib\Images\appbar.save.rest.png</Link>
- </Content>
- <Content Include="..\templates\standalone\Images\appbar.stop.rest.png">
- <Link>CordovaLib\Images\appbar.stop.rest.png</Link>
- </Content>
- <Content Include="Images\appbar.back.rest.png">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- <Content Include="Images\appbar.close.rest.png">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- <Content Include="Images\appbar.feature.video.rest.png">
- <CopyToOutputDirectory>Always</CopyToOutputDirectory>
- </Content>
- <Content Include="Images\appbar.next.rest.png">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- <Content Include="Images\appbar.stop.rest.png">
- <CopyToOutputDirectory>Always</CopyToOutputDirectory>
- </Content>
- <Content Include="Images\appbar.save.rest.png">
- <CopyToOutputDirectory>Always</CopyToOutputDirectory>
- </Content>
- </ItemGroup>
- <ItemGroup>
- <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
- </ItemGroup>
- <ItemGroup>
- <Resource Include="resources\notification-beep.wav" />
- </ItemGroup>
- <ItemGroup>
- <Page Include="..\templates\standalone\cordovalib\CordovaView.xaml">
- <Link>CordovaLib\CordovaView.xaml</Link>
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="..\templates\standalone\Plugins\UI\AudioRecorder.xaml">
- <Link>CordovaLib\Plugins\UI\AudioRecorder.xaml</Link>
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="..\templates\standalone\Plugins\UI\ImageCapture.xaml">
- <Link>CordovaLib\Plugins\UI\ImageCapture.xaml</Link>
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="..\templates\standalone\Plugins\UI\NotificationBox.xaml">
- <Link>CordovaLib\Plugins\UI\NotificationBox.xaml</Link>
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="..\templates\standalone\Plugins\UI\VideoRecorder.xaml">
- <Link>CordovaLib\Plugins\UI\VideoRecorder.xaml</Link>
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- </ItemGroup>
- <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\$(TargetFrameworkVersion)\Microsoft.Silverlight.$(TargetFrameworkProfile).Overrides.targets" />
- <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\$(TargetFrameworkVersion)\Microsoft.Silverlight.CSharp.targets" />
- <ProjectExtensions />
- <PropertyGroup>
- <PreBuildEvent>
- </PreBuildEvent>
- </PropertyGroup>
- <PropertyGroup>
- <PostBuildEvent>
- </PostBuildEvent>
- </PropertyGroup>
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- <AssemblyInfo
- AssemblyVersion="$(BaseVersion)"
- AssemblyFileVersion="$(BaseVersion)"
- AssemblyDescription="$(VersionNumber)"
- >
- </AssemblyInfo>
- </Target>
- <Target Name="AfterBuild">
- </Target>-->
-</Project>
\ No newline at end of file
diff --git a/framework/WPCordovaClassLib.sln b/framework/WPCordovaClassLib.sln
deleted file mode 100644
index 2d5e088..0000000
--- a/framework/WPCordovaClassLib.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2012
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPCordovaClassLib", "WPCordovaClassLib.csproj", "{FC6A1A70-892D-46AD-9E4A-9793F72AF780}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {FC6A1A70-892D-46AD-9E4A-9793F72AF780}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FC6A1A70-892D-46AD-9E4A-9793F72AF780}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FC6A1A70-892D-46AD-9E4A-9793F72AF780}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FC6A1A70-892D-46AD-9E4A-9793F72AF780}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/framework/resources/notification-beep.wav b/framework/resources/notification-beep.wav
deleted file mode 100644
index d0ad085..0000000
--- a/framework/resources/notification-beep.wav
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/App.xaml b/templates/standalone/App.xaml
deleted file mode 100644
index 18072fe..0000000
--- a/templates/standalone/App.xaml
+++ /dev/null
@@ -1,37 +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.
--->
-<Application
- x:Class="$safeprojectname$.App"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
- xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">
-
- <!--Application Resources-->
- <Application.Resources>
- </Application.Resources>
-
- <Application.ApplicationLifetimeObjects>
- <!--Required object that handles lifetime events for the application-->
- <shell:PhoneApplicationService
- Launching="Application_Launching" Closing="Application_Closing"
- Activated="Application_Activated" Deactivated="Application_Deactivated"/>
- </Application.ApplicationLifetimeObjects>
-
-</Application>
diff --git a/templates/standalone/App.xaml.cs b/templates/standalone/App.xaml.cs
deleted file mode 100644
index 2b7306d..0000000
--- a/templates/standalone/App.xaml.cs
+++ /dev/null
@@ -1,154 +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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Shell;
-
-namespace $safeprojectname$
-{
- public partial class App : Application
- {
- /// <summary>
- /// Provides easy access to the root frame of the Phone Application.
- /// </summary>
- /// <returns>The root frame of the Phone Application.</returns>
- public PhoneApplicationFrame RootFrame { get; private set; }
-
- /// <summary>
- /// Constructor for the Application object.
- /// </summary>
- public App()
- {
- // Global handler for uncaught exceptions.
- UnhandledException += Application_UnhandledException;
-
- // Show graphics profiling information while debugging.
- if (System.Diagnostics.Debugger.IsAttached)
- {
- // Display the current frame rate counters.
- //Application.Current.Host.Settings.EnableFrameRateCounter = true;
-
- // Show the areas of the app that are being redrawn in each frame.
- //Application.Current.Host.Settings.EnableRedrawRegions = true;
-
- // Enable non-production analysis visualization mode,
- // which shows areas of a page that are being GPU accelerated with a colored overlay.
- //Application.Current.Host.Settings.EnableCacheVisualization = true;
- }
-
- // Standard Silverlight initialization
- InitializeComponent();
-
- // Phone-specific initialization
- InitializePhoneApplication();
- }
-
- // Code to execute when the application is launching (eg, from Start)
- // This code will not execute when the application is reactivated
- private void Application_Launching(object sender, LaunchingEventArgs e)
- {
- }
-
- // Code to execute when the application is activated (brought to foreground)
- // This code will not execute when the application is first launched
- private void Application_Activated(object sender, ActivatedEventArgs e)
- {
- }
-
- // Code to execute when the application is deactivated (sent to background)
- // This code will not execute when the application is closing
- private void Application_Deactivated(object sender, DeactivatedEventArgs e)
- {
- }
-
- // Code to execute when the application is closing (eg, user hit Back)
- // This code will not execute when the application is deactivated
- private void Application_Closing(object sender, ClosingEventArgs e)
- {
- }
-
- // Code to execute if a navigation fails
- private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
- {
- if (System.Diagnostics.Debugger.IsAttached)
- {
- // A navigation has failed; break into the debugger
- System.Diagnostics.Debugger.Break();
- }
- }
-
- // Code to execute on Unhandled Exceptions
- private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
- {
- if (System.Diagnostics.Debugger.IsAttached)
- {
- // An unhandled exception has occurred; break into the debugger
- System.Diagnostics.Debugger.Break();
- }
- }
-
- #region Phone application initialization
-
- // Avoid double-initialization
- private bool phoneApplicationInitialized = false;
-
- // Do not add any additional code to this method
- private void InitializePhoneApplication()
- {
- if (phoneApplicationInitialized)
- return;
-
- // Create the frame but don't set it as RootVisual yet; this allows the splash
- // screen to remain active until the application is ready to render.
- RootFrame = new PhoneApplicationFrame();
- RootFrame.Navigated += CompleteInitializePhoneApplication;
-
- // Handle navigation failures
- RootFrame.NavigationFailed += RootFrame_NavigationFailed;
-
- // Ensure we don't initialize again
- phoneApplicationInitialized = true;
- }
-
- // Do not add any additional code to this method
- private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
- {
- // Set the root visual to allow the application to render
- if (RootVisual != RootFrame)
- RootVisual = RootFrame;
-
- // Remove this handler since it is no longer needed
- RootFrame.Navigated -= CompleteInitializePhoneApplication;
- }
-
- #endregion
- }
-}
diff --git a/templates/standalone/ApplicationIcon.png b/templates/standalone/ApplicationIcon.png
deleted file mode 100644
index 6b69046..0000000
--- a/templates/standalone/ApplicationIcon.png
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/Background.png b/templates/standalone/Background.png
deleted file mode 100644
index 2667df4..0000000
--- a/templates/standalone/Background.png
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/BuildManifestProcessor.js b/templates/standalone/BuildManifestProcessor.js
deleted file mode 100644
index ab2ac9d..0000000
--- a/templates/standalone/BuildManifestProcessor.js
+++ /dev/null
@@ -1,106 +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 objArgs = WScript.Arguments;
-for (i = 0; i < objArgs.length; i++) {
- WScript.Echo("Arg :: " + objArgs(i));
-}
-
-var projectFilePath = null;
-if (objArgs && objArgs.length > 0) {
- projectFilePath = objArgs(0);
-}
-
-
-var fso = WScript.CreateObject("Scripting.FileSystemObject");
-var outFile = fso.CreateTextFile("..\\..\\CordovaSourceDictionary.xml", true);
-
-outFile.WriteLine('<?xml version="1.0" encoding="utf-8"?>');
-outFile.WriteLine('<!-- This file is auto-generated, do not edit! -jm -->');
-outFile.WriteLine('<CordovaSourceDictionary>');
-
-
-function getDirectoryListing(path) {
- var retList = [];
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var folder = fso.GetFolder(path);
- // iterate over the files in the folder
- for (var files = new Enumerator(folder.files) ; !files.atEnd() ; files.moveNext()) {
- retList.push(path + files.item().name);
- }
- // iterate over the child folders in the folder
- for (var subFlds = new Enumerator(folder.SubFolders) ; !subFlds.atEnd() ; subFlds.moveNext()) {
- var subDirList = getDirectoryListing(path + subFlds.item().name + "\\");
- retList = retList.concat(subDirList);
- }
- return retList;
-}
-
-
-// We need to get any Linked files from the project
-
-WScript.Echo("Adding Source Files ...");
-if (projectFilePath != null) {
- var projXml = WScript.CreateObject("Microsoft.XMLDOM");
-
- projXml.async = false;
- if (projXml.load(projectFilePath)) {
-
- // add linked content ( windows shortcuts )
- var nodes = projXml.selectNodes("/Project/ItemGroup/Content/Link");
- WScript.Echo("/Project/ItemGroup/Content/Link nodes.length" + nodes.length);
- for (var n = 0; n < nodes.length; n++) {
- outFile.WriteLine(' <FilePath Value="' + nodes[n].text + '"/>');
- }
-
- // add files of type Resource
- nodes = projXml.selectNodes("/Project/ItemGroup/Resource/Link");
- WScript.Echo("/Project/ItemGroup/Resource/Link nodes.length" + nodes.length);
- for (n = 0; n < nodes.length; n++) {
- outFile.WriteLine(' <FilePath Value="' + nodes[n].text + '"/>');
- }
-
- // add Content files from www folder
- nodes = projXml.selectNodes("/Project/ItemGroup/Content[@Include]");
- WScript.Echo("/Project/ItemGroup/Content nodes.length" + nodes.length);
- for (n = 0; n < nodes.length; n++) {
- for (var i = 0; i < nodes[n].attributes.length; i++) {
-
- if (nodes[n].attributes[i].name == "Include") {
- var val = nodes[n].attributes[i].value;
- if (val.indexOf("www\\**") == 0 ){
- WScript.echo("adding wildcard files");
- var fileList = getDirectoryListing("..\\..\\www\\");
- for (var index = 0 ; index < fileList.length; index++)
- {
- outFile.WriteLine(' <FilePath Value="' + fileList[index].replace(/..\\..\\www/g,"www") + '"/>');
- }
- }
- else if (val.indexOf("www") == 0) {
- WScript.Echo("adding value :: " + val);
- outFile.WriteLine(' <FilePath Value="' + val + '"/>');
- }
- }
- }
-
- }
- }
-}
-
-outFile.WriteLine('</CordovaSourceDictionary>');
-
diff --git a/templates/standalone/CordovaAppProj.csproj b/templates/standalone/CordovaAppProj.csproj
deleted file mode 100644
index 8434a77..0000000
--- a/templates/standalone/CordovaAppProj.csproj
+++ /dev/null
@@ -1,238 +0,0 @@
-<?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.
--->
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>10.0.20506</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{3677C1B7-D68B-4CF9-BF8A-E869D437A6DF}</ProjectGuid>
- <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>$safeprojectname$</RootNamespace>
- <AssemblyName>$safeprojectname$</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
- <TargetFrameworkProfile>WindowsPhone71</TargetFrameworkProfile>
- <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>
- <SilverlightApplication>true</SilverlightApplication>
- <SupportedCultures>
- </SupportedCultures>
- <XapOutputs>true</XapOutputs>
- <GenerateSilverlightManifest>true</GenerateSilverlightManifest>
- <XapFilename>$safeprojectname$.xap</XapFilename>
- <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>
- <SilverlightAppEntry>$safeprojectname$.App</SilverlightAppEntry>
- <ValidateXaml>true</ValidateXaml>
- <ThrowErrorsInValidation>true</ThrowErrorsInValidation>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>Bin\Debug</OutputPath>
- <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
- <NoStdLib>true</NoStdLib>
- <NoConfig>true</NoConfig>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>Bin\Release</OutputPath>
- <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
- <NoStdLib>true</NoStdLib>
- <NoConfig>true</NoConfig>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="Microsoft.Devices.Sensors" />
- <Reference Include="Microsoft.Phone" />
- <Reference Include="Microsoft.Phone.Interop" />
- <Reference Include="Microsoft.Xna.Framework" />
- <Reference Include="System.Device" />
- <Reference Include="System.Runtime.Serialization" />
- <Reference Include="System.Servicemodel.Web" />
- <Reference Include="System.Windows" />
- <Reference Include="system" />
- <Reference Include="System.Core" />
- <Reference Include="System.Net" />
- <Reference Include="System.Xml" />
- <Reference Include="System.Xml.Linq" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="App.xaml.cs">
- <DependentUpon>App.xaml</DependentUpon>
- </Compile>
- <Compile Include="cordovalib\BaseCommand.cs" />
- <Compile Include="cordovalib\BrowserMouseHelper.cs" />
- <Compile Include="cordovalib\CommandFactory.cs" />
- <Compile Include="cordovalib\ConfigHandler.cs" />
- <Compile Include="cordovalib\CordovaCommandCall.cs" />
- <Compile Include="cordovalib\CordovaView.xaml.cs">
- <DependentUpon>CordovaView.xaml</DependentUpon>
- </Compile>
- <Compile Include="cordovalib\DOMStorageHelper.cs" />
- <Compile Include="cordovalib\ImageExifHelper.cs" />
- <Compile Include="cordovalib\JSON\JsonHelper.cs" />
- <Compile Include="cordovalib\NativeExecution.cs" />
- <Compile Include="cordovalib\OrientationHelper.cs" />
- <Compile Include="cordovalib\PluginResult.cs" />
- <Compile Include="cordovalib\ScriptCallback.cs" />
- <Compile Include="MainPage.xaml.cs">
- <DependentUpon>MainPage.xaml</DependentUpon>
- </Compile>
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <ApplicationDefinition Include="App.xaml">
- <SubType>Designer</SubType>
- <Generator>MSBuild:Compile</Generator>
- </ApplicationDefinition>
- <Page Include="MainPage.xaml">
- <SubType>Designer</SubType>
- <Generator>MSBuild:Compile</Generator>
- </Page>
- <Page Include="cordovalib\CordovaView.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- </ItemGroup>
- <ItemGroup>
- <None Include="cordova\lib\build.js" />
- <None Include="cordova\lib\clean.js" />
- <None Include="cordova\lib\deploy.js" />
- <None Include="cordova\lib\log.js" />
- <None Include="cordova\lib\target-list.js" />
- <Content Include="www\**" />
- <Content Include="config.xml" />
- <Content Include="Images\**" />
- <Content Include="resources\notification-beep.wav" />
- <None Include="cordova\build.bat" />
- <None Include="cordova\clean.bat" />
- <None Include="cordova\lib\install-device.bat" />
- <None Include="cordova\lib\install-emulator.bat" />
- <None Include="cordova\lib\list-devices.bat" />
- <None Include="cordova\lib\list-emulator-images.bat" />
- <None Include="cordova\lib\list-started-emulators.bat" />
- <None Include="cordova\lib\start-emulator.bat" />
- <None Include="cordova\log.bat" />
- <None Include="cordova\run.bat" />
- <None Include="cordova\version.bat" />
- <None Include="VERSION" />
- <Content Include="CordovaSourceDictionary.xml">
- <SubType>Designer</SubType>
- </Content>
- <None Include="BuildManifestProcessor.js" />
- <None Include="Properties\AppManifest.xml">
- <SubType>Designer</SubType>
- </None>
- <None Include="Properties\WMAppManifest.xml">
- <SubType>Designer</SubType>
- </None>
- </ItemGroup>
- <ItemGroup>
- <Content Include="ApplicationIcon.png">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- <Content Include="Background.png">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- <Content Include="SplashScreenImage.jpg" />
- </ItemGroup>
- <ItemGroup>
- <WCFMetadata Include="Service References\" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Plugins\Accelerometer.cs" />
- <Compile Include="Plugins\AudioFormatsHelper.cs" />
- <Compile Include="Plugins\AudioPlayer.cs" />
- <Compile Include="Plugins\Battery.cs" />
- <Compile Include="Plugins\Camera.cs" />
- <Compile Include="Plugins\Compass.cs" />
- <Compile Include="Plugins\Contacts.cs" />
- <Compile Include="Plugins\DebugConsole.cs" />
- <Compile Include="Plugins\Device.cs" />
- <Compile Include="Plugins\File.cs" />
- <Compile Include="Plugins\FileTransfer.cs" />
- <Compile Include="Plugins\GeoLocation.cs" />
- <Compile Include="Plugins\Globalization.cs" />
- <Compile Include="Plugins\InAppBrowser.cs" />
- <Compile Include="Plugins\Media.cs" />
- <Compile Include="Plugins\MimeTypeMapper.cs" />
- <Compile Include="Plugins\NetworkStatus.cs" />
- <Compile Include="Plugins\Notification.cs" />
- <Compile Include="Plugins\UI\AudioCaptureTask.cs" />
- <Compile Include="Plugins\UI\AudioRecorder.xaml.cs">
- <DependentUpon>AudioRecorder.xaml</DependentUpon>
- </Compile>
- <Compile Include="Plugins\UI\ImageCapture.xaml.cs">
- <DependentUpon>ImageCapture.xaml</DependentUpon>
- </Compile>
- <Compile Include="Plugins\UI\NotificationBox.xaml.cs">
- <DependentUpon>NotificationBox.xaml</DependentUpon>
- </Compile>
- <Compile Include="Plugins\UI\VideoCaptureTask.cs" />
- <Compile Include="Plugins\UI\VideoRecorder.xaml.cs">
- <DependentUpon>VideoRecorder.xaml</DependentUpon>
- </Compile>
- </ItemGroup>
- <ItemGroup>
- <Page Include="Plugins\UI\AudioRecorder.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="Plugins\UI\ImageCapture.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="Plugins\UI\NotificationBox.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="Plugins\UI\VideoRecorder.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- </ItemGroup>
- <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\$(TargetFrameworkVersion)\Microsoft.Silverlight.$(TargetFrameworkProfile).Overrides.targets" />
- <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\$(TargetFrameworkVersion)\Microsoft.Silverlight.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
- <ProjectExtensions />
- <PropertyGroup>
- <PreBuildEvent>CScript "$(ProjectDir)/BuildManifestProcessor.js" "$(ProjectPath)"</PreBuildEvent>
- </PropertyGroup>
- <PropertyGroup>
- <PostBuildEvent>
- </PostBuildEvent>
- </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/templates/standalone/CordovaSolution.sln b/templates/standalone/CordovaSolution.sln
deleted file mode 100644
index 5ce2292..0000000
--- a/templates/standalone/CordovaSolution.sln
+++ /dev/null
@@ -1,22 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010 Express for Windows Phone
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CordovaAppProj", "CordovaAppProj.csproj", "{3677C1B7-D68B-4CF9-BF8A-E869D437A6DF}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {3677C1B7-D68B-4CF9-BF8A-E869D437A6DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3677C1B7-D68B-4CF9-BF8A-E869D437A6DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3677C1B7-D68B-4CF9-BF8A-E869D437A6DF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
- {3677C1B7-D68B-4CF9-BF8A-E869D437A6DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3677C1B7-D68B-4CF9-BF8A-E869D437A6DF}.Release|Any CPU.Build.0 = Release|Any CPU
- {3677C1B7-D68B-4CF9-BF8A-E869D437A6DF}.Release|Any CPU.Deploy.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/templates/standalone/CordovaSourceDictionary.xml b/templates/standalone/CordovaSourceDictionary.xml
deleted file mode 100644
index ea05ca7..0000000
--- a/templates/standalone/CordovaSourceDictionary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- This file is auto-generated, do not edit! -jm -->
-<CordovaSourceDictionary>
- <FilePath Value="www\cordova.js"/>
- <FilePath Value="www\index.html"/>
- <FilePath Value="www\css\index.css"/>
- <FilePath Value="www\img\logo.png"/>
- <FilePath Value="www\js\index.js"/>
-</CordovaSourceDictionary>
diff --git a/templates/standalone/Images/appbar.back.rest.png b/templates/standalone/Images/appbar.back.rest.png
deleted file mode 100644
index 4bc2b92..0000000
--- a/templates/standalone/Images/appbar.back.rest.png
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/Images/appbar.close.rest.png b/templates/standalone/Images/appbar.close.rest.png
deleted file mode 100644
index 8166a1c..0000000
--- a/templates/standalone/Images/appbar.close.rest.png
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/Images/appbar.feature.video.rest.png b/templates/standalone/Images/appbar.feature.video.rest.png
deleted file mode 100644
index baff565..0000000
--- a/templates/standalone/Images/appbar.feature.video.rest.png
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/Images/appbar.next.rest.png b/templates/standalone/Images/appbar.next.rest.png
deleted file mode 100644
index ed577d7..0000000
--- a/templates/standalone/Images/appbar.next.rest.png
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/Images/appbar.save.rest.png b/templates/standalone/Images/appbar.save.rest.png
deleted file mode 100644
index d49940e..0000000
--- a/templates/standalone/Images/appbar.save.rest.png
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/Images/appbar.stop.rest.png b/templates/standalone/Images/appbar.stop.rest.png
deleted file mode 100644
index 4dd724f..0000000
--- a/templates/standalone/Images/appbar.stop.rest.png
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/MainPage.xaml b/templates/standalone/MainPage.xaml
deleted file mode 100644
index 8b1e84b..0000000
--- a/templates/standalone/MainPage.xaml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<phone:PhoneApplicationPage
- x:Class="$safeprojectname$.MainPage"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
- xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d" FontFamily="{StaticResource PhoneFontFamilyNormal}"
- FontSize="{StaticResource PhoneFontSizeNormal}"
- Foreground="{StaticResource PhoneForegroundBrush}"
- Background="Black"
- SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
- shell:SystemTray.IsVisible="True" d:DesignHeight="768" d:DesignWidth="480"
- xmlns:my="clr-namespace:WPCordovaClassLib">
- <Grid x:Name="LayoutRoot" Background="Transparent" HorizontalAlignment="Stretch">
- <Grid.RowDefinitions>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
- <my:CordovaView HorizontalAlignment="Stretch"
- Margin="0,0,0,0"
- x:Name="CordovaView"
- VerticalAlignment="Stretch" />
- <Image Source="SplashScreenImage.jpg"
- x:Name="SplashImage"
- VerticalAlignment="Center"
- HorizontalAlignment="Stretch">
- <Image.Projection>
- <PlaneProjection x:Name="SplashProjector" CenterOfRotationX="0"/>
- </Image.Projection>
- </Image>
- </Grid>
-
-</phone:PhoneApplicationPage>
diff --git a/templates/standalone/MainPage.xaml.cs b/templates/standalone/MainPage.xaml.cs
deleted file mode 100644
index b9ec7e1..0000000
--- a/templates/standalone/MainPage.xaml.cs
+++ /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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using Microsoft.Phone.Controls;
-using System.IO;
-using System.Windows.Media.Imaging;
-using System.Windows.Resources;
-
-
-namespace $safeprojectname$
-{
- public partial class MainPage : PhoneApplicationPage
- {
- // Constructor
- public MainPage()
- {
- InitializeComponent();
- this.CordovaView.Loaded += CordovaView_Loaded;
- }
-
- private void CordovaView_Loaded(object sender, RoutedEventArgs e)
- {
- this.CordovaView.Loaded -= CordovaView_Loaded;
- // first time load will have an animation
- Storyboard _storyBoard = new Storyboard();
- DoubleAnimation animation = new DoubleAnimation()
- {
- From = 0,
- Duration = TimeSpan.FromSeconds(0.6),
- To = 90
- };
- Storyboard.SetTarget(animation, SplashProjector);
- Storyboard.SetTargetProperty(animation, new PropertyPath("RotationY"));
- _storyBoard.Children.Add(animation);
- _storyBoard.Begin();
- _storyBoard.Completed += Splash_Completed;
- }
-
- void Splash_Completed(object sender, EventArgs e)
- {
- (sender as Storyboard).Completed -= Splash_Completed;
- LayoutRoot.Children.Remove(SplashImage);
- }
- }
-}
diff --git a/templates/standalone/Plugins/Accelerometer.cs b/templates/standalone/Plugins/Accelerometer.cs
deleted file mode 100644
index cba911c..0000000
--- a/templates/standalone/Plugins/Accelerometer.cs
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- Licensed 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.
-*/
-
-
-using System;
-using System.Collections.Generic;
-using System.Runtime.Serialization;
-using System.Threading;
-using Microsoft.Devices.Sensors;
-using System.Globalization;
-using System.Diagnostics;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- /// <summary>
- /// Captures device motion in the x, y, and z direction.
- /// </summary>
- public class Accelerometer : BaseCommand
- {
- #region AccelerometerOptions class
- /// <summary>
- /// Represents Accelerometer options.
- /// </summary>
- [DataContract]
- public class AccelerometerOptions
- {
- /// <summary>
- /// How often to retrieve the Acceleration in milliseconds
- /// </summary>
- [DataMember(IsRequired = false, Name = "frequency")]
- public int Frequency { get; set; }
-
- /// <summary>
- /// Watcher id
- /// </summary>
- [DataMember(IsRequired = false, Name = "id")]
- public string Id { get; set; }
-
- /// <summary>
- /// Creates options object with default parameters
- /// </summary>
- public AccelerometerOptions()
- {
- this.SetDefaultValues(new StreamingContext());
- }
-
- /// <summary>
- /// Initializes default values for class fields.
- /// Implemented in separate method because default constructor is not invoked during deserialization.
- /// </summary>
- /// <param name="context"></param>
- [OnDeserializing()]
- public void SetDefaultValues(StreamingContext context)
- {
- this.Frequency = 10000;
- }
- }
-
- #endregion
-
- #region Status codes and Constants
-
- public const int Stopped = 0;
- public const int Starting = 1;
- public const int Running = 2;
- public const int ErrorFailedToStart = 3;
-
- public const double gConstant = -9.81;
-
- #endregion
-
- #region Static members
-
- /// <summary>
- /// Status of listener
- /// </summary>
- private static int currentStatus;
-
- /// <summary>
- /// Accelerometer
- /// </summary>
- private static Microsoft.Devices.Sensors.Accelerometer accelerometer = new Microsoft.Devices.Sensors.Accelerometer();
-
- private static DateTime StartOfEpoch = new DateTime(1970, 1, 1, 0, 0, 0);
-
- #endregion
-
- /// <summary>
- /// Sensor listener event
- /// </summary>
- private void accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)
- {
- this.SetStatus(Running);
-
- PluginResult result = new PluginResult(PluginResult.Status.OK, GetCurrentAccelerationFormatted());
- result.KeepCallback = true;
- DispatchCommandResult(result);
- }
-
- /// <summary>
- /// Starts listening for acceleration sensor
- /// </summary>
- /// <returns>status of listener</returns>
- public void start(string options)
- {
- if ((currentStatus == Running) || (currentStatus == Starting))
- {
- return;
- }
- try
- {
- lock (accelerometer)
- {
- accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged;
- accelerometer.Start();
- this.SetStatus(Starting);
- }
-
- long timeout = 2000;
- while ((currentStatus == Starting) && (timeout > 0))
- {
- timeout = timeout - 100;
- Thread.Sleep(100);
- }
-
- if (currentStatus != Running)
- {
- this.SetStatus(ErrorFailedToStart);
- DispatchCommandResult(new PluginResult(PluginResult.Status.IO_EXCEPTION, ErrorFailedToStart));
- return;
- }
- }
- catch (Exception)
- {
- this.SetStatus(ErrorFailedToStart);
- DispatchCommandResult(new PluginResult(PluginResult.Status.IO_EXCEPTION, ErrorFailedToStart));
- return;
- }
- PluginResult result = new PluginResult(PluginResult.Status.NO_RESULT);
- result.KeepCallback = true;
- DispatchCommandResult(result);
- }
-
- public void stop(string options)
- {
- if (currentStatus == Running)
- {
- lock (accelerometer)
- {
- accelerometer.CurrentValueChanged -= accelerometer_CurrentValueChanged;
- accelerometer.Stop();
- this.SetStatus(Stopped);
- }
- }
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
- }
-
- /// <summary>
- /// Formats current coordinates into JSON format
- /// </summary>
- /// <returns>Coordinates in JSON format</returns>
- private string GetCurrentAccelerationFormatted()
- {
- // convert to unix timestamp
- // long timestamp = ((accelerometer.CurrentValue.Timestamp.DateTime - StartOfEpoch).Ticks) / 10000;
- // Note: Removed timestamp, to let the JS side create it using (new Date().getTime()) -jm
- // this resolves an issue with inconsistencies between JS dates and Native DateTime
- string resultCoordinates = String.Format("\"x\":{0},\"y\":{1},\"z\":{2}",
- (accelerometer.CurrentValue.Acceleration.X * gConstant).ToString("0.00000", CultureInfo.InvariantCulture),
- (accelerometer.CurrentValue.Acceleration.Y * gConstant).ToString("0.00000", CultureInfo.InvariantCulture),
- (accelerometer.CurrentValue.Acceleration.Z * gConstant).ToString("0.00000", CultureInfo.InvariantCulture));
- return "{" + resultCoordinates + "}";
- }
-
- /// <summary>
- /// Sets current status
- /// </summary>
- /// <param name="status">current status</param>
- private void SetStatus(int status)
- {
- currentStatus = status;
- }
- }
-}
-
diff --git a/templates/standalone/Plugins/AudioFormatsHelper.cs b/templates/standalone/Plugins/AudioFormatsHelper.cs
deleted file mode 100644
index dca7ee6..0000000
--- a/templates/standalone/Plugins/AudioFormatsHelper.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- Licensed 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.
-
- */
-
-using System;
-using System.IO;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- /// <summary>
- /// Provides extra functionality to support different audio formats.
- /// </summary>
- public static class AudioFormatsHelper
- {
- #region Wav
- /// <summary>
- /// Adds wav file format header to the stream
- /// https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
- /// </summary>
- /// <param name="stream">The stream</param>
- /// <param name="sampleRate">Sample Rate</param>
- public static void InitializeWavStream(this Stream stream, int sampleRate)
- {
- #region args checking
-
- if (stream == null)
- {
- throw new ArgumentNullException("stream can't be null or empty");
- }
-
- #endregion
-
- int numBits = 16;
- int numBytes = numBits / 8;
-
- stream.Write(System.Text.Encoding.UTF8.GetBytes("RIFF"), 0, 4);
- stream.Write(BitConverter.GetBytes(0), 0, 4);
- stream.Write(System.Text.Encoding.UTF8.GetBytes("WAVE"), 0, 4);
- stream.Write(System.Text.Encoding.UTF8.GetBytes("fmt "), 0, 4);
- stream.Write(BitConverter.GetBytes(16), 0, 4);
- stream.Write(BitConverter.GetBytes((short)1), 0, 2);
- stream.Write(BitConverter.GetBytes((short)1), 0, 2);
- stream.Write(BitConverter.GetBytes(sampleRate), 0, 4);
- stream.Write(BitConverter.GetBytes(sampleRate * numBytes), 0, 4);
- stream.Write(BitConverter.GetBytes((short)(numBytes)), 0, 2);
- stream.Write(BitConverter.GetBytes((short)(numBits)), 0, 2);
- stream.Write(System.Text.Encoding.UTF8.GetBytes("data"), 0, 4);
- stream.Write(BitConverter.GetBytes(0), 0, 4);
- }
-
- /// <summary>
- /// Updates wav file format header
- /// https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
- /// </summary>
- /// <param name="stream">Wav stream</param>
- public static void UpdateWavStream(this Stream stream)
- {
- #region args checking
-
- if (stream == null)
- {
- throw new ArgumentNullException("stream can't be null or empty");
- }
-
- #endregion
-
- var position = stream.Position;
-
- stream.Seek(4, SeekOrigin.Begin);
- stream.Write(BitConverter.GetBytes((int)stream.Length - 8), 0, 4);
- stream.Seek(40, SeekOrigin.Begin);
- stream.Write(BitConverter.GetBytes((int)stream.Length - 44), 0, 4);
- stream.Seek(position, SeekOrigin.Begin);
- }
-
- #endregion
- }
-}
diff --git a/templates/standalone/Plugins/AudioPlayer.cs b/templates/standalone/Plugins/AudioPlayer.cs
deleted file mode 100644
index fe85e6b..0000000
--- a/templates/standalone/Plugins/AudioPlayer.cs
+++ /dev/null
@@ -1,649 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Threading;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Audio;
-using Microsoft.Xna.Framework.Media;
-using Microsoft.Phone.Controls;
-using System.Diagnostics;
-using System.Windows.Resources;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
-
- /// <summary>
- /// Implements audio record and play back functionality.
- /// </summary>
- internal class AudioPlayer : IDisposable
- {
- #region Constants
-
- // AudioPlayer states
- private const int PlayerState_None = 0;
- private const int PlayerState_Starting = 1;
- private const int PlayerState_Running = 2;
- private const int PlayerState_Paused = 3;
- private const int PlayerState_Stopped = 4;
-
- // AudioPlayer messages
- private const int MediaState = 1;
- private const int MediaDuration = 2;
- private const int MediaPosition = 3;
- private const int MediaError = 9;
-
- // AudioPlayer errors
- private const int MediaErrorPlayModeSet = 1;
- private const int MediaErrorAlreadyRecording = 2;
- private const int MediaErrorStartingRecording = 3;
- private const int MediaErrorRecordModeSet = 4;
- private const int MediaErrorStartingPlayback = 5;
- private const int MediaErrorResumeState = 6;
- private const int MediaErrorPauseState = 7;
- private const int MediaErrorStopState = 8;
-
- //TODO: get rid of this callback, it should be universal
- //private const string CallbackFunction = "CordovaMediaonStatus";
-
- #endregion
-
-
- /// <summary>
- /// The AudioHandler object
- /// </summary>
- private Media handler;
-
- /// <summary>
- /// Temporary buffer to store audio chunk
- /// </summary>
- private byte[] buffer;
-
- /// <summary>
- /// Xna game loop dispatcher
- /// </summary>
- DispatcherTimer dtXna;
-
-
-
- /// <summary>
- /// Output buffer
- /// </summary>
- private MemoryStream memoryStream;
-
- /// <summary>
- /// The id of this player (used to identify Media object in JavaScript)
- /// </summary>
- private String id;
-
- /// <summary>
- /// State of recording or playback
- /// </summary>
- private int state = PlayerState_None;
-
- /// <summary>
- /// File name to play or record to
- /// </summary>
- private String audioFile = null;
-
- /// <summary>
- /// Duration of audio
- /// </summary>
- private double duration = -1;
-
- /// <summary>
- /// Audio player object
- /// </summary>
- private MediaElement player = null;
-
- /// <summary>
- /// Audio source
- /// </summary>
- private Microphone recorder;
-
- /// <summary>
- /// Internal flag specified that we should only open audio w/o playing it
- /// </summary>
- private bool prepareOnly = false;
-
- /// <summary>
- /// Creates AudioPlayer instance
- /// </summary>
- /// <param name="handler">Media object</param>
- /// <param name="id">player id</param>
- public AudioPlayer(Media handler, String id)
- {
- this.handler = handler;
- this.id = id;
- }
-
-
-
- /// <summary>
- /// Destroys player and stop audio playing or recording
- /// </summary>
- public void Dispose()
- {
- if (this.player != null)
- {
- this.stopPlaying();
- this.player = null;
- }
- if (this.recorder != null)
- {
- this.stopRecording();
- this.recorder = null;
- }
-
- this.FinalizeXnaGameLoop();
- }
-
- private void InvokeCallback(int message, string value, bool removeHandler)
- {
- string args = string.Format("('{0}',{1},{2});", this.id, message, value);
- string callback = @"(function(id,msg,value){
- try {
- if (msg == Media.MEDIA_ERROR) {
- value = {'code':value};
- }
- Media.onStatus(id,msg,value);
- }
- catch(e) {
- console.log('Error calling Media.onStatus :: ' + e);
- }
- })" + args;
- this.handler.InvokeCustomScript(new ScriptCallback("eval", new string[] { callback }), false);
- }
-
- private void InvokeCallback(int message, int value, bool removeHandler)
- {
- InvokeCallback(message, value.ToString(), removeHandler);
- }
-
- private void InvokeCallback(int message, double value, bool removeHandler)
- {
- InvokeCallback(message, value.ToString(), removeHandler);
- }
-
- /// <summary>
- /// Starts recording, data is stored in memory
- /// </summary>
- /// <param name="filePath"></param>
- public void startRecording(string filePath)
- {
- if (this.player != null)
- {
- InvokeCallback(MediaError, MediaErrorPlayModeSet, false);
- }
- else if (this.recorder == null)
- {
- try
- {
- this.audioFile = filePath;
- this.InitializeXnaGameLoop();
- this.recorder = Microphone.Default;
- this.recorder.BufferDuration = TimeSpan.FromMilliseconds(500);
- this.buffer = new byte[recorder.GetSampleSizeInBytes(this.recorder.BufferDuration)];
- this.recorder.BufferReady += new EventHandler<EventArgs>(recorderBufferReady);
- MemoryStream stream = new MemoryStream();
- this.memoryStream = stream;
- int numBits = 16;
- int numBytes = numBits / 8;
-
- // inline version from AudioFormatsHelper
- stream.Write(System.Text.Encoding.UTF8.GetBytes("RIFF"), 0, 4);
- stream.Write(BitConverter.GetBytes(0), 0, 4);
- stream.Write(System.Text.Encoding.UTF8.GetBytes("WAVE"), 0, 4);
- stream.Write(System.Text.Encoding.UTF8.GetBytes("fmt "), 0, 4);
- stream.Write(BitConverter.GetBytes(16), 0, 4);
- stream.Write(BitConverter.GetBytes((short)1), 0, 2);
- stream.Write(BitConverter.GetBytes((short)1), 0, 2);
- stream.Write(BitConverter.GetBytes(this.recorder.SampleRate), 0, 4);
- stream.Write(BitConverter.GetBytes(this.recorder.SampleRate * numBytes), 0, 4);
- stream.Write(BitConverter.GetBytes((short)(numBytes)), 0, 2);
- stream.Write(BitConverter.GetBytes((short)(numBits)), 0, 2);
- stream.Write(System.Text.Encoding.UTF8.GetBytes("data"), 0, 4);
- stream.Write(BitConverter.GetBytes(0), 0, 4);
-
- this.recorder.Start();
- FrameworkDispatcher.Update();
- this.SetState(PlayerState_Running);
- }
- catch (Exception)
- {
- InvokeCallback(MediaError, MediaErrorStartingRecording, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaError, MediaErrorStartingRecording),false);
- }
- }
- else
- {
- InvokeCallback(MediaError, MediaErrorAlreadyRecording, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaError, MediaErrorAlreadyRecording),false);
- }
- }
-
- /// <summary>
- /// Stops recording
- /// </summary>
- public void stopRecording()
- {
- if (this.recorder != null)
- {
- if (this.state == PlayerState_Running)
- {
- try
- {
- this.recorder.Stop();
- this.recorder.BufferReady -= recorderBufferReady;
- this.recorder = null;
- SaveAudioClipToLocalStorage();
- this.FinalizeXnaGameLoop();
- this.SetState(PlayerState_Stopped);
- }
- catch (Exception)
- {
- //TODO
- }
- }
- }
- }
-
- /// <summary>
- /// Starts or resume playing audio file
- /// </summary>
- /// <param name="filePath">The name of the audio file</param>
- /// <summary>
- /// Starts or resume playing audio file
- /// </summary>
- /// <param name="filePath">The name of the audio file</param>
- public void startPlaying(string filePath)
- {
- if (this.recorder != null)
- {
- InvokeCallback(MediaError, MediaErrorRecordModeSet, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaError, MediaErrorRecordModeSet),false);
- return;
- }
-
-
- if (this.player == null || this.player.Source.AbsolutePath.LastIndexOf(filePath) < 0)
- {
- try
- {
- // this.player is a MediaElement, it must be added to the visual tree in order to play
- PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
- if (frame != null)
- {
- PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
- if (page != null)
- {
- Grid grid = page.FindName("LayoutRoot") as Grid;
- if (grid != null)
- {
-
- this.player = grid.FindName("playerMediaElement") as MediaElement;
- if (this.player == null) // still null ?
- {
- this.player = new MediaElement();
- this.player.Name = "playerMediaElement";
- grid.Children.Add(this.player);
- this.player.Visibility = Visibility.Visible;
- }
- if (this.player.CurrentState == System.Windows.Media.MediaElementState.Playing)
- {
- this.player.Stop(); // stop it!
- }
-
- this.player.Source = null; // Garbage collect it.
- this.player.MediaOpened += MediaOpened;
- this.player.MediaEnded += MediaEnded;
- this.player.MediaFailed += MediaFailed;
- }
- }
- }
-
- this.audioFile = filePath;
-
- Uri uri = new Uri(filePath, UriKind.RelativeOrAbsolute);
- if (uri.IsAbsoluteUri)
- {
- this.player.Source = uri;
- }
- else
- {
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (!isoFile.FileExists(filePath))
- {
- // try to unpack it from the dll into isolated storage
- StreamResourceInfo fileResourceStreamInfo = Application.GetResourceStream(new Uri(filePath, UriKind.Relative));
- if (fileResourceStreamInfo != null)
- {
- using (BinaryReader br = new BinaryReader(fileResourceStreamInfo.Stream))
- {
- byte[] data = br.ReadBytes((int)fileResourceStreamInfo.Stream.Length);
-
- string[] dirParts = filePath.Split('/');
- string dirName = "";
- for (int n = 0; n < dirParts.Length - 1; n++)
- {
- dirName += dirParts[n] + "/";
- }
- if (!isoFile.DirectoryExists(dirName))
- {
- isoFile.CreateDirectory(dirName);
- }
-
- using (IsolatedStorageFileStream outFile = isoFile.OpenFile(filePath, FileMode.Create))
- {
- using (BinaryWriter writer = new BinaryWriter(outFile))
- {
- writer.Write(data);
- }
- }
- }
- }
- }
- if (isoFile.FileExists(filePath))
- {
- using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(filePath, FileMode.Open, isoFile))
- {
- this.player.SetSource(stream);
- }
- }
- else
- {
- InvokeCallback(MediaError, MediaErrorPlayModeSet, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaError, 1), false);
- return;
- }
- }
- }
- this.SetState(PlayerState_Starting);
- }
- catch (Exception e)
- {
- Debug.WriteLine("Error in AudioPlayer::startPlaying : " + e.Message);
- InvokeCallback(MediaError, MediaErrorStartingPlayback, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaError, MediaErrorStartingPlayback),false);
- }
- }
- else
- {
- if (this.state != PlayerState_Running)
- {
- this.player.Play();
- this.SetState(PlayerState_Running);
- }
- else
- {
- InvokeCallback(MediaError, MediaErrorResumeState, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaError, MediaErrorResumeState),false);
- }
- }
- }
-
- /// <summary>
- /// Callback to be invoked when the media source is ready for playback
- /// </summary>
- private void MediaOpened(object sender, RoutedEventArgs arg)
- {
- if (this.player != null)
- {
- this.duration = this.player.NaturalDuration.TimeSpan.TotalSeconds;
- InvokeCallback(MediaDuration, this.duration, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaDuration, this.duration),false);
- if (!this.prepareOnly)
- {
- this.player.Play();
- this.SetState(PlayerState_Running);
- }
- this.prepareOnly = false;
- }
- else
- {
- // TODO: occasionally MediaOpened is signalled, but player is null
- }
- }
-
- /// <summary>
- /// Callback to be invoked when playback of a media source has completed
- /// </summary>
- private void MediaEnded(object sender, RoutedEventArgs arg)
- {
- this.SetState(PlayerState_Stopped);
- }
-
- /// <summary>
- /// Callback to be invoked when playback of a media source has failed
- /// </summary>
- private void MediaFailed(object sender, RoutedEventArgs arg)
- {
- player.Stop();
- InvokeCallback(MediaError, MediaErrorStartingPlayback, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaError.ToString(), "Media failed"),false);
- }
-
- /// <summary>
- /// Seek or jump to a new time in the track
- /// </summary>
- /// <param name="milliseconds">The new track position</param>
- public void seekToPlaying(int milliseconds)
- {
- if (this.player != null)
- {
- TimeSpan tsPos = new TimeSpan(0, 0, 0, 0, milliseconds);
- this.player.Position = tsPos;
- InvokeCallback(MediaPosition, milliseconds / 1000.0f, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaPosition, milliseconds / 1000.0f),false);
- }
- }
-
- /// <summary>
- /// Set the volume of the player
- /// </summary>
- /// <param name="vol">volume 0.0-1.0, default value is 0.5</param>
- public void setVolume(double vol)
- {
- if (this.player != null)
- {
- this.player.Volume = vol;
- }
- }
-
- /// <summary>
- /// Pauses playing
- /// </summary>
- public void pausePlaying()
- {
- if (this.state == PlayerState_Running)
- {
- this.player.Pause();
- this.SetState(PlayerState_Paused);
- }
- else
- {
- InvokeCallback(MediaError, MediaErrorPauseState, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaError, MediaErrorPauseState),false);
- }
- }
-
-
- /// <summary>
- /// Stops playing the audio file
- /// </summary>
- public void stopPlaying()
- {
- if ((this.state == PlayerState_Running) || (this.state == PlayerState_Paused))
- {
- this.player.Stop();
-
- this.player.Position = new TimeSpan(0L);
- this.SetState(PlayerState_Stopped);
- }
- //else // Why is it an error to call stop on a stopped media?
- //{
- // this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaError, MediaErrorStopState), false);
- //}
- }
-
- /// <summary>
- /// Gets current position of playback
- /// </summary>
- /// <returns>current position</returns>
- public double getCurrentPosition()
- {
- if ((this.state == PlayerState_Running) || (this.state == PlayerState_Paused))
- {
- double currentPosition = this.player.Position.TotalSeconds;
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaPosition, currentPosition),false);
- return currentPosition;
- }
- else
- {
- return 0;
- }
- }
-
- /// <summary>
- /// Gets the duration of the audio file
- /// </summary>
- /// <param name="filePath">The name of the audio file</param>
- /// <returns>track duration</returns>
- public double getDuration(string filePath)
- {
- if (this.recorder != null)
- {
- return (-2);
- }
-
- if (this.player != null)
- {
- return this.duration;
-
- }
- else
- {
- this.prepareOnly = true;
- this.startPlaying(filePath);
- return this.duration;
- }
- }
-
- /// <summary>
- /// Sets the state and send it to JavaScript
- /// </summary>
- /// <param name="state">state</param>
- private void SetState(int state)
- {
- if (this.state != state)
- {
- InvokeCallback(MediaState, state, false);
- //this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaState, state),false);
- }
-
- this.state = state;
- }
-
- #region record methods
-
- /// <summary>
- /// Copies data from recorder to memory storages and updates recording state
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void recorderBufferReady(object sender, EventArgs e)
- {
- this.recorder.GetData(this.buffer);
- this.memoryStream.Write(this.buffer, 0, this.buffer.Length);
- }
-
- /// <summary>
- /// Writes audio data from memory to isolated storage
- /// </summary>
- /// <returns></returns>
- private void SaveAudioClipToLocalStorage()
- {
- if (memoryStream == null || memoryStream.Length <= 0)
- {
- return;
- }
-
- long position = memoryStream.Position;
- memoryStream.Seek(4, SeekOrigin.Begin);
- memoryStream.Write(BitConverter.GetBytes((int)memoryStream.Length - 8), 0, 4);
- memoryStream.Seek(40, SeekOrigin.Begin);
- memoryStream.Write(BitConverter.GetBytes((int)memoryStream.Length - 44), 0, 4);
- memoryStream.Seek(position, SeekOrigin.Begin);
-
- try
- {
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- string directory = Path.GetDirectoryName(audioFile);
-
- if (!isoFile.DirectoryExists(directory))
- {
- isoFile.CreateDirectory(directory);
- }
-
- this.memoryStream.Seek(0, SeekOrigin.Begin);
-
- using (IsolatedStorageFileStream fileStream = isoFile.CreateFile(audioFile))
- {
- this.memoryStream.CopyTo(fileStream);
- }
- }
- }
- catch (Exception)
- {
- //TODO: log or do something else
- throw;
- }
- }
-
- #region Xna loop
- /// <summary>
- /// Special initialization required for the microphone: XNA game loop
- /// </summary>
- private void InitializeXnaGameLoop()
- {
- // Timer to simulate the XNA game loop (Microphone is from XNA)
- this.dtXna = new DispatcherTimer();
- this.dtXna.Interval = TimeSpan.FromMilliseconds(33);
- this.dtXna.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };
- this.dtXna.Start();
- }
- /// <summary>
- /// Finalizes XNA game loop for microphone
- /// </summary>
- private void FinalizeXnaGameLoop()
- {
- // Timer to simulate the XNA game loop (Microphone is from XNA)
- if (this.dtXna != null)
- {
- this.dtXna.Stop();
- this.dtXna = null;
- }
- }
-
- #endregion
-
- #endregion
- }
-}
diff --git a/templates/standalone/Plugins/Battery.cs b/templates/standalone/Plugins/Battery.cs
deleted file mode 100644
index 962959e..0000000
--- a/templates/standalone/Plugins/Battery.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-
-using Microsoft.Phone.Info;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- /// <summary>
- /// Listens for changes to the state of the battery on the device.
- /// Currently only the "isPlugged" parameter available via native APIs.
- /// </summary>
- public class Battery : BaseCommand
- {
- private bool isPlugged = false;
- private EventHandler powerChanged;
-
- public Battery()
- {
- powerChanged = new EventHandler(DeviceStatus_PowerSourceChanged);
- isPlugged = DeviceStatus.PowerSource.ToString().CompareTo("External") == 0;
- }
-
- public void start(string options)
- {
- // Register power changed event handler
- DeviceStatus.PowerSourceChanged += powerChanged;
-
- PluginResult result = new PluginResult(PluginResult.Status.NO_RESULT);
- result.KeepCallback = true;
- DispatchCommandResult(result);
- }
- public void stop(string options)
- {
- // Unregister power changed event handler
- DeviceStatus.PowerSourceChanged -= powerChanged;
- }
-
- private void DeviceStatus_PowerSourceChanged(object sender, EventArgs e)
- {
- isPlugged = DeviceStatus.PowerSource.ToString().CompareTo("External") == 0;
- PluginResult result = new PluginResult(PluginResult.Status.OK, GetCurrentBatteryStateFormatted());
- result.KeepCallback = true;
- DispatchCommandResult(result);
- }
-
- private string GetCurrentBatteryStateFormatted()
- {
- string batteryState = String.Format("\"level\":{0},\"isPlugged\":{1}",
- "null",
- isPlugged ? "true" : "false"
- );
- batteryState = "{" + batteryState + "}";
- return batteryState;
- }
-
- }
-}
diff --git a/templates/standalone/Plugins/Camera.cs b/templates/standalone/Plugins/Camera.cs
deleted file mode 100644
index 5ff8045..0000000
--- a/templates/standalone/Plugins/Camera.cs
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Collections.Generic;
-using Microsoft.Phone.Tasks;
-using System.Runtime.Serialization;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Windows.Media.Imaging;
-using Microsoft.Phone;
-using Microsoft.Xna.Framework.Media;
-using System.Diagnostics;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- public class Camera : BaseCommand
- {
-
- /// <summary>
- /// Return base64 encoded string
- /// </summary>
- private const int DATA_URL = 0;
-
- /// <summary>
- /// Return file uri
- /// </summary>
- private const int FILE_URI = 1;
-
- /// <summary>
- /// Choose image from picture library
- /// </summary>
- private const int PHOTOLIBRARY = 0;
-
- /// <summary>
- /// Take picture from camera
- /// </summary>
-
- private const int CAMERA = 1;
-
- /// <summary>
- /// Choose image from picture library
- /// </summary>
- private const int SAVEDPHOTOALBUM = 2;
-
- /// <summary>
- /// Take a picture of type JPEG
- /// </summary>
- private const int JPEG = 0;
-
- /// <summary>
- /// Take a picture of type PNG
- /// </summary>
- private const int PNG = 1;
-
- /// <summary>
- /// Folder to store captured images
- /// </summary>
- private const string isoFolder = "CapturedImagesCache";
-
- /// <summary>
- /// Represents captureImage action options.
- /// </summary>
- [DataContract]
- public class CameraOptions
- {
- /// <summary>
- /// Source to getPicture from.
- /// </summary>
- [DataMember(IsRequired = false, Name = "sourceType")]
- public int PictureSourceType { get; set; }
-
- /// <summary>
- /// Format of image that returned from getPicture.
- /// </summary>
- [DataMember(IsRequired = false, Name = "destinationType")]
- public int DestinationType { get; set; }
-
- /// <summary>
- /// Quality of saved image
- /// </summary>
- [DataMember(IsRequired = false, Name = "quality")]
- public int Quality { get; set; }
-
- /// <summary>
- /// Controls whether or not the image is also added to the device photo album.
- /// </summary>
- [DataMember(IsRequired = false, Name = "saveToPhotoAlbum")]
- public bool SaveToPhotoAlbum { get; set; }
-
- /// <summary>
- /// Ignored
- /// </summary>
- [DataMember(IsRequired = false, Name = "correctOrientation")]
- public bool CorrectOrientation { get; set; }
-
-
-
- /// <summary>
- /// Ignored
- /// </summary>
- [DataMember(IsRequired = false, Name = "allowEdit")]
- public bool AllowEdit { get; set; }
-
- /// <summary>
- /// Height in pixels to scale image
- /// </summary>
- [DataMember(IsRequired = false, Name = "encodingType")]
- public int EncodingType { get; set; }
-
- /// <summary>
- /// Height in pixels to scale image
- /// </summary>
- [DataMember(IsRequired = false, Name = "mediaType")]
- public int MediaType { get; set; }
-
-
- /// <summary>
- /// Height in pixels to scale image
- /// </summary>
- [DataMember(IsRequired = false, Name = "targetHeight")]
- public int TargetHeight { get; set; }
-
-
- /// <summary>
- /// Width in pixels to scale image
- /// </summary>
- [DataMember(IsRequired = false, Name = "targetWidth")]
- public int TargetWidth { get; set; }
-
- /// <summary>
- /// Creates options object with default parameters
- /// </summary>
- public CameraOptions()
- {
- this.SetDefaultValues(new StreamingContext());
- }
-
- /// <summary>
- /// Initializes default values for class fields.
- /// Implemented in separate method because default constructor is not invoked during deserialization.
- /// </summary>
- /// <param name="context"></param>
- [OnDeserializing()]
- public void SetDefaultValues(StreamingContext context)
- {
- PictureSourceType = CAMERA;
- DestinationType = FILE_URI;
- Quality = 80;
- TargetHeight = -1;
- TargetWidth = -1;
- SaveToPhotoAlbum = false;
- CorrectOrientation = true;
- AllowEdit = false;
- MediaType = -1;
- EncodingType = -1;
- }
- }
-
- /// <summary>
- /// Used to open photo library
- /// </summary>
- PhotoChooserTask photoChooserTask;
-
- /// <summary>
- /// Used to open camera application
- /// </summary>
- CameraCaptureTask cameraTask;
-
- /// <summary>
- /// Camera options
- /// </summary>
- CameraOptions cameraOptions;
-
- public void takePicture(string options)
- {
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- // ["quality", "destinationType", "sourceType", "targetWidth", "targetHeight", "encodingType",
- // "mediaType", "allowEdit", "correctOrientation", "saveToPhotoAlbum" ]
- this.cameraOptions = new CameraOptions();
- this.cameraOptions.Quality = int.Parse(args[0]);
- this.cameraOptions.DestinationType = int.Parse(args[1]);
- this.cameraOptions.PictureSourceType = int.Parse(args[2]);
- this.cameraOptions.TargetWidth = int.Parse(args[3]);
- this.cameraOptions.TargetHeight = int.Parse(args[4]);
- this.cameraOptions.EncodingType = int.Parse(args[5]);
- this.cameraOptions.MediaType = int.Parse(args[6]);
- this.cameraOptions.AllowEdit = bool.Parse(args[7]);
- this.cameraOptions.CorrectOrientation = bool.Parse(args[8]);
- this.cameraOptions.SaveToPhotoAlbum = bool.Parse(args[9]);
-
- //this.cameraOptions = String.IsNullOrEmpty(options) ?
- // new CameraOptions() : JSON.JsonHelper.Deserialize<CameraOptions>(options);
- }
- catch (Exception ex)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
- return;
- }
-
- //TODO Check if all the options are acceptable
-
-
- if (cameraOptions.PictureSourceType == CAMERA)
- {
- cameraTask = new CameraCaptureTask();
- cameraTask.Completed += onCameraTaskCompleted;
- cameraTask.Show();
- }
- else
- {
- if ((cameraOptions.PictureSourceType == PHOTOLIBRARY) || (cameraOptions.PictureSourceType == SAVEDPHOTOALBUM))
- {
- photoChooserTask = new PhotoChooserTask();
- photoChooserTask.Completed += onPickerTaskCompleted;
- photoChooserTask.Show();
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.NO_RESULT));
- }
- }
-
- }
-
- public void onCameraTaskCompleted(object sender, PhotoResult e)
- {
- if (e.Error != null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
- return;
- }
-
- switch (e.TaskResult)
- {
- case TaskResult.OK:
- try
- {
- string imagePathOrContent = string.Empty;
-
- if (cameraOptions.DestinationType == FILE_URI)
- {
- // Save image in media library
- if (cameraOptions.SaveToPhotoAlbum)
- {
- MediaLibrary library = new MediaLibrary();
- Picture pict = library.SavePicture(e.OriginalFileName, e.ChosenPhoto); // to save to photo-roll ...
- }
-
- int orient = ImageExifHelper.getImageOrientationFromStream(e.ChosenPhoto);
- int newAngle = 0;
- switch (orient)
- {
- case ImageExifOrientation.LandscapeLeft:
- newAngle = 90;
- break;
- case ImageExifOrientation.PortraitUpsideDown:
- newAngle = 180;
- break;
- case ImageExifOrientation.LandscapeRight:
- newAngle = 270;
- break;
- case ImageExifOrientation.Portrait:
- default: break; // 0 default already set
- }
-
- Stream rotImageStream = ImageExifHelper.RotateStream(e.ChosenPhoto, newAngle);
-
- // we should return stream position back after saving stream to media library
- rotImageStream.Seek(0, SeekOrigin.Begin);
-
- WriteableBitmap image = PictureDecoder.DecodeJpeg(rotImageStream);
-
- imagePathOrContent = this.SaveImageToLocalStorage(image, Path.GetFileName(e.OriginalFileName));
-
-
- }
- else if (cameraOptions.DestinationType == DATA_URL)
- {
- imagePathOrContent = this.GetImageContent(e.ChosenPhoto);
- }
- else
- {
- // TODO: shouldn't this happen before we launch the camera-picker?
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Incorrect option: destinationType"));
- return;
- }
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, imagePathOrContent));
-
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error retrieving image."));
- }
- break;
-
- case TaskResult.Cancel:
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Selection cancelled."));
- break;
-
- default:
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Selection did not complete!"));
- break;
- }
-
- }
-
- public void onPickerTaskCompleted(object sender, PhotoResult e)
- {
- if (e.Error != null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
- return;
- }
-
- switch (e.TaskResult)
- {
- case TaskResult.OK:
- try
- {
- string imagePathOrContent = string.Empty;
-
- if (cameraOptions.DestinationType == FILE_URI)
- {
- WriteableBitmap image = PictureDecoder.DecodeJpeg(e.ChosenPhoto);
- imagePathOrContent = this.SaveImageToLocalStorage(image, Path.GetFileName(e.OriginalFileName));
- }
- else if (cameraOptions.DestinationType == DATA_URL)
- {
- imagePathOrContent = this.GetImageContent(e.ChosenPhoto);
-
- }
- else
- {
- // TODO: shouldn't this happen before we launch the camera-picker?
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Incorrect option: destinationType"));
- return;
- }
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, imagePathOrContent));
-
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error retrieving image."));
- }
- break;
-
- case TaskResult.Cancel:
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Selection cancelled."));
- break;
-
- default:
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Selection did not complete!"));
- break;
- }
- }
-
- /// <summary>
- /// Returns image content in a form of base64 string
- /// </summary>
- /// <param name="stream">Image stream</param>
- /// <returns>Base64 representation of the image</returns>
- private string GetImageContent(Stream stream)
- {
- int streamLength = (int)stream.Length;
- byte[] fileData = new byte[streamLength + 1];
- stream.Read(fileData, 0, streamLength);
-
- //use photo's actual width & height if user doesn't provide width & height
- if (cameraOptions.TargetWidth < 0 && cameraOptions.TargetHeight < 0)
- {
- stream.Close();
- return Convert.ToBase64String(fileData);
- }
- else
- {
- // resize photo
- byte[] resizedFile = ResizePhoto(stream, fileData);
- stream.Close();
- return Convert.ToBase64String(resizedFile);
- }
- }
-
- /// <summary>
- /// Resize image
- /// </summary>
- /// <param name="stream">Image stream</param>
- /// <param name="fileData">File data</param>
- /// <returns>resized image</returns>
- private byte[] ResizePhoto(Stream stream, byte[] fileData)
- {
- int streamLength = (int)stream.Length;
- int intResult = 0;
-
- byte[] resizedFile;
-
- stream.Read(fileData, 0, streamLength);
-
- BitmapImage objBitmap = new BitmapImage();
- MemoryStream objBitmapStream = new MemoryStream(fileData);
- MemoryStream objBitmapStreamResized = new MemoryStream();
- WriteableBitmap objWB;
- objBitmap.SetSource(stream);
- objWB = new WriteableBitmap(objBitmap);
-
- // resize the photo with user defined TargetWidth & TargetHeight
- Extensions.SaveJpeg(objWB, objBitmapStreamResized, cameraOptions.TargetWidth, cameraOptions.TargetHeight, 0, cameraOptions.Quality);
-
- //Convert the resized stream to a byte array.
- streamLength = (int)objBitmapStreamResized.Length;
- resizedFile = new Byte[streamLength]; //-1
- objBitmapStreamResized.Position = 0;
- //for some reason we have to set Position to zero, but we don't have to earlier when we get the bytes from the chosen photo...
- intResult = objBitmapStreamResized.Read(resizedFile, 0, streamLength);
-
- return resizedFile;
- }
-
- /// <summary>
- /// Saves captured image in isolated storage
- /// </summary>
- /// <param name="imageFileName">image file name</param>
- /// <returns>Image path</returns>
- private string SaveImageToLocalStorage(WriteableBitmap image, string imageFileName)
- {
-
- if (image == null)
- {
- throw new ArgumentNullException("imageBytes");
- }
- try
- {
-
-
- var isoFile = IsolatedStorageFile.GetUserStoreForApplication();
-
- if (!isoFile.DirectoryExists(isoFolder))
- {
- isoFile.CreateDirectory(isoFolder);
- }
-
- string filePath = System.IO.Path.Combine("///" + isoFolder + "/", imageFileName);
-
- using (var stream = isoFile.CreateFile(filePath))
- {
- // resize image if Height and Width defined via options
- if (cameraOptions.TargetHeight > 0 && cameraOptions.TargetWidth > 0)
- {
- image.SaveJpeg(stream, cameraOptions.TargetWidth, cameraOptions.TargetHeight, 0, cameraOptions.Quality);
- }
- else
- {
- image.SaveJpeg(stream, image.PixelWidth, image.PixelHeight, 0, cameraOptions.Quality);
- }
- }
-
- return new Uri(filePath, UriKind.Relative).ToString();
- }
- catch (Exception)
- {
- //TODO: log or do something else
- throw;
- }
- }
-
- }
-}
diff --git a/templates/standalone/Plugins/Capture.cs b/templates/standalone/Plugins/Capture.cs
deleted file mode 100644
index 5e14a16..0000000
--- a/templates/standalone/Plugins/Capture.cs
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Runtime.Serialization;
-using System.Windows.Media.Imaging;
-using Microsoft.Phone;
-using Microsoft.Phone.Tasks;
-using Microsoft.Xna.Framework.Media;
-using WPCordovaClassLib.Cordova.UI;
-using AudioResult = WPCordovaClassLib.Cordova.UI.AudioCaptureTask.AudioResult;
-using VideoResult = WPCordovaClassLib.Cordova.UI.VideoCaptureTask.VideoResult;
-using System.Windows;
-using System.Diagnostics;
-using Microsoft.Phone.Controls;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- /// <summary>
- /// Provides access to the audio, image, and video capture capabilities of the device
- /// </summary>
- public class Capture : BaseCommand
- {
- #region Internal classes (options and resultant objects)
-
- /// <summary>
- /// Represents captureImage action options.
- /// </summary>
- [DataContract]
- public class CaptureImageOptions
- {
- /// <summary>
- /// The maximum number of images the device user can capture in a single capture operation. The value must be greater than or equal to 1 (defaults to 1).
- /// </summary>
- [DataMember(IsRequired = false, Name = "limit")]
- public int Limit { get; set; }
-
- public static CaptureImageOptions Default
- {
- get { return new CaptureImageOptions() { Limit = 1 }; }
- }
- }
-
- /// <summary>
- /// Represents captureAudio action options.
- /// </summary>
- [DataContract]
- public class CaptureAudioOptions
- {
- /// <summary>
- /// The maximum number of audio files the device user can capture in a single capture operation. The value must be greater than or equal to 1 (defaults to 1).
- /// </summary>
- [DataMember(IsRequired = false, Name = "limit")]
- public int Limit { get; set; }
-
- public static CaptureAudioOptions Default
- {
- get { return new CaptureAudioOptions() { Limit = 1 }; }
- }
- }
-
- /// <summary>
- /// Represents captureVideo action options.
- /// </summary>
- [DataContract]
- public class CaptureVideoOptions
- {
- /// <summary>
- /// The maximum number of video files the device user can capture in a single capture operation. The value must be greater than or equal to 1 (defaults to 1).
- /// </summary>
- [DataMember(IsRequired = false, Name = "limit")]
- public int Limit { get; set; }
-
- public static CaptureVideoOptions Default
- {
- get { return new CaptureVideoOptions() { Limit = 1 }; }
- }
- }
-
- /// <summary>
- /// Represents getFormatData action options.
- /// </summary>
- [DataContract]
- public class MediaFormatOptions
- {
- /// <summary>
- /// File path
- /// </summary>
- [DataMember(IsRequired = true, Name = "fullPath")]
- public string FullPath { get; set; }
-
- /// <summary>
- /// File mime type
- /// </summary>
- [DataMember(Name = "type")]
- public string Type { get; set; }
-
- }
-
- /// <summary>
- /// Stores image info
- /// </summary>
- [DataContract]
- public class MediaFile
- {
-
- [DataMember(Name = "name")]
- public string FileName { get; set; }
-
- [DataMember(Name = "fullPath")]
- public string FilePath { get; set; }
-
- [DataMember(Name = "type")]
- public string Type { get; set; }
-
- [DataMember(Name = "lastModifiedDate")]
- public string LastModifiedDate { get; set; }
-
- [DataMember(Name = "size")]
- public long Size { get; set; }
-
- public MediaFile(string filePath, Picture image)
- {
- this.FilePath = filePath;
- this.FileName = System.IO.Path.GetFileName(this.FilePath);
- this.Type = MimeTypeMapper.GetMimeType(FileName);
- this.Size = image.GetImage().Length;
-
- using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
- {
- this.LastModifiedDate = storage.GetLastWriteTime(filePath).DateTime.ToString();
- }
-
- }
-
- public MediaFile(string filePath, Stream stream)
- {
- this.FilePath = filePath;
- this.FileName = System.IO.Path.GetFileName(this.FilePath);
- this.Type = MimeTypeMapper.GetMimeType(FileName);
- this.Size = stream.Length;
-
- using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
- {
- this.LastModifiedDate = storage.GetLastWriteTime(filePath).DateTime.ToString();
- }
- }
- }
-
- /// <summary>
- /// Stores additional media file data
- /// </summary>
- [DataContract]
- public class MediaFileData
- {
- [DataMember(Name = "height")]
- public int Height { get; set; }
-
- [DataMember(Name = "width")]
- public int Width { get; set; }
-
- [DataMember(Name = "bitrate")]
- public int Bitrate { get; set; }
-
- [DataMember(Name = "duration")]
- public int Duration { get; set; }
-
- [DataMember(Name = "codecs")]
- public string Codecs { get; set; }
-
- public MediaFileData(WriteableBitmap image)
- {
- this.Height = image.PixelHeight;
- this.Width = image.PixelWidth;
- this.Bitrate = 0;
- this.Duration = 0;
- this.Codecs = "";
- }
- }
-
- #endregion
-
- /// <summary>
- /// Folder to store captured images
- /// </summary>
- private string isoFolder = "CapturedImagesCache";
-
- /// <summary>
- /// Capture Image options
- /// </summary>
- protected CaptureImageOptions captureImageOptions;
-
- /// <summary>
- /// Capture Audio options
- /// </summary>
- protected CaptureAudioOptions captureAudioOptions;
-
- /// <summary>
- /// Capture Video options
- /// </summary>
- protected CaptureVideoOptions captureVideoOptions;
-
- /// <summary>
- /// Used to open camera application
- /// </summary>
- private CameraCaptureTask cameraTask;
-
- /// <summary>
- /// Used for audio recording
- /// </summary>
- private AudioCaptureTask audioCaptureTask;
-
- /// <summary>
- /// Used for video recording
- /// </summary>
- private VideoCaptureTask videoCaptureTask;
-
- /// <summary>
- /// Stores information about captured files
- /// </summary>
- List<MediaFile> files = new List<MediaFile>();
-
- /// <summary>
- /// Launches default camera application to capture image
- /// </summary>
- /// <param name="options">may contains limit or mode parameters</param>
- public void captureImage(string options)
- {
- try
- {
- try
- {
-
- string args = JSON.JsonHelper.Deserialize<string[]>(options)[0];
- this.captureImageOptions = String.IsNullOrEmpty(args) ? CaptureImageOptions.Default : JSON.JsonHelper.Deserialize<CaptureImageOptions>(args);
-
- }
- catch (Exception ex)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
- return;
- }
-
-
- cameraTask = new CameraCaptureTask();
- cameraTask.Completed += this.cameraTask_Completed;
- cameraTask.Show();
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- }
-
- /// <summary>
- /// Launches our own audio recording control to capture audio
- /// </summary>
- /// <param name="options">may contains additional parameters</param>
- public void captureAudio(string options)
- {
- try
- {
- try
- {
- string args = JSON.JsonHelper.Deserialize<string[]>(options)[0];
- this.captureAudioOptions = String.IsNullOrEmpty(args) ? CaptureAudioOptions.Default : JSON.JsonHelper.Deserialize<CaptureAudioOptions>(args);
-
- }
- catch (Exception ex)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
- return;
- }
-
- audioCaptureTask = new AudioCaptureTask();
- audioCaptureTask.Completed += audioRecordingTask_Completed;
- audioCaptureTask.Show();
-
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- }
-
- /// <summary>
- /// Launches our own video recording control to capture video
- /// </summary>
- /// <param name="options">may contains additional parameters</param>
- public void captureVideo(string options)
- {
- try
- {
- try
- {
- string args = JSON.JsonHelper.Deserialize<string[]>(options)[0];
- this.captureVideoOptions = String.IsNullOrEmpty(args) ? CaptureVideoOptions.Default : JSON.JsonHelper.Deserialize<CaptureVideoOptions>(args);
-
- }
- catch (Exception ex)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
- return;
- }
-
- videoCaptureTask = new VideoCaptureTask();
- videoCaptureTask.Completed += videoRecordingTask_Completed;
- videoCaptureTask.Show();
-
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- }
-
- /// <summary>
- /// Retrieves the format information of the media file.
- /// </summary>
- /// <param name="options"></param>
- public void getFormatData(string options)
- {
- try
- {
- MediaFormatOptions mediaFormatOptions;
- try
- {
- mediaFormatOptions = new MediaFormatOptions();
- string[] optionStrings = JSON.JsonHelper.Deserialize<string[]>(options);
- mediaFormatOptions.FullPath = optionStrings[0];
- mediaFormatOptions.Type = optionStrings[1];
- }
- catch (Exception ex)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
- return;
- }
-
- if (string.IsNullOrEmpty(mediaFormatOptions.FullPath))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- }
-
- string mimeType = mediaFormatOptions.Type;
-
- if (string.IsNullOrEmpty(mimeType))
- {
- mimeType = MimeTypeMapper.GetMimeType(mediaFormatOptions.FullPath);
- }
-
- if (mimeType.Equals("image/jpeg"))
- {
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- WriteableBitmap image = ExtractImageFromLocalStorage(mediaFormatOptions.FullPath);
-
- if (image == null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "File not found"));
- return;
- }
-
- MediaFileData mediaData = new MediaFileData(image);
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, mediaData));
- });
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
- }
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
- }
- }
-
- /// <summary>
- /// Opens specified file in media player
- /// </summary>
- /// <param name="options">MediaFile to play</param>
- public void play(string options)
- {
- try
- {
- MediaFile file;
-
- try
- {
- file = String.IsNullOrEmpty(options) ? null : JSON.JsonHelper.Deserialize<MediaFile[]>(options)[0];
-
- }
- catch (Exception ex)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
- return;
- }
-
- if (file == null || String.IsNullOrEmpty(file.FilePath))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "File path is missing"));
- return;
- }
-
- // if url starts with '/' media player throws FileNotFound exception
- Uri fileUri = new Uri(file.FilePath.TrimStart(new char[] { '/', '\\' }), UriKind.Relative);
-
- MediaPlayerLauncher player = new MediaPlayerLauncher();
- player.Media = fileUri;
- player.Location = MediaLocationType.Data;
- player.Show();
-
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
-
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- }
-
-
- /// <summary>
- /// Handles result of capture to save image information
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e">stores information about current captured image</param>
- private void cameraTask_Completed(object sender, PhotoResult e)
- {
-
- if (e.Error != null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
- return;
- }
-
- switch (e.TaskResult)
- {
- case TaskResult.OK:
- try
- {
- string fileName = System.IO.Path.GetFileName(e.OriginalFileName);
-
- // Save image in media library
- MediaLibrary library = new MediaLibrary();
- Picture image = library.SavePicture(fileName, e.ChosenPhoto);
-
- int orient = ImageExifHelper.getImageOrientationFromStream(e.ChosenPhoto);
- int newAngle = 0;
- switch (orient)
- {
- case ImageExifOrientation.LandscapeLeft:
- newAngle = 90;
- break;
- case ImageExifOrientation.PortraitUpsideDown:
- newAngle = 180;
- break;
- case ImageExifOrientation.LandscapeRight:
- newAngle = 270;
- break;
- case ImageExifOrientation.Portrait:
- default: break; // 0 default already set
- }
-
- Stream rotImageStream = ImageExifHelper.RotateStream(e.ChosenPhoto, newAngle);
-
- // Save image in isolated storage
-
- // we should return stream position back after saving stream to media library
- rotImageStream.Seek(0, SeekOrigin.Begin);
-
- byte[] imageBytes = new byte[rotImageStream.Length];
- rotImageStream.Read(imageBytes, 0, imageBytes.Length);
- rotImageStream.Dispose();
- string pathLocalStorage = this.SaveImageToLocalStorage(fileName, isoFolder, imageBytes);
- imageBytes = null;
- // Get image data
- MediaFile data = new MediaFile(pathLocalStorage, image);
-
- this.files.Add(data);
-
- if (files.Count < this.captureImageOptions.Limit)
- {
- cameraTask.Show();
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
- files.Clear();
- }
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error capturing image."));
- }
- break;
-
- case TaskResult.Cancel:
- if (files.Count > 0)
- {
- // User canceled operation, but some images were made
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
- files.Clear();
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Canceled."));
- }
- break;
-
- default:
- if (files.Count > 0)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
- files.Clear();
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Did not complete!"));
- }
- break;
- }
- }
-
- /// <summary>
- /// Handles result of audio recording tasks
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e">stores information about current captured audio</param>
- private void audioRecordingTask_Completed(object sender, AudioResult e)
- {
-
- if (e.Error != null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
- return;
- }
-
- switch (e.TaskResult)
- {
- case TaskResult.OK:
- try
- {
- // Get image data
- MediaFile data = new MediaFile(e.AudioFileName, e.AudioFile);
-
- this.files.Add(data);
-
- if (files.Count < this.captureAudioOptions.Limit)
- {
- audioCaptureTask.Show();
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
- files.Clear();
- }
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error capturing audio."));
- }
- break;
-
- case TaskResult.Cancel:
- if (files.Count > 0)
- {
- // User canceled operation, but some audio clips were made
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
- files.Clear();
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Canceled."));
- }
- break;
-
- default:
- if (files.Count > 0)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
- files.Clear();
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Did not complete!"));
- }
- break;
- }
- }
-
- /// <summary>
- /// Handles result of video recording tasks
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e">stores information about current captured video</param>
- private void videoRecordingTask_Completed(object sender, VideoResult e)
- {
-
- if (e.Error != null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
- return;
- }
-
- switch (e.TaskResult)
- {
- case TaskResult.OK:
- try
- {
- // Get image data
- MediaFile data = new MediaFile(e.VideoFileName, e.VideoFile);
-
- this.files.Add(data);
-
- if (files.Count < this.captureVideoOptions.Limit)
- {
- videoCaptureTask.Show();
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
- files.Clear();
- }
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error capturing video."));
- }
- break;
-
- case TaskResult.Cancel:
- if (files.Count > 0)
- {
- // User canceled operation, but some video clips were made
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
- files.Clear();
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Canceled."));
- }
- break;
-
- default:
- if (files.Count > 0)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
- files.Clear();
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Did not complete!"));
- }
- break;
- }
- }
-
- /// <summary>
- /// Extract file from Isolated Storage as WriteableBitmap object
- /// </summary>
- /// <param name="filePath"></param>
- /// <returns></returns>
- private WriteableBitmap ExtractImageFromLocalStorage(string filePath)
- {
- try
- {
-
- var isoFile = IsolatedStorageFile.GetUserStoreForApplication();
-
- using (var imageStream = isoFile.OpenFile(filePath, FileMode.Open, FileAccess.Read))
- {
- var imageSource = PictureDecoder.DecodeJpeg(imageStream);
- return imageSource;
- }
- }
- catch (Exception)
- {
- return null;
- }
- }
-
-
- /// <summary>
- /// Saves captured image in isolated storage
- /// </summary>
- /// <param name="imageFileName">image file name</param>
- /// <param name="imageFolder">folder to store images</param>
- /// <returns>Image path</returns>
- private string SaveImageToLocalStorage(string imageFileName, string imageFolder, byte[] imageBytes)
- {
- if (imageBytes == null)
- {
- throw new ArgumentNullException("imageBytes");
- }
- try
- {
- var isoFile = IsolatedStorageFile.GetUserStoreForApplication();
-
- if (!isoFile.DirectoryExists(imageFolder))
- {
- isoFile.CreateDirectory(imageFolder);
- }
- string filePath = System.IO.Path.Combine("/" + imageFolder + "/", imageFileName);
-
- using (IsolatedStorageFileStream stream = isoFile.CreateFile(filePath))
- {
- stream.Write(imageBytes, 0, imageBytes.Length);
- }
-
- return filePath;
- }
- catch (Exception)
- {
- //TODO: log or do something else
- throw;
- }
- }
-
-
- }
-}
\ No newline at end of file
diff --git a/templates/standalone/Plugins/Compass.cs b/templates/standalone/Plugins/Compass.cs
deleted file mode 100644
index c9e1c4d..0000000
--- a/templates/standalone/Plugins/Compass.cs
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using DeviceCompass = Microsoft.Devices.Sensors.Compass;
-using System.Windows.Threading;
-using System.Runtime.Serialization;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Globalization;
-using System.Threading;
-using Microsoft.Devices.Sensors;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
-
- public class Compass : BaseCommand
- {
- #region Static members
-
- /// <summary>
- /// Status of listener
- /// </summary>
- private static int currentStatus;
-
- /// <summary>
- /// Id for get getCompass method
- /// </summary>
- private static string getCompassId = "getCompassId";
-
- /// <summary>
- /// Compass
- /// </summary>
- private static DeviceCompass compass = new DeviceCompass();
-
- /// <summary>
- /// Listeners for callbacks
- /// </summary>
- private static Dictionary<string, Compass> watchers = new Dictionary<string, Compass>();
-
- #endregion
-
- #region Status codes
-
- public const int Stopped = 0;
- public const int Starting = 1;
- public const int Running = 2;
- public const int ErrorFailedToStart = 4;
- public const int Not_Supported = 20;
-
- /*
- * // Capture error codes
- CompassError.COMPASS_INTERNAL_ERR = 0;
- CompassError.COMPASS_NOT_SUPPORTED = 20;
- * */
-
- #endregion
-
- #region CompassOptions class
- /// <summary>
- /// Represents Accelerometer options.
- /// </summary>
- [DataContract]
- public class CompassOptions
- {
- /// <summary>
- /// How often to retrieve the Acceleration in milliseconds
- /// </summary>
- [DataMember(IsRequired = false, Name = "frequency")]
- public int Frequency { get; set; }
-
- /// <summary>
- /// The change in degrees required to initiate a watchHeadingFilter success callback.
- /// </summary>
- [DataMember(IsRequired = false, Name = "filter")]
- public int Filter { get; set; }
-
- /// <summary>
- /// Watcher id
- /// </summary>
- [DataMember(IsRequired = false, Name = "id")]
- public string Id { get; set; }
-
- }
- #endregion
-
-
- /// <summary>
- /// Time the value was last changed
- /// </summary>
- //private DateTime lastValueChangedTime;
-
- /// <summary>
- /// Accelerometer options
- /// </summary>
- private CompassOptions compassOptions;
-
- //bool isDataValid;
-
- //bool calibrating = false;
-
- public Compass()
- {
-
- }
-
- /// <summary>
- /// Formats current coordinates into JSON format
- /// </summary>
- /// <returns>Coordinates in JSON format</returns>
- private string GetHeadingFormatted(CompassReading reading)
- {
- // NOTE: timestamp is generated on the JS side, to avoid issues with format conversions
- string result = String.Format("\"magneticHeading\":{0},\"headingAccuracy\":{1},\"trueHeading\":{2}",
- reading.MagneticHeading.ToString("0.0", CultureInfo.InvariantCulture),
- reading.HeadingAccuracy.ToString("0.0", CultureInfo.InvariantCulture),
- reading.TrueHeading.ToString("0.0", CultureInfo.InvariantCulture));
- return "{" + result + "}";
- }
-
- public void getHeading(string options)
- {
- if (!DeviceCompass.IsSupported)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "{code:" + Not_Supported + "}"));
- }
- else
- {
- //if (compass == null)
- //{
- // // Instantiate the compass.
- // compass = new DeviceCompass();
- // compass.TimeBetweenUpdates = TimeSpan.FromMilliseconds(40);
- // compass.CurrentValueChanged += new EventHandler<Microsoft.Devices.Sensors.SensorReadingEventArgs<Microsoft.Devices.Sensors.CompassReading>>(compass_CurrentValueChanged);
- // compass.Calibrate += new EventHandler<Microsoft.Devices.Sensors.CalibrationEventArgs>(compass_Calibrate);
- //}
-
-
- //compass.Start();
-
- }
-
- try
- {
- if (currentStatus != Running)
- {
- lock (compass)
- {
- compass.CurrentValueChanged += compass_SingleHeadingValueChanged;
- compass.Start();
- this.SetStatus(Starting);
- }
-
- long timeout = 2000;
- while ((currentStatus == Starting) && (timeout > 0))
- {
- timeout = timeout - 100;
- Thread.Sleep(100);
- }
-
- if (currentStatus != Running)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.IO_EXCEPTION, ErrorFailedToStart));
- return;
- }
- }
- lock (compass)
- {
- compass.CurrentValueChanged -= compass_SingleHeadingValueChanged;
- if (watchers.Count < 1)
- {
- compass.Stop();
- this.SetStatus(Stopped);
- }
- }
- }
- catch (UnauthorizedAccessException)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ILLEGAL_ACCESS_EXCEPTION, ErrorFailedToStart));
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, ErrorFailedToStart));
- }
- }
-
- void compass_SingleHeadingValueChanged(object sender, Microsoft.Devices.Sensors.SensorReadingEventArgs<CompassReading> e)
- {
- this.SetStatus(Running);
- if (compass.IsDataValid)
- {
- // trueHeading :: The heading in degrees from 0 - 359.99 at a single moment in time.
- // magneticHeading:: The heading relative to the geographic North Pole in degrees 0 - 359.99 at a single moment in time.
- // A negative value indicates that the true heading could not be determined.
- // headingAccuracy :: The deviation in degrees between the reported heading and the true heading.
- //rawMagnetometerReading = e.SensorReading.MagnetometerReading;
-
- //Debug.WriteLine("Compass Result :: " + GetHeadingFormatted(e.SensorReading));
-
- PluginResult result = new PluginResult(PluginResult.Status.OK, GetHeadingFormatted(e.SensorReading));
-
- DispatchCommandResult(result);
- }
- }
-
- /// <summary>
- /// Starts listening for compass sensor
- /// </summary>
- /// <returns>status of listener</returns>
- private int start()
- {
- if ((currentStatus == Running) || (currentStatus == Starting))
- {
- return currentStatus;
- }
- try
- {
- lock (compass)
- {
- watchers.Add(getCompassId, this);
- compass.CurrentValueChanged += watchers[getCompassId].compass_CurrentValueChanged;
- compass.Start();
- this.SetStatus(Starting);
- }
- }
- catch (Exception)
- {
- this.SetStatus(ErrorFailedToStart);
- }
- return currentStatus;
- }
-
- public void startWatch(string options)
- {
- if (!DeviceCompass.IsSupported)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, Not_Supported));
- }
-
- try
- {
- compassOptions = JSON.JsonHelper.Deserialize<CompassOptions>(options);
- }
- catch (Exception ex)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
- return;
- }
-
- if (string.IsNullOrEmpty(compassOptions.Id))
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- lock (compass)
- {
- watchers.Add(compassOptions.Id, this);
- compass.CurrentValueChanged += watchers[compassOptions.Id].compass_CurrentValueChanged;
- compass.Start();
- this.SetStatus(Starting);
- }
- }
- catch (Exception)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, ErrorFailedToStart));
- return;
- }
- }
-
- public void stopWatch(string options)
- {
- try
- {
- compassOptions = JSON.JsonHelper.Deserialize<CompassOptions>(options);
- }
- catch (Exception ex)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
- return;
- }
-
- if (string.IsNullOrEmpty(compassOptions.Id))
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- if (currentStatus != Stopped)
- {
- lock (compass)
- {
- Compass watcher = watchers[compassOptions.Id];
- compass.CurrentValueChanged -= watcher.compass_CurrentValueChanged;
- watchers.Remove(compassOptions.Id);
- watcher.Dispose();
- }
- }
- this.SetStatus(Stopped);
-
- this.DispatchCommandResult();
- }
-
- void compass_Calibrate(object sender, Microsoft.Devices.Sensors.CalibrationEventArgs e)
- {
- //throw new NotImplementedException();
- // TODO: pass calibration error to JS
- }
-
- void compass_CurrentValueChanged(object sender, Microsoft.Devices.Sensors.SensorReadingEventArgs<CompassReading> e)
- {
- this.SetStatus(Running);
- if (compass.IsDataValid)
- {
- // trueHeading :: The heading in degrees from 0 - 359.99 at a single moment in time.
- // magneticHeading:: The heading relative to the geographic North Pole in degrees 0 - 359.99 at a single moment in time.
- // A negative value indicates that the true heading could not be determined.
- // headingAccuracy :: The deviation in degrees between the reported heading and the true heading.
- //rawMagnetometerReading = e.SensorReading.MagnetometerReading;
-
- //Debug.WriteLine("Compass Result :: " + GetHeadingFormatted(e.SensorReading));
-
- PluginResult result = new PluginResult(PluginResult.Status.OK, GetHeadingFormatted(e.SensorReading));
- result.KeepCallback = true;
-
- DispatchCommandResult(result);
- }
- }
-
- /// <summary>
- /// Sets current status
- /// </summary>
- /// <param name="status">current status</param>
- private void SetStatus(int status)
- {
- currentStatus = status;
- }
-
- }
-}
diff --git a/templates/standalone/Plugins/Contacts.cs b/templates/standalone/Plugins/Contacts.cs
deleted file mode 100644
index 263cc2c..0000000
--- a/templates/standalone/Plugins/Contacts.cs
+++ /dev/null
@@ -1,669 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using Microsoft.Phone.Tasks;
-using Microsoft.Phone.UserData;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Runtime.Serialization;
-using System.Windows;
-using DeviceContacts = Microsoft.Phone.UserData.Contacts;
-
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- [DataContract]
- public class SearchOptions
- {
- [DataMember]
- public string filter { get; set; }
- [DataMember]
- public bool multiple { get; set; }
- }
-
- [DataContract]
- public class ContactSearchParams
- {
- [DataMember]
- public string[] fields { get; set; }
- [DataMember]
- public SearchOptions options { get; set; }
- }
-
- [DataContract]
- public class JSONContactAddress
- {
- [DataMember]
- public string formatted { get; set; }
- [DataMember]
- public string type { get; set; }
- [DataMember]
- public string streetAddress { get; set; }
- [DataMember]
- public string locality { get; set; }
- [DataMember]
- public string region { get; set; }
- [DataMember]
- public string postalCode { get; set; }
- [DataMember]
- public string country { get; set; }
- [DataMember]
- public bool pref { get; set; }
- }
-
- [DataContract]
- public class JSONContactName
- {
- [DataMember]
- public string formatted { get; set; }
- [DataMember]
- public string familyName { get; set; }
- [DataMember]
- public string givenName { get; set; }
- [DataMember]
- public string middleName { get; set; }
- [DataMember]
- public string honorificPrefix { get; set; }
- [DataMember]
- public string honorificSuffix { get; set; }
- }
-
- [DataContract]
- public class JSONContactField
- {
- [DataMember]
- public string type { get; set; }
- [DataMember]
- public string value { get; set; }
- [DataMember]
- public bool pref { get; set; }
- }
-
- [DataContract]
- public class JSONContactOrganization
- {
- [DataMember]
- public string type { get; set; }
- [DataMember]
- public string name { get; set; }
- [DataMember]
- public bool pref { get; set; }
- [DataMember]
- public string department { get; set; }
- [DataMember]
- public string title { get; set; }
- }
-
- [DataContract]
- public class JSONContact
- {
- [DataMember]
- public string id { get; set; }
- [DataMember]
- public string rawId { get; set; }
- [DataMember]
- public string displayName { get; set; }
- [DataMember]
- public string nickname { get; set; }
- [DataMember]
- public string note { get; set; }
-
- [DataMember]
- public JSONContactName name { get; set; }
-
- [DataMember]
- public JSONContactField[] emails { get; set; }
-
- [DataMember]
- public JSONContactField[] phoneNumbers { get; set; }
-
- [DataMember]
- public JSONContactField[] ims { get; set; }
-
- [DataMember]
- public JSONContactField[] photos { get; set; }
-
- [DataMember]
- public JSONContactField[] categories { get; set; }
-
- [DataMember]
- public JSONContactField[] urls { get; set; }
-
- [DataMember]
- public JSONContactOrganization[] organizations { get; set; }
-
- [DataMember]
- public JSONContactAddress[] addresses { get; set; }
- }
-
-
- public class Contacts : BaseCommand
- {
-
- public const int UNKNOWN_ERROR = 0;
- public const int INVALID_ARGUMENT_ERROR = 1;
- public const int TIMEOUT_ERROR = 2;
- public const int PENDING_OPERATION_ERROR = 3;
- public const int IO_ERROR = 4;
- public const int NOT_SUPPORTED_ERROR = 5;
- public const int PERMISSION_DENIED_ERROR = 20;
- public const int SYNTAX_ERR = 8;
-
- public Contacts()
- {
-
- }
-
- // refer here for contact properties we can access: http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.savecontacttask_members%28v=VS.92%29.aspx
- public void save(string jsonContact)
- {
-
- // jsonContact is actually an array of 1 {contact}
- string[] args = JSON.JsonHelper.Deserialize<string[]>(jsonContact);
-
-
- JSONContact contact = JSON.JsonHelper.Deserialize<JSONContact>(args[0]);
-
- SaveContactTask contactTask = new SaveContactTask();
-
- if (contact.nickname != null)
- {
- contactTask.Nickname = contact.nickname;
- }
- if (contact.urls != null && contact.urls.Length > 0)
- {
- contactTask.Website = contact.urls[0].value;
- }
- if (contact.note != null)
- {
- contactTask.Notes = contact.note;
- }
-
- #region contact.name
- if (contact.name != null)
- {
- if (contact.name.givenName != null)
- contactTask.FirstName = contact.name.givenName;
- if (contact.name.familyName != null)
- contactTask.LastName = contact.name.familyName;
- if (contact.name.middleName != null)
- contactTask.MiddleName = contact.name.middleName;
- if (contact.name.honorificSuffix != null)
- contactTask.Suffix = contact.name.honorificSuffix;
- if (contact.name.honorificPrefix != null)
- contactTask.Title = contact.name.honorificPrefix;
- }
- #endregion
-
- #region contact.org
- if (contact.organizations != null && contact.organizations.Count() > 0)
- {
- contactTask.Company = contact.organizations[0].name;
- contactTask.JobTitle = contact.organizations[0].title;
- }
- #endregion
-
- #region contact.phoneNumbers
- if (contact.phoneNumbers != null && contact.phoneNumbers.Length > 0)
- {
- foreach (JSONContactField field in contact.phoneNumbers)
- {
- string fieldType = field.type.ToLower();
- if (fieldType == "work")
- {
- contactTask.WorkPhone = field.value;
- }
- else if (fieldType == "home")
- {
- contactTask.HomePhone = field.value;
- }
- else if (fieldType == "mobile")
- {
- contactTask.MobilePhone = field.value;
- }
- }
- }
- #endregion
-
- #region contact.emails
-
- if (contact.emails != null && contact.emails.Length > 0)
- {
-
- // set up different email types if they are not explicitly defined
- foreach (string type in new string[] { "personal", "work", "other" })
- {
- foreach (JSONContactField field in contact.emails)
- {
- if (field != null && String.IsNullOrEmpty(field.type))
- {
- field.type = type;
- break;
- }
- }
- }
-
- foreach (JSONContactField field in contact.emails)
- {
- if (field != null)
- {
- if (field.type != null && field.type != "other")
- {
- string fieldType = field.type.ToLower();
- if (fieldType == "work")
- {
- contactTask.WorkEmail = field.value;
- }
- else if (fieldType == "home" || fieldType == "personal")
- {
- contactTask.PersonalEmail = field.value;
- }
- }
- else
- {
- contactTask.OtherEmail = field.value;
- }
- }
-
- }
- }
- #endregion
-
- if (contact.note != null && contact.note.Length > 0)
- {
- contactTask.Notes = contact.note;
- }
-
- #region contact.addresses
- if (contact.addresses != null && contact.addresses.Length > 0)
- {
- foreach (JSONContactAddress address in contact.addresses)
- {
- if (address.type == null)
- {
- address.type = "home"; // set a default
- }
- string fieldType = address.type.ToLower();
- if (fieldType == "work")
- {
- contactTask.WorkAddressCity = address.locality;
- contactTask.WorkAddressCountry = address.country;
- contactTask.WorkAddressState = address.region;
- contactTask.WorkAddressStreet = address.streetAddress;
- contactTask.WorkAddressZipCode = address.postalCode;
- }
- else if (fieldType == "home" || fieldType == "personal")
- {
- contactTask.HomeAddressCity = address.locality;
- contactTask.HomeAddressCountry = address.country;
- contactTask.HomeAddressState = address.region;
- contactTask.HomeAddressStreet = address.streetAddress;
- contactTask.HomeAddressZipCode = address.postalCode;
- }
- else
- {
- // no other address fields available ...
- Debug.WriteLine("Creating contact with unsupported address type :: " + address.type);
- }
- }
- }
- #endregion
-
-
- contactTask.Completed += new EventHandler<SaveContactResult>(ContactSaveTaskCompleted);
- contactTask.Show();
- }
-
- void ContactSaveTaskCompleted(object sender, SaveContactResult e)
- {
- SaveContactTask task = sender as SaveContactTask;
-
- if (e.TaskResult == TaskResult.OK)
- {
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- DeviceContacts deviceContacts = new DeviceContacts();
- deviceContacts.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(postAdd_SearchCompleted);
-
- string displayName = String.Format("{0}{2}{1}", task.FirstName, task.LastName, String.IsNullOrEmpty(task.FirstName) ? "" : " ");
-
- deviceContacts.SearchAsync(displayName, FilterKind.DisplayName, task);
- });
-
-
- }
- else if (e.TaskResult == TaskResult.Cancel)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Operation cancelled."));
- }
- }
-
- void postAdd_SearchCompleted(object sender, ContactsSearchEventArgs e)
- {
- if (e.Results.Count() > 0)
- {
- List<Contact> foundContacts = new List<Contact>();
-
- int n = (from Contact contact in e.Results select contact.GetHashCode()).Max();
- Contact newContact = (from Contact contact in e.Results
- where contact.GetHashCode() == n
- select contact).First();
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, FormatJSONContact(newContact, null)));
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.NO_RESULT));
- }
- }
-
-
-
- public void remove(string id)
- {
- // note id is wrapped in [] and always has exactly one string ...
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "{\"code\":" + NOT_SUPPORTED_ERROR + "}"));
- }
-
- public void search(string searchCriteria)
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(searchCriteria);
-
- ContactSearchParams searchParams = new ContactSearchParams();
- try
- {
- searchParams.fields = JSON.JsonHelper.Deserialize<string[]>(args[0]);
- searchParams.options = JSON.JsonHelper.Deserialize<SearchOptions>(args[1]);
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, INVALID_ARGUMENT_ERROR));
- return;
- }
-
- //Deal with case where caller has specified no options
- if (searchParams.options == null)
- {
- searchParams.options = new SearchOptions();
- searchParams.options.filter = "";
- searchParams.options.multiple = true;
- }
- else if (searchParams.options.filter == null) // Deal with the case where caller has specified partial options
- {
- searchParams.options.filter = "";
- }
-
- DeviceContacts deviceContacts = new DeviceContacts();
- deviceContacts.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(contacts_SearchCompleted);
-
- // default is to search all fields
- FilterKind filterKind = FilterKind.None;
- // if only one field is specified, we will try the 3 available DeviceContact search filters
- if (searchParams.fields.Count() == 1)
- {
- if (searchParams.fields.Contains("name"))
- {
- filterKind = FilterKind.DisplayName;
- }
- else if (searchParams.fields.Contains("emails"))
- {
- filterKind = FilterKind.EmailAddress;
- }
- else if (searchParams.fields.Contains("phoneNumbers"))
- {
- filterKind = FilterKind.PhoneNumber;
- }
- }
-
- try
- {
-
- deviceContacts.SearchAsync(searchParams.options.filter, filterKind, searchParams);
- }
- catch (Exception ex)
- {
- Debug.WriteLine("search contacts exception :: " + ex.Message);
- }
- }
-
- private void contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
- {
- ContactSearchParams searchParams = (ContactSearchParams)e.State;
-
- List<Contact> foundContacts = null;
-
- // if we have multiple search fields
- if (searchParams.options.filter.Length > 0 && searchParams.fields.Count() > 1)
- {
- foundContacts = new List<Contact>();
- if (searchParams.fields.Contains("emails"))
- {
- foundContacts.AddRange(from Contact con in e.Results
- from ContactEmailAddress a in con.EmailAddresses
- where a.EmailAddress.Contains(searchParams.options.filter)
- select con);
- }
- if (searchParams.fields.Contains("displayName"))
- {
- foundContacts.AddRange(from Contact con in e.Results
- where con.DisplayName.Contains(searchParams.options.filter)
- select con);
- }
- if (searchParams.fields.Contains("name"))
- {
- foundContacts.AddRange(from Contact con in e.Results
- where con.CompleteName != null && con.CompleteName.ToString().Contains(searchParams.options.filter)
- select con);
- }
- if (searchParams.fields.Contains("phoneNumbers"))
- {
- foundContacts.AddRange(from Contact con in e.Results
- from ContactPhoneNumber a in con.PhoneNumbers
- where a.PhoneNumber.Contains(searchParams.options.filter)
- select con);
- }
- if (searchParams.fields.Contains("urls"))
- {
- foundContacts.AddRange(from Contact con in e.Results
- from string a in con.Websites
- where a.Contains(searchParams.options.filter)
- select con);
- }
- }
- else
- {
- foundContacts = new List<Contact>(e.Results);
- }
-
- //List<string> contactList = new List<string>();
-
- string strResult = "";
-
- IEnumerable<Contact> distinctContacts = foundContacts.Distinct();
-
- foreach (Contact contact in distinctContacts)
- {
- strResult += FormatJSONContact(contact, null) + ",";
- //contactList.Add(FormatJSONContact(contact, null));
- if (!searchParams.options.multiple)
- {
- break; // just return the first item
- }
- }
- PluginResult result = new PluginResult(PluginResult.Status.OK);
- result.Message = "[" + strResult.TrimEnd(',') + "]";
- DispatchCommandResult(result);
-
- }
-
- private string FormatJSONPhoneNumbers(Contact con)
- {
- string retVal = "";
- string contactFieldFormat = "\"type\":\"{0}\",\"value\":\"{1}\",\"pref\":\"false\"";
- foreach (ContactPhoneNumber number in con.PhoneNumbers)
- {
-
- string contactField = string.Format(contactFieldFormat,
- number.Kind.ToString(),
- number.PhoneNumber);
-
- retVal += "{" + contactField + "},";
- }
- return retVal.TrimEnd(',');
- }
-
- private string FormatJSONEmails(Contact con)
- {
- string retVal = "";
- string contactFieldFormat = "\"type\":\"{0}\",\"value\":\"{1}\",\"pref\":\"false\"";
- foreach (ContactEmailAddress address in con.EmailAddresses)
- {
- string contactField = string.Format(contactFieldFormat,
- address.Kind.ToString(),
- address.EmailAddress);
-
- retVal += "{" + contactField + "},";
- }
- return retVal.TrimEnd(',');
- }
-
- private string getFormattedJSONAddress(ContactAddress address, bool isPreferred)
- {
-
- string addressFormatString = "\"pref\":{0}," + // bool
- "\"type\":\"{1}\"," +
- "\"formatted\":\"{2}\"," +
- "\"streetAddress\":\"{3}\"," +
- "\"locality\":\"{4}\"," +
- "\"region\":\"{5}\"," +
- "\"postalCode\":\"{6}\"," +
- "\"country\":\"{7}\"";
-
- string formattedAddress = address.PhysicalAddress.AddressLine1 + " "
- + address.PhysicalAddress.AddressLine2 + " "
- + address.PhysicalAddress.City + " "
- + address.PhysicalAddress.StateProvince + " "
- + address.PhysicalAddress.CountryRegion + " "
- + address.PhysicalAddress.PostalCode;
-
- string jsonAddress = string.Format(addressFormatString,
- isPreferred ? "\"true\"" : "\"false\"",
- address.Kind.ToString(),
- formattedAddress,
- address.PhysicalAddress.AddressLine1 + " " + address.PhysicalAddress.AddressLine2,
- address.PhysicalAddress.City,
- address.PhysicalAddress.StateProvince,
- address.PhysicalAddress.PostalCode,
- address.PhysicalAddress.CountryRegion);
-
- //Debug.WriteLine("getFormattedJSONAddress returning :: " + jsonAddress);
-
- return "{" + jsonAddress + "}";
- }
-
- private string FormatJSONAddresses(Contact con)
- {
- string retVal = "";
- foreach (ContactAddress address in con.Addresses)
- {
- retVal += this.getFormattedJSONAddress(address, false) + ",";
- }
-
- //Debug.WriteLine("FormatJSONAddresses returning :: " + retVal);
- return retVal.TrimEnd(',');
- }
-
- private string FormatJSONWebsites(Contact con)
- {
- string retVal = "";
- foreach (string website in con.Websites)
- {
- retVal += "\"" + website + "\",";
- }
- return retVal.TrimEnd(',');
- }
-
- /*
- * 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)
- */
- private string FormatJSONName(Contact con)
- {
- string retVal = "";
- string formatStr = "\"formatted\":\"{0}\"," +
- "\"familyName\":\"{1}\"," +
- "\"givenName\":\"{2}\"," +
- "\"middleName\":\"{3}\"," +
- "\"honorificPrefix\":\"{4}\"," +
- "\"honorificSuffix\":\"{5}\"";
-
- if (con.CompleteName != null)
- {
- retVal = string.Format(formatStr,
- con.CompleteName.FirstName + " " + con.CompleteName.LastName, // TODO: does this need suffix? middlename?
- con.CompleteName.LastName,
- con.CompleteName.FirstName,
- con.CompleteName.MiddleName,
- con.CompleteName.Title,
- con.CompleteName.Suffix);
- }
- else
- {
- retVal = string.Format(formatStr, "", "", "", "", "", "");
- }
-
- return "{" + retVal + "}";
- }
-
- private string FormatJSONContact(Contact con, string[] fields)
- {
-
- string contactFormatStr = "\"id\":\"{0}\"," +
- "\"displayName\":\"{1}\"," +
- "\"nickname\":\"{2}\"," +
- "\"phoneNumbers\":[{3}]," +
- "\"emails\":[{4}]," +
- "\"addresses\":[{5}]," +
- "\"urls\":[{6}]," +
- "\"name\":{7}," +
- "\"note\":\"{8}\"," +
- "\"birthday\":\"{9}\"";
-
-
- string jsonContact = String.Format(contactFormatStr,
- con.GetHashCode(),
- con.DisplayName,
- con.CompleteName != null ? con.CompleteName.Nickname : "",
- FormatJSONPhoneNumbers(con),
- FormatJSONEmails(con),
- FormatJSONAddresses(con),
- FormatJSONWebsites(con),
- FormatJSONName(con),
- con.Notes.FirstOrDefault(),
- con.Birthdays.FirstOrDefault());
-
- //Debug.WriteLine("jsonContact = " + jsonContact);
- // JSON requires new line characters be escaped
- return "{" + jsonContact.Replace("\n", "\\n") + "}";
- }
- }
-}
diff --git a/templates/standalone/Plugins/DebugConsole.cs b/templates/standalone/Plugins/DebugConsole.cs
deleted file mode 100644
index fa9863a..0000000
--- a/templates/standalone/Plugins/DebugConsole.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using System.Diagnostics;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
-
- public class DebugConsole : BaseCommand
- {
- // warn, error
- public void log(string msg)
- {
- Debug.WriteLine("Log:" + msg);
- }
-
- public void error(string msg)
- {
- Debug.WriteLine("Error:" + msg);
- }
-
- public void warn(string msg)
- {
- Debug.WriteLine("Warn:" + msg);
- }
-
- }
-}
diff --git a/templates/standalone/Plugins/Device.cs b/templates/standalone/Plugins/Device.cs
deleted file mode 100644
index 6fb9913..0000000
--- a/templates/standalone/Plugins/Device.cs
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using Microsoft.Phone.Info;
-using System.IO.IsolatedStorage;
-using System.Windows.Resources;
-using System.IO;
-using System.Diagnostics;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- public class Device : BaseCommand
- {
- public void getDeviceInfo(string notused)
- {
-
- string res = String.Format("\"name\":\"{0}\",\"cordova\":\"{1}\",\"platform\":\"{2}\",\"uuid\":\"{3}\",\"version\":\"{4}\",\"model\":\"{5}\"",
- this.name,
- this.cordova,
- this.platform,
- this.uuid,
- this.version,
- this.model);
-
-
-
- res = "{" + res + "}";
- //Debug.WriteLine("Result::" + res);
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, res));
- }
-
- public string model
- {
- get
- {
- return DeviceStatus.DeviceName;
- //return String.Format("{0},{1},{2}", DeviceStatus.DeviceManufacturer, DeviceStatus.DeviceHardwareVersion, DeviceStatus.DeviceFirmwareVersion);
- }
- }
-
- public string name
- {
- get
- {
- return DeviceStatus.DeviceName;
-
- }
- }
-
- public string cordova
- {
- get
- {
- // TODO: should be able to dynamically read the Cordova version from somewhere...
- return "2.9.0";
- }
- }
-
- public string platform
- {
- get
- {
- return Environment.OSVersion.Platform.ToString();
- }
- }
-
- public string uuid
- {
- get
- {
- string returnVal = "";
- object id;
- UserExtendedProperties.TryGetValue("ANID", out id);
-
- if (id != null)
- {
- returnVal = id.ToString().Substring(2, 32);
- }
- else
- {
- returnVal = "???unknown???";
-
- using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
- {
- try
- {
- IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream("DeviceID.txt", FileMode.Open, FileAccess.Read, appStorage);
-
- using (StreamReader reader = new StreamReader(fileStream))
- {
- returnVal = reader.ReadLine();
- }
- }
- catch (Exception /*ex*/)
- {
-
- }
- }
- }
-
- return returnVal;
- }
- }
-
- public string version
- {
- get
- {
- return Environment.OSVersion.Version.ToString();
- }
- }
-
- }
-}
diff --git a/templates/standalone/Plugins/File.cs b/templates/standalone/Plugins/File.cs
deleted file mode 100644
index cde7a1c..0000000
--- a/templates/standalone/Plugins/File.cs
+++ /dev/null
@@ -1,1676 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Runtime.Serialization;
-using System.Security;
-using System.Text;
-using System.Windows;
-using System.Windows.Resources;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- /// <summary>
- /// Provides access to isolated storage
- /// </summary>
- public class File : BaseCommand
- {
- // Error codes
- public const int NOT_FOUND_ERR = 1;
- public const int SECURITY_ERR = 2;
- public const int ABORT_ERR = 3;
- public const int NOT_READABLE_ERR = 4;
- public const int ENCODING_ERR = 5;
- public const int NO_MODIFICATION_ALLOWED_ERR = 6;
- public const int INVALID_STATE_ERR = 7;
- public const int SYNTAX_ERR = 8;
- public const int INVALID_MODIFICATION_ERR = 9;
- public const int QUOTA_EXCEEDED_ERR = 10;
- public const int TYPE_MISMATCH_ERR = 11;
- public const int PATH_EXISTS_ERR = 12;
-
- // File system options
- public const int TEMPORARY = 0;
- public const int PERSISTENT = 1;
- public const int RESOURCE = 2;
- public const int APPLICATION = 3;
-
- /// <summary>
- /// Temporary directory name
- /// </summary>
- private readonly string TMP_DIRECTORY_NAME = "tmp";
-
- /// <summary>
- /// Represents error code for callback
- /// </summary>
- [DataContract]
- public class ErrorCode
- {
- /// <summary>
- /// Error code
- /// </summary>
- [DataMember(IsRequired = true, Name = "code")]
- public int Code { get; set; }
-
- /// <summary>
- /// Creates ErrorCode object
- /// </summary>
- public ErrorCode(int code)
- {
- this.Code = code;
- }
- }
-
- /// <summary>
- /// Represents File action options.
- /// </summary>
- [DataContract]
- public class FileOptions
- {
- /// <summary>
- /// File path
- /// </summary>
- ///
- private string _fileName;
- [DataMember(Name = "fileName")]
- public string FilePath
- {
- get
- {
- return this._fileName;
- }
-
- set
- {
- int index = value.IndexOfAny(new char[] { '#', '?' });
- this._fileName = index > -1 ? value.Substring(0, index) : value;
- }
- }
-
- /// <summary>
- /// Full entryPath
- /// </summary>
- [DataMember(Name = "fullPath")]
- public string FullPath { get; set; }
-
- /// <summary>
- /// Directory name
- /// </summary>
- [DataMember(Name = "dirName")]
- public string DirectoryName { get; set; }
-
- /// <summary>
- /// Path to create file/directory
- /// </summary>
- [DataMember(Name = "path")]
- public string Path { get; set; }
-
- /// <summary>
- /// The encoding to use to encode the file's content. Default is UTF8.
- /// </summary>
- [DataMember(Name = "encoding")]
- public string Encoding { get; set; }
-
- /// <summary>
- /// Uri to get file
- /// </summary>
- ///
- private string _uri;
- [DataMember(Name = "uri")]
- public string Uri
- {
- get
- {
- return this._uri;
- }
-
- set
- {
- int index = value.IndexOfAny(new char[] { '#', '?' });
- this._uri = index > -1 ? value.Substring(0, index) : value;
- }
- }
-
- /// <summary>
- /// Size to truncate file
- /// </summary>
- [DataMember(Name = "size")]
- public long Size { get; set; }
-
- /// <summary>
- /// Data to write in file
- /// </summary>
- [DataMember(Name = "data")]
- public string Data { get; set; }
-
- /// <summary>
- /// Position the writing starts with
- /// </summary>
- [DataMember(Name = "position")]
- public int Position { get; set; }
-
- /// <summary>
- /// Type of file system requested
- /// </summary>
- [DataMember(Name = "type")]
- public int FileSystemType { get; set; }
-
- /// <summary>
- /// New file/directory name
- /// </summary>
- [DataMember(Name = "newName")]
- public string NewName { get; set; }
-
- /// <summary>
- /// Destination directory to copy/move file/directory
- /// </summary>
- [DataMember(Name = "parent")]
- public string Parent { get; set; }
-
- /// <summary>
- /// Options for getFile/getDirectory methods
- /// </summary>
- [DataMember(Name = "options")]
- public CreatingOptions CreatingOpt { get; set; }
-
- /// <summary>
- /// Creates options object with default parameters
- /// </summary>
- public FileOptions()
- {
- this.SetDefaultValues(new StreamingContext());
- }
-
- /// <summary>
- /// Initializes default values for class fields.
- /// Implemented in separate method because default constructor is not invoked during deserialization.
- /// </summary>
- /// <param name="context"></param>
- [OnDeserializing()]
- public void SetDefaultValues(StreamingContext context)
- {
- this.Encoding = "UTF-8";
- this.FilePath = "";
- this.FileSystemType = -1;
- }
- }
-
- /// <summary>
- /// Stores image info
- /// </summary>
- [DataContract]
- public class FileMetadata
- {
- [DataMember(Name = "fileName")]
- public string FileName { get; set; }
-
- [DataMember(Name = "fullPath")]
- public string FullPath { get; set; }
-
- [DataMember(Name = "type")]
- public string Type { get; set; }
-
- [DataMember(Name = "lastModifiedDate")]
- public string LastModifiedDate { get; set; }
-
- [DataMember(Name = "size")]
- public long Size { get; set; }
-
- public FileMetadata(string filePath)
- {
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (string.IsNullOrEmpty(filePath))
- {
- throw new FileNotFoundException("File doesn't exist");
- }
- else if (!isoFile.FileExists(filePath))
- {
- // attempt to get it from the resources
- if (filePath.IndexOf("www") == 0)
- {
- Uri fileUri = new Uri(filePath, UriKind.Relative);
- StreamResourceInfo streamInfo = Application.GetResourceStream(fileUri);
- if (streamInfo != null)
- {
- this.Size = streamInfo.Stream.Length;
- this.FileName = filePath.Substring(filePath.LastIndexOf("/") + 1);
- this.FullPath = filePath;
- }
- }
- else
- {
- throw new FileNotFoundException("File doesn't exist");
- }
- }
- else
- {
- //TODO get file size the other way if possible
- using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(filePath, FileMode.Open, FileAccess.Read, isoFile))
- {
- this.Size = stream.Length;
- }
- this.FullPath = filePath;
- this.FileName = System.IO.Path.GetFileName(filePath);
- this.LastModifiedDate = isoFile.GetLastWriteTime(filePath).DateTime.ToString();
- }
- this.Type = MimeTypeMapper.GetMimeType(this.FileName);
- }
- }
- }
-
- /// <summary>
- /// Represents file or directory modification metadata
- /// </summary>
- [DataContract]
- public class ModificationMetadata
- {
- /// <summary>
- /// Modification time
- /// </summary>
- [DataMember]
- public string modificationTime { get; set; }
- }
-
- /// <summary>
- /// Represents file or directory entry
- /// </summary>
- [DataContract]
- public class FileEntry
- {
-
- /// <summary>
- /// File type
- /// </summary>
- [DataMember(Name = "isFile")]
- public bool IsFile { get; set; }
-
- /// <summary>
- /// Directory type
- /// </summary>
- [DataMember(Name = "isDirectory")]
- public bool IsDirectory { get; set; }
-
- /// <summary>
- /// File/directory name
- /// </summary>
- [DataMember(Name = "name")]
- public string Name { get; set; }
-
- /// <summary>
- /// Full path to file/directory
- /// </summary>
- [DataMember(Name = "fullPath")]
- public string FullPath { get; set; }
-
- public bool IsResource { get; set; }
-
- public static FileEntry GetEntry(string filePath, bool bIsRes=false)
- {
- FileEntry entry = null;
- try
- {
- entry = new FileEntry(filePath, bIsRes);
-
- }
- catch (Exception ex)
- {
- Debug.WriteLine("Exception in GetEntry for filePath :: " + filePath + " " + ex.Message);
- }
- return entry;
- }
-
- /// <summary>
- /// Creates object and sets necessary properties
- /// </summary>
- /// <param name="filePath"></param>
- public FileEntry(string filePath, bool bIsRes = false)
- {
- if (string.IsNullOrEmpty(filePath))
- {
- throw new ArgumentException();
- }
-
- if(filePath.Contains(" "))
- {
- Debug.WriteLine("FilePath with spaces :: " + filePath);
- }
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- IsResource = bIsRes;
- IsFile = isoFile.FileExists(filePath);
- IsDirectory = isoFile.DirectoryExists(filePath);
- if (IsFile)
- {
- this.Name = Path.GetFileName(filePath);
- }
- else if (IsDirectory)
- {
- this.Name = this.GetDirectoryName(filePath);
- if (string.IsNullOrEmpty(Name))
- {
- this.Name = "/";
- }
- }
- else
- {
- if (IsResource)
- {
- this.Name = Path.GetFileName(filePath);
- }
- else
- {
- throw new FileNotFoundException();
- }
- }
-
- try
- {
- this.FullPath = filePath.Replace('\\', '/'); // new Uri(filePath).LocalPath;
- }
- catch (Exception)
- {
- this.FullPath = filePath;
- }
- }
- }
-
- /// <summary>
- /// Extracts directory name from path string
- /// Path should refer to a directory, for example \foo\ or /foo.
- /// </summary>
- /// <param name="path"></param>
- /// <returns></returns>
- private string GetDirectoryName(string path)
- {
- if (String.IsNullOrEmpty(path))
- {
- return path;
- }
-
- string[] split = path.Split(new char[] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries);
- if (split.Length < 1)
- {
- return null;
- }
- else
- {
- return split[split.Length - 1];
- }
- }
- }
-
-
- /// <summary>
- /// Represents info about requested file system
- /// </summary>
- [DataContract]
- public class FileSystemInfo
- {
- /// <summary>
- /// file system type
- /// </summary>
- [DataMember(Name = "name", IsRequired = true)]
- public string Name { get; set; }
-
- /// <summary>
- /// Root directory entry
- /// </summary>
- [DataMember(Name = "root", EmitDefaultValue = false)]
- public FileEntry Root { get; set; }
-
- /// <summary>
- /// Creates class instance
- /// </summary>
- /// <param name="name"></param>
- /// <param name="rootEntry"> Root directory</param>
- public FileSystemInfo(string name, FileEntry rootEntry = null)
- {
- Name = name;
- Root = rootEntry;
- }
- }
-
- [DataContract]
- public class CreatingOptions
- {
- /// <summary>
- /// Create file/directory if is doesn't exist
- /// </summary>
- [DataMember(Name = "create")]
- public bool Create { get; set; }
-
- /// <summary>
- /// Generate an exception if create=true and file/directory already exists
- /// </summary>
- [DataMember(Name = "exclusive")]
- public bool Exclusive { get; set; }
-
-
- }
-
- // returns null value if it fails.
- private string[] getOptionStrings(string options)
- {
- string[] optStings = null;
- try
- {
- optStings = JSON.JsonHelper.Deserialize<string[]>(options);
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION), CurrentCommandCallbackId);
- }
- return optStings;
- }
-
- /// <summary>
- /// Gets amount of free space available for Isolated Storage
- /// </summary>
- /// <param name="options">No options is needed for this method</param>
- public void getFreeDiskSpace(string options)
- {
- string callbackId = getOptionStrings(options)[0];
-
- try
- {
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, isoFile.AvailableFreeSpace), callbackId);
- }
- }
- catch (IsolatedStorageException)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- }
- }
-
- /// <summary>
- /// Check if file exists
- /// </summary>
- /// <param name="options">File path</param>
- public void testFileExists(string options)
- {
- IsDirectoryOrFileExist(options, false);
- }
-
- /// <summary>
- /// Check if directory exists
- /// </summary>
- /// <param name="options">directory name</param>
- public void testDirectoryExists(string options)
- {
- IsDirectoryOrFileExist(options, true);
- }
-
- /// <summary>
- /// Check if file or directory exist
- /// </summary>
- /// <param name="options">File path/Directory name</param>
- /// <param name="isDirectory">Flag to recognize what we should check</param>
- public void IsDirectoryOrFileExist(string options, bool isDirectory)
- {
- string[] args = getOptionStrings(options);
- string callbackId = args[1];
- FileOptions fileOptions = JSON.JsonHelper.Deserialize<FileOptions>(args[0]);
- string filePath = args[0];
-
- if (fileOptions == null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION), callbackId);
- }
-
- try
- {
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- bool isExist;
- if (isDirectory)
- {
- isExist = isoFile.DirectoryExists(fileOptions.DirectoryName);
- }
- else
- {
- isExist = isoFile.FileExists(fileOptions.FilePath);
- }
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, isExist), callbackId);
- }
- }
- catch (IsolatedStorageException) // default handler throws INVALID_MODIFICATION_ERR
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- }
- }
-
- }
-
- public void readAsDataURL(string options)
- {
- string[] optStrings = getOptionStrings(options);
- string filePath = optStrings[0];
- int startPos = int.Parse(optStrings[1]);
- int endPos = int.Parse(optStrings[2]);
- string callbackId = optStrings[3];
-
- if (filePath != null)
- {
- try
- {
- string base64URL = null;
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (!isoFile.FileExists(filePath))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- return;
- }
- string mimeType = MimeTypeMapper.GetMimeType(filePath);
-
- using (IsolatedStorageFileStream stream = isoFile.OpenFile(filePath, FileMode.Open, FileAccess.Read))
- {
- string base64String = GetFileContent(stream);
- base64URL = "data:" + mimeType + ";base64," + base64String;
- }
- }
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, base64URL), callbackId);
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- }
- }
- }
-
- public void readAsArrayBuffer(string options)
- {
- string[] optStrings = getOptionStrings(options);
- string filePath = optStrings[0];
- int startPos = int.Parse(optStrings[1]);
- int endPos = int.Parse(optStrings[2]);
- string callbackId = optStrings[3];
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR), callbackId);
- }
-
- public void readAsBinaryString(string options)
- {
- string[] optStrings = getOptionStrings(options);
- string filePath = optStrings[0];
- int startPos = int.Parse(optStrings[1]);
- int endPos = int.Parse(optStrings[2]);
- string callbackId = optStrings[3];
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR), callbackId);
- }
-
- public void readAsText(string options)
- {
- string[] optStrings = getOptionStrings(options);
- string filePath = optStrings[0];
- string encStr = optStrings[1];
- int startPos = int.Parse(optStrings[2]);
- int endPos = int.Parse(optStrings[3]);
- string callbackId = optStrings[4];
-
- try
- {
- string text = "";
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (!isoFile.FileExists(filePath))
- {
- readResourceAsText(options);
- return;
- }
- Encoding encoding = Encoding.GetEncoding(encStr);
-
- using (TextReader reader = new StreamReader(isoFile.OpenFile(filePath, FileMode.Open, FileAccess.Read), encoding))
- {
- text = reader.ReadToEnd();
- if (startPos < 0)
- {
- startPos = Math.Max(text.Length + startPos, 0);
- }
- else if (startPos > 0)
- {
- startPos = Math.Min(text.Length, startPos);
- }
-
- if (endPos > 0)
- {
- endPos = Math.Min(text.Length, endPos);
- }
- else if (endPos < 0)
- {
- endPos = Math.Max(endPos + text.Length, 0);
- }
-
-
- text = text.Substring(startPos, endPos - startPos);
-
- }
- }
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, text), callbackId);
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex, callbackId))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- }
- }
-
- /// <summary>
- /// Reads application resource as a text
- /// </summary>
- /// <param name="options">Path to a resource</param>
- public void readResourceAsText(string options)
- {
- string[] optStrings = getOptionStrings(options);
- string pathToResource = optStrings[0];
- string encStr = optStrings[1];
- int start = int.Parse(optStrings[2]);
- int endMarker = int.Parse(optStrings[3]);
- string callbackId = optStrings[4];
-
- try
- {
- if (pathToResource.StartsWith("/"))
- {
- pathToResource = pathToResource.Remove(0, 1);
- }
-
- var resource = Application.GetResourceStream(new Uri(pathToResource, UriKind.Relative));
-
- if (resource == null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- return;
- }
-
- string text;
- StreamReader streamReader = new StreamReader(resource.Stream);
- text = streamReader.ReadToEnd();
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, text), callbackId);
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex, callbackId))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- }
- }
-
- public void truncate(string options)
- {
- string[] optStrings = getOptionStrings(options);
-
- string filePath = optStrings[0];
- int size = int.Parse(optStrings[1]);
- string callbackId = optStrings[2];
-
- try
- {
- long streamLength = 0;
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (!isoFile.FileExists(filePath))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- return;
- }
-
- using (FileStream stream = new IsolatedStorageFileStream(filePath, FileMode.Open, FileAccess.ReadWrite, isoFile))
- {
- if (0 <= size && size <= stream.Length)
- {
- stream.SetLength(size);
- }
- streamLength = stream.Length;
- }
- }
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, streamLength), callbackId);
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex, callbackId))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- }
- }
-
- //write:["filePath","data","position"],
- public void write(string options)
- {
- // TODO: try/catch
- string[] optStrings = getOptionStrings(options);
-
- string filePath = optStrings[0];
- string data = optStrings[1];
- int position = int.Parse(optStrings[2]);
- string callbackId = optStrings[3];
-
- try
- {
- if (string.IsNullOrEmpty(data))
- {
- Debug.WriteLine("Expected some data to be send in the write command to {0}", filePath);
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION), callbackId);
- return;
- }
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- // create the file if not exists
- if (!isoFile.FileExists(filePath))
- {
- var file = isoFile.CreateFile(filePath);
- file.Close();
- }
-
- using (FileStream stream = new IsolatedStorageFileStream(filePath, FileMode.Open, FileAccess.ReadWrite, isoFile))
- {
- if (0 <= position && position <= stream.Length)
- {
- stream.SetLength(position);
- }
- using (BinaryWriter writer = new BinaryWriter(stream))
- {
- writer.Seek(0, SeekOrigin.End);
- writer.Write(data.ToCharArray());
- }
- }
- }
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, data.Length), callbackId);
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex, callbackId))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- }
- }
-
- /// <summary>
- /// Look up metadata about this entry.
- /// </summary>
- /// <param name="options">filePath to entry</param>
- public void getMetadata(string options)
- {
- string[] optStings = getOptionStrings(options);
- string filePath = optStings[0];
- string callbackId = optStings[1];
-
- if (filePath != null)
- {
- try
- {
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (isoFile.FileExists(filePath))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK,
- new ModificationMetadata() { modificationTime = isoFile.GetLastWriteTime(filePath).DateTime.ToString() }), callbackId);
- }
- else if (isoFile.DirectoryExists(filePath))
- {
- string modTime = isoFile.GetLastWriteTime(filePath).DateTime.ToString();
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, new ModificationMetadata() { modificationTime = modTime }), callbackId);
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- }
-
- }
- }
- catch (IsolatedStorageException)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- }
- }
-
- }
-
-
- /// <summary>
- /// Returns a File that represents the current state of the file that this FileEntry represents.
- /// </summary>
- /// <param name="filePath">filePath to entry</param>
- /// <returns></returns>
- public void getFileMetadata(string options)
- {
- string[] optStings = getOptionStrings(options);
- string filePath = optStings[0];
- string callbackId = optStings[1];
-
- if (filePath != null)
- {
- try
- {
- FileMetadata metaData = new FileMetadata(filePath);
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, metaData), callbackId);
- }
- catch (IsolatedStorageException)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_READABLE_ERR), callbackId);
- }
- }
- }
- }
-
- /// <summary>
- /// Look up the parent DirectoryEntry containing this Entry.
- /// If this Entry is the root of IsolatedStorage, its parent is itself.
- /// </summary>
- /// <param name="options"></param>
- public void getParent(string options)
- {
- string[] optStings = getOptionStrings(options);
- string filePath = optStings[0];
- string callbackId = optStings[1];
-
- if (filePath != null)
- {
- try
- {
- if (string.IsNullOrEmpty(filePath))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION),callbackId);
- return;
- }
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- FileEntry entry;
-
- if (isoFile.FileExists(filePath) || isoFile.DirectoryExists(filePath))
- {
-
-
- string path = this.GetParentDirectory(filePath);
- entry = FileEntry.GetEntry(path);
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, entry),callbackId);
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR),callbackId);
- }
-
- }
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR),callbackId);
- }
- }
- }
- }
-
- public void remove(string options)
- {
- string[] args = getOptionStrings(options);
- string filePath = args[0];
- string callbackId = args[1];
-
- if (filePath != null)
- {
- try
- {
- if (filePath == "/" || filePath == "" || filePath == @"\")
- {
- throw new Exception("Cannot delete root file system") ;
- }
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (isoFile.FileExists(filePath))
- {
- isoFile.DeleteFile(filePath);
- }
- else
- {
- if (isoFile.DirectoryExists(filePath))
- {
- isoFile.DeleteDirectory(filePath);
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR),callbackId);
- return;
- }
- }
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK),callbackId);
- }
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NO_MODIFICATION_ALLOWED_ERR),callbackId);
- }
- }
- }
- }
-
- public void removeRecursively(string options)
- {
- string[] args = getOptionStrings(options);
- string filePath = args[0];
- string callbackId = args[1];
-
- if (filePath != null)
- {
- if (string.IsNullOrEmpty(filePath))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION),callbackId);
- }
- else
- {
- if (removeDirRecursively(filePath, callbackId))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK), callbackId);
- }
- }
- }
- }
-
- public void readEntries(string options)
- {
- string[] args = getOptionStrings(options);
- string filePath = args[0];
- string callbackId = args[1];
-
- if (filePath != null)
- {
- try
- {
- if (string.IsNullOrEmpty(filePath))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION),callbackId);
- return;
- }
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (isoFile.DirectoryExists(filePath))
- {
- string path = File.AddSlashToDirectory(filePath);
- List<FileEntry> entries = new List<FileEntry>();
- string[] files = isoFile.GetFileNames(path + "*");
- string[] dirs = isoFile.GetDirectoryNames(path + "*");
- foreach (string file in files)
- {
- entries.Add(FileEntry.GetEntry(path + file));
- }
- foreach (string dir in dirs)
- {
- entries.Add(FileEntry.GetEntry(path + dir + "/"));
- }
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, entries),callbackId);
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR),callbackId);
- }
- }
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NO_MODIFICATION_ALLOWED_ERR),callbackId);
- }
- }
- }
- }
-
- public void requestFileSystem(string options)
- {
- // TODO: try/catch
- string[] optVals = getOptionStrings(options);
- //FileOptions fileOptions = new FileOptions();
- int fileSystemType = int.Parse(optVals[0]);
- double size = double.Parse(optVals[1]);
- string callbackId = optVals[2];
-
-
- IsolatedStorageFile.GetUserStoreForApplication();
-
- if (size > (10 * 1024 * 1024)) // 10 MB, compier will clean this up!
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, QUOTA_EXCEEDED_ERR), callbackId);
- return;
- }
-
- try
- {
- if (size != 0)
- {
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- long availableSize = isoFile.AvailableFreeSpace;
- if (size > availableSize)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, QUOTA_EXCEEDED_ERR), callbackId);
- return;
- }
- }
- }
-
- if (fileSystemType == PERSISTENT)
- {
- // TODO: this should be in it's own folder to prevent overwriting of the app assets, which are also in ISO
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, new FileSystemInfo("persistent", FileEntry.GetEntry("/"))), callbackId);
- }
- else if (fileSystemType == TEMPORARY)
- {
- using (IsolatedStorageFile isoStorage = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (!isoStorage.FileExists(TMP_DIRECTORY_NAME))
- {
- isoStorage.CreateDirectory(TMP_DIRECTORY_NAME);
- }
- }
-
- string tmpFolder = "/" + TMP_DIRECTORY_NAME + "/";
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, new FileSystemInfo("temporary", FileEntry.GetEntry(tmpFolder))), callbackId);
- }
- else if (fileSystemType == RESOURCE)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, new FileSystemInfo("resource")), callbackId);
- }
- else if (fileSystemType == APPLICATION)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, new FileSystemInfo("application")), callbackId);
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NO_MODIFICATION_ALLOWED_ERR), callbackId);
- }
-
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NO_MODIFICATION_ALLOWED_ERR), callbackId);
- }
- }
- }
-
- public void resolveLocalFileSystemURI(string options)
- {
-
- string[] optVals = getOptionStrings(options);
- string uri = optVals[0].Split('?')[0];
- string callbackId = optVals[1];
-
- if (uri != null)
- {
- // a single '/' is valid, however, '/someDir' is not, but '/tmp//somedir' and '///someDir' are valid
- if (uri.StartsWith("/") && uri.IndexOf("//") < 0 && uri != "/")
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, ENCODING_ERR), callbackId);
- return;
- }
- try
- {
- // fix encoded spaces
- string path = Uri.UnescapeDataString(uri);
-
- FileEntry uriEntry = FileEntry.GetEntry(path);
- if (uriEntry != null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, uriEntry), callbackId);
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- }
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex, callbackId))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NO_MODIFICATION_ALLOWED_ERR), callbackId);
- }
- }
- }
- }
-
- public void copyTo(string options)
- {
- TransferTo(options, false);
- }
-
- public void moveTo(string options)
- {
- TransferTo(options, true);
- }
-
- public void getFile(string options)
- {
- GetFileOrDirectory(options, false);
- }
-
- public void getDirectory(string options)
- {
- GetFileOrDirectory(options, true);
- }
-
- #region internal functionality
-
- /// <summary>
- /// Retrieves the parent directory name of the specified path,
- /// </summary>
- /// <param name="path">Path</param>
- /// <returns>Parent directory name</returns>
- private string GetParentDirectory(string path)
- {
- if (String.IsNullOrEmpty(path) || path == "/")
- {
- return "/";
- }
-
- if (path.EndsWith(@"/") || path.EndsWith(@"\"))
- {
- return this.GetParentDirectory(Path.GetDirectoryName(path));
- }
-
- string result = Path.GetDirectoryName(path);
- if (result == null)
- {
- result = "/";
- }
-
- return result;
- }
-
- private bool removeDirRecursively(string fullPath,string callbackId)
- {
- try
- {
- if (fullPath == "/")
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NO_MODIFICATION_ALLOWED_ERR),callbackId);
- return false;
- }
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (isoFile.DirectoryExists(fullPath))
- {
- string tempPath = File.AddSlashToDirectory(fullPath);
- string[] files = isoFile.GetFileNames(tempPath + "*");
- if (files.Length > 0)
- {
- foreach (string file in files)
- {
- isoFile.DeleteFile(tempPath + file);
- }
- }
- string[] dirs = isoFile.GetDirectoryNames(tempPath + "*");
- if (dirs.Length > 0)
- {
- foreach (string dir in dirs)
- {
- if (!removeDirRecursively(tempPath + dir, callbackId))
- {
- return false;
- }
- }
- }
- isoFile.DeleteDirectory(fullPath);
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR),callbackId);
- }
- }
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NO_MODIFICATION_ALLOWED_ERR),callbackId);
- return false;
- }
- }
- return true;
- }
-
- private bool CanonicalCompare(string pathA, string pathB)
- {
- string a = pathA.Replace("//", "/");
- string b = pathB.Replace("//", "/");
-
- return a.Equals(b, StringComparison.OrdinalIgnoreCase);
- }
-
- /*
- * copyTo:["fullPath","parent", "newName"],
- * moveTo:["fullPath","parent", "newName"],
- */
- private void TransferTo(string options, bool move)
- {
- // TODO: try/catch
- string[] optStrings = getOptionStrings(options);
- string fullPath = optStrings[0];
- string parent = optStrings[1];
- string newFileName = optStrings[2];
- string callbackId = optStrings[3];
-
- char[] invalids = Path.GetInvalidPathChars();
-
- if (newFileName.IndexOfAny(invalids) > -1 || newFileName.IndexOf(":") > -1 )
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, ENCODING_ERR), callbackId);
- return;
- }
-
- try
- {
- if ((parent == null) || (string.IsNullOrEmpty(parent)) || (string.IsNullOrEmpty(fullPath)))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- return;
- }
-
- string parentPath = File.AddSlashToDirectory(parent);
- string currentPath = fullPath;
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- bool isFileExist = isoFile.FileExists(currentPath);
- bool isDirectoryExist = isoFile.DirectoryExists(currentPath);
- bool isParentExist = isoFile.DirectoryExists(parentPath);
-
- if ( ( !isFileExist && !isDirectoryExist ) || !isParentExist )
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- return;
- }
- string newName;
- string newPath;
- if (isFileExist)
- {
- newName = (string.IsNullOrEmpty(newFileName))
- ? Path.GetFileName(currentPath)
- : newFileName;
-
- newPath = Path.Combine(parentPath, newName);
-
- // sanity check ..
- // cannot copy file onto itself
- if (CanonicalCompare(newPath,currentPath)) //(parent + newFileName))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, INVALID_MODIFICATION_ERR), callbackId);
- return;
- }
- else if (isoFile.DirectoryExists(newPath))
- {
- // there is already a folder with the same name, operation is not allowed
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, INVALID_MODIFICATION_ERR), callbackId);
- return;
- }
- else if (isoFile.FileExists(newPath))
- { // remove destination file if exists, in other case there will be exception
- isoFile.DeleteFile(newPath);
- }
-
- if (move)
- {
- isoFile.MoveFile(currentPath, newPath);
- }
- else
- {
- isoFile.CopyFile(currentPath, newPath, true);
- }
- }
- else
- {
- newName = (string.IsNullOrEmpty(newFileName))
- ? currentPath
- : newFileName;
-
- newPath = Path.Combine(parentPath, newName);
-
- if (move)
- {
- // remove destination directory if exists, in other case there will be exception
- // target directory should be empty
- if (!newPath.Equals(currentPath) && isoFile.DirectoryExists(newPath))
- {
- isoFile.DeleteDirectory(newPath);
- }
-
- isoFile.MoveDirectory(currentPath, newPath);
- }
- else
- {
- CopyDirectory(currentPath, newPath, isoFile);
- }
- }
- FileEntry entry = FileEntry.GetEntry(newPath);
- if (entry != null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, entry), callbackId);
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- }
- }
-
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex, callbackId))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NO_MODIFICATION_ALLOWED_ERR), callbackId);
- }
- }
- }
-
- private bool HandleException(Exception ex, string cbId="")
- {
- bool handled = false;
- string callbackId = String.IsNullOrEmpty(cbId) ? this.CurrentCommandCallbackId : cbId;
- if (ex is SecurityException)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, SECURITY_ERR), callbackId);
- handled = true;
- }
- else if (ex is FileNotFoundException)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- handled = true;
- }
- else if (ex is ArgumentException)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, ENCODING_ERR), callbackId);
- handled = true;
- }
- else if (ex is IsolatedStorageException)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, INVALID_MODIFICATION_ERR), callbackId);
- handled = true;
- }
- else if (ex is DirectoryNotFoundException)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- handled = true;
- }
- return handled;
- }
-
- private void CopyDirectory(string sourceDir, string destDir, IsolatedStorageFile isoFile)
- {
- string path = File.AddSlashToDirectory(sourceDir);
-
- bool bExists = isoFile.DirectoryExists(destDir);
-
- if (!bExists)
- {
- isoFile.CreateDirectory(destDir);
- }
-
- destDir = File.AddSlashToDirectory(destDir);
-
- string[] files = isoFile.GetFileNames(path + "*");
-
- if (files.Length > 0)
- {
- foreach (string file in files)
- {
- isoFile.CopyFile(path + file, destDir + file,true);
- }
- }
- string[] dirs = isoFile.GetDirectoryNames(path + "*");
- if (dirs.Length > 0)
- {
- foreach (string dir in dirs)
- {
- CopyDirectory(path + dir, destDir + dir, isoFile);
- }
- }
- }
-
- private void GetFileOrDirectory(string options, bool getDirectory)
- {
- FileOptions fOptions = new FileOptions();
- string[] args = getOptionStrings(options);
-
- fOptions.FullPath = args[0];
- fOptions.Path = args[1];
-
- string callbackId = args[3];
-
- try
- {
- fOptions.CreatingOpt = JSON.JsonHelper.Deserialize<CreatingOptions>(args[2]);
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION), callbackId);
- return;
- }
-
- try
- {
- if ((string.IsNullOrEmpty(fOptions.Path)) || (string.IsNullOrEmpty(fOptions.FullPath)))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- return;
- }
-
- string path;
-
- if (fOptions.Path.Split(':').Length > 2)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, ENCODING_ERR), callbackId);
- return;
- }
-
- try
- {
- path = Path.Combine(fOptions.FullPath + "/", fOptions.Path);
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, ENCODING_ERR), callbackId);
- return;
- }
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- bool isFile = isoFile.FileExists(path);
- bool isDirectory = isoFile.DirectoryExists(path);
- bool create = (fOptions.CreatingOpt == null) ? false : fOptions.CreatingOpt.Create;
- bool exclusive = (fOptions.CreatingOpt == null) ? false : fOptions.CreatingOpt.Exclusive;
- if (create)
- {
- if (exclusive && (isoFile.FileExists(path) || isoFile.DirectoryExists(path)))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, PATH_EXISTS_ERR), callbackId);
- return;
- }
-
- // need to make sure the parent exists
- // it is an error to create a directory whose immediate parent does not yet exist
- // see issue: https://issues.apache.org/jira/browse/CB-339
- string[] pathParts = path.Split('/');
- string builtPath = pathParts[0];
- for (int n = 1; n < pathParts.Length - 1; n++)
- {
- builtPath += "/" + pathParts[n];
- if (!isoFile.DirectoryExists(builtPath))
- {
- Debug.WriteLine(String.Format("Error :: Parent folder \"{0}\" does not exist, when attempting to create \"{1}\"",builtPath,path));
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- return;
- }
- }
-
- if ((getDirectory) && (!isDirectory))
- {
- isoFile.CreateDirectory(path);
- }
- else
- {
- if ((!getDirectory) && (!isFile))
- {
-
- IsolatedStorageFileStream fileStream = isoFile.CreateFile(path);
- fileStream.Close();
- }
- }
- }
- else // (not create)
- {
- if ((!isFile) && (!isDirectory))
- {
- if (path.IndexOf("//www") == 0)
- {
- Uri fileUri = new Uri(path.Remove(0,2), UriKind.Relative);
- StreamResourceInfo streamInfo = Application.GetResourceStream(fileUri);
- if (streamInfo != null)
- {
- FileEntry _entry = FileEntry.GetEntry(fileUri.OriginalString,true);
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, _entry), callbackId);
-
- //using (BinaryReader br = new BinaryReader(streamInfo.Stream))
- //{
- // byte[] data = br.ReadBytes((int)streamInfo.Stream.Length);
-
- //}
-
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- }
-
-
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- }
- return;
- }
- if (((getDirectory) && (!isDirectory)) || ((!getDirectory) && (!isFile)))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, TYPE_MISMATCH_ERR), callbackId);
- return;
- }
- }
- FileEntry entry = FileEntry.GetEntry(path);
- if (entry != null)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, entry), callbackId);
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NOT_FOUND_ERR), callbackId);
- }
- }
- }
- catch (Exception ex)
- {
- if (!this.HandleException(ex))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, NO_MODIFICATION_ALLOWED_ERR), callbackId);
- }
- }
- }
-
- private static string AddSlashToDirectory(string dirPath)
- {
- if (dirPath.EndsWith("/"))
- {
- return dirPath;
- }
- else
- {
- return dirPath + "/";
- }
- }
-
- /// <summary>
- /// Returns file content in a form of base64 string
- /// </summary>
- /// <param name="stream">File stream</param>
- /// <returns>Base64 representation of the file</returns>
- private string GetFileContent(Stream stream)
- {
- int streamLength = (int)stream.Length;
- byte[] fileData = new byte[streamLength + 1];
- stream.Read(fileData, 0, streamLength);
- stream.Close();
- return Convert.ToBase64String(fileData);
- }
-
- #endregion
-
- }
-}
diff --git a/templates/standalone/Plugins/FileTransfer.cs b/templates/standalone/Plugins/FileTransfer.cs
deleted file mode 100644
index e585895..0000000
--- a/templates/standalone/Plugins/FileTransfer.cs
+++ /dev/null
@@ -1,526 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Net;
-using System.Runtime.Serialization;
-using System.Windows;
-using System.Security;
-using System.Diagnostics;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- public class FileTransfer : BaseCommand
- {
- public class DownloadRequestState
- {
- // This class stores the State of the request.
- public HttpWebRequest request;
- public DownloadOptions options;
-
- public DownloadRequestState()
- {
- request = null;
- options = null;
- }
- }
-
- /// <summary>
- /// Boundary symbol
- /// </summary>
- private string Boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
-
- // Error codes
- public const int FileNotFoundError = 1;
- public const int InvalidUrlError = 2;
- public const int ConnectionError = 3;
-
- /// <summary>
- /// Options for downloading file
- /// </summary>
- [DataContract]
- public class DownloadOptions
- {
- /// <summary>
- /// File path to download to
- /// </summary>
- [DataMember(Name = "filePath", IsRequired = true)]
- public string FilePath { get; set; }
-
- /// <summary>
- /// Server address to the file to download
- /// </summary>
- [DataMember(Name = "url", IsRequired = true)]
- public string Url { get; set; }
- }
-
- /// <summary>
- /// Options for uploading file
- /// </summary>
- [DataContract]
- public class UploadOptions
- {
- /// <summary>
- /// File path to upload
- /// </summary>
- [DataMember(Name = "filePath", IsRequired = true)]
- public string FilePath { get; set; }
-
- /// <summary>
- /// Server address
- /// </summary>
- [DataMember(Name = "server", IsRequired = true)]
- public string Server { get; set; }
-
- /// <summary>
- /// File key
- /// </summary>
- [DataMember(Name = "fileKey")]
- public string FileKey { get; set; }
-
- /// <summary>
- /// File name on the server
- /// </summary>
- [DataMember(Name = "fileName")]
- public string FileName { get; set; }
-
- /// <summary>
- /// File Mime type
- /// </summary>
- [DataMember(Name = "mimeType")]
- public string MimeType { get; set; }
-
-
- /// <summary>
- /// Additional options
- /// </summary>
- [DataMember(Name = "params")]
- public string Params { get; set; }
-
- /// <summary>
- /// Flag to recognize if we should trust every host (only in debug environments)
- /// </summary>
- [DataMember(Name = "debug")]
- public bool Debug { get; set; }
-
- /// <summary>
- /// Creates options object with default parameters
- /// </summary>
- public UploadOptions()
- {
- this.SetDefaultValues(new StreamingContext());
- }
-
- /// <summary>
- /// Initializes default values for class fields.
- /// Implemented in separate method because default constructor is not invoked during deserialization.
- /// </summary>
- /// <param name="context"></param>
- [OnDeserializing()]
- public void SetDefaultValues(StreamingContext context)
- {
- this.FileKey = "file";
- this.FileName = "image.jpg";
- this.MimeType = "image/jpeg";
- }
-
- }
-
- /// <summary>
- /// Uploading response info
- /// </summary>
- [DataContract]
- public class FileUploadResult
- {
- /// <summary>
- /// Amount of sent bytes
- /// </summary>
- [DataMember(Name = "bytesSent")]
- public long BytesSent { get; set; }
-
- /// <summary>
- /// Server response code
- /// </summary>
- [DataMember(Name = "responseCode")]
- public long ResponseCode { get; set; }
-
- /// <summary>
- /// Server response
- /// </summary>
- [DataMember(Name = "response", EmitDefaultValue = false)]
- public string Response { get; set; }
-
- /// <summary>
- /// Creates FileUploadResult object with response values
- /// </summary>
- /// <param name="bytesSent">Amount of sent bytes</param>
- /// <param name="responseCode">Server response code</param>
- /// <param name="response">Server response</param>
- public FileUploadResult(long bytesSent, long responseCode, string response)
- {
- this.BytesSent = bytesSent;
- this.ResponseCode = responseCode;
- this.Response = response;
- }
- }
-
- /// <summary>
- /// Represents transfer error codes for callback
- /// </summary>
- [DataContract]
- public class FileTransferError
- {
- /// <summary>
- /// Error code
- /// </summary>
- [DataMember(Name = "code", IsRequired = true)]
- public int Code { get; set; }
-
- /// <summary>
- /// The source URI
- /// </summary>
- [DataMember(Name = "source", IsRequired = true)]
- public string Source { get; set; }
-
- /// <summary>
- /// The target URI
- /// </summary>
- [DataMember(Name = "target", IsRequired = true)]
- public string Target { get; set; }
-
- /// <summary>
- /// The http status code response from the remote URI
- /// </summary>
- [DataMember(Name = "http_status", IsRequired = true)]
- public int HttpStatus { get; set; }
-
- /// <summary>
- /// Creates FileTransferError object
- /// </summary>
- /// <param name="errorCode">Error code</param>
- public FileTransferError(int errorCode)
- {
- this.Code = errorCode;
- this.Source = null;
- this.Target = null;
- this.HttpStatus = 0;
- }
- public FileTransferError(int errorCode, string source, string target, int status)
- {
- this.Code = errorCode;
- this.Source = source;
- this.Target = target;
- this.HttpStatus = status;
- }
- }
-
- /// <summary>
- /// Upload options
- /// </summary>
- private UploadOptions uploadOptions;
-
- /// <summary>
- /// Bytes sent
- /// </summary>
- private long bytesSent;
-
- /// <summary>
- /// sends a file to a server
- /// </summary>
- /// <param name="options">Upload options</param>
- public void upload(string options)
- {
- Debug.WriteLine("options = " + options);
- options = options.Replace("{}", "null");
-
- try
- {
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- uploadOptions = JSON.JsonHelper.Deserialize<UploadOptions>(args[0]);
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- Uri serverUri;
- try
- {
- serverUri = new Uri(uploadOptions.Server);
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new FileTransferError(InvalidUrlError, uploadOptions.Server, null, 0)));
- return;
- }
- HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(serverUri);
- webRequest.ContentType = "multipart/form-data;boundary=" + Boundary;
- webRequest.Method = "POST";
- webRequest.BeginGetRequestStream(WriteCallback, webRequest);
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new FileTransferError(ConnectionError)));
- }
- }
-
- public void download(string options)
- {
- DownloadOptions downloadOptions = null;
- HttpWebRequest webRequest = null;
-
- try
- {
- string[] optionStrings = JSON.JsonHelper.Deserialize<string[]>(options);
-
- downloadOptions = new DownloadOptions();// JSON.JsonHelper.Deserialize<DownloadOptions>(options);
- downloadOptions.Url = optionStrings[0];
- downloadOptions.FilePath = optionStrings[1];
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- webRequest = (HttpWebRequest)WebRequest.Create(downloadOptions.Url);
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new FileTransferError(InvalidUrlError, downloadOptions.Url, null, 0)));
- return;
- }
-
- if (downloadOptions != null && webRequest != null)
- {
- DownloadRequestState state = new DownloadRequestState();
- state.options = downloadOptions;
- state.request = webRequest;
- webRequest.BeginGetResponse(new AsyncCallback(downloadCallback), state);
- }
-
-
-
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="asynchronousResult"></param>
- private void downloadCallback(IAsyncResult asynchronousResult)
- {
- DownloadRequestState reqState = (DownloadRequestState)asynchronousResult.AsyncState;
- HttpWebRequest request = reqState.request;
-
- try
- {
- HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- // create the file if not exists
- if (!isoFile.FileExists(reqState.options.FilePath))
- {
- var file = isoFile.CreateFile(reqState.options.FilePath);
- file.Close();
- }
-
- using (FileStream fileStream = new IsolatedStorageFileStream(reqState.options.FilePath, FileMode.Open, FileAccess.Write, isoFile))
- {
- long totalBytes = response.ContentLength;
- int bytesRead = 0;
- using (BinaryReader reader = new BinaryReader(response.GetResponseStream()))
- {
-
- using (BinaryWriter writer = new BinaryWriter(fileStream))
- {
- int BUFFER_SIZE = 1024;
- byte[] buffer;
-
- while (true)
- {
- buffer = reader.ReadBytes(BUFFER_SIZE);
- // fire a progress event ?
- bytesRead += buffer.Length;
- if (buffer.Length > 0)
- {
- writer.Write(buffer);
- }
- else
- {
- writer.Close();
- reader.Close();
- fileStream.Close();
- break;
- }
- }
- }
-
- }
-
-
- }
- }
- WPCordovaClassLib.Cordova.Commands.File.FileEntry entry = new WPCordovaClassLib.Cordova.Commands.File.FileEntry(reqState.options.FilePath);
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, entry));
- }
- catch (IsolatedStorageException)
- {
- // Trying to write the file somewhere within the IsoStorage.
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new FileTransferError(FileNotFoundError)));
- }
- catch (SecurityException)
- {
- // Trying to write the file somewhere not allowed.
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new FileTransferError(FileNotFoundError)));
- }
- catch (WebException webex)
- {
- // TODO: probably need better work here to properly respond with all http status codes back to JS
- // Right now am jumping through hoops just to detect 404.
- if ((webex.Status == WebExceptionStatus.ProtocolError && ((HttpWebResponse)webex.Response).StatusCode == HttpStatusCode.NotFound) || webex.Status == WebExceptionStatus.UnknownError)
- {
- // Weird MSFT detection of 404... seriously... just give us the f(*&#$@ status code as a number ffs!!!
- // "Numbers for HTTP status codes? Nah.... let's create our own set of enums/structs to abstract that stuff away."
- // FACEPALM
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new FileTransferError(ConnectionError, null, null, 404)));
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new FileTransferError(ConnectionError)));
- }
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new FileTransferError(FileNotFoundError)));
- }
- }
-
-
-
- /// <summary>
- /// Read file from Isolated Storage and sends it to server
- /// </summary>
- /// <param name="asynchronousResult"></param>
- private void WriteCallback(IAsyncResult asynchronousResult)
- {
- try
- {
- HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
- using (Stream requestStream = (webRequest.EndGetRequestStream(asynchronousResult)))
- {
- string lineStart = "--";
- string lineEnd = Environment.NewLine;
- byte[] boundaryBytes = System.Text.Encoding.UTF8.GetBytes(lineStart + Boundary + lineEnd);
- string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"" + lineEnd + lineEnd + "{1}" + lineEnd;
-
- if (uploadOptions.Params != null)
- {
-
- string[] arrParams = uploadOptions.Params.Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries);
-
- foreach (string param in arrParams)
- {
- string[] split = param.Split('=');
- string key = split[0];
- string val = split[1];
- requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
- string formItem = string.Format(formdataTemplate, key, val);
- byte[] formItemBytes = System.Text.Encoding.UTF8.GetBytes(formItem);
- requestStream.Write(formItemBytes, 0, formItemBytes.Length);
- }
- requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
- }
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (!isoFile.FileExists(uploadOptions.FilePath))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new FileTransferError(FileNotFoundError, uploadOptions.Server, uploadOptions.FilePath, 0)));
- return;
- }
-
- using (FileStream fileStream = new IsolatedStorageFileStream(uploadOptions.FilePath, FileMode.Open, isoFile))
- {
- string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"" + lineEnd + "Content-Type: {2}" + lineEnd + lineEnd;
- string header = string.Format(headerTemplate, uploadOptions.FileKey, uploadOptions.FileName, uploadOptions.MimeType);
- byte[] headerBytes = System.Text.Encoding.UTF8.GetBytes(header);
- requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
- requestStream.Write(headerBytes, 0, headerBytes.Length);
- byte[] buffer = new byte[4096];
- int bytesRead = 0;
-
- while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
- {
- requestStream.Write(buffer, 0, bytesRead);
- bytesSent += bytesRead;
- }
- }
- byte[] endRequest = System.Text.Encoding.UTF8.GetBytes(lineEnd + lineStart + Boundary + lineStart + lineEnd);
- requestStream.Write(endRequest, 0, endRequest.Length);
- }
- }
- webRequest.BeginGetResponse(ReadCallback, webRequest);
- }
- catch (Exception)
- {
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new FileTransferError(ConnectionError)));
- });
- }
- }
-
- /// <summary>
- /// Reads response into FileUploadResult
- /// </summary>
- /// <param name="asynchronousResult"></param>
- private void ReadCallback(IAsyncResult asynchronousResult)
- {
- try
- {
- HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
- using (HttpWebResponse response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult))
- {
- using (Stream streamResponse = response.GetResponseStream())
- {
- using (StreamReader streamReader = new StreamReader(streamResponse))
- {
- string responseString = streamReader.ReadToEnd();
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, new FileUploadResult(bytesSent, (long)response.StatusCode, responseString)));
- });
- }
- }
- }
- }
- catch (Exception)
- {
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- FileTransferError transferError = new FileTransferError(ConnectionError, uploadOptions.Server, uploadOptions.FilePath, 403);
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, transferError));
- });
- }
- }
- }
-}
diff --git a/templates/standalone/Plugins/GeoLocation.cs b/templates/standalone/Plugins/GeoLocation.cs
deleted file mode 100644
index c53cb29..0000000
--- a/templates/standalone/Plugins/GeoLocation.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Runtime.Serialization;
-using System.Threading;
-using System.Device.Location;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- /// <summary>
- /// This is a command stub, the browser provides the correct implementation. We use this to trigger the static analyzer that we require this permission
- /// </summary>
- public class GeoLocation
- {
- /* Unreachable code, by design -jm */
- private void triggerGeoInclusion()
- {
- new GeoCoordinateWatcher();
- }
- }
-}
diff --git a/templates/standalone/Plugins/Globalization.cs b/templates/standalone/Plugins/Globalization.cs
deleted file mode 100644
index 1528807..0000000
--- a/templates/standalone/Plugins/Globalization.cs
+++ /dev/null
@@ -1,1178 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Globalization;
-using System.Runtime.Serialization;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- /// <summary>
- /// Provides information about system locale, culture settings, number formats, ect.
- /// </summary>
- public class Globalization : BaseCommand
- {
-
- #region Globalization errors
-
- /// <summary>
- /// Globalization error codes.
- /// </summary>
- public enum ErrorCode : int
- {
- UnknownError = 0,
- FormattingError = 1,
- ParsingError = 2,
- PatternError = 3
- }
-
- /// <summary>
- /// Represents globalization error object.
- /// </summary>
- [DataContract]
- public class GlobalizationError
- {
- #region Error messages
- /// <summary>
- /// Error messages
- /// </summary>
- public const string UnknownError = "UNKNOWN_ERROR";
- public const string FormattingError = "FORMATTIN_ERROR";
- public const string ParsingError = "PARSING_ERROR";
- public const string PatternError = "PATTERN_ERROR";
-
- #endregion
-
- /// <summary>
- /// Error code
- /// </summary>
- [DataMember(Name = "code", IsRequired = false)]
- public ErrorCode Code { get; set; }
-
- /// <summary>
- /// Error message
- /// </summary>
- [DataMember(Name = "message", IsRequired = false)]
- public string Message { get; set; }
-
- /// <summary>
- /// Default constructor
- /// </summary>
- public GlobalizationError()
- {
- this.Code = ErrorCode.UnknownError;
- this.Message = UnknownError;
- }
-
- /// <summary>
- /// Constructor setting error code
- /// </summary>
- public GlobalizationError(ErrorCode error)
- {
- this.Code = error;
-
- switch (error)
- {
- case ErrorCode.ParsingError:
- {
- this.Message = ParsingError;
- break;
- }
- case ErrorCode.FormattingError:
- {
- this.Message = FormattingError;
- break;
- }
- case ErrorCode.PatternError:
- {
- this.Message = PatternError;
- break;
- }
- default:
- {
- this.Message = UnknownError;
- break;
- }
- }
- }
- }
-
- #endregion
-
- #region Globalization options
-
- /// <summary>
- /// Represents globalization options.
- /// </summary>
- [DataContract]
- public class GlobalizationOptions
- {
- #region available option values
- /// <summary>
- /// Number pattern types.
- /// </summary>
- public const string Percent = "percent";
- public const string Currency = "currency";
- public const string Decimal = "decimal";
-
- /// <summary>
- /// Format length types
- /// </summary>
- public const string Short = "short";
- public const string Medium = "medium";
- public const string Long = "long";
- public const string Full = "full";
-
- /// <summary>
- /// Selector types
- /// </summary>
- public const string TimeSelector = "time";
- public const string DateSelector = "date";
- public const string DateAndTimeSelector = "date and time";
-
- /// <summary>
- /// Date name types
- /// </summary>
- public const string Narrow = "narrow";
- public const string Wide = "wide";
-
- /// <summary>
- /// Date name items
- /// </summary>
- public const string Months = "months";
- public const string Days = "days";
-
- #endregion
-
- /// <summary>
- /// Additional options
- /// </summary>
- [DataMember(Name = "options", IsRequired = false)]
- public Options AdditionalOptions { get; set; }
-
- /// <summary>
- /// Date to convert
- /// </summary>
- [DataMember(Name = "date", IsRequired = false)]
- public long Date { get; set; }
-
- /// <summary>
- /// Date as stirng
- /// </summary>
- [DataMember(Name = "dateString", IsRequired = false)]
- public string DateString { get; set; }
-
- /// <summary>
- /// Currency code
- /// </summary>
- [DataMember(Name = "currencyCode", IsRequired = false)]
- public string CurrencyCode { get; set; }
-
- /// <summary>
- /// Number as string
- /// </summary>
- [DataMember(Name = "numberString", IsRequired = false)]
- public string NumberString { get; set; }
-
- /// <summary>
- /// Number to convert
- /// </summary>
- [DataMember(Name = "number", IsRequired = false)]
- public double Number { get; set; }
- }
-
- /// <summary>
- /// Represents additional options
- /// </summary>
- [DataContract]
- public class Options
- {
- /// <summary>
- /// Pattern type
- /// </summary>
- [DataMember(Name = "type", IsRequired = false)]
- public string Type { get; set; }
-
- /// <summary>
- /// Format length
- /// </summary>
- [DataMember(Name = "formatLength", IsRequired = false)]
- public string FormatLength { get; set; }
-
- /// <summary>
- /// Selector
- /// </summary>
- [DataMember(Name = "selector", IsRequired = false)]
- public string Selector { get; set; }
-
- /// <summary>
- /// Date name item
- /// </summary>
- [DataMember(Name = "item", IsRequired = false)]
- public string Item { get; set; }
- }
-
- #endregion
-
- #region returned objects
-
- #region Number pattern object
-
- /// <summary>
- /// Represents number pattern
- /// </summary>
- [DataContract]
- public class NumberPattern
- {
- /// <summary>
- /// Pattern
- /// </summary>
- [DataMember(Name = "pattern", IsRequired = false)]
- public string Pattern { get; set; }
-
- /// <summary>
- /// Symbol
- /// </summary>
- [DataMember(Name = "symbol", IsRequired = false)]
- public string Symbol { get; set; }
-
- /// <summary>
- /// Fraction
- /// </summary>
- [DataMember(Name = "fraction", IsRequired = false)]
- public int Fraction { get; set; }
-
- /// <summary>
- /// Positive
- /// </summary>
- [DataMember(Name = "positive", IsRequired = false)]
- public string Positive { get; set; }
-
- /// <summary>
- /// Negative
- /// </summary>
- [DataMember(Name = "negative", IsRequired = false)]
- public string Negative { get; set; }
-
- /// <summary>
- /// Rounding
- /// </summary>
- [DataMember(Name = "rounding", IsRequired = false)]
- public int Rounding { get; set; }
-
- /// <summary>
- /// Decimal
- /// </summary>
- [DataMember(Name = "decimal", IsRequired = false)]
- public string Decimal { get; set; }
-
- /// <summary>
- /// Grouping
- /// </summary>
- [DataMember(Name = "grouping", IsRequired = false)]
- public string Grouping { get; set; }
-
- /// <summary>
- /// Constructor of the class
- /// </summary>
- /// <param name="pattern"></param>
- /// <param name="symbol"></param>
- /// <param name="fraction"></param>
- /// <param name="positive"></param>
- /// <param name="negative"></param>
- /// <param name="rounding"></param>
- /// <param name="dec"></param>
- /// <param name="grouping"></param>
- public NumberPattern(string pattern, string symbol, int fraction, string positive, string negative, int rounding, string dec, string grouping)
- {
- this.Pattern = pattern;
- this.Symbol = symbol;
- this.Fraction = fraction;
- this.Positive = positive;
- this.Negative = negative;
- this.Rounding = rounding;
- this.Decimal = dec;
- this.Grouping = grouping;
- }
- }
- #endregion
-
- #region Date format object
-
- /// <summary>
- /// Represents date format
- /// </summary>
- [DataContract]
- public class DateFormat
- {
- /// <summary>
- /// Year
- /// </summary>
- [DataMember(Name = "year", IsRequired = false)]
- public int Year { get; set; }
-
- /// <summary>
- /// Month
- /// </summary>
- [DataMember(Name = "month", IsRequired = false)]
- public int Month { get; set; }
-
- /// <summary>
- /// Day
- /// </summary>
- [DataMember(Name = "day", IsRequired = false)]
- public int Day { get; set; }
-
- /// <summary>
- /// Hour
- /// </summary>
- [DataMember(Name = "hour", IsRequired = false)]
- public int Hour { get; set; }
-
- /// <summary>
- /// Minute
- /// </summary>
- [DataMember(Name = "minute", IsRequired = false)]
- public int Minute { get; set; }
-
- /// <summary>
- /// Second
- /// </summary>
- [DataMember(Name = "second", IsRequired = false)]
- public int Second { get; set; }
-
- /// <summary>
- /// Millisecond
- /// </summary>
- [DataMember(Name = "millisecond", IsRequired = false)]
- public int Millisecond { get; set; }
-
- public DateFormat(int year, int month, int day, int hour, int minute, int second, int millisecond)
- {
- this.Year = year;
- this.Month = month;
- this.Day = day;
- this.Hour = hour;
- this.Minute = minute;
- this.Millisecond = millisecond;
- }
-
- }
- #endregion
-
- #region Date pattern object
-
- /// <summary>
- /// Represents date pattern object
- /// </summary>
- [DataContract]
- public class DatePattern
- {
-
- /// <summary>
- /// Date pattern
- /// </summary>
- [DataMember(Name = "pattern", IsRequired = false)]
- public string Pattern { get; set; }
-
- /// <summary>
- /// TimeZone
- /// </summary>
- [DataMember(Name = "timezone", IsRequired = false)]
- public string TimeZone { get; set; }
-
- /// <summary>
- /// UTC offset
- /// </summary>
- [DataMember(Name = "utc_offset", IsRequired = false)]
- public double UtcOffset { get; set; }
-
- /// <summary>
- /// Dst offset
- /// </summary>
- [DataMember(Name = "dst_offset", IsRequired = false)]
- public double DstOffset { get; set; }
-
- /// <summary>
- /// Constructor of the class
- /// </summary>
- /// <param name="pattern"></param>
- /// <param name="timezone"></param>
- /// <param name="utcOffset"></param>
- /// <param name="dstOffset"></param>
- public DatePattern(string pattern, string timezone, double utcOffset, double dstOffset)
- {
- this.Pattern = pattern;
- this.TimeZone = timezone;
- this.UtcOffset = utcOffset;
- this.DstOffset = dstOffset;
- }
-
- }
-
- #endregion
-
- #endregion
-
- #region Locale info
-
- /// <summary>
- /// Gets the string identifier for the client's current locale setting.
- /// </summary>
- /// <param name="options"></param>
- public void getLocaleName(string options)
- {
- try
- {
- var locale = RegionInfo.CurrentRegion.TwoLetterISORegionName;
- PluginResult result = new PluginResult(PluginResult.Status.OK, this.WrapIntoJSON(locale));
- this.DispatchCommandResult(result);
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError()));
- }
- }
-
- /// <summary>
- /// Gets the string identifier for the client's current language.
- /// </summary>
- /// <param name="options"></param>
- public void getPreferredLanguage(string options)
- {
- try
- {
- var language = CultureInfo.CurrentCulture.TwoLetterISOLanguageName;
- PluginResult result = new PluginResult(PluginResult.Status.OK, this.WrapIntoJSON(language));
- this.DispatchCommandResult(result);
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError()));
- }
- }
-
- #endregion
-
- #region Date and time info
-
- /// <summary>
- /// Gets whether daylight savings time is in effect for a given date using the client's
- /// time zone and calendar.
- /// </summary>
- /// <param name="opitons">Date to daylight savings check.</param>
- public void isDayLightSavingsTime(string options)
- {
- GlobalizationOptions globalOptions;
-
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- globalOptions = JSON.JsonHelper.Deserialize<GlobalizationOptions>(args[0]);
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
- DateTime date = start.AddMilliseconds(globalOptions.Date).ToLocalTime();
- TimeZoneInfo localZone = TimeZoneInfo.Local;
- bool isDaylightSavingTime = localZone.IsDaylightSavingTime(date);
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK, this.WrapIntoJSON(isDaylightSavingTime, "dst")));
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError()));
- }
- }
-
- /// <summary>
- /// Gets the first day of the week according to the client's user preferences and calendar.
- /// The days of the week are numbered starting from 1 where 1 is considered to be Sunday.
- /// </summary>
- /// <param name="options"></param>
- public void getFirstDayOfWeek(string options)
- {
- try
- {
- // DateTimeFormat returns days of the week numbered from zero, so we have to increase returned value by one.
- var firstDayOfWeek = (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 1;
- PluginResult result = new PluginResult(PluginResult.Status.OK, this.WrapIntoJSON(firstDayOfWeek));
- this.DispatchCommandResult(result);
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError()));
- }
- }
-
- #endregion
-
- #region Formatting
-
- /// <summary>
- /// Gets a date formatted as a string according to the client's user preferences and calendar using the time zone of the client.
- /// </summary>
- /// <param name="options"></param>
- public void dateToString(string options)
- {
- GlobalizationOptions globalOptions;
-
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- globalOptions = JSON.JsonHelper.Deserialize<GlobalizationOptions>(args[0]);
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
- DateTime date = start.AddMilliseconds(globalOptions.Date).ToLocalTime();
-
- string format = "{0:M/dd/yy H:m:s}"; //short datetime by default
- int formatLength = 0; //default format
- int selector = 0; //default selector
-
- if (globalOptions.AdditionalOptions != null)
- {
- if (globalOptions.AdditionalOptions.FormatLength != null)
- {
- string t = globalOptions.AdditionalOptions.FormatLength;
-
- if (t.Equals(GlobalizationOptions.Full))
- {
- formatLength++;
- }
- }
-
- if (globalOptions.AdditionalOptions.Selector != null)
- {
- string t = globalOptions.AdditionalOptions.Selector;
-
- if (t.Equals(GlobalizationOptions.DateSelector))
- {
- selector += 10;
- }
- else if (t.Equals(GlobalizationOptions.TimeSelector))
- {
- selector += 20;
- }
- }
-
- //determine return value
- int method = formatLength + selector;
-
- switch (method)
- {
- case 1: // full datetime
- {
- format = "{0:MMMM/dddd/yyyy HH:mm:ss tt}";
- break;
- }
- case 10: // short date
- {
- format = "{0:d}";
- break;
- }
- case 11: // full date
- {
- format = "{0:D}";
- break;
- }
- case 20: // short time
- {
- format = "{0:t}";
- break;
- }
- case 21: // full time
- {
- format = "{0:T}";
- break;
- }
- default: // short datetime
- {
- format = "{0:M/dd/yy H:m:s}";
- break;
- }
- }
- }
-
- string formattedValue = string.Format(CultureInfo.CurrentCulture, format, date);
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK, this.WrapIntoJSON(formattedValue)));
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError(ErrorCode.FormattingError)));
- }
- }
-
- /// <summary>
- /// Parses a date formatted as a string according to the client's user preferences and calendar using the time zone of the client and returns the corresponding date object
- /// </summary>
- /// <param name="options"></param>
- public void stringToDate(string options)
- {
- GlobalizationOptions globalOptions;
-
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- globalOptions = JSON.JsonHelper.Deserialize<GlobalizationOptions>(args[0]);
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- if (string.IsNullOrEmpty(globalOptions.DateString))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- string format = "M/dd/yy H:m:s"; // short datetime by default
- int formatLength = 0; //default format
- int selector = 0; //default selector
-
- if (globalOptions.AdditionalOptions != null)
- {
- if (globalOptions.AdditionalOptions.FormatLength != null)
- {
- string t = globalOptions.AdditionalOptions.FormatLength;
-
- if (t.Equals(GlobalizationOptions.Full))
- {
- formatLength++;
- }
- }
-
- if (globalOptions.AdditionalOptions.Selector != null)
- {
- string t = globalOptions.AdditionalOptions.Selector;
-
- if (t.Equals(GlobalizationOptions.DateSelector))
- {
- selector += 10;
- }
- else if (t.Equals(GlobalizationOptions.TimeSelector))
- {
- selector += 20;
- }
- }
-
- //determine return value
- int method = formatLength + selector;
-
- switch (method)
- {
- case 1: // full datetime
- {
- format = "MMMM/dddd/yyyy HH:mm:ss tt";
- break;
- }
- case 10: // short date
- {
- format = "d";
- break;
- }
- case 11: // full date
- {
- format = "D";
- break;
- }
- case 20: // short time
- {
- format = "t";
- break;
- }
- case 21: // full time
- {
- format = "T";
- break;
- }
- default: // short datetime
- {
- format = "M/dd/yy H:m:s";
- break;
- }
- }
- }
-
- DateTime date = DateTime.ParseExact(globalOptions.DateString, format, CultureInfo.CurrentCulture);
- DateFormat dateFormat = new DateFormat(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, date.Millisecond);
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK, dateFormat));
-
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError(ErrorCode.ParsingError)));
- }
- }
-
- /// <summary>
- /// Gets a pattern string for formatting and parsing dates according to the client's user preferences.
- /// </summary>
- /// <param name="options"></param>
- public void getDatePattern(string options)
- {
- GlobalizationOptions globalOptions;
-
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- globalOptions = JSON.JsonHelper.Deserialize<GlobalizationOptions>(args[0]);
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- DateTimeFormatInfo dateFormatInfo = DateTimeFormatInfo.CurrentInfo;
- string pattern = dateFormatInfo.FullDateTimePattern; // full datetime by default
- int formatLength = 0; //default format
- int selector = 0; //default selector
-
- if (globalOptions.AdditionalOptions != null)
- {
- if (globalOptions.AdditionalOptions.FormatLength != null)
- {
- string t = globalOptions.AdditionalOptions.FormatLength;
-
- if (t.Equals(GlobalizationOptions.Full))
- {
- formatLength++;
- }
- }
-
- if (globalOptions.AdditionalOptions.Selector != null)
- {
- string t = globalOptions.AdditionalOptions.Selector;
-
- if (t.Equals(GlobalizationOptions.DateSelector))
- {
- selector += 10;
- }
- else if (t.Equals(GlobalizationOptions.TimeSelector))
- {
- selector += 20;
- }
- }
-
- //determine return value
- int method = formatLength + selector;
-
- switch (method)
- {
- case 1: // full datetime
- {
- pattern = dateFormatInfo.FullDateTimePattern;
- break;
- }
- case 10: // short date
- {
- pattern = dateFormatInfo.ShortDatePattern;
- break;
- }
- case 11: // full date
- {
- pattern = dateFormatInfo.LongDatePattern;
- break;
- }
- case 20: // short time
- {
- pattern = dateFormatInfo.ShortTimePattern;
- break;
- }
- case 21: // full time
- {
- pattern = dateFormatInfo.LongTimePattern;
- break;
- }
- default: // short datetime
- {
- // Seems like C# doesn't support short datetime pattern so we use full format
- // http://msdn.microsoft.com/en-us/library/1at0z4ew%28v=vs.71%29.aspx
- pattern = dateFormatInfo.FullDateTimePattern;
- break;
- }
- }
- }
-
- TimeZoneInfo localZone = TimeZoneInfo.Local;
- DatePattern datePattern = new DatePattern(pattern, localZone.DisplayName, localZone.BaseUtcOffset.TotalSeconds, 0);
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK, datePattern));
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError(ErrorCode.PatternError)));
- }
- }
-
- /// <summary>
- /// Gets an array of either the names of the months or days of the week according to the client's user preferences and calendar.
- /// </summary>
- /// <param name="options"></param>
- public void getDateNames(string options)
- {
- GlobalizationOptions globalOptions;
-
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- globalOptions = JSON.JsonHelper.Deserialize<GlobalizationOptions>(args[0]);
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- int type = 0; //default wide
- int item = 0; //default months
-
- if (globalOptions.AdditionalOptions != null)
- {
- if (globalOptions.AdditionalOptions.Type != null)
- {
- string t = globalOptions.AdditionalOptions.Type;
-
- if (t.Equals(GlobalizationOptions.Narrow))
- {
- type++;
- }
- }
-
- if (globalOptions.AdditionalOptions.Item != null)
- {
- string t = globalOptions.AdditionalOptions.Item;
-
- if (t.Equals(GlobalizationOptions.Days))
- {
- item += 10;
- }
- }
- }
-
- //determine return value
- int method = item + type;
- string[] namesArray;
- CultureInfo currentCulture = CultureInfo.CurrentCulture;
-
- if (method == 1) //months and narrow
- {
- namesArray = currentCulture.DateTimeFormat.AbbreviatedMonthNames;
- }
- else if (method == 10) //days and wide
- {
- namesArray = currentCulture.DateTimeFormat.DayNames;
- }
- else if (method == 11) //days and narrow
- {
- namesArray = currentCulture.DateTimeFormat.AbbreviatedDayNames;
- }
- else //default: months and wide
- {
- namesArray = currentCulture.DateTimeFormat.MonthNames;
- }
-
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK, this.WrapIntoJSON(namesArray)));
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError()));
- }
- }
-
- /// <summary>
- /// Gets a number formatted as a string according to the client's user preferences.
- /// </summary>
- /// <param name="options"></param>
- public void numberToString(string options)
- {
- GlobalizationOptions globalOptions;
-
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- globalOptions = JSON.JsonHelper.Deserialize<GlobalizationOptions>(args[0]);
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- string format = string.Empty;
- string numberFormatType = (globalOptions.AdditionalOptions == null || string.IsNullOrEmpty(globalOptions.AdditionalOptions.Type)) ?
- GlobalizationOptions.Decimal : globalOptions.AdditionalOptions.Type;
-
- switch (numberFormatType)
- {
- case GlobalizationOptions.Percent:
- {
- format = "{0:p}";
- break;
- }
-
- case GlobalizationOptions.Currency:
- {
- format = "{0:c}";
- break;
- }
-
- default:
- {
- format = "{0:f}";
- break;
- }
- }
-
- string formattedValue = string.Format(CultureInfo.CurrentCulture, format, globalOptions.Number);
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK, this.WrapIntoJSON(formattedValue)));
-
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError(ErrorCode.FormattingError)));
- }
- }
-
- /// <summary>
- /// Gets a number formatted as a string according to the client's user preferences and returns the corresponding number.
- /// </summary>
- /// <param name="options"></param>
- public void stringToNumber(string options)
- {
- GlobalizationOptions globalOptions;
-
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- globalOptions = JSON.JsonHelper.Deserialize<GlobalizationOptions>(args[0]);
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- if (string.IsNullOrEmpty(globalOptions.NumberString))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- string numberString = globalOptions.NumberString;
- string numberFormatType = (globalOptions.AdditionalOptions == null || string.IsNullOrEmpty(globalOptions.AdditionalOptions.Type)) ?
- GlobalizationOptions.Decimal : globalOptions.AdditionalOptions.Type;
-
- NumberStyles numberStyle;
-
- switch (numberFormatType)
- {
- case GlobalizationOptions.Percent:
- {
- numberStyle = NumberStyles.Any;
- numberString = numberString.Replace(System.Globalization.CultureInfo.CurrentCulture.NumberFormat.PercentSymbol, "");
- break;
- }
-
- case GlobalizationOptions.Currency:
- {
- numberStyle = NumberStyles.Currency;
- break;
- }
-
- default:
- {
- numberStyle = NumberStyles.Number;
- break;
- }
- }
-
- double value = double.Parse(numberString, numberStyle, CultureInfo.CurrentCulture);
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK, this.WrapIntoJSON(value)));
-
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError(ErrorCode.ParsingError)));
- }
- }
-
-
- /// <summary>
- /// Gets a pattern string for formatting and parsing numbers according to the client's user preferences.
- /// </summary>
- /// <param name="options"></param>
- public void getNumberPattern(string options)
- {
- GlobalizationOptions globalOptions;
-
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- globalOptions = JSON.JsonHelper.Deserialize<GlobalizationOptions>(args[0]);
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- CultureInfo cultureInfo = CultureInfo.CurrentCulture;
- NumberFormatInfo formatInfo = cultureInfo.NumberFormat;
- string numberFormatType = (globalOptions.AdditionalOptions == null || string.IsNullOrEmpty(globalOptions.AdditionalOptions.Type)) ?
- GlobalizationOptions.Decimal : globalOptions.AdditionalOptions.Type;
- NumberPattern pattern = null;
- string symbol;
-
- // TODO find out how to get format pattern and the number of fraction digits
- switch (numberFormatType)
- {
- case GlobalizationOptions.Percent:
- {
- symbol = formatInfo.PercentSymbol;
- pattern = new NumberPattern("", symbol, 0, formatInfo.PercentPositivePattern.ToString(), formatInfo.PercentNegativePattern.ToString(), 0, formatInfo.PercentDecimalSeparator, formatInfo.PercentGroupSeparator);
- break;
- }
- case GlobalizationOptions.Currency:
- {
- symbol = formatInfo.CurrencySymbol;
- pattern = new NumberPattern("", symbol, 0, formatInfo.CurrencyPositivePattern.ToString(), formatInfo.CurrencyNegativePattern.ToString(), 0, formatInfo.CurrencyDecimalSeparator, formatInfo.CurrencyGroupSeparator);
- break;
- }
- default:
- {
- symbol = formatInfo.NumberDecimalSeparator;
- pattern = new NumberPattern("", symbol, 0, "", formatInfo.NumberNegativePattern.ToString(), 0, formatInfo.NumberDecimalSeparator, formatInfo.NumberGroupSeparator);
- break;
- }
- }
-
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK, pattern));
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError(ErrorCode.PatternError)));
- }
- }
-
- /// <summary>
- /// Gets a pattern string for formatting and parsing currency values according to the client's user preferences and ISO 4217 currency code.
- /// </summary>
- /// <param name="options"></param>
- public void getCurrencyPattern(string options)
- {
- GlobalizationOptions globalOptions;
-
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- globalOptions = JSON.JsonHelper.Deserialize<GlobalizationOptions>(args[0]);
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- try
- {
- if (string.IsNullOrEmpty(globalOptions.CurrencyCode))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- string currencyCode = globalOptions.CurrencyCode;
-
- // temporary not supported via lack of api required
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.INVALID_ACTION, "Not supported"));
- return;
-
- // TODO find the way to get currency info from currency code
- // http://stackoverflow.com/questions/12373800/3-digit-currency-code-to-currency-symbol
- // http://stackoverflow.com/questions/6924067/how-to-get-specific-culture-currency-pattern
- // CultureInfo cultureInfo = new CultureInfo(currencyCode);
- // NumberFormatInfo numberFormat = cultureInfo.NumberFormat;
- }
- catch (Exception e)
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, new GlobalizationError(ErrorCode.FormattingError)));
- }
- }
-
- #endregion
-
-
- #region private methods
-
- /// <summary>
- /// Wraps data into JSON format
- /// </summary>
- /// <param name="data">data</param>
- /// <returns>data formatted as JSON object</returns>
- private string WrapIntoJSON<T>(T data, string keyName = "value")
- {
- string param = "{0}";
- string stringifiedData = data.ToString();
-
- if (data.GetType() == typeof(string))
- {
- param = "\"" + param + "\"";
- }
-
- if (data.GetType() == typeof(bool))
- {
- stringifiedData = stringifiedData.ToLower();
- }
-
- if (data.GetType() == typeof(string[]))
- {
- stringifiedData = JSON.JsonHelper.Serialize(data);
- }
-
- var formattedData = string.Format("\"" + keyName + "\":" + param, stringifiedData);
- formattedData = "{" + formattedData + "}";
-
- return formattedData;
- }
-
- #endregion
- }
-}
\ No newline at end of file
diff --git a/templates/standalone/Plugins/InAppBrowser.cs b/templates/standalone/Plugins/InAppBrowser.cs
deleted file mode 100644
index 425f5ae..0000000
--- a/templates/standalone/Plugins/InAppBrowser.cs
+++ /dev/null
@@ -1,268 +0,0 @@
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using Microsoft.Phone.Controls;
-using System.Diagnostics;
-using System.Runtime.Serialization;
-using WPCordovaClassLib.Cordova;
-using WPCordovaClassLib.Cordova.Commands;
-using WPCordovaClassLib.Cordova.JSON;
-using Microsoft.Phone.Shell;
-using Microsoft.Phone.Tasks;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- [DataContract]
- public class BrowserOptions
- {
- [DataMember]
- public string url;
-
- [DataMember]
- public bool isGeolocationEnabled;
- }
-
- public class InAppBrowser : BaseCommand
- {
-
- private static WebBrowser browser;
- private static ApplicationBarIconButton backButton;
- private static ApplicationBarIconButton fwdButton;
-
- public void open(string options)
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- //BrowserOptions opts = JSON.JsonHelper.Deserialize<BrowserOptions>(options);
- string urlLoc = args[0];
- string target = args[1];
- /*
- _self - opens in the Cordova WebView if url is in the white-list, else it opens in the InAppBrowser
- _blank - always open in the InAppBrowser
- _system - always open in the system web browser
- */
- switch (target)
- {
- case "_blank":
- ShowInAppBrowser(urlLoc);
- break;
- case "_self":
- ShowCordovaBrowser(urlLoc);
- break;
- case "_system":
- ShowSystemBrowser(urlLoc);
- break;
- }
-
-
- }
-
- private void ShowCordovaBrowser(string url)
- {
- Uri loc = new Uri(url, UriKind.RelativeOrAbsolute);
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
- if (frame != null)
- {
- PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
- if (page != null)
- {
- CordovaView cView = page.FindName("CordovaView") as CordovaView;
- if (cView != null)
- {
- WebBrowser br = cView.Browser;
- br.Navigate(loc);
- }
- }
-
- }
- });
- }
-
- private void ShowSystemBrowser(string url)
- {
- WebBrowserTask webBrowserTask = new WebBrowserTask();
- webBrowserTask.Uri = new Uri(url, UriKind.Absolute);
- webBrowserTask.Show();
- }
-
-
- // Display an inderminate progress indicator
- private void ShowInAppBrowser(string url)
- {
- Uri loc = new Uri(url);
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- if (browser != null)
- {
- //browser.IsGeolocationEnabled = opts.isGeolocationEnabled;
- browser.Navigate(loc);
- }
- else
- {
- PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
- if (frame != null)
- {
- PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
-
- if (page != null)
- {
- Grid grid = page.FindName("LayoutRoot") as Grid;
- if (grid != null)
- {
- browser = new WebBrowser();
- browser.IsScriptEnabled = true;
- browser.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(browser_LoadCompleted);
- browser.Navigating += new EventHandler<NavigatingEventArgs>(browser_Navigating);
- browser.NavigationFailed += new System.Windows.Navigation.NavigationFailedEventHandler(browser_NavigationFailed);
- browser.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(browser_Navigated);
-
- browser.Navigate(loc);
- //browser.IsGeolocationEnabled = opts.isGeolocationEnabled;
- grid.Children.Add(browser);
- }
-
- ApplicationBar bar = new ApplicationBar();
- bar.BackgroundColor = Colors.Gray;
- bar.IsMenuEnabled = false;
-
- backButton = new ApplicationBarIconButton();
- backButton.Text = "Back";
- backButton.IconUri = new Uri("/Images/appbar.back.rest.png", UriKind.Relative);
- backButton.Click += new EventHandler(backButton_Click);
- //backButton.IsEnabled = false;
- bar.Buttons.Add(backButton);
-
-
- fwdButton = new ApplicationBarIconButton();
- fwdButton.Text = "Forward";
- fwdButton.IconUri = new Uri("/Images/appbar.next.rest.png", UriKind.Relative);
- fwdButton.Click += new EventHandler(fwdButton_Click);
- //fwdButton.IsEnabled = false;
- bar.Buttons.Add(fwdButton);
-
- ApplicationBarIconButton closeBtn = new ApplicationBarIconButton();
- closeBtn.Text = "Close";
- closeBtn.IconUri = new Uri("/Images/appbar.close.rest.png", UriKind.Relative);
- closeBtn.Click += new EventHandler(closeBtn_Click);
- bar.Buttons.Add(closeBtn);
-
- page.ApplicationBar = bar;
- }
-
- }
- }
- });
- }
-
- void browser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
- {
-
- }
-
- void fwdButton_Click(object sender, EventArgs e)
- {
- if (browser != null)
- {
- try
- {
- //browser.GoForward();
- browser.InvokeScript("execScript", "history.forward();");
- }
- catch (Exception)
- {
-
- }
- }
- }
-
- void backButton_Click(object sender, EventArgs e)
- {
- if (browser != null)
- {
- try
- {
- //browser.GoBack();
- browser.InvokeScript("execScript", "history.back();");
- }
- catch (Exception)
- {
-
- }
- }
- }
-
- void closeBtn_Click(object sender, EventArgs e)
- {
- this.close();
- }
-
-
- public void close(string options = "")
- {
- if (browser != null)
- {
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
- if (frame != null)
- {
- PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
- if (page != null)
- {
- Grid grid = page.FindName("LayoutRoot") as Grid;
- if (grid != null)
- {
- grid.Children.Remove(browser);
- }
- page.ApplicationBar = null;
- }
- }
- browser = null;
- string message = "{\"type\":\"exit\"}";
- PluginResult result = new PluginResult(PluginResult.Status.OK, message);
- result.KeepCallback = false;
- this.DispatchCommandResult(result);
- });
- }
- }
-
- void browser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
- {
- //if (browser != null)
- //{
- // backButton.IsEnabled = browser.CanGoBack;
- // fwdButton.IsEnabled = browser.CanGoForward;
- //}
- string message = "{\"type\":\"loadstop\", \"url\":\"" + e.Uri.AbsoluteUri + "\"}";
- PluginResult result = new PluginResult(PluginResult.Status.OK, message);
- result.KeepCallback = true;
- this.DispatchCommandResult(result);
- }
-
- void browser_NavigationFailed(object sender, System.Windows.Navigation.NavigationFailedEventArgs e)
- {
- string message = "{\"type\":\"error\",\"url\":\"" + e.Uri.AbsoluteUri + "\"}";
- PluginResult result = new PluginResult(PluginResult.Status.ERROR, message);
- result.KeepCallback = true;
- this.DispatchCommandResult(result);
- }
-
- void browser_Navigating(object sender, NavigatingEventArgs e)
- {
- string message = "{\"type\":\"loadstart\",\"url\":\"" + e.Uri.AbsoluteUri + "\"}";
- PluginResult result = new PluginResult(PluginResult.Status.OK, message);
- result.KeepCallback = true;
- this.DispatchCommandResult(result);
- }
-
- }
-}
diff --git a/templates/standalone/Plugins/Media.cs b/templates/standalone/Plugins/Media.cs
deleted file mode 100644
index 90c54f1..0000000
--- a/templates/standalone/Plugins/Media.cs
+++ /dev/null
@@ -1,532 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Runtime.Serialization;
-using System.Windows;
-using System.Diagnostics;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- /// <summary>
- /// Provides the ability to record and play back audio files on a device.
- /// </summary>
- public class Media : BaseCommand
- {
- /// <summary>
- /// Audio player objects
- /// </summary>
- private static Dictionary<string, AudioPlayer> players = new Dictionary<string, AudioPlayer>();
-
- /// <summary>
- /// Represents Media action options.
- /// </summary>
- [DataContract]
- public class MediaOptions
- {
- /// <summary>
- /// Audio id
- /// </summary>
- [DataMember(Name = "id", IsRequired = true)]
- public string Id { get; set; }
-
- /// <summary>
- /// Path to audio file
- /// </summary>
- [DataMember(Name = "src")]
- public string Src { get; set; }
-
- /// <summary>
- /// New track position
- /// </summary>
- [DataMember(Name = "milliseconds")]
- public int Milliseconds { get; set; }
- }
-
- /// <summary>
- /// Releases the audio player instance to save memory.
- /// </summary>
- public void release(string options)
- {
- try
- {
- MediaOptions mediaOptions;
-
- try
- {
- string[] optionsString = JSON.JsonHelper.Deserialize<string[]>(options);
- mediaOptions = new MediaOptions();
- mediaOptions.Id = optionsString[0];
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- if (!Media.players.ContainsKey(mediaOptions.Id))
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, false));
- return;
- }
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- try
- {
- AudioPlayer audio = Media.players[mediaOptions.Id];
- Media.players.Remove(mediaOptions.Id);
- audio.Dispose();
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, true));
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- });
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- }
-
- /// <summary>
- /// Starts recording and save the specified file
- /// </summary>
- public void startRecordingAudio(string options)
- {
- try
- {
- MediaOptions mediaOptions;
-
- try
- {
- string[] optionsString = JSON.JsonHelper.Deserialize<string[]>(options);
- mediaOptions = new MediaOptions();
- mediaOptions.Id = optionsString[0];
- mediaOptions.Src = optionsString[1];
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- if (mediaOptions != null)
- {
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- try
- {
- if (!Media.players.ContainsKey(mediaOptions.Id))
- {
- AudioPlayer audio = new AudioPlayer(this, mediaOptions.Id);
- Media.players.Add(mediaOptions.Id, audio);
- audio.startRecording(mediaOptions.Src);
- }
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
-
- });
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- }
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- }
-
- /// <summary>
- /// Stops recording and save to the file specified when recording started
- /// </summary>
- public void stopRecordingAudio(string options)
- {
- try
- {
- string mediaId = JSON.JsonHelper.Deserialize<string[]>(options)[0];
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- try
- {
- if (Media.players.ContainsKey(mediaId))
- {
- AudioPlayer audio = Media.players[mediaId];
- audio.stopRecording();
- Media.players.Remove(mediaId);
- }
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- });
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- }
- }
-
- public void setVolume(string options) // id,volume
- {
- try
- {
- string[] optionsString = JSON.JsonHelper.Deserialize<string[]>(options);
- string id = optionsString[0];
- double volume = double.Parse(optionsString[1]);
-
- if (Media.players.ContainsKey(id))
- {
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- try
- {
- AudioPlayer player = Media.players[id];
- player.setVolume(volume);
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- });
- }
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, "Error parsing options into setVolume method"));
- return;
- }
- }
-
- // Some Audio Notes:
- // In the Windows Phone Emulator, playback of video or audio content using the MediaElement control is not supported.
- // While playing, a MediaElement stops all other media playback on the phone.
- // Multiple MediaElement controls are NOT supported
-
- // Called when you create a new Media('blah') object in JS.
- public void create(string options)
- {
- // Debug.WriteLine("Creating Audio :: " + options);
- try
- {
- MediaOptions mediaOptions;
- try
- {
- string[] optionsString = JSON.JsonHelper.Deserialize<string[]>(options);
- mediaOptions = new MediaOptions();
- mediaOptions.Id = optionsString[0];
- mediaOptions.Src = optionsString[1];
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, "Error parsing options into create method"));
- return;
- }
-
- AudioPlayer audio = new AudioPlayer(this, mediaOptions.Id);
- Media.players.Add(mediaOptions.Id, audio);
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
-
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- }
-
- /// <summary>
- /// Starts or resume playing audio file
- /// </summary>
- public void startPlayingAudio(string options)
- {
- try
- {
- MediaOptions mediaOptions;
- try
- {
- string[] optionsString = JSON.JsonHelper.Deserialize<string[]>(options);
- mediaOptions = new MediaOptions();
- mediaOptions.Id = optionsString[0];
- mediaOptions.Src = optionsString[1];
- if (optionsString.Length > 2 && optionsString[2] != null)
- {
- mediaOptions.Milliseconds = int.Parse(optionsString[2]);
- }
-
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- AudioPlayer audio;
-
- if (!Media.players.ContainsKey(mediaOptions.Id))
- {
- audio = new AudioPlayer(this, mediaOptions.Id);
- Media.players[mediaOptions.Id] = audio;
- }
- else
- {
- Debug.WriteLine("INFO: startPlayingAudio FOUND mediaPlayer for " + mediaOptions.Id);
- audio = Media.players[mediaOptions.Id];
- }
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- try
- {
- audio.startPlaying(mediaOptions.Src);
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- });
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- }
-
-
- /// <summary>
- /// Seeks to a location
- /// </summary>
- public void seekToAudio(string options)
- {
- try
- {
- MediaOptions mediaOptions;
-
- try
- {
- string[] optionsString = JSON.JsonHelper.Deserialize<string[]>(options);
- mediaOptions = new MediaOptions();
- mediaOptions.Id = optionsString[0];
- if (optionsString.Length > 1 && optionsString[1] != null)
- {
- mediaOptions.Milliseconds = int.Parse(optionsString[1]);
- }
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- try
- {
- if (Media.players.ContainsKey(mediaOptions.Id))
- {
- AudioPlayer audio = Media.players[mediaOptions.Id];
- audio.seekToPlaying(mediaOptions.Milliseconds);
- }
- else
- {
- Debug.WriteLine("ERROR: seekToAudio could not find mediaPlayer for " + mediaOptions.Id);
- }
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- });
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- }
-
- /// <summary>
- /// Pauses playing
- /// </summary>
- public void pausePlayingAudio(string options)
- {
-
- try
- {
- string mediaId = JSON.JsonHelper.Deserialize<string[]>(options)[0];
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- try
- {
- if (Media.players.ContainsKey(mediaId))
- {
- AudioPlayer audio = Media.players[mediaId];
- audio.pausePlaying();
- }
- else
- {
- Debug.WriteLine("ERROR: pausePlayingAudio could not find mediaPlayer for " + mediaId);
- }
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- });
-
-
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- }
-
-
- }
-
-
- /// <summary>
- /// Stops playing the audio file
- /// </summary>
- public void stopPlayingAudio(String options)
- {
- try
- {
- string mediaId = JSON.JsonHelper.Deserialize<string[]>(options)[0];
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- try
- {
- if (Media.players.ContainsKey(mediaId))
- {
- AudioPlayer audio = Media.players[mediaId];
- audio.stopPlaying();
- }
- else
- {
- Debug.WriteLine("stopPlaying could not find mediaPlayer for " + mediaId);
- }
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- });
-
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- }
- }
-
- /// <summary>
- /// Gets current position of playback
- /// </summary>
- public void getCurrentPositionAudio(string options)
- {
- try
- {
- string mediaId = JSON.JsonHelper.Deserialize<string[]>(options)[0];
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- try
- {
- if (Media.players.ContainsKey(mediaId))
- {
- AudioPlayer audio = Media.players[mediaId];
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, audio.getCurrentPosition()));
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, -1));
- }
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- });
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
- }
-
-
- /// <summary>
- /// Gets the duration of the audio file
- /// </summary>
-
- [Obsolete("This method will be removed shortly")]
- public void getDurationAudio(string options)
- {
- try
- {
- MediaOptions mediaOptions;
-
- try
- {
- mediaOptions = JSON.JsonHelper.Deserialize<MediaOptions>(options);
- }
- catch (Exception)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
- return;
- }
-
- AudioPlayer audio;
- if (Media.players.ContainsKey(mediaOptions.Id))
- {
- audio = Media.players[mediaOptions.Id];
- }
- else
- {
- Debug.WriteLine("ERROR: getDurationAudio could not find mediaPlayer for " + mediaOptions.Id);
- audio = new AudioPlayer(this, mediaOptions.Id);
- Media.players.Add(mediaOptions.Id, audio);
- }
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, audio.getDuration(mediaOptions.Src)));
- });
- }
- catch (Exception e)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
- }
- }
- }
-}
diff --git a/templates/standalone/Plugins/MimeTypeMapper.cs b/templates/standalone/Plugins/MimeTypeMapper.cs
deleted file mode 100644
index 01ba4cb..0000000
--- a/templates/standalone/Plugins/MimeTypeMapper.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System.Collections.Generic;
-using System.IO;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- /// <summary>
- /// Represents file extension to mime type mapper.
- /// </summary>
- public static class MimeTypeMapper
- {
- /// <summary>
- /// For unknown type it is recommended to use 'application/octet-stream'
- /// http://stackoverflow.com/questions/1176022/unknown-file-type-mime
- /// </summary>
- private static string DefaultMimeType = "application/octet-stream";
-
- /// <summary>
- /// Stores mime type for all necessary extension
- /// </summary>
- private static readonly Dictionary<string, string> MIMETypesDictionary = new Dictionary<string, string>
- {
- {"avi", "video/x-msvideo"},
- {"bmp", "image/bmp"},
- {"gif", "image/gif"},
- {"jpe", "image/jpeg"},
- {"jpeg", "image/jpeg"},
- {"jpg", "image/jpeg"},
- {"mov", "video/quicktime"},
- {"mp2", "audio/mpeg"},
- {"mp3", "audio/mpeg"},
- {"mp4", "video/mp4"},
- {"mpe", "video/mpeg"},
- {"mpeg", "video/mpeg"},
- {"mpg", "video/mpeg"},
- {"mpga", "audio/mpeg"},
- {"pbm", "image/x-portable-bitmap"},
- {"pcm", "audio/x-pcm"},
- {"pct", "image/pict"},
- {"pgm", "image/x-portable-graymap"},
- {"pic", "image/pict"},
- {"pict", "image/pict"},
- {"png", "image/png"},
- {"pnm", "image/x-portable-anymap"},
- {"pnt", "image/x-macpaint"},
- {"pntg", "image/x-macpaint"},
- {"ppm", "image/x-portable-pixmap"},
- {"qt", "video/quicktime"},
- {"ra", "audio/x-pn-realaudio"},
- {"ram", "audio/x-pn-realaudio"},
- {"ras", "image/x-cmu-raster"},
- {"rgb", "image/x-rgb"},
- {"snd", "audio/basic"},
- {"txt", "text/plain"},
- {"tif", "image/tiff"},
- {"tiff", "image/tiff"},
- {"wav", "audio/x-wav"},
- {"wbmp", "image/vnd.wap.wbmp"},
-
- };
- /// <summary>
- /// Gets mime type by file extension
- /// </summary>
- /// <param name="fileName">file name to extract extension</param>
- /// <returns>mime type</returns>
- public static string GetMimeType(string fileName)
- {
- string ext = Path.GetExtension(fileName);
-
- // invalid extension
- if (string.IsNullOrEmpty(ext) || !ext.StartsWith("."))
- {
- return DefaultMimeType;
- }
-
- ext = ext.Remove(0, 1);
-
- if (MIMETypesDictionary.ContainsKey(ext))
- {
- return MIMETypesDictionary[ext];
- }
-
- return DefaultMimeType;
- }
- }
-}
diff --git a/templates/standalone/Plugins/NetworkStatus.cs b/templates/standalone/Plugins/NetworkStatus.cs
deleted file mode 100644
index 12eb061..0000000
--- a/templates/standalone/Plugins/NetworkStatus.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Diagnostics;
-using System.Net;
-using System.Net.NetworkInformation;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using Microsoft.Phone.Net.NetworkInformation;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
-
- // http://msdn.microsoft.com/en-us/library/microsoft.phone.net.networkinformation(v=VS.92).aspx
- // http://msdn.microsoft.com/en-us/library/microsoft.phone.net.networkinformation.devicenetworkinformation(v=VS.92).aspx
-
- public class NetworkStatus : BaseCommand
- {
- const string UNKNOWN = "unknown";
- const string ETHERNET = "ethernet";
- const string WIFI = "wifi";
- const string CELL_2G = "2g";
- const string CELL_3G = "3g";
- const string CELL_4G = "4g";
- const string NONE = "none";
- const string CELL = "cellular";
-
- private bool HasCallback = false;
-
- public NetworkStatus()
- {
- DeviceNetworkInformation.NetworkAvailabilityChanged += new EventHandler<NetworkNotificationEventArgs>(ChangeDetected);
- }
-
- public override void OnResume(object sender, Microsoft.Phone.Shell.ActivatedEventArgs e)
- {
- this.getConnectionInfo("");
- }
-
- public void getConnectionInfo(string empty)
- {
- HasCallback = true;
- updateConnectionType(checkConnectionType());
- }
-
- private string checkConnectionType()
- {
- if (DeviceNetworkInformation.IsNetworkAvailable)
- {
- if (DeviceNetworkInformation.IsWiFiEnabled)
- {
- return WIFI;
- }
- else
- {
- return DeviceNetworkInformation.IsCellularDataEnabled ? CELL : UNKNOWN;
- }
- }
- return NONE;
- }
-
- private string checkConnectionType(NetworkInterfaceSubType type)
- {
- switch (type)
- {
- case NetworkInterfaceSubType.Cellular_1XRTT: //cell
- case NetworkInterfaceSubType.Cellular_GPRS: //cell
- return CELL;
- case NetworkInterfaceSubType.Cellular_EDGE: //2
- return CELL_2G;
- case NetworkInterfaceSubType.Cellular_3G:
- case NetworkInterfaceSubType.Cellular_EVDO: //3
- case NetworkInterfaceSubType.Cellular_EVDV: //3
- case NetworkInterfaceSubType.Cellular_HSPA: //3
- return CELL_3G;
- case NetworkInterfaceSubType.WiFi:
- return WIFI;
- case NetworkInterfaceSubType.Unknown:
- case NetworkInterfaceSubType.Desktop_PassThru:
- default:
- return UNKNOWN;
- }
- }
-
- void ChangeDetected(object sender, NetworkNotificationEventArgs e)
- {
- switch (e.NotificationType)
- {
- case NetworkNotificationType.InterfaceConnected:
- updateConnectionType(checkConnectionType(e.NetworkInterface.InterfaceSubtype));
- break;
- case NetworkNotificationType.InterfaceDisconnected:
- updateConnectionType(NONE);
- break;
- default:
- break;
- }
- }
-
- private void updateConnectionType(string type)
- {
- // This should also implicitly fire offline/online events as that is handled on the JS side
- if (this.HasCallback)
- {
- PluginResult result = new PluginResult(PluginResult.Status.OK, type);
- result.KeepCallback = true;
- DispatchCommandResult(result);
- }
- }
- }
-}
diff --git a/templates/standalone/Plugins/Notification.cs b/templates/standalone/Plugins/Notification.cs
deleted file mode 100644
index 11f14bd..0000000
--- a/templates/standalone/Plugins/Notification.cs
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Windows;
-using System.Windows.Controls;
-using Microsoft.Devices;
-using System.Runtime.Serialization;
-using System.Threading;
-using System.Windows.Resources;
-using Microsoft.Phone.Controls;
-using Microsoft.Xna.Framework.Audio;
-using WPCordovaClassLib.Cordova.UI;
-using System.Diagnostics;
-
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- public class Notification : BaseCommand
- {
- static ProgressBar progressBar = null;
- const int DEFAULT_DURATION = 5;
-
- private NotificationBox notifyBox;
-
- private class NotifBoxData
- {
- public NotificationBox previous;
- public string callbackId;
- }
-
- private PhoneApplicationPage Page
- {
- get
- {
- PhoneApplicationPage page = null;
- PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
- if (frame != null)
- {
- page = frame.Content as PhoneApplicationPage;
- }
- return page;
- }
- }
-
- // blink api - doesn't look like there is an equivalent api we can use...
-
- [DataContract]
- public class AlertOptions
- {
- [OnDeserializing]
- public void OnDeserializing(StreamingContext context)
- {
- // set defaults
- this.message = "message";
- this.title = "Alert";
- this.buttonLabel = "ok";
- }
-
- /// <summary>
- /// message to display in the alert box
- /// </summary>
- [DataMember]
- public string message;
-
- /// <summary>
- /// title displayed on the alert window
- /// </summary>
- [DataMember]
- public string title;
-
- /// <summary>
- /// text to display on the button
- /// </summary>
- [DataMember]
- public string buttonLabel;
- }
-
- public void alert(string options)
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- AlertOptions alertOpts = new AlertOptions();
- alertOpts.message = args[0];
- alertOpts.title = args[1];
- alertOpts.buttonLabel = args[2];
- string aliasCurrentCommandCallbackId = args[3];
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- PhoneApplicationPage page = Page;
- if (page != null)
- {
- Grid grid = page.FindName("LayoutRoot") as Grid;
- if (grid != null)
- {
- var previous = notifyBox;
- notifyBox = new NotificationBox();
- notifyBox.Tag = new NotifBoxData{ previous = previous, callbackId = aliasCurrentCommandCallbackId };
- notifyBox.PageTitle.Text = alertOpts.title;
- notifyBox.SubTitle.Text = alertOpts.message;
- Button btnOK = new Button();
- btnOK.Content = alertOpts.buttonLabel;
- btnOK.Click += new RoutedEventHandler(btnOK_Click);
- btnOK.Tag = 1;
- notifyBox.ButtonPanel.Children.Add(btnOK);
- grid.Children.Add(notifyBox);
-
- if (previous == null)
- {
- page.BackKeyPress += page_BackKeyPress;
- }
- }
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.INSTANTIATION_EXCEPTION));
- }
- });
- }
-
- public void confirm(string options)
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- AlertOptions alertOpts = new AlertOptions();
- alertOpts.message = args[0];
- alertOpts.title = args[1];
- alertOpts.buttonLabel = args[2];
- string aliasCurrentCommandCallbackId = args[3];
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- PhoneApplicationPage page = Page;
- if (page != null)
- {
- Grid grid = page.FindName("LayoutRoot") as Grid;
- if (grid != null)
- {
- var previous = notifyBox;
- notifyBox = new NotificationBox();
- notifyBox.Tag = new NotifBoxData{ previous = previous, callbackId = aliasCurrentCommandCallbackId };
- notifyBox.PageTitle.Text = alertOpts.title;
- notifyBox.SubTitle.Text = alertOpts.message;
-
- string[] labels = JSON.JsonHelper.Deserialize<string[]>(alertOpts.buttonLabel);
-
- if (labels == null)
- {
- labels = alertOpts.buttonLabel.Split(',');
- }
-
- for (int n = 0; n < labels.Length; n++)
- {
- Button btn = new Button();
- btn.Content = labels[n];
- btn.Tag = n;
- btn.Click += new RoutedEventHandler(btnOK_Click);
- notifyBox.ButtonPanel.Children.Add(btn);
- }
-
- grid.Children.Add(notifyBox);
- if (previous == null)
- {
- page.BackKeyPress += page_BackKeyPress;
- }
- }
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.INSTANTIATION_EXCEPTION));
- }
- });
- }
-
- void page_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
- {
- PhoneApplicationPage page = sender as PhoneApplicationPage;
- string callbackId = "";
- if (page != null && notifyBox != null)
- {
- Grid grid = page.FindName("LayoutRoot") as Grid;
- if (grid != null)
- {
- grid.Children.Remove(notifyBox);
- NotifBoxData notifBoxData = notifyBox.Tag as NotifBoxData;
- notifyBox = notifBoxData.previous;
- callbackId = notifBoxData.callbackId;
- }
- if (notifyBox == null)
- {
- page.BackKeyPress -= page_BackKeyPress;
- }
- e.Cancel = true;
- }
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, 0), callbackId);
- }
-
- void btnOK_Click(object sender, RoutedEventArgs e)
- {
- Button btn = sender as Button;
- FrameworkElement notifBoxParent = null;
- int retVal = 0;
- string callbackId = "";
- if (btn != null)
- {
- retVal = (int)btn.Tag + 1;
-
- notifBoxParent = btn.Parent as FrameworkElement;
- while ((notifBoxParent = notifBoxParent.Parent as FrameworkElement) != null &&
- !(notifBoxParent is NotificationBox)) ;
- }
- if (notifBoxParent != null)
- {
- PhoneApplicationPage page = Page;
- if (page != null)
- {
- Grid grid = page.FindName("LayoutRoot") as Grid;
- if (grid != null)
- {
- grid.Children.Remove(notifBoxParent);
- }
-
- NotifBoxData notifBoxData = notifBoxParent.Tag as NotifBoxData;
- notifyBox = notifBoxData.previous;
- callbackId = notifBoxData.callbackId;
-
- if (notifyBox == null)
- {
- page.BackKeyPress -= page_BackKeyPress;
- }
- }
-
- }
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, retVal),callbackId);
- }
-
-
-
- public void beep(string options)
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
- int times = int.Parse(args[0]);
-
- string resourcePath = BaseCommand.GetBaseURL() + "resources/notification-beep.wav";
-
- StreamResourceInfo sri = Application.GetResourceStream(new Uri(resourcePath, UriKind.Relative));
-
- if (sri != null)
- {
- SoundEffect effect = SoundEffect.FromStream(sri.Stream);
- SoundEffectInstance inst = effect.CreateInstance();
- ThreadPool.QueueUserWorkItem((o) =>
- {
- // cannot interact with UI !!
- do
- {
- inst.Play();
- Thread.Sleep(effect.Duration + TimeSpan.FromMilliseconds(100));
- }
- while (--times > 0);
-
- });
-
- }
-
- // TODO: may need a listener to trigger DispatchCommandResult after the alarm has finished executing...
- DispatchCommandResult();
- }
-
- // Display an indeterminate progress indicator
- public void activityStart(string unused)
- {
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
-
- if (frame != null)
- {
- PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
-
- if (page != null)
- {
- var temp = page.FindName("LayoutRoot");
- Grid grid = temp as Grid;
- if (grid != null)
- {
- if (progressBar != null)
- {
- grid.Children.Remove(progressBar);
- }
- progressBar = new ProgressBar();
- progressBar.IsIndeterminate = true;
- progressBar.IsEnabled = true;
-
- grid.Children.Add(progressBar);
- }
- }
- }
- });
- }
-
-
- // Remove our indeterminate progress indicator
- public void activityStop(string unused)
- {
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- if (progressBar != null)
- {
- progressBar.IsEnabled = false;
- PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
- if (frame != null)
- {
- PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
- if (page != null)
- {
- Grid grid = page.FindName("LayoutRoot") as Grid;
- if (grid != null)
- {
- grid.Children.Remove(progressBar);
- }
- }
- }
- progressBar = null;
- }
- });
- }
-
- public void vibrate(string vibrateDuration)
- {
-
- int msecs = 200; // set default
-
- try
- {
- string[] args = JSON.JsonHelper.Deserialize<string[]>(vibrateDuration);
-
- msecs = int.Parse(args[0]);
- if (msecs < 1)
- {
- msecs = 1;
- }
- }
- catch (FormatException)
- {
-
- }
-
- VibrateController.Default.Start(TimeSpan.FromMilliseconds(msecs));
-
- // TODO: may need to add listener to trigger DispatchCommandResult when the vibration ends...
- DispatchCommandResult();
- }
- }
-}
diff --git a/templates/standalone/Plugins/UI/AudioCaptureTask.cs b/templates/standalone/Plugins/UI/AudioCaptureTask.cs
deleted file mode 100644
index 9f43d23..0000000
--- a/templates/standalone/Plugins/UI/AudioCaptureTask.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.IO;
-using System.Windows;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Tasks;
-
-namespace WPCordovaClassLib.Cordova.UI
-{
- /// <summary>
- /// Allows an application to launch the Audio Recording application.
- /// Use this to allow users to record audio from your application.
- /// </summary>
- public class AudioCaptureTask
- {
- /// <summary>
- /// Represents recorded audio returned from a call to the Show method of
- /// a WPCordovaClassLib.Cordova.Controls.AudioCaptureTask object
- /// </summary>
- public class AudioResult : TaskEventArgs
- {
- /// <summary>
- /// Initializes a new instance of the AudioResult class.
- /// </summary>
- public AudioResult()
- { }
-
- /// <summary>
- /// Initializes a new instance of the AudioResult class
- /// with the specified Microsoft.Phone.Tasks.TaskResult.
- /// </summary>
- /// <param name="taskResult">Associated Microsoft.Phone.Tasks.TaskResult</param>
- public AudioResult(TaskResult taskResult)
- : base(taskResult)
- { }
-
- /// <summary>
- /// Gets the file name of the recorded audio.
- /// </summary>
- public Stream AudioFile { get; internal set; }
-
- /// <summary>
- /// Gets the stream containing the data for the recorded audio.
- /// </summary>
- public string AudioFileName { get; internal set; }
- }
-
- /// <summary>
- /// Occurs when a audio recording task is completed.
- /// </summary>
- public event EventHandler<AudioResult> Completed;
-
- /// <summary>
- /// Shows Audio Recording application
- /// </summary>
- public void Show()
- {
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- var root = Application.Current.RootVisual as PhoneApplicationFrame;
-
- root.Navigated += new System.Windows.Navigation.NavigatedEventHandler(NavigationService_Navigated);
-
- string baseUrl = WPCordovaClassLib.Cordova.Commands.BaseCommand.GetBaseURL();
- // dummy parameter is used to always open a fresh version
- root.Navigate(new System.Uri(baseUrl + "CordovaLib/UI/AudioRecorder.xaml?dummy=" + Guid.NewGuid().ToString(), UriKind.Relative));
-
- });
- }
-
- /// <summary>
- /// Performs additional configuration of the recording application.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void NavigationService_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
- {
- if (!(e.Content is AudioRecorder)) return;
-
- (Application.Current.RootVisual as PhoneApplicationFrame).Navigated -= NavigationService_Navigated;
-
- AudioRecorder audioRecorder = (AudioRecorder)e.Content;
-
- if (audioRecorder != null)
- {
- audioRecorder.Completed += this.Completed;
- }
- else if (this.Completed != null)
- {
- this.Completed(this, new AudioResult(TaskResult.Cancel));
- }
- }
- }
-}
diff --git a/templates/standalone/Plugins/UI/AudioRecorder.xaml b/templates/standalone/Plugins/UI/AudioRecorder.xaml
deleted file mode 100644
index 0fd26ab..0000000
--- a/templates/standalone/Plugins/UI/AudioRecorder.xaml
+++ /dev/null
@@ -1,66 +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.
--->
-<phone:PhoneApplicationPage
- x:Class="WPCordovaClassLib.Cordova.UI.AudioRecorder"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
- xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- FontFamily="{StaticResource PhoneFontFamilyNormal}"
- FontSize="{StaticResource PhoneFontSizeNormal}"
- Foreground="{StaticResource PhoneForegroundBrush}"
- SupportedOrientations="Portrait" Orientation="Portrait"
- mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
- shell:SystemTray.IsVisible="True">
-
- <!--LayoutRoot is the root grid where all page content is placed-->
- <Grid x:Name="LayoutRoot" Background="Transparent">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
-
- <!--TitlePanel contains the name of the application and page title-->
- <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="0,17,0,28">
- <TextBlock x:Name="PageTitle" Text="Audio recorder" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
- </StackPanel>
-
- <!--ContentPanel - place additional content here-->
- <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
- <Button Name="btnStartStop" Content="Start" Height="72" HorizontalAlignment="Left" Margin="156,96,0,0" VerticalAlignment="Top" Width="160" Click="btnStartStop_Click" />
- <Button Name="btnTake" Content="Take" IsEnabled="False" Height="72" HorizontalAlignment="Left" Margin="155,182,0,0" VerticalAlignment="Top" Width="160" Click="btnTake_Click" />
- <TextBlock Height="30" HorizontalAlignment="Left" Margin="168,60,0,0" Name="txtDuration" Text="Duration: 00:00" VerticalAlignment="Top" />
- </Grid>
- </Grid>
-
- <!--Sample code showing usage of ApplicationBar-->
- <!--<phone:PhoneApplicationPage.ApplicationBar>
- <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
- <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/>
- <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/>
- <shell:ApplicationBar.MenuItems>
- <shell:ApplicationBarMenuItem Text="MenuItem 1"/>
- <shell:ApplicationBarMenuItem Text="MenuItem 2"/>
- </shell:ApplicationBar.MenuItems>
- </shell:ApplicationBar>
- </phone:PhoneApplicationPage.ApplicationBar>-->
-
-</phone:PhoneApplicationPage>
diff --git a/templates/standalone/Plugins/UI/AudioRecorder.xaml.cs b/templates/standalone/Plugins/UI/AudioRecorder.xaml.cs
deleted file mode 100644
index 6ff0b5c..0000000
--- a/templates/standalone/Plugins/UI/AudioRecorder.xaml.cs
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Tasks;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Audio;
-using System;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Windows;
-using System.Windows.Threading;
-using WPCordovaClassLib.Cordova.Commands;
-using AudioResult = WPCordovaClassLib.Cordova.UI.AudioCaptureTask.AudioResult;
-
-namespace WPCordovaClassLib.Cordova.UI
-{
- /// <summary>
- /// Implements Audio Recording application
- /// </summary>
- public partial class AudioRecorder : PhoneApplicationPage
- {
-
- #region Constants
-
- private const string RecordingStartCaption = "Start";
- private const string RecordingStopCaption = "Stop";
-
- private const string LocalFolderName = "AudioCache";
- private const string FileNameFormat = "Audio-{0}.wav";
-
- #endregion
-
- #region Callbacks
-
- /// <summary>
- /// Occurs when a audio recording task is completed.
- /// </summary>
- public event EventHandler<AudioResult> Completed;
-
- #endregion
-
- #region Fields
-
- /// <summary>
- /// Audio source
- /// </summary>
- private Microphone microphone;
-
- /// <summary>
- /// Temporary buffer to store audio chunk
- /// </summary>
- private byte[] buffer;
-
- /// <summary>
- /// Recording duration
- /// </summary>
- private TimeSpan duration;
-
- /// <summary>
- /// Output buffer
- /// </summary>
- private MemoryStream memoryStream;
-
- /// <summary>
- /// Xna game loop dispatcher
- /// </summary>
- DispatcherTimer dtXna;
-
- /// <summary>
- /// Recording result, dispatched back when recording page is closed
- /// </summary>
- private AudioResult result = new AudioResult(TaskResult.Cancel);
-
- /// <summary>
- /// Whether we are recording audio now
- /// </summary>
- private bool IsRecording
- {
- get
- {
- return (this.microphone != null && this.microphone.State == MicrophoneState.Started);
- }
- }
-
- #endregion
-
- /// <summary>
- /// Creates new instance of the AudioRecorder class.
- /// </summary>
- public AudioRecorder()
- {
-
- this.InitializeXnaGameLoop();
-
- // microphone requires special XNA initialization to work
- InitializeComponent();
- }
-
- /// <summary>
- /// Starts recording, data is stored in memory
- /// </summary>
- private void StartRecording()
- {
- this.microphone = Microphone.Default;
- this.microphone.BufferDuration = TimeSpan.FromMilliseconds(500);
-
- this.btnTake.IsEnabled = false;
- this.btnStartStop.Content = RecordingStopCaption;
-
- this.buffer = new byte[microphone.GetSampleSizeInBytes(this.microphone.BufferDuration)];
- this.microphone.BufferReady += new EventHandler<EventArgs>(MicrophoneBufferReady);
-
- MemoryStream stream = new MemoryStream();
- this.memoryStream = stream;
- int numBits = 16;
- int numBytes = numBits / 8;
-
- // inline version from AudioFormatsHelper
- stream.Write(System.Text.Encoding.UTF8.GetBytes("RIFF"), 0, 4);
- stream.Write(BitConverter.GetBytes(0), 0, 4);
- stream.Write(System.Text.Encoding.UTF8.GetBytes("WAVE"), 0, 4);
- stream.Write(System.Text.Encoding.UTF8.GetBytes("fmt "), 0, 4);
- stream.Write(BitConverter.GetBytes(16), 0, 4);
- stream.Write(BitConverter.GetBytes((short)1), 0, 2);
- stream.Write(BitConverter.GetBytes((short)1), 0, 2);
- stream.Write(BitConverter.GetBytes(this.microphone.SampleRate), 0, 4);
- stream.Write(BitConverter.GetBytes(this.microphone.SampleRate * numBytes), 0, 4);
- stream.Write(BitConverter.GetBytes((short)(numBytes)), 0, 2);
- stream.Write(BitConverter.GetBytes((short)(numBits)), 0, 2);
- stream.Write(System.Text.Encoding.UTF8.GetBytes("data"), 0, 4);
- stream.Write(BitConverter.GetBytes(0), 0, 4);
-
- this.duration = new TimeSpan(0);
-
- this.microphone.Start();
- }
-
- /// <summary>
- /// Stops recording
- /// </summary>
- private void StopRecording()
- {
- this.microphone.Stop();
-
- this.microphone.BufferReady -= MicrophoneBufferReady;
-
- this.microphone = null;
-
- btnStartStop.Content = RecordingStartCaption;
-
- // check there is some data
- this.btnTake.IsEnabled = true;
- }
-
- /// <summary>
- /// Handles Start/Stop events
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void btnStartStop_Click(object sender, RoutedEventArgs e)
- {
-
- if (this.IsRecording)
- {
- this.StopRecording();
- }
- else
- {
- this.StartRecording();
- }
- }
-
- /// <summary>
- /// Handles Take button click
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void btnTake_Click(object sender, RoutedEventArgs e)
- {
- this.result = this.SaveAudioClipToLocalStorage();
-
- if (Completed != null)
- {
- Completed(this, result);
- }
-
- if (this.NavigationService.CanGoBack)
- {
- this.NavigationService.GoBack();
- }
- }
-
- /// <summary>
- /// Handles page closing event, stops recording if needed and dispatches results.
- /// </summary>
- /// <param name="e"></param>
- protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
- {
- if (IsRecording)
- {
- StopRecording();
- }
-
- this.FinalizeXnaGameLoop();
-
- base.OnNavigatedFrom(e);
- }
-
- /// <summary>
- /// Copies data from microphone to memory storages and updates recording state
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void MicrophoneBufferReady(object sender, EventArgs e)
- {
- this.microphone.GetData(this.buffer);
- this.memoryStream.Write(this.buffer, 0, this.buffer.Length);
- TimeSpan bufferDuration = this.microphone.BufferDuration;
-
- this.Dispatcher.BeginInvoke(() =>
- {
- this.duration += bufferDuration;
-
- this.txtDuration.Text = "Duration: " +
- this.duration.Minutes.ToString().PadLeft(2, '0') + ":" +
- this.duration.Seconds.ToString().PadLeft(2, '0');
- });
-
- }
-
- /// <summary>
- /// Writes audio data from memory to isolated storage
- /// </summary>
- /// <returns></returns>
- private AudioResult SaveAudioClipToLocalStorage()
- {
- if (this.memoryStream == null || this.memoryStream.Length <= 0)
- {
- return new AudioResult(TaskResult.Cancel);
- }
-
- //this.memoryStream.UpdateWavStream();
- long position = memoryStream.Position;
- memoryStream.Seek(4, SeekOrigin.Begin);
- memoryStream.Write(BitConverter.GetBytes((int)memoryStream.Length - 8), 0, 4);
- memoryStream.Seek(40, SeekOrigin.Begin);
- memoryStream.Write(BitConverter.GetBytes((int)memoryStream.Length - 44), 0, 4);
- memoryStream.Seek(position, SeekOrigin.Begin);
-
- // save audio data to local isolated storage
-
- string filename = String.Format(FileNameFormat, Guid.NewGuid().ToString());
-
- try
- {
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
-
- if (!isoFile.DirectoryExists(LocalFolderName))
- {
- isoFile.CreateDirectory(LocalFolderName);
- }
-
- string filePath = System.IO.Path.Combine("/" + LocalFolderName + "/", filename);
-
- this.memoryStream.Seek(0, SeekOrigin.Begin);
-
- using (IsolatedStorageFileStream fileStream = isoFile.CreateFile(filePath))
- {
-
- this.memoryStream.CopyTo(fileStream);
- }
-
- AudioResult result = new AudioResult(TaskResult.OK);
- result.AudioFileName = filePath;
-
- result.AudioFile = this.memoryStream;
- result.AudioFile.Seek(0, SeekOrigin.Begin);
-
- return result;
- }
-
-
-
- }
- catch (Exception)
- {
- //TODO: log or do something else
- throw;
- }
- }
-
- /// <summary>
- /// Special initialization required for the microphone: XNA game loop
- /// </summary>
- private void InitializeXnaGameLoop()
- {
- // Timer to simulate the XNA game loop (Microphone is from XNA)
- this.dtXna = new DispatcherTimer();
- this.dtXna.Interval = TimeSpan.FromMilliseconds(33);
- this.dtXna.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };
- this.dtXna.Start();
- }
- /// <summary>
- /// Finalizes XNA game loop for microphone
- /// </summary>
- private void FinalizeXnaGameLoop()
- {
- // Timer to simulate the XNA game loop (Microphone is from XNA)
- if (dtXna != null)
- {
- dtXna.Stop();
- dtXna = null;
- }
- }
-
- }
-}
\ No newline at end of file
diff --git a/templates/standalone/Plugins/UI/ImageCapture.xaml b/templates/standalone/Plugins/UI/ImageCapture.xaml
deleted file mode 100644
index a7eee21..0000000
--- a/templates/standalone/Plugins/UI/ImageCapture.xaml
+++ /dev/null
@@ -1,26 +0,0 @@
-<phone:PhoneApplicationPage
- x:Class="WPCordovaClassLib.Cordova.UI.ImageCapture"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
- xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- FontFamily="{StaticResource PhoneFontFamilyNormal}"
- FontSize="{StaticResource PhoneFontSizeNormal}"
- Foreground="{StaticResource PhoneForegroundBrush}"
- SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
- mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
- shell:SystemTray.IsVisible="True">
-
- <!--LayoutRoot is the root grid where all page content is placed-->
- <Grid x:Name="LayoutRoot" Background="Yellow">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
-
- </Grid>
-
-
-</phone:PhoneApplicationPage>
diff --git a/templates/standalone/Plugins/UI/ImageCapture.xaml.cs b/templates/standalone/Plugins/UI/ImageCapture.xaml.cs
deleted file mode 100644
index 234b444..0000000
--- a/templates/standalone/Plugins/UI/ImageCapture.xaml.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- Licensed 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.
-*/
-
-
-using System;
-using System.IO;
-using System.Windows;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Tasks;
-
-namespace WPCordovaClassLib.Cordova.UI
-{
- public partial class ImageCapture : PhoneApplicationPage
- {
- public ImageCapture()
- {
- InitializeComponent();
- }
- }
-
- public class ImageCaptureTask
- {
- /// <summary>
- /// Represents an image returned from a call to the Show method of
- /// a WPCordovaClassLib.Cordova.Controls.ImageCaptureTask object
- /// </summary>
- //public class AudioResult : TaskEventArgs
- //{
- // /// <summary>
- // /// Initializes a new instance of the AudioResult class.
- // /// </summary>
- // public AudioResult()
- // { }
-
- // /// <summary>
- // /// Initializes a new instance of the AudioResult class
- // /// with the specified Microsoft.Phone.Tasks.TaskResult.
- // /// </summary>
- // /// <param name="taskResult">Associated Microsoft.Phone.Tasks.TaskResult</param>
- // public AudioResult(TaskResult taskResult)
- // : base(taskResult)
- // { }
-
- // /// <summary>
- // /// Gets the file name of the recorded audio.
- // /// </summary>
- // public Stream AudioFile { get; internal set; }
-
- // /// <summary>
- // /// Gets the stream containing the data for the recorded audio.
- // /// </summary>
- // public string AudioFileName { get; internal set; }
- //}
-
- ///// <summary>
- ///// Occurs when a audio recording task is completed.
- ///// </summary>
- //public event EventHandler<AudioResult> Completed;
-
- /// <summary>
- /// Shows Audio Recording application
- /// </summary>
- public void Show()
- {
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- var root = Application.Current.RootVisual as PhoneApplicationFrame;
-
- root.Navigated += new System.Windows.Navigation.NavigatedEventHandler(NavigationService_Navigated);
-
- string baseUrl = WPCordovaClassLib.Cordova.Commands.BaseCommand.GetBaseURL();
-
- // dummy parameter is used to always open a fresh version
- root.Navigate(new System.Uri(baseUrl + "Cordova/UI/ImageCapture.xaml?dummy=" + Guid.NewGuid().ToString(), UriKind.Relative));
- });
- }
-
- /// <summary>
- /// Performs additional configuration of the recording application.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void NavigationService_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
- {
- ImageCapture imageCapture = e.Content as ImageCapture;
- if (imageCapture != null)
- {
- (Application.Current.RootVisual as PhoneApplicationFrame).Navigated -= NavigationService_Navigated;
-
- //imageCapture.Completed += this.Completed;
- //else if (this.Completed != null)
- //{
- // this.Completed(this, new AudioResult(TaskResult.Cancel));
- //}
- }
- }
- }
-}
\ No newline at end of file
diff --git a/templates/standalone/Plugins/UI/NotificationBox.xaml b/templates/standalone/Plugins/UI/NotificationBox.xaml
deleted file mode 100644
index 1ca5d5f..0000000
--- a/templates/standalone/Plugins/UI/NotificationBox.xaml
+++ /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.
--->
-<UserControl x:Class="WPCordovaClassLib.Cordova.UI.NotificationBox"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d"
- FontFamily="{StaticResource PhoneFontFamilyNormal}"
- FontSize="{StaticResource PhoneFontSizeNormal}"
- Foreground="{StaticResource PhoneForegroundBrush}"
- d:DesignHeight="800" d:DesignWidth="480" VerticalAlignment="Stretch">
-
- <Grid x:Name="LayoutRoot"
- Background="{StaticResource PhoneSemitransparentBrush}" VerticalAlignment="Stretch">
-
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
-
-
- <!--TitlePanel contains the name of the application and page title-->
- <StackPanel x:Name="TitlePanel"
- Grid.Row="0"
- Background="{StaticResource PhoneSemitransparentBrush}">
- <TextBlock x:Name="PageTitle"
- Text="Title"
- Margin="10,10"
- Style="{StaticResource PhoneTextTitle2Style}"/>
-
- <TextBlock x:Name="SubTitle"
- Text="Subtitle"
- TextWrapping="Wrap"
- Margin="10,10"
- Style="{StaticResource PhoneTextTitle3Style}"/>
-
- <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
- <StackPanel x:Name="ButtonPanel"
- Margin="10,10"
- Orientation="Horizontal"/>
- </ScrollViewer>
-
- </StackPanel>
- </Grid>
-</UserControl>
diff --git a/templates/standalone/Plugins/UI/NotificationBox.xaml.cs b/templates/standalone/Plugins/UI/NotificationBox.xaml.cs
deleted file mode 100644
index 50b2f2a..0000000
--- a/templates/standalone/Plugins/UI/NotificationBox.xaml.cs
+++ /dev/null
@@ -1,41 +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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-
-namespace WPCordovaClassLib.Cordova.UI
-{
- public partial class NotificationBox : UserControl
- {
- public NotificationBox()
- {
- InitializeComponent();
- }
- }
-}
diff --git a/templates/standalone/Plugins/UI/VideoCaptureTask.cs b/templates/standalone/Plugins/UI/VideoCaptureTask.cs
deleted file mode 100644
index def2a88..0000000
--- a/templates/standalone/Plugins/UI/VideoCaptureTask.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.IO;
-using System.Windows;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Tasks;
-
-namespace WPCordovaClassLib.Cordova.UI
-{
- /// <summary>
- /// Allows an application to launch the Video Recording application.
- /// Use this to allow users to record video from your application.
- /// </summary>
- public class VideoCaptureTask
- {
- /// <summary>
- /// Represents recorded video returned from a call to the Show method of
- /// a WPCordovaClassLib.Cordova.Controls.VideoCaptureTask object
- /// </summary>
- public class VideoResult : TaskEventArgs
- {
- /// <summary>
- /// Initializes a new instance of the VideoResult class.
- /// </summary>
- public VideoResult()
- { }
-
- /// <summary>
- /// Initializes a new instance of the VideoResult class
- /// with the specified Microsoft.Phone.Tasks.TaskResult.
- /// </summary>
- /// <param name="taskResult">Associated Microsoft.Phone.Tasks.TaskResult</param>
- public VideoResult(TaskResult taskResult)
- : base(taskResult)
- { }
-
- /// <summary>
- /// Gets the file name of the recorded Video.
- /// </summary>
- public Stream VideoFile { get; internal set; }
-
- /// <summary>
- /// Gets the stream containing the data for the recorded Video.
- /// </summary>
- public string VideoFileName { get; internal set; }
- }
-
- /// <summary>
- /// Occurs when a Video recording task is completed.
- /// </summary>
- public event EventHandler<VideoResult> Completed;
-
- /// <summary>
- /// Shows Video Recording application
- /// </summary>
- public void Show()
- {
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- var root = Application.Current.RootVisual as PhoneApplicationFrame;
-
- root.Navigated += new System.Windows.Navigation.NavigatedEventHandler(NavigationService_Navigated);
-
- string baseUrl = WPCordovaClassLib.Cordova.Commands.BaseCommand.GetBaseURL();
- // dummy parameter is used to always open a fresh version
- root.Navigate(new System.Uri(baseUrl + "CordovaLib/UI/VideoRecorder.xaml?dummy=" + Guid.NewGuid().ToString(), UriKind.Relative));
- });
- }
-
- /// <summary>
- /// Performs additional configuration of the recording application.
- /// </summary>
- private void NavigationService_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
- {
- if (!(e.Content is VideoRecorder)) return;
-
- (Application.Current.RootVisual as PhoneApplicationFrame).Navigated -= NavigationService_Navigated;
-
- VideoRecorder VideoRecorder = (VideoRecorder)e.Content;
-
- if (VideoRecorder != null)
- {
- VideoRecorder.Completed += this.Completed;
- }
- else if (this.Completed != null)
- {
- this.Completed(this, new VideoResult(TaskResult.Cancel));
- }
- }
-
- }
-}
diff --git a/templates/standalone/Plugins/UI/VideoRecorder.xaml b/templates/standalone/Plugins/UI/VideoRecorder.xaml
deleted file mode 100644
index c78fdb0..0000000
--- a/templates/standalone/Plugins/UI/VideoRecorder.xaml
+++ /dev/null
@@ -1,52 +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.
--->
-<phone:PhoneApplicationPage
- x:Class="WPCordovaClassLib.Cordova.UI.VideoRecorder"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
- xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="480"
- FontFamily="{StaticResource PhoneFontFamilyNormal}"
- FontSize="{StaticResource PhoneFontSizeNormal}"
- Foreground="{StaticResource PhoneForegroundBrush}"
- SupportedOrientations="Landscape" Orientation="LandscapeLeft"
- shell:SystemTray.IsVisible="False">
-
- <Canvas x:Name="LayoutRoot" Background="Transparent" Grid.ColumnSpan="1" Grid.Column="0">
-
- <Rectangle
- x:Name="viewfinderRectangle"
- Width="640"
- Height="480"
- HorizontalAlignment="Left"
- Canvas.Left="80"/>
-
- </Canvas>
-
- <phone:PhoneApplicationPage.ApplicationBar>
- <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" x:Name="PhoneAppBar" Opacity="0.0">
- <shell:ApplicationBarIconButton IconUri="/Images/appbar.feature.video.rest.png" Text="Record" x:Name="btnStartRecording" Click="StartRecording_Click" />
- <shell:ApplicationBarIconButton IconUri="/Images/appbar.save.rest.png" Text="Take" x:Name="btnTakeVideo" Click="TakeVideo_Click"/>
- </shell:ApplicationBar>
- </phone:PhoneApplicationPage.ApplicationBar>
-
-</phone:PhoneApplicationPage>
diff --git a/templates/standalone/Plugins/UI/VideoRecorder.xaml.cs b/templates/standalone/Plugins/UI/VideoRecorder.xaml.cs
deleted file mode 100644
index 6ab1cc3..0000000
--- a/templates/standalone/Plugins/UI/VideoRecorder.xaml.cs
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Windows.Media;
-using System.Windows.Navigation;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Shell;
-using Microsoft.Phone.Tasks;
-using VideoResult = WPCordovaClassLib.Cordova.UI.VideoCaptureTask.VideoResult;
-
-namespace WPCordovaClassLib.Cordova.UI
-{
- public partial class VideoRecorder : PhoneApplicationPage
- {
-
- #region Constants
-
- /// <summary>
- /// Caption for record button in ready state
- /// </summary>
- private const string RecordingStartCaption = "Record";
-
- /// <summary>
- /// Caption for record button in recording state
- /// </summary>
- private const string RecordingStopCaption = "Stop";
-
- /// <summary>
- /// Start record icon URI
- /// </summary>
- private const string StartIconUri = "/Images/appbar.feature.video.rest.png";
-
- /// <summary>
- /// Stop record icon URI
- /// </summary>
- private const string StopIconUri = "/Images/appbar.stop.rest.png";
-
- /// <summary>
- /// Folder to save video clips
- /// </summary>
- private const string LocalFolderName = "VideoCache";
-
- /// <summary>
- /// File name format
- /// </summary>
- private const string FileNameFormat = "Video-{0}.mp4";
-
- /// <summary>
- /// Temporary file name
- /// </summary>
- private const string defaultFileName = "NewVideoFile.mp4";
-
- #endregion
-
- #region Callbacks
- /// <summary>
- /// Occurs when a video recording task is completed.
- /// </summary>
- public event EventHandler<VideoResult> Completed;
-
- #endregion
-
- #region Fields
-
- /// <summary>
- /// Viewfinder for capturing video
- /// </summary>
- private VideoBrush videoRecorderBrush;
-
- /// <summary>
- /// Path to save video clip
- /// </summary>
- private string filePath;
-
- /// <summary>
- /// Source for capturing video.
- /// </summary>
- private CaptureSource captureSource;
-
- /// <summary>
- /// Video device
- /// </summary>
- private VideoCaptureDevice videoCaptureDevice;
-
- /// <summary>
- /// File sink so save recording video in Isolated Storage
- /// </summary>
- private FileSink fileSink;
-
- /// <summary>
- /// For managing button and application state
- /// </summary>
- private enum VideoState { Initialized, Ready, Recording, CameraNotSupported };
-
- /// <summary>
- /// Current video state
- /// </summary>
- private VideoState currentVideoState;
-
- /// <summary>
- /// Stream to return result
- /// </summary>
- private MemoryStream memoryStream;
-
- /// <summary>
- /// Recording result, dispatched back when recording page is closed
- /// </summary>
- private VideoResult result = new VideoResult(TaskResult.Cancel);
-
- #endregion
-
- /// <summary>
- /// Initializes components
- /// </summary>
- public VideoRecorder()
- {
- InitializeComponent();
-
- PhoneAppBar = (ApplicationBar)ApplicationBar;
- PhoneAppBar.IsVisible = true;
- btnStartRecording = ((ApplicationBarIconButton)ApplicationBar.Buttons[0]);
- btnTakeVideo = ((ApplicationBarIconButton)ApplicationBar.Buttons[1]);
- }
-
- /// <summary>
- /// Initializes the video recorder then page is loading
- /// </summary>
- protected override void OnNavigatedTo(NavigationEventArgs e)
- {
- base.OnNavigatedTo(e);
- this.InitializeVideoRecorder();
- }
-
- /// <summary>
- /// Disposes camera and media objects then leave the page
- /// </summary>
- protected override void OnNavigatedFrom(NavigationEventArgs e)
- {
- this.DisposeVideoRecorder();
-
- if (this.Completed != null)
- {
- this.Completed(this, result);
- }
- base.OnNavigatedFrom(e);
- }
-
- /// <summary>
- /// Handles TakeVideo button click
- /// </summary>
- private void TakeVideo_Click(object sender, EventArgs e)
- {
- this.result = this.SaveVideoClip();
- this.NavigateBack();
- }
-
- private void NavigateBack()
- {
- if (this.NavigationService.CanGoBack)
- {
- this.NavigationService.GoBack();
- }
- }
-
- /// <summary>
- /// Resaves video clip from temporary directory to persistent
- /// </summary>
- private VideoResult SaveVideoClip()
- {
- try
- {
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (string.IsNullOrEmpty(filePath) || (!isoFile.FileExists(filePath)))
- {
- return new VideoResult(TaskResult.Cancel);
- }
-
- string fileName = String.Format(FileNameFormat, Guid.NewGuid().ToString());
- string newPath = Path.Combine("/" + LocalFolderName + "/", fileName);
- isoFile.CopyFile(filePath, newPath);
- isoFile.DeleteFile(filePath);
-
- memoryStream = new MemoryStream();
- using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(newPath, FileMode.Open, isoFile))
- {
- fileStream.CopyTo(memoryStream);
- }
-
- VideoResult result = new VideoResult(TaskResult.OK);
- result.VideoFileName = newPath;
- result.VideoFile = this.memoryStream;
- result.VideoFile.Seek(0, SeekOrigin.Begin);
- return result;
- }
-
- }
- catch (Exception)
- {
- return new VideoResult(TaskResult.None);
- }
- }
-
- /// <summary>
- /// Updates the buttons on the UI thread based on current state.
- /// </summary>
- /// <param name="currentState">current UI state</param>
- private void UpdateUI(VideoState currentState)
- {
- Dispatcher.BeginInvoke(delegate
- {
- switch (currentState)
- {
- case VideoState.CameraNotSupported:
- btnStartRecording.IsEnabled = false;
- btnTakeVideo.IsEnabled = false;
- break;
-
- case VideoState.Initialized:
- btnStartRecording.Text = RecordingStartCaption;
- btnStartRecording.IconUri = new Uri(StartIconUri, UriKind.Relative);
- btnTakeVideo.IsEnabled = false;
- break;
-
- case VideoState.Ready:
- btnStartRecording.Text = RecordingStartCaption;
- btnStartRecording.IconUri = new Uri(StartIconUri, UriKind.Relative);
- btnTakeVideo.IsEnabled = true;
- break;
-
- case VideoState.Recording:
- btnStartRecording.Text = RecordingStopCaption;
- btnStartRecording.IconUri = new Uri(StopIconUri, UriKind.Relative);
- btnTakeVideo.IsEnabled = false;
- break;
-
- default:
- break;
- }
- currentVideoState = currentState;
- });
- }
-
- /// <summary>
- /// Initializes VideoRecorder
- /// </summary>
- public void InitializeVideoRecorder()
- {
- if (captureSource == null)
- {
- captureSource = new CaptureSource();
- fileSink = new FileSink();
- videoCaptureDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();
-
- if (videoCaptureDevice != null)
- {
- videoRecorderBrush = new VideoBrush();
- videoRecorderBrush.SetSource(captureSource);
- viewfinderRectangle.Fill = videoRecorderBrush;
- captureSource.Start();
- this.UpdateUI(VideoState.Initialized);
- }
- else
- {
- this.UpdateUI(VideoState.CameraNotSupported);
- }
- }
- }
-
- /// <summary>
- /// Sets recording state: start recording
- /// </summary>
- private void StartVideoRecording()
- {
- try
- {
- if ((captureSource.VideoCaptureDevice != null) && (captureSource.State == CaptureState.Started))
- {
- captureSource.Stop();
- fileSink.CaptureSource = captureSource;
- filePath = System.IO.Path.Combine("/" + LocalFolderName + "/", defaultFileName);
-
- using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
- {
- if (!isoFile.DirectoryExists(LocalFolderName))
- {
- isoFile.CreateDirectory(LocalFolderName);
- }
-
- if (isoFile.FileExists(filePath))
- {
- isoFile.DeleteFile(filePath);
- }
- }
-
- fileSink.IsolatedStorageFileName = filePath;
- }
-
- if (captureSource.VideoCaptureDevice != null
- && captureSource.State == CaptureState.Stopped)
- {
- captureSource.Start();
- }
- this.UpdateUI(VideoState.Recording);
- }
- catch (Exception)
- {
- this.result = new VideoResult(TaskResult.None);
- this.NavigateBack();
- }
- }
-
- /// <summary>
- /// Sets the recording state: stop recording
- /// </summary>
- private void StopVideoRecording()
- {
- try
- {
- if ((captureSource.VideoCaptureDevice != null) && (captureSource.State == CaptureState.Started))
- {
- captureSource.Stop();
- fileSink.CaptureSource = null;
- fileSink.IsolatedStorageFileName = null;
- this.StartVideoPreview();
- }
- }
- catch (Exception)
- {
- this.result = new VideoResult(TaskResult.None);
- this.NavigateBack();
- }
- }
-
- /// <summary>
- /// Sets the recording state: display the video on the viewfinder.
- /// </summary>
- private void StartVideoPreview()
- {
- try
- {
- if ((captureSource.VideoCaptureDevice != null) && (captureSource.State == CaptureState.Stopped))
- {
- videoRecorderBrush.SetSource(captureSource);
- viewfinderRectangle.Fill = videoRecorderBrush;
- captureSource.Start();
- this.UpdateUI(VideoState.Ready);
- }
- }
- catch (Exception)
- {
- this.result = new VideoResult(TaskResult.None);
- this.NavigateBack();
- }
- }
-
- /// <summary>
- /// Starts video recording
- /// </summary>
- private void StartRecording_Click(object sender, EventArgs e)
- {
- if (currentVideoState == VideoState.Recording)
- {
- this.StopVideoRecording();
- }
- else
- {
- this.StartVideoRecording();
- }
- }
-
- /// <summary>
- /// Releases resources
- /// </summary>
- private void DisposeVideoRecorder()
- {
- if (captureSource != null)
- {
- if ((captureSource.VideoCaptureDevice != null) && (captureSource.State == CaptureState.Started))
- {
- captureSource.Stop();
- }
- captureSource = null;
- videoCaptureDevice = null;
- fileSink = null;
- videoRecorderBrush = null;
- }
- }
-
- }
-}
\ No newline at end of file
diff --git a/templates/standalone/Properties/AppManifest.xml b/templates/standalone/Properties/AppManifest.xml
deleted file mode 100644
index 877ea4b..0000000
--- a/templates/standalone/Properties/AppManifest.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
->
- <Deployment.Parts>
- </Deployment.Parts>
-</Deployment>
diff --git a/templates/standalone/Properties/AssemblyInfo.cs b/templates/standalone/Properties/AssemblyInfo.cs
deleted file mode 100644
index 3f5dc5a..0000000
--- a/templates/standalone/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Resources;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("CordovaAppProj")]
-[assembly: AssemblyDescription("2.0.0.0")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Apache Cordova")]
-[assembly: AssemblyProduct("CordovaAppProj")]
-[assembly: AssemblyCopyright("Copyright © Apache Cordova 2013")]
-[assembly: AssemblyTrademark("Apache Cordova")]
-[assembly: AssemblyCulture("")]
-
-[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("9e27b972-0825-4386-ba17-63c695262c3d")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/templates/standalone/Properties/WMAppManifest.xml b/templates/standalone/Properties/WMAppManifest.xml
deleted file mode 100644
index 96332e1..0000000
--- a/templates/standalone/Properties/WMAppManifest.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.1">
- <App xmlns="" ProductID="{$guid1$}" Title="$safeprojectname$"
- RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal"
- Author="$safeprojectname$ author"
- BitsPerPixel="32"
- Description="Apache Cordova for Windows Phone 7"
- Publisher="$safeprojectname$">
-
- <IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath>
- <Capabilities>
- <Capability Name="ID_CAP_IDENTITY_DEVICE" />
- <Capability Name="ID_CAP_IDENTITY_USER" />
- <Capability Name="ID_CAP_LOCATION" />
- <Capability Name="ID_CAP_NETWORKING" />
- <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
- <Capability Name="ID_CAP_APPOINTMENTS"/>
- <Capability Name="ID_CAP_CONTACTS"/>
- <Capability Name="ID_CAP_ISV_CAMERA"/>
- <Capability Name="ID_CAP_MEDIALIB"/>
- <Capability Name="ID_CAP_MICROPHONE"/>
- <Capability Name="ID_CAP_PHONEDIALER"/>
- <Capability Name="ID_CAP_PUSH_NOTIFICATION"/>
- <Capability Name="ID_CAP_SENSORS"/>
- <Capability Name="ID_HW_FRONTCAMERA"/>
- </Capabilities>
-
- <Tasks>
- <DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
- </Tasks>
- <Tokens>
- <PrimaryToken TokenID="$safeprojectname$Token" TaskName="_default">
- <TemplateType5>
- <BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI>
- <Count>0</Count>
- <Title>$safeprojectname$</Title>
- </TemplateType5>
- </PrimaryToken>
- </Tokens>
- </App>
-</Deployment>
\ No newline at end of file
diff --git a/templates/standalone/README.md b/templates/standalone/README.md
deleted file mode 100644
index 6374253..0000000
--- a/templates/standalone/README.md
+++ /dev/null
@@ -1,13 +0,0 @@
-Project Template
-===
-
-This project template needs to be built to be installed.
-
-
-This template includes the full source code for Windows Phone 7
-
-
-In order to build this template in Visual Studio Express for Windows Phone 7 :
-
-1. Open the solution file in Visual Studio
-2. Choose File->Export Template and follow the directions.
\ No newline at end of file
diff --git a/templates/standalone/SplashScreenImage.jpg b/templates/standalone/SplashScreenImage.jpg
deleted file mode 100644
index d35501d..0000000
--- a/templates/standalone/SplashScreenImage.jpg
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/VERSION b/templates/standalone/VERSION
deleted file mode 100644
index c8e38b6..0000000
--- a/templates/standalone/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2.9.0
diff --git a/templates/standalone/config.xml b/templates/standalone/config.xml
deleted file mode 100644
index 6ef524c..0000000
--- a/templates/standalone/config.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?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.
-#
--->
-<widget>
-
- <features>
- <feature name="Device">
- <param name="wp-package" value="Device" onload="false"/>
- </feature>
- <feature name="Logger">
- <param name="wp-package" value="Logger"/>
- </feature>
- <feature name="Compass">
- <param name="wp-package" value="Compass" />
- </feature>
- <feature name="Accelerometer">
- <param name="wp-package" value="Accelerometer"/>
- </feature>
- <feature name="Camera">
- <param name="wp-package" value="Camera"/>
- </feature>
- <feature name="NetworkStatus">
- <param name="wp-package" value="NetworkStatus"/>
- </feature>
- <feature name="Contacts">
- <param name="wp-package" value="Contacts"/>
- </feature>
- <feature name="DebugConsole">
- <param name="wp-package" value="DebugConsole"/>
- </feature>
- <feature name="Echo">
- <param name="wp-package" value="Echo"/>
- </feature>
- <feature name="File">
- <param name="wp-package" value="File"/>
- </feature>
- <feature name="FileTransfer">
- <param name="wp-package" value="FileTransfer"/>
- </feature>
- <feature name="Geolocation">
- <param name="wp-package" value="Geolocation"/>
- </feature>
- <feature name="Geolocation">
- <param name="wp-package" value="Geolocation"/>
- </feature>
- <feature name="Media">
- <param name="wp-package" value="Media"/>
- </feature>
- <feature name="Capture">
- <param name="wp-package" value="Capture"/>
- </feature>
- <feature name="SplashScreen">
- <param name="wp-package" value="SplashScreen"/>
- </feature>
- <feature name="Battery">
- <param name="wp-package" value="Battery"/>
- </feature>
- <feature name="Globalization">
- <param name="wp-package" value="Globalization"/>
- </feature>
- <feature name="InAppBrowser">
- <param name="wp-package" value="InAppBrowser"/>
- </feature>
- </features>
-
-
- <access origin="*"/>
-
-</widget>
diff --git a/templates/standalone/cordova/build.bat b/templates/standalone/cordova/build.bat
deleted file mode 100644
index b48598a..0000000
--- a/templates/standalone/cordova/build.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST %full_path%lib\build.js (
- cscript "%full_path%lib\build.js" %* //nologo
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find 'build.js' in cordova/lib, aborting...>&2
- EXIT /B 1
-)
\ No newline at end of file
diff --git a/templates/standalone/cordova/clean.bat b/templates/standalone/cordova/clean.bat
deleted file mode 100644
index 1bafe1b..0000000
--- a/templates/standalone/cordova/clean.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST %full_path%lib\clean.js (
- cscript "%full_path%lib\clean.js" %* //nologo
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find 'clean.js' in cordova/lib, aborting...>&2
- EXIT /B 1
-)
\ No newline at end of file
diff --git a/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy.sln b/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy.sln
deleted file mode 100644
index 3305276..0000000
--- a/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CordovaDeploy", "CordovaDeploy\CordovaDeploy.csproj", "{E752165B-AF59-4FF0-8601-A2A69FE09E0E}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x86 = Debug|x86
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {E752165B-AF59-4FF0-8601-A2A69FE09E0E}.Debug|x86.ActiveCfg = Debug|x86
- {E752165B-AF59-4FF0-8601-A2A69FE09E0E}.Debug|x86.Build.0 = Debug|x86
- {E752165B-AF59-4FF0-8601-A2A69FE09E0E}.Release|x86.ActiveCfg = Release|x86
- {E752165B-AF59-4FF0-8601-A2A69FE09E0E}.Release|x86.Build.0 = Release|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy/CordovaDeploy.csproj b/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy/CordovaDeploy.csproj
deleted file mode 100644
index fb9949f..0000000
--- a/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy/CordovaDeploy.csproj
+++ /dev/null
@@ -1,79 +0,0 @@
-<?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.
--->
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{E752165B-AF59-4FF0-8601-A2A69FE09E0E}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>CordovaDeploy</RootNamespace>
- <AssemblyName>CordovaDeploy</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <TargetFrameworkProfile>Client</TargetFrameworkProfile>
- <FileAlignment>512</FileAlignment>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
- <PlatformTarget>x86</PlatformTarget>
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
- <PlatformTarget>x86</PlatformTarget>
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="Microsoft.Smartdevice.Connectivity, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>C:\Program Files (x86)\Common Files\microsoft shared\Phone Tools\CoreCon\10.0\Bin\Microsoft.Smartdevice.Connectivity.dll</HintPath>
- </Reference>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Program.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
diff --git a/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy/Program.cs b/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy/Program.cs
deleted file mode 100644
index 2e70187..0000000
--- a/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy/Program.cs
+++ /dev/null
@@ -1,235 +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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.SmartDevice.Connectivity;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.IO;
-using System.Xml.XPath;
-using System.Xml;
-using System.Xml.Linq;
-
-
-namespace CordovaDeploy
-{
-
- class DeployTool
- {
-
- static void Usage()
- {
- Log("Usage: CordovaDeploy [ -devices BuildOutputPath -d:DeviceIndex ]");
- Log(" -devices : lists the devices and exits");
- Log(" BuildOutputPath : path to the built application, typically Bin/Debug/ or Bin/Release/");
- Log(" -d : index of the device to deploy, default is 0 ");
- Log("examples:");
- Log(" CordovaDeploy -devices");
- Log(" CordovaDeploy Bin/Debug");
- Log(" CordovaDeploy Bin/Release -d:1");
-
- }
-
- static void ReadWait()
- {
- //Console.WriteLine("\nPress ENTER to continue...");
- //Console.Read();
- }
-
- static void Log(string msg, bool error = false)
- {
- Debug.WriteLine(msg);
- if (error)
- {
- Console.Error.WriteLine(msg);
- }
- else
- {
- Console.Out.WriteLine(msg);
- }
- }
-
- static Guid ReadAppId(string root)
- {
- Guid appID = Guid.Empty;
- string manifestFilePath = root + @"\Properties\WMAppManifest.xml";
-
- if (File.Exists(manifestFilePath))
- {
- XDocument xdoc = XDocument.Load(manifestFilePath);
- var appNode = xdoc.Root.Descendants("App").FirstOrDefault();
- if (appNode != null)
- {
- string guidStr = appNode.Attribute("ProductID").Value;
- appID = new Guid(guidStr);
- }
- else
- {
- Log(string.Format("Unable to find appID, expected to find an App.ProductID property defined in the file {0}", manifestFilePath), true);
- }
- }
- else
- {
- Log(string.Format("Error: the file {0} does not exist", manifestFilePath), true);
- }
-
-
- return appID;
- }
-
-
-
- static void ListDevices()
- {
- // Get CoreCon WP7 SDK
- DatastoreManager dsmgrObj = new DatastoreManager(1033);
- Platform WP7SDK = dsmgrObj.GetPlatforms().Single(p => p.Name == "Windows Phone 7");
- Collection<Device> devices = WP7SDK.GetDevices();
- for (int index = 0; index < devices.Count; index++)
- {
- Device d = devices[index];
- string info = string.Format("{0} : {1} : {2}", index.ToString(), d.Id, d.Name);
- Log(info);
- }
- }
-
- static void Main(string[] args)
- {
- int deviceIndex = 0;
-
- string iconFilePath = "";
- string xapFilePath = "";
- Guid appID = Guid.Empty;
-
- string root = Directory.GetCurrentDirectory();
-
- if (args.Length < 1)
- {
- Usage();
- ReadWait();
- return;
- }
- else if (args[0] == "-devices")
- {
- ListDevices();
- return;
- }
- else if (args.Length > 1 && args[1].StartsWith("-d:"))
- {
- deviceIndex = int.Parse(args[1].Substring(3));
- }
-
-
- if (Directory.Exists(args[0]))
- {
- DirectoryInfo info = new DirectoryInfo(args[0]);
- root = info.FullName;
- }
-
- appID = ReadAppId(root);
- if (appID == Guid.Empty)
- {
- // Logging of errors is done in ReadAppId
- return;
- }
-
- if (File.Exists(root + @"\ApplicationIcon.png"))
- {
- iconFilePath = root + @"\ApplicationIcon.png";
- }
- else
- {
- Log(string.Format("Error: could not find application icon at {0}", root + @"\ApplicationIcon.png"), true);
- ReadWait();
- return;
- }
-
- try {
- xapFilePath = Directory.GetFiles(root + @"\Bin\Debug", "*.xap").FirstOrDefault();
- } catch (DirectoryNotFoundException e) {
- try {
- xapFilePath = Directory.GetFiles(root + @"\Bin\Release", "*.xap").FirstOrDefault();
- } catch (DirectoryNotFoundException ex) {
- Log(string.Format("Error: could not find project build directoy in {0}", root), true);
- Log("make sure your app has been successfully built before deploying.", true);
- }
- }
-
- if (string.IsNullOrEmpty(xapFilePath))
- {
- Log(string.Format("Error: could not find application .xap in folder {0}", root), true);
- ReadWait();
- return;
- }
-
-
- // Get CoreCon WP7 SDK
- DatastoreManager dsmgrObj = new DatastoreManager(1033);
- Collection<Platform> WP7SDKs = dsmgrObj.GetPlatforms();
- Platform WP7SDK = dsmgrObj.GetPlatforms().Single(p => p.Name == "Windows Phone 7");
-
- Collection<Device> devices = null;
-
- devices = WP7SDK.GetDevices();
-
- //// Get Emulator / Device
- Device WP7Device = devices[deviceIndex];
-
- if (WP7Device != null)
- {
- RemoteApplication app;
- bool isConnected = WP7Device.IsConnected();
-
- Debug.WriteLine(WP7Device.ToString());
-
- if (!isConnected)
- {
- try
- {
- WP7Device.Connect();
- }
- catch (Exception ex)
- {
- Log("Error: " + ex.Message, true);
- ReadWait();
- return;
- }
- }
-
- if (WP7Device.IsApplicationInstalled(appID))
- {
- Log("Uninstalling XAP from " + WP7Device.Name);
- app = WP7Device.GetApplication(appID);
- app.Uninstall();
- }
-
- Log("Installing app on " + WP7Device.Name);
- app = WP7Device.InstallApplication(appID, appID, "NormalApp", iconFilePath, xapFilePath);
-
- Log("Launching app on " + WP7Device.Name);
- app.Launch();
-
- ReadWait();
- }
- }
- }
-}
diff --git a/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy/Properties/AssemblyInfo.cs b/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy/Properties/AssemblyInfo.cs
deleted file mode 100644
index 3c26c87..0000000
--- a/templates/standalone/cordova/lib/CordovaDeploy/CordovaDeploy/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("CordovaDeploy")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("CordovaDeploy")]
-[assembly: AssemblyCopyright("Copyright © 2012")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("256b11aa-d4bb-48cf-8024-7c040421fa8d")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/templates/standalone/cordova/lib/build.js b/templates/standalone/cordova/lib/build.js
deleted file mode 100644
index 1375c54..0000000
--- a/templates/standalone/cordova/lib/build.js
+++ /dev/null
@@ -1,194 +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 fso = WScript.CreateObject('Scripting.FileSystemObject');
-var wscript_shell = WScript.CreateObject("WScript.Shell");
-
-var args = WScript.Arguments;
-
-// working dir
-var ROOT = WScript.ScriptFullName.split('\\cordova\\lib\\build.js').join('');
-
-// help/usage function
-function Usage() {
- Log("");
- Log("Usage: build [ --debug | --release ]");
- Log(" --help : Displays this dialog.");
- Log(" --debug : Cleans and builds project in debug mode.");
- Log(" --release : Cleans and builds project in release mode.");
- Log("examples:");
- Log(" build ");
- Log(" build --debug");
- Log(" build --release");
- Log("");
-}
-
-// logs messaged to stdout and stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-// executes a commmand in the shell
-function exec_verbose(command) {
- //Log("Command: " + command);
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status == 0) {
- //Wait a little bit so we're not super looping
- WScript.sleep(100);
- //Print any stdout output from the script
- if (!oShell.StdOut.AtEndOfStream) {
- var line = oShell.StdOut.ReadLine();
- Log(line);
- }
- }
- //Check to make sure our scripts did not encounter an error
- if (!oShell.StdErr.AtEndOfStream) {
- var line = oShell.StdErr.ReadAll();
- Log(line, true);
- WScript.Quit(2);
- }
-}
-
-// checks to see if a .csproj file exists in the project root
-function is_cordova_project(path) {
- if (fso.FolderExists(path)) {
- var proj_folder = fso.GetFolder(path);
- var proj_files = new Enumerator(proj_folder.Files);
- for (;!proj_files.atEnd(); proj_files.moveNext()) {
- if (fso.GetExtensionName(proj_files.item()) == 'csproj') {
- return true;
- }
- }
- }
- return false;
-}
-
-function get_solution_name(path) {
- if (fso.FolderExists(path)) {
- var proj_folder = fso.GetFolder(path);
- var proj_files = new Enumerator(proj_folder.Files);
- for (;!proj_files.atEnd(); proj_files.moveNext()) {
- if (fso.GetExtensionName(proj_files.item()) == 'sln') {
- return proj_files.item();
- }
- }
- }
- return null;
-}
-
-// builds the project and .xap in release mode
-function build_xap_release(path) {
- Log("Building Cordova-WP7 Project:");
- Log("\tConfiguration : Release");
- Log("\tDirectory : " + path);
-
- wscript_shell.CurrentDirectory = path;
- exec_verbose('msbuild ' + get_solution_name(path) + ' /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo /p:Configuration=Release');
-
- // check if file xap was created
- if (fso.FolderExists(path + '\\Bin\\Release')) {
- var out_folder = fso.GetFolder(path + '\\Bin\\Release');
- var out_files = new Enumerator(out_folder.Files);
- for (;!out_files.atEnd(); out_files.moveNext()) {
- if (fso.GetExtensionName(out_files.item()) == 'xap') {
- Log("BUILD SUCCESS.");
- return;
- }
- }
- }
- Log('ERROR: MSBuild failed to create .xap when building cordova-wp7 for release.', true);
- WScript.Quit(2);
-}
-
-// builds the project and .xap in debug mode
-function build_xap_debug(path) {
- Log("Building Cordova-WP7 Project:");
- Log("\tConfiguration : Debug");
- Log("\tDirectory : " + path);
-
- wscript_shell.CurrentDirectory = path;
- exec_verbose('msbuild ' + get_solution_name(path) + ' /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo /p:Configuration=Debug');
-
- // check if file xap was created
- if (fso.FolderExists(path + '\\Bin\\Debug')) {
- var out_folder = fso.GetFolder(path + '\\Bin\\Debug');
- var out_files = new Enumerator(out_folder.Files);
- for (;!out_files.atEnd(); out_files.moveNext()) {
- if (fso.GetExtensionName(out_files.item()) == 'xap') {
- Log("BUILD SUCCESS.");
- return;
- }
- }
- }
- Log('ERROR: MSBuild failed to create .xap when building cordova-wp7 for debugging.', true);
- WScript.Quit(2);
-}
-
-
-Log("");
-
-if (args.Count() > 0) {
- // support help flags
- if (args(0) == "--help" || args(0) == "/?" ||
- args(0) == "help" || args(0) == "-help" || args(0) == "/help") {
- Usage();
- WScript.Quit(2);
- }
- else if (args.Count() > 1) {
- Log("Error: Too many arguments.", true);
- Usage();
- WScript.Quit(2);
- }
- else if (fso.FolderExists(ROOT)) {
- if (!is_cordova_project(ROOT)) {
- Log('Error: .csproj file not found in ' + ROOT, true);
- Log('could not build project.', true);
- WScript.Quit(2);
- }
-
- if (args(0) == "--debug" || args(0) == "-d") {
- exec_verbose('%comspec% /c ' + ROOT + '\\cordova\\clean');
- build_xap_debug(ROOT);
- }
- else if (args(0) == "--release" || args(0) == "-r") {
- exec_verbose('%comspec% /c ' + ROOT + '\\cordova\\clean');
- build_xap_release(ROOT);
- }
- else {
- Log("Error: \"" + args(0) + "\" is not recognized as a build option", true);
- Usage();
- WScript.Quit(2);
- }
- }
- else {
- Log("Error: Project directory not found,", true);
- Usage();
- WScript.Quit(2);
- }
-}
-else {
- Log("WARNING: [ --debug | --release ] not specified, defaulting to debug...");
- build_xap_debug(ROOT);
-}
diff --git a/templates/standalone/cordova/lib/clean.js b/templates/standalone/cordova/lib/clean.js
deleted file mode 100644
index f5bdbfc..0000000
--- a/templates/standalone/cordova/lib/clean.js
+++ /dev/null
@@ -1,88 +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 fso = WScript.CreateObject('Scripting.FileSystemObject');
-var wscript_shell = WScript.CreateObject("WScript.Shell");
-var args = WScript.Arguments;
-// working dir
-var ROOT = WScript.ScriptFullName.split('\\cordova\\lib\\clean.js').join('');
-
-
-// help function
-function Usage() {
- Log("");
- Log("Usage: clean");
- Log("examples:");
- Log(" clean");
- Log(" - deletes all generated files in project");
- Log("");
-}
-
-// logs to stdout or stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-// cleans any generated files in the cordova project
-function clean_project(path) {
- delete_if_exists(path + "\\obj");
- delete_if_exists(path + "\\Bin");
-}
-
-// deletes the path element if it exists
-function delete_if_exists(path) {
- if (fso.FolderExists(path)) {
- fso.DeleteFolder(path);
- }
- else if (fso.FileExists(path)) {
- fso.DeleteFile(path);
- }
-}
-
-
-if (args.Count() > 0) {
- // support help flags
- if (args(0) == "--help" || args(0) == "/?" ||
- args(0) == "help" || args(0) == "-help" || args(0) == "/help") {
- Usage();
- WScript.Quit(2);
- }
- else {
- Log("Error: \"" + args(0) + "\" is not recognized as a valid option", true);
- Usage();
- WScript.Quit(2);
- }
-}
-else {
- if (fso.FolderExists(ROOT)) {
- Log("Cleaning cordova project...");
- clean_project(ROOT);
- }
- else {
- Log("Error: Project directory not found,", true);
- Usage();
- WScript.Quit(2);
- }
-}
\ No newline at end of file
diff --git a/templates/standalone/cordova/lib/deploy.js b/templates/standalone/cordova/lib/deploy.js
deleted file mode 100644
index 448fa78..0000000
--- a/templates/standalone/cordova/lib/deploy.js
+++ /dev/null
@@ -1,337 +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 fso = WScript.CreateObject('Scripting.FileSystemObject');
-var wscript_shell = WScript.CreateObject("WScript.Shell");
-
-var args = WScript.Arguments;
-// working dir
-var ROOT = WScript.ScriptFullName.split('\\cordova\\lib\\deploy.js').join('');
- // path to CordovaDeploy.exe
-var CORDOVA_DEPLOY_EXE = '\\cordova\\lib\\CordovaDeploy\\CordovaDeploy\\bin\\Debug\\CordovaDeploy.exe';
- // path to CordovaDeploy
-var CORDOVA_DEPLOY = '\\cordova\\lib\\CordovaDeploy';
-//device_id for targeting specific device
-var device_id;
-
-//build types
-var NONE = 0,
- DEBUG = 1,
- RELEASE = 2,
- NO_BUILD = 3;
-var build_type = NONE;
-
-//deploy tpyes
-var NONE = 0,
- EMULATOR = 1,
- DEVICE = 2,
- TARGET = 3;
-var deploy_type = NONE;
-
-
-// help function
-function Usage() {
- Log("");
- Log("Usage:");
- Log(" run [ --device || --emulator || --target=<id> ] ");
- Log(" [ --debug || --release || --nobuild ]");
- Log(" --device : Deploys and runs the project on the connected device.");
- Log(" --emulator : [DEFAULT] Deploys and runs the project on an emulator.");
- Log(" --target=<id> : Deploys and runs the project on the specified target.");
- Log(" --debug : [DEFAULT] Builds project in debug mode.");
- Log(" --release : Builds project in release mode.");
- Log(" --nobuild : Ueses pre-built xap, or errors if project is not built.");
- Log("Examples:");
- Log(" run");
- Log(" run --emulator");
- Log(" run --device");
- Log(" run --target=7988B8C3-3ADE-488d-BA3E-D052AC9DC710");
- Log(" run --device --release");
- Log(" run --emulator --debug");
- Log("");
-}
-
-// log to stdout or stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-var ForReading = 1, ForWriting = 2, ForAppending = 8;
-var TristateUseDefault = 2, TristateTrue = 1, TristateFalse = 0;
-
-
-// executes a commmand in the shell
-function exec(command) {
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status == 0) {
- WScript.sleep(100);
- }
-}
-
-// executes a commmand in the shell
-function exec_verbose(command) {
- //Log("Command: " + command);
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status == 0) {
- //Wait a little bit so we're not super looping
- WScript.sleep(100);
- //Print any stdout output from the script
- if (!oShell.StdOut.AtEndOfStream) {
- var line = oShell.StdOut.ReadAll();
- Log(line);
- }
- }
- //Check to make sure our scripts did not encounter an error
- if (!oShell.StdErr.AtEndOfStream) {
- var line = oShell.StdErr.ReadAll();
- Log(line, true);
- WScript.Quit(2);
- }
-}
-
-// returns the contents of a file
-function read(filename) {
- if (fso.FileExists(filename)) {
- var f=fso.OpenTextFile(filename, 1,2);
- var s=f.ReadAll();
- f.Close();
- return s;
- }
- else {
- Log('Cannot read non-existant file : ' + filename, true);
- WScript.Quit(2);
- }
- return null;
-}
-
-// builds the CordovaDeploy.exe if it does not already exist
-function cordovaDeploy(path) {
- if (fso.FileExists(path + CORDOVA_DEPLOY_EXE)) {
- return;
- }
-
- Log('CordovaDeploy.exe not found, attempting to build CordovaDeploy.exe...');
-
- // build CordovaDeploy.exe
- if (fso.FolderExists(path + '\\cordova') && fso.FolderExists(path + CORDOVA_DEPLOY) &&
- fso.FileExists(path + CORDOVA_DEPLOY + '\\CordovaDeploy.sln')) {
- // delete any previously generated files
- if (fso.FolderExists(path + CORDOVA_DEPLOY + '\\CordovaDeploy\\obj')) {
- fso.DeleteFolder(path + CORDOVA_DEPLOY + '\\CordovaDeploy\\obj');
- }
- if (fso.FolderExists(path + CORDOVA_DEPLOY + '\\CordovaDeploy\\Bin')) {
- fso.DeleteFolder(path + CORDOVA_DEPLOY + '\\CordovaDeploy\\Bin');
- }
- exec_verbose('msbuild ' + path + CORDOVA_DEPLOY + '\\CordovaDeploy.sln');
-
- if (fso.FileExists(path + CORDOVA_DEPLOY_EXE)) {
- Log('CordovaDeploy.exe compiled, SUCCESS.');
- }
- else {
- Log('ERROR: MSBUILD FAILED TO COMPILE CordovaDeploy.exe', true);
- WScript.Quit(2);
- }
- }
- else {
- Log('ERROR: CordovaDeploy.sln not found, unable to compile CordovaDeploy tool.', true);
- WScript.Quit(2);
- }
-}
-
-// launches project on device
-function device(path)
-{
- cordovaDeploy(path);
- if (fso.FileExists(path + CORDOVA_DEPLOY_EXE)) {
- Log('Deploying to device ...');
- //TODO: get device ID from list-devices and deploy to first one
- exec_verbose('%comspec% /c ' + path + CORDOVA_DEPLOY_EXE + ' ' + path + ' -d:0');
- }
- else
- {
- Log('Error: Failed to find CordovaDeploy.exe in ' + path, true);
- Log('DEPLOY FAILED.', true);
- WScript.Quit(2);
- }
-}
-
-// launches project on emulator
-function emulator(path)
-{
- cordovaDeploy(path);
- if (fso.FileExists(path + CORDOVA_DEPLOY_EXE)) {
- Log('Deploying to emulator ...');
- //TODO: get emulator ID from list-emulators and deploy to first one
- exec_verbose('%comspec% /c ' + path + CORDOVA_DEPLOY_EXE + ' ' + path + ' -d:1');
- }
- else
- {
- Log('Error: Failed to find CordovaDeploy.exe in ' + path, true);
- Log('DEPLOY FAILED.', true);
- WScript.Quit(2);
- }
-}
-
-// builds and launches the project on the specified target
-function target(path) {
- if (!fso.FileExists(path + CORDOVA_DEPLOY_EXE)) {
- cordovaDeploy(path);
- }
- wscript_shell.CurrentDirectory = path + CORDOVA_DEPLOY + '\\CordovaDeploy\\bin\\Debug';
- var cmd = 'CordovaDeploy -devices';
- var out = wscript_shell.Exec(cmd);
- while(out.Status == 0) {
- WScript.Sleep(100);
- }
- if (!out.StdErr.AtEndOfStream) {
- var line = out.StdErr.ReadAll();
- Log("Error calling CordovaDeploy : ", true);
- Log(line, true);
- WScript.Quit(2);
- }
- else {
- if (!out.StdOut.AtEndOfStream) {
- var line = out.StdOut.ReadAll();
- var targets = line.split('\r\n');
- var check_id = new RegExp(device_id);
- for (target in targets) {
- if (targets[target].match(check_id)) {
- //TODO: this only gets single digit index, account for device index of 10+?
- var index = targets[target].substr(0,1);
- exec_verbose(path + CORDOVA_DEPLOY_EXE + ' ' + path + ' -d:' + index);
- return;
- }
- }
- Log('Error : target ' + device_id + ' was not found.', true);
- Log('DEPLOY FAILED.', true);
- WScript.Quit(2);
- }
- else {
- Log('Error : CordovaDeploy Failed to find any devices', true);
- Log('DEPLOY FAILED.', true);
- WScript.Quit(2);
- }
- }
-}
-
-function build(path) {
- switch (build_type) {
- case DEBUG :
- exec_verbose('%comspec% /c ' + ROOT + '\\cordova\\build --debug');
- break;
- case RELEASE :
- exec_verbose('%comspec% /c ' + ROOT + '\\cordova\\build --release');
- break;
- case NO_BUILD :
- break;
- case NONE :
- Log("WARNING: [ --debug | --release | --nobuild ] not specified, defaulting to --debug.");
- exec_verbose('%comspec% /c ' + ROOT + '\\cordova\\build --debug');
- break;
- default :
- Log("Build option not recognized: " + build_type, true);
- WScript.Quit(2);
- break;
- }
-}
-
-function run(path) {
- switch(deploy_type) {
- case EMULATOR :
- build(path);
- emulator(path);
- break;
- case DEVICE :
- build(path);
- device(path);
- break;
- case TARGET :
- build(path);
- target(path);
- break;
- case NONE :
- Log("WARNING: [ --target=<ID> | --emulator | --device ] not specified, defaulting to --emulator");
- build(path);
- emulator(path);
- break;
- default :
- Log("Deploy option not recognized: " + deploy_type, true);
- WScript.Quit(2);
- break;
- }
-}
-
-
-if (args.Count() > 0) {
- // limit args
- if (args.Count() > 2) {
- Log('Error: Too many arguments.', true);
- Usage();
- WScript.Quit(2);
- }
- else if (fso.FolderExists(ROOT)) {
- // parse arguments
- for(var i = 0; i < args.Count(); i++) {
- if (args(i) == "--release") {
- build_type = RELEASE;
- }
- else if (args(i) == "--debug") {
- build_type = DEBUG;
- }
- else if (args(i) == "--nobuild") {
- build_type = NO_BUILD;
- }
- else if (args(i) == "--emulator" || args(i) == "-e") {
- deploy_type = EMULATOR;
- }
- else if (args(i) == "--device" || args(i) == "-d") {
- deploy_type = DEVICE;
- }
- else if (args(i).substr(0,9) == "--target=") {
- device_id = args(i).split("--target=").join("");
- deploy_type = TARGET;
- }
- // support help flags
- else if (args(0) == "--help" || args(0) == "/?" ||
- args(0) == "help" || args(0) == "-help" || args(0) == "/help") {
- Usage();
- WScript.Quit(2);
- }
- else {
- Log('Error: \"' + args(0) + '\" is not recognized as a deploy option', true);
- Usage();
- WScript.Quit(2);
- }
- }
- }
- else {
- Log('Error: Project directory not found,', true);
- Usage();
- WScript.Quit(2);
- }
-}
-
-// Finally run the project!
-run(ROOT);
\ No newline at end of file
diff --git a/templates/standalone/cordova/lib/install-device.bat b/templates/standalone/cordova/lib/install-device.bat
deleted file mode 100644
index 9507c36..0000000
--- a/templates/standalone/cordova/lib/install-device.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST %full_path%deploy.js (
- cscript "%full_path%deploy.js" %* --device --nobuild //nologo
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find 'deploy.js' in cordova/lib, aborting...>&2
- EXIT /B 1
-)
\ No newline at end of file
diff --git a/templates/standalone/cordova/lib/install-emulator.bat b/templates/standalone/cordova/lib/install-emulator.bat
deleted file mode 100644
index b3ee451..0000000
--- a/templates/standalone/cordova/lib/install-emulator.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST %full_path%deploy.js (
- cscript "%full_path%deploy.js" %* --emulator --nobuild //nologo
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find 'deploy.js' in cordova/lib, aborting...>&2
- EXIT /B 1
-)
\ No newline at end of file
diff --git a/templates/standalone/cordova/lib/list-devices.bat b/templates/standalone/cordova/lib/list-devices.bat
deleted file mode 100644
index bf4492b..0000000
--- a/templates/standalone/cordova/lib/list-devices.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST %full_path%target-list.js (
- cscript "%full_path%target-list.js" %* --devices //nologo
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find 'target-list.js' in cordova/lib, aborting...>&2
- EXIT /B 1
-)
\ No newline at end of file
diff --git a/templates/standalone/cordova/lib/list-emulator-images.bat b/templates/standalone/cordova/lib/list-emulator-images.bat
deleted file mode 100644
index 3f571c7..0000000
--- a/templates/standalone/cordova/lib/list-emulator-images.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST %full_path%target-list.js (
- cscript "%full_path%target-list.js" %* --emulators //nologo
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find 'target-list.js' in cordova/lib, aborting...>&2
- EXIT /B 1
-)
\ No newline at end of file
diff --git a/templates/standalone/cordova/lib/list-started-emulators.bat b/templates/standalone/cordova/lib/list-started-emulators.bat
deleted file mode 100644
index d779b5d..0000000
--- a/templates/standalone/cordova/lib/list-started-emulators.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-@ECHO OFF
-ECHO Sorry, list-started-emulators is not availible yet for Windows Phone. 1>&2
-EXIT /B 1
\ No newline at end of file
diff --git a/templates/standalone/cordova/lib/log.js b/templates/standalone/cordova/lib/log.js
deleted file mode 100644
index 0b4ea7d..0000000
--- a/templates/standalone/cordova/lib/log.js
+++ /dev/null
@@ -1,77 +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 fso = WScript.CreateObject('Scripting.FileSystemObject');
-var wscript_shell = WScript.CreateObject("WScript.Shell");
-var args = WScript.Arguments;
-// working dir
-var ROOT = WScript.ScriptFullName.split('\\cordova\\lib\\log.js').join('');
-
-
-// help function
-function Usage() {
- Log("");
- Log("Usage: log");
- Log("examples:");
- Log(" log");
- Log(" - logs output from running application *NOT IMPLIMENTED*");
- Log("");
-}
-
-// logs to stdout or stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-// log output from running projects *NOT IMPLEMENTED*
-function log_output(path) {
- Log("ERROR: Logging is not supported on Windows Phone", true);
- WScript.Quit(1);
-}
-
-
-if (args.Count() > 0) {
- // support help flags
- if (args(0) == "--help" || args(0) == "/?" ||
- args(0) == "help" || args(0) == "-help" || args(0) == "/help") {
- Usage();
- WScript.Quit(2);
- }
- else {
- Log("Error: \"" + args(0) + "\" is not recognized as a log option.", true);
- Usage();
- WScript.Quit(2);
- }
-}
-else {
- if (fso.FolderExists(ROOT)) {
- log_output(ROOT);
- }
- else {
- Log("Error: Project directory not found,", true);
- Usage();
- WScript.Quit(2);
- }
-}
\ No newline at end of file
diff --git a/templates/standalone/cordova/lib/start-emulator.bat b/templates/standalone/cordova/lib/start-emulator.bat
deleted file mode 100644
index 19983fd..0000000
--- a/templates/standalone/cordova/lib/start-emulator.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-@ECHO OFF
-ECHO Sorry, start-emulator is not availible yet for Windows Phone. 1>&2
-EXIT /B 1
\ No newline at end of file
diff --git a/templates/standalone/cordova/lib/target-list.js b/templates/standalone/cordova/lib/target-list.js
deleted file mode 100644
index 805eea5..0000000
--- a/templates/standalone/cordova/lib/target-list.js
+++ /dev/null
@@ -1,233 +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 fso = WScript.CreateObject('Scripting.FileSystemObject');
-var wscript_shell = WScript.CreateObject("WScript.Shell");
-
-var args = WScript.Arguments;
-// working dir
-var ROOT = WScript.ScriptFullName.split('\\cordova\\lib\\target-list.js').join('');
- // path to CordovaDeploy.exe
-var CORDOVA_DEPLOY_EXE = '\\cordova\\lib\\CordovaDeploy\\CordovaDeploy\\bin\\Debug\\CordovaDeploy.exe';
- // path to CordovaDeploy
-var CORDOVA_DEPLOY = '\\cordova\\lib\\CordovaDeploy';
-
-// help/usage function
-function Usage() {
- Log("");
- Log("Usage: cscript target-list.js [ --emulators | --devices | --started_emulators | --all ]");
- Log(" --emulators : List the possible target emulators availible.");
- Log(" --devices : List the possible target devices availible. *NOT IMPLEMENTED YET*");
- Log(" --started_emulators : List any started emulators availible. *NOT IMPLEMENTED YET*");
- Log(" --all : List all devices returned by CordovaDeploy.exe -devices ");
- Log("examples:");
- Log(" cscript target-list.js --emulators");
- Log(" cscript target-list.js --devices");
- Log(" cscript target-list.js --started_emulators");
- Log(" cscript target-list.js --all");
- Log("");
-}
-
-// logs messaged to stdout and stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-// executes a commmand in the shell
-function exec(command) {
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status == 0) {
- //Wait a little bit so we're not super looping
- WScript.sleep(100);
- //Print output? Naa.....
- if (!oShell.StdOut.AtEndOfStream) {
- var line = oShell.StdOut.ReadAll();
- //Log(line);
- }
- }
- //Check to make sure our scripts did not encounter an error
- if (!oShell.StdErr.AtEndOfStream) {
- var line = oShell.StdErr.ReadAll();
- Log(line, true);
- WScript.Quit(2);
- }
-}
-
-// returns all possible targets generated by the CordovaDeploy tool
-function get_targets(path) {
- if (!fso.FileExists(path + CORDOVA_DEPLOY_EXE)) {
- cordovaDeploy(path);
- }
- wscript_shell.CurrentDirectory = path + CORDOVA_DEPLOY + '\\CordovaDeploy\\bin\\Debug';
- var cmd = 'CordovaDeploy -devices';
- var out = wscript_shell.Exec(cmd);
- while(out.Status == 0) {
- WScript.Sleep(100);
- }
- //Check to make sure our script did not encounter an error
- if (!out.StdErr.AtEndOfStream) {
- var line = out.StdErr.ReadAll();
- Log("Error calling CordovaDeploy : ", true);
- Log(line, true);
- WScript.Quit(2);
- }
- else {
- if (!out.StdOut.AtEndOfStream) {
- var line = out.StdOut.ReadAll();
- var targets = line.split('\r\n');
- //format (ID DESCRIPTION)
- for (i in targets) {
- // remove device index and separator colen
- targets[i] = targets[i].replace(/\d*\s\:\s/, '').replace(/\:\s/, '');
- }
- return targets;
- }
- else {
- Log('Error : CordovaDeploy Failed to find any devices', true);
- WScript.Quit(2);
- }
- }
-}
-
-function list_targets(path) {
- var targets = get_targets(path);
- for (i in targets) {
- Log(targets[i]);
- }
-}
-
-// lists the Device returned by CordovaDeploy (NOTE: this does not indicate that a device is connected)
-function list_devices(path) {
- var targets = get_targets(path);
- var device_found = false;
- for (i in targets) {
- if (targets[i].match(/Device/)) {
- Log(targets[i]);
- device_found = true;
- }
- }
- if (device_found) {
- Log('');
- Log('WARNING : This does not mean that a device is connected, make');
- Log(' sure your device is connected before deploying to it.');
- }
-}
-
-// lists the emulators availible to CordovaDeploy
-function list_emulator_images(path) {
- var targets = get_targets(path);
- for (i in targets) {
- if (targets[i].match(/Emulator/)) {
- Log(targets[i]);
- }
- }
-}
-
-// lists any started emulators *NOT IMPLEMENTED*
-function list_started_emulators(path) {
- Log('ERROR : list-started-emulators is not supported on Windows Phone.', true);
- WScript.Quit(1);
-}
-
-// builds the CordovaDeploy.exe if it does not already exist
-function cordovaDeploy(path) {
- if (fso.FileExists(path + CORDOVA_DEPLOY_EXE)) {
- return;
- }
-
- // build CordovaDeploy.exe
- if (fso.FolderExists(path + '\\cordova') && fso.FolderExists(path + CORDOVA_DEPLOY) &&
- fso.FileExists(path + CORDOVA_DEPLOY + '\\CordovaDeploy.sln')) {
- // delete any previously generated files
- if (fso.FolderExists(path + CORDOVA_DEPLOY + "\\CordovaDeploy\\obj")) {
- fso.DeleteFolder(path + CORDOVA_DEPLOY + "\\CordovaDeploy\\obj");
- }
- if (fso.FolderExists(path + CORDOVA_DEPLOY + "\\CordovaDeploy\\Bin")) {
- fso.DeleteFolder(path + CORDOVA_DEPLOY + "\\CordovaDeploy\\Bin");
- }
- exec('msbuild ' + path + CORDOVA_DEPLOY + '\\CordovaDeploy.sln');
-
- if (fso.FileExists(path + CORDOVA_DEPLOY_EXE)) {
- return;
- }
- else {
- Log("ERROR: MSBUILD FAILED TO COMPILE CordovaDeploy.exe", true);
- WScript.Quit(2);
- }
- }
- else {
- Log("ERROR: CordovaDeploy.sln not found, unable to compile CordovaDeploy tool.", true);
- WScript.Quit(2);
- }
-}
-
-
-if (args.Count() > 0) {
- // support help flags
- if (args(0) == "--help" || args(0) == "/?" ||
- args(0) == "help" || args(0) == "-help" || args(0) == "/help") {
- Usage();
- WScript.Quit(2);
- }
- else if (args.Count() > 1) {
- Log("Error: Too many arguments.", true);
- Usage();
- WScript.Quit(2);
- }
- else if (fso.FolderExists(ROOT)) {
- if (!fso.FolderExists(ROOT + '\\cordova')) {
- Log("Error: cordova tooling folder not found in project directory,", true);
- Log("could not lsit targets.", true);
- WScript.Quit(2);
- }
-
- if (args(0) == "--emulators" || args(0) == "-e") {
- list_emulator_images(ROOT);
- }
- else if (args(0) == "--devices" || args(0) == "-d") {
- list_devices(ROOT);
- }
- else if (args(0) == "--started_emulators" || args(0) == "-s") {
- list_started_emulators(ROOT);
- }
- else if (args(0) == "--all" || args(0) == "-a") {
- list_targets(ROOT);
- }
- else {
- Log("Error: \"" + args(0) + "\" is not recognized as a target-list option", true);
- Usage();
- WScript.Quit(2);
- }
- }
- else {
- Log("Error: Project directory not found,", true);
- Usage();
- WScript.Quit(2);
- }
-}
-else {
- Log("WARNING: target list not specified, showing all targets...");
- list_targets(ROOT);
-}
diff --git a/templates/standalone/cordova/log.bat b/templates/standalone/cordova/log.bat
deleted file mode 100644
index d34a8ab..0000000
--- a/templates/standalone/cordova/log.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-@ECHO OFF
-ECHO Sorry, logging is not supported for Windows Phone. 1>&2
-EXIT /B 1
\ No newline at end of file
diff --git a/templates/standalone/cordova/run.bat b/templates/standalone/cordova/run.bat
deleted file mode 100644
index b966856..0000000
--- a/templates/standalone/cordova/run.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST %full_path%lib\deploy.js (
- cscript "%full_path%lib\deploy.js" %* //nologo
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find 'deploy.js' in cordova/lib, aborting...>&2
- EXIT /B 1
-)
diff --git a/templates/standalone/cordova/version.bat b/templates/standalone/cordova/version.bat
deleted file mode 100644
index 714e876..0000000
--- a/templates/standalone/cordova/version.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-SET full_path=%~dp0
-IF EXIST "%full_path%..\VERSION" (
- type "%full_path%..\VERSION"
-) ELSE (
- ECHO.
- ECHO ERROR: Could not find file VERSION in project folder
- EXIT /B 1
-)
\ No newline at end of file
diff --git a/templates/standalone/cordovalib/BaseCommand.cs b/templates/standalone/cordovalib/BaseCommand.cs
deleted file mode 100644
index ac1d2d6..0000000
--- a/templates/standalone/cordovalib/BaseCommand.cs
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Reflection;
-using Microsoft.Phone.Shell;
-using System.Diagnostics;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- public abstract class BaseCommand : IDisposable
- {
- /*
- * All commands + plugins must extend BaseCommand, because they are dealt with as BaseCommands in CordovaView.xaml.cs
- *
- **/
-
- public event EventHandler<PluginResult> OnCommandResult;
-
- public event EventHandler<ScriptCallback> OnCustomScript;
-
- public string CurrentCommandCallbackId { get; set; }
-
- public BaseCommand()
- {
- ResultHandlers = new Dictionary<string, EventHandler<PluginResult>>();
- PhoneApplicationService service = PhoneApplicationService.Current;
- service.Activated += this.OnResume;
- service.Deactivated += this.OnPause;
- }
-
- protected Dictionary<string, EventHandler<PluginResult>> ResultHandlers;
- public void AddResultHandler(string callbackId, EventHandler<PluginResult> handler)
- {
- ResultHandlers.Add(callbackId, handler);
- }
- public bool RemoveResultHandler(string callbackId)
- {
- return ResultHandlers.Remove(callbackId);
- }
-
- /*
- * InvokeMethodNamed will call the named method of a BaseCommand subclass if it exists and pass the variable arguments list along.
- **/
-
- public object InvokeMethodNamed(string callbackId, string methodName, params object[] args)
- {
- //Debug.WriteLine(string.Format("InvokeMethodNamed:{0} callbackId:{1}",methodName,callbackId));
- this.CurrentCommandCallbackId = callbackId;
- return InvokeMethodNamed(methodName, args);
- }
-
- public object InvokeMethodNamed(string methodName, params object[] args)
- {
- MethodInfo mInfo = this.GetType().GetMethod(methodName);
-
- if (mInfo != null)
- {
- // every function handles DispatchCommandResult by itself
- return mInfo.Invoke(this, args);
- }
-
- // actually methodName could refer to a property
- if (args == null || args.Length == 0 ||
- (args.Length == 1 && "undefined".Equals(args[0])))
- {
- PropertyInfo pInfo = this.GetType().GetProperty(methodName);
- if (pInfo != null)
- {
- object res = pInfo.GetValue(this, null);
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, res));
-
- return res;
- }
- }
-
- throw new MissingMethodException(methodName);
-
- }
-
- [Obsolete]
- public void InvokeCustomScript(ScriptCallback script, bool removeHandler)
- {
- if (this.OnCustomScript != null)
- {
- this.OnCustomScript(this, script);
- if (removeHandler)
- {
- this.OnCustomScript = null;
- }
- }
- }
-
- public void DispatchCommandResult()
- {
- this.DispatchCommandResult(new PluginResult(PluginResult.Status.NO_RESULT));
- }
-
- public void DispatchCommandResult(PluginResult result, string callbackId = "")
- {
- if (!string.IsNullOrEmpty(callbackId))
- {
- result.CallbackId = callbackId;
- }
- else
- {
- result.CallbackId = this.CurrentCommandCallbackId;
- }
-
- if (ResultHandlers.ContainsKey(result.CallbackId))
- {
- ResultHandlers[result.CallbackId](this, result);
- }
- else if (this.OnCommandResult != null)
- {
- OnCommandResult(this, result);
- }
- else
- {
- Debug.WriteLine("Failed to locate callback for id : " + result.CallbackId);
- }
-
- if (!result.KeepCallback)
- {
- this.Dispose();
- }
-
- }
-
-
- /// <summary>
- /// Occurs when the application is being deactivated.
- /// </summary>
- public virtual void OnReset() {}
-
- /// <summary>
- /// Occurs when the application is being loaded, and the config.xml has an autoload entry
- /// </summary>
- public virtual void OnInit() {}
-
-
- /// <summary>
- /// Occurs when the application is being deactivated.
- /// </summary>
- public virtual void OnPause(object sender, DeactivatedEventArgs e) {}
-
- /// <summary>
- /// Occurs when the application is being made active after previously being put
- /// into a dormant state or tombstoned.
- /// </summary>
- public virtual void OnResume(object sender, Microsoft.Phone.Shell.ActivatedEventArgs e) {}
-
- public void Dispose()
- {
- PhoneApplicationService service = PhoneApplicationService.Current;
- service.Activated -= this.OnResume;
- service.Deactivated -= this.OnPause;
- this.OnCommandResult = null;
- }
-
- public static string GetBaseURL()
- {
-#if CORDOVA_CLASSLIB
- return "/WPCordovaClassLib;component/";
-#else
- return "./";
-#endif
- }
- }
-
-
-
-}
diff --git a/templates/standalone/cordovalib/BrowserMouseHelper.cs b/templates/standalone/cordovalib/BrowserMouseHelper.cs
deleted file mode 100644
index acd1bcd..0000000
--- a/templates/standalone/cordovalib/BrowserMouseHelper.cs
+++ /dev/null
@@ -1,345 +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.
- */
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-using Microsoft.Phone.Controls;
-using System.Windows.Input;
-using System.Diagnostics;
-using System.Windows.Media;
-using System;
-using System.Collections.Generic;
-
-namespace WPCordovaClassLib
-{
-
- /// <summary>
- /// Suppresses pinch zoom and optionally scrolling of the WebBrowser control
- /// </summary>
- public class BrowserMouseHelper
- {
-
- /**
- *
- * Full Script below, in use it is minified.
- */
- /*
- private static string mouseScript =
- @"(function(win,doc){
- var mPro = MouseEvent.prototype;
- var def = Object.defineProperty;
- def( mPro, 'pageX', {
- configurable: true,
- get: function(){ return this.clientX }
- });
- def( mPro, 'pageY', {
- configurable: true,
- get: function(){ return this.clientY }
- });
-
- win.onNativeMouseEvent = function(type,x,y){
- try {
- var xMod = screen.logicalXDPI / screen.deviceXDPI;
- var yMod = screen.logicalYDPI / screen.deviceYDPI;
- var evt = doc.createEvent('MouseEvents');
- var xPos = doc.body.scrollLeft + Math.round(xMod * x);
- var yPos = doc.body.scrollTop + Math.round(yMod * y);
- var element = doc.elementFromPoint(xPos,yPos);
-
- evt.initMouseEvent(type, true, true, win, 1, xPos, yPos, xPos, yPos, false, false, false, false, 0, element);
- evt.timeStamp = +new Date;
- evt.isCordovaEvent = true;
-
- var canceled = element ? !element.dispatchEvent(evt) : !doc.dispatchEvent(evt);
- return canceled ? 'true' : 'false';
- }
- catch(e) { return e;}
- }
- })(window,document);";
- */
-
- private static string MinifiedMouseScript = "(function(g,a){var c=MouseEvent.prototype,d=Object.defineProperty;d(c,'pageX',{configurable:!0,get:function(){return this.clientX}});d(c,'pageY',{configurable:!0,get:function(){return this.clientY}});g.onNativeMouseEvent=function(c,d,i)"
- + "{try{var j=screen.logicalXDPI/screen.deviceXDPI,k=screen.logicalYDPI/screen.deviceYDPI,b=a.createEvent('MouseEvents'),e=a.body.scrollLeft+Math.round(j*d),f=a.body.scrollTop+Math.round(k*i),h=a.elementFromPoint(e,f);b.initMouseEvent(c,!0,!0,g,1,e,f,e,f,!1,!1,!1,!1,0,"
- + "h);b.timeStamp=+new Date;b.isCordovaEvent=!0;return(h?!h.dispatchEvent(b):!a.dispatchEvent(b))?'true':'false'}catch(l){return l}}})(window,document);";
-
-
- private WebBrowser _browser;
-
- /// <summary>
- /// Gets or sets whether to suppress the scrolling of
- /// the WebBrowser control;
- /// </summary>
- public bool ScrollDisabled { get; set; }
-
- private bool userScalable = true;
- private double maxScale = 2.0;
- private double minScale = 0.5;
- protected Border border;
- private bool firstMouseMove = false;
-
- /// <summary>
- /// Represents last known mouse down position.
- /// Used to determine mouse move delta to avoid duplicate mouse events.
- /// </summary>
- private Point mouseDownPos;
-
- /// <summary>
- /// Represent min delta value to consider event as a mouse move. Experimental calculated.
- /// </summary>
- private const int MouseMoveDeltaThreshold = 10;
-
-
- public BrowserMouseHelper(ref WebBrowser browser)
- {
- _browser = browser;
- browser.Loaded += new RoutedEventHandler(browser_Loaded);
- }
-
- private void browser_Loaded(object sender, RoutedEventArgs e)
- {
- var border0 = VisualTreeHelper.GetChild(_browser, 0);
- var border1 = VisualTreeHelper.GetChild(border0, 0);
- var panZoom = VisualTreeHelper.GetChild(border1, 0);
- var grid = VisualTreeHelper.GetChild(panZoom, 0);
- border = VisualTreeHelper.GetChild(grid, 0) as Border;
-
- if (border != null)
- {
- border.ManipulationStarted += Border_ManipulationStarted;
- border.ManipulationDelta += Border_ManipulationDelta;
- border.ManipulationCompleted += Border_ManipulationCompleted;
- border.DoubleTap += Border_DoubleTap;
- border.Tap += Border_Tap;
- border.Hold += Border_Hold;
- border.MouseLeftButtonDown += Border_MouseLeftButtonDown;
- }
-
- _browser.LoadCompleted += Browser_LoadCompleted;
-
- }
-
-
-
-
- void ParseViewportMeta()
- {
- string metaScript = "(function() { return document.querySelector('meta[name=viewport]').content; })()";
-
- try
- {
- string metaContent = _browser.InvokeScript("eval", new string[] { metaScript }) as string;
- string[] arr = metaContent.Split(new[] { ' ', ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
- Dictionary<string, string> metaDictionary = new Dictionary<string, string>();
- foreach (string val in arr)
- {
- string[] keyVal = val.Split('=');
- metaDictionary.Add(keyVal[0], keyVal[1]);
- }
-
- this.userScalable = false; // reset to default
- if (metaDictionary.ContainsKey("user-scalable"))
- {
- this.userScalable = metaDictionary["user-scalable"] == "yes";
- }
-
- this.maxScale = 2.0;// reset to default
- if (metaDictionary.ContainsKey("maximum-scale"))
- {
- this.maxScale = double.Parse(metaDictionary["maximum-scale"]);
- }
-
- this.minScale = 0.5;// reset to default
- if (metaDictionary.ContainsKey("minimum-scale"))
- {
- this.minScale = double.Parse(metaDictionary["minimum-scale"]);
- }
- }
- catch (Exception)
- {
-
- }
- }
-
- void Browser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
- {
- ParseViewportMeta();
-
- try
- {
- _browser.InvokeScript("execScript", MinifiedMouseScript);
- }
- catch (Exception)
- {
- Debug.WriteLine("BrowserHelper Failed to install mouse script in WebBrowser");
- }
- }
-
- bool InvokeSimulatedMouseEvent(string eventName, Point pos)
- {
- bool bCancelled = false;
- try
- {
- string strCancelled = _browser.InvokeScript("onNativeMouseEvent", new string[] { eventName, pos.X.ToString(), pos.Y.ToString() }) as string;
- if (bool.TryParse(strCancelled, out bCancelled))
- {
- return bCancelled;
- }
- }
- catch (Exception)
- {
- // script error
- }
-
- return bCancelled;
- }
-
- #region Hold
-
- void Border_Hold(object sender, GestureEventArgs e)
- {
- //Debug.WriteLine("Border_Hold");
- e.Handled = true;
- }
-
- #endregion
-
- #region DoubleTap
-
- void Border_DoubleTap(object sender, GestureEventArgs e)
- {
- //Debug.WriteLine("Border_DoubleTap");
- e.Handled = true;
- }
-
- #endregion
-
- #region Tap
-
- void Border_Tap(object sender, GestureEventArgs e)
- {
- // prevents generating duplicated mouse events
- // firstMouseMove == FALSE means we already handled this situation and generated mouse events
- e.Handled = !this.firstMouseMove;
- }
- #endregion
-
- #region MouseEvents
-
- void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- //Debug.WriteLine("Border_MouseLeftButtonDown");
- border.MouseMove += new MouseEventHandler(Border_MouseMove);
- border.MouseLeftButtonUp += new MouseButtonEventHandler(Border_MouseLeftButtonUp);
-
- this.mouseDownPos = e.GetPosition(_browser);
- // don't fire the down event until we know if this is a 'move' or not
- firstMouseMove = true;
- }
- //
- void Border_MouseMove(object sender, MouseEventArgs e)
- {
- //Debug.WriteLine("Border_MouseMove");
- Point pos = e.GetPosition(_browser);
- // only the return value from the first mouse move event should be used to determine if scrolling is prevented.
- if (firstMouseMove)
- {
- // even for simple tap there are situations where ui control generates move with some little delta value
- // we should avoid such situations allowing to browser control generate native js mousedown/up/click events
- if (Math.Abs(pos.X - mouseDownPos.X) + Math.Abs(pos.Y - mouseDownPos.Y) <= MouseMoveDeltaThreshold)
- {
- return;
- }
-
- InvokeSimulatedMouseEvent("mousedown", pos);
- firstMouseMove = false;
- ScrollDisabled = InvokeSimulatedMouseEvent("mousemove", pos);
- }
- else
- {
- InvokeSimulatedMouseEvent("mousemove", pos);
- }
-
- }
-
- void Border_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
- {
- //Debug.WriteLine("Border_MouseLeftButtonUp");
- border.MouseMove -= new MouseEventHandler(Border_MouseMove);
- border.MouseLeftButtonUp -= new MouseButtonEventHandler(Border_MouseLeftButtonUp);
- // if firstMouseMove is false, then we have sent our simulated mousedown, so we should also send a matching mouseup
- if (!firstMouseMove)
- {
- Point pos = e.GetPosition(_browser);
- e.Handled = InvokeSimulatedMouseEvent("mouseup", pos);
- }
- ScrollDisabled = false;
- }
-
-
- #endregion
-
- #region ManipulationEvents
-
- void Border_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
- {
- //Debug.WriteLine("Border_ManipulationStarted");
-
- if (ScrollDisabled)
- {
- e.Handled = true;
- e.Complete();
- }
- }
-
- private void Border_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
- {
- //Debug.WriteLine("Border_ManipulationDelta");
- // optionally suppress zoom
- if ((ScrollDisabled || !userScalable) && (e.DeltaManipulation.Scale.X != 0.0 || e.DeltaManipulation.Scale.Y != 0.0))
- {
- e.Handled = true;
- e.Complete();
- }
- // optionally suppress scrolling
- if (ScrollDisabled && (e.DeltaManipulation.Translation.X != 0.0 || e.DeltaManipulation.Translation.Y != 0.0))
- {
- e.Handled = true;
- e.Complete();
- }
- }
-
- private void Border_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
- {
- //Debug.WriteLine("Border_ManipulationCompleted");
- // suppress zoom
- if (!userScalable && e.FinalVelocities != null)
- {
- if (e.FinalVelocities.ExpansionVelocity.X != 0.0 ||
- e.FinalVelocities.ExpansionVelocity.Y != 0.0)
- {
- e.Handled = true;
- }
- }
- }
-
-
- #endregion
-
- }
-}
diff --git a/templates/standalone/cordovalib/CommandFactory.cs b/templates/standalone/cordovalib/CommandFactory.cs
deleted file mode 100644
index 893ce80..0000000
--- a/templates/standalone/cordovalib/CommandFactory.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using System.Collections.Generic;
-using WPCordovaClassLib.Cordova.Commands;
-using System.Reflection;
-using System.Diagnostics;
-
-namespace WPCordovaClassLib.Cordova
-{
- /// <summary>
- /// Provides functionality to create phone gap command by name.
- /// </summary>
- public static class CommandFactory
- {
- /// <summary>
- /// Represents predefined namespace name for custom plugins
- /// </summary>
- private static readonly string CustomPluginNamespacePrefix = "Cordova.Extension.Commands.";
-
- private static readonly string BaseCommandNamespacePrefix = "WPCordovaClassLib.Cordova.Commands.";
-
- /// <summary>
- /// Cache instantiated commands in a map.
- /// </summary>
-
- private static Dictionary<string, BaseCommand> commandMap = new Dictionary<string, BaseCommand>();
-
- /// <summary>
- /// Creates command using command class name. Returns null for unknown commands.
- /// </summary>
- /// <param name="service">Command class name, for example Device or Notification</param>
- /// <returns>Command class instance or null</returns>
- public static BaseCommand CreateByServiceName(string service)
- {
-
- if (string.IsNullOrEmpty(service))
- {
- throw new ArgumentNullException("service", "service to create can't be null");
- }
-
- if (!commandMap.ContainsKey(service))
- {
-
- Type t = Type.GetType(BaseCommandNamespacePrefix + service);
-
- // custom plugin could be defined in own namespace and assembly
- if (t == null)
- {
- string serviceFullName = service.Contains(".") ? service : CustomPluginNamespacePrefix + service;
-
- foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
- {
- // in this case service name represents full type name including namespace
- t = a.GetType(serviceFullName);
-
- if (t == null) // try the Commands Namespace
- {
- t = a.GetType(BaseCommandNamespacePrefix + service);
- }
-
- if (t != null)
- {
- break;
- }
- }
-
- }
-
- // unknown command, still didn't find it
- if (t == null)
- {
- Debug.WriteLine("Unable to locate command :: " + service);
- return null;
- }
-
- commandMap[service] = Activator.CreateInstance(t) as BaseCommand;
- }
-
- return commandMap[service];
- }
-
- public static void ResetAllCommands()
- {
- foreach (BaseCommand bc in commandMap.Values)
- {
- bc.OnReset();
- }
- }
- }
-}
diff --git a/templates/standalone/cordovalib/ConfigHandler.cs b/templates/standalone/cordovalib/ConfigHandler.cs
deleted file mode 100644
index 31934c1..0000000
--- a/templates/standalone/cordovalib/ConfigHandler.cs
+++ /dev/null
@@ -1,268 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Windows;
-using System.Windows.Resources;
-using System.Xml.Linq;
-
-namespace WPCordovaClassLib.CordovaLib
-{
- class ConfigHandler
- {
- public class PluginConfig
- {
- public PluginConfig(string name, bool autoLoad = false)
- {
- Name = name;
- isAutoLoad = autoLoad;
- }
- public string Name;
- public bool isAutoLoad;
- }
-
- protected Dictionary<string, PluginConfig> AllowedPlugins;
- protected List<string> AllowedDomains;
- protected Dictionary<string, string> Preferences;
-
- public string ContentSrc { get; private set; }
-
- protected bool AllowAllDomains = false;
- protected bool AllowAllPlugins = false;
-
- public ConfigHandler()
- {
- AllowedPlugins = new Dictionary<string, PluginConfig>();
- AllowedDomains = new List<string>();
- Preferences = new Dictionary<string, string>();
- }
-
- public string GetPreference(string key)
- {
- return Preferences[key];
- }
-
- protected static string[] AllowedSchemes = {"http","https","ftp","ftps"};
- protected bool SchemeIsAllowed(string scheme)
- {
- return AllowedSchemes.Contains(scheme);
- }
-
- protected string PathAndQuery(Uri uri)
- {
- string result = uri.LocalPath;
- if (uri.Query.Length > 0)
- {
- result += uri.Query;
- }
- return result;
- }
-
- protected void AddWhiteListEntry(string origin, bool allowSubdomains)
- {
-
- if (origin == "*")
- {
- AllowAllDomains = true;
- }
-
- if (AllowAllDomains)
- {
- return;
- }
-
- string hostMatchingRegex = "";
- string hostName;
-
- try
- {
-
- Uri uri = new Uri(origin.Replace("*", "replaced-text"), UriKind.Absolute);
-
- string tempHostName = uri.Host.Replace("replaced-text", "*");
- //if (uri.HostNameType == UriHostNameType.Dns){}
- // starts with wildcard match - we make the first '.' optional (so '*.org.apache.cordova' will match 'org.apache.cordova')
- if (tempHostName.StartsWith("*."))
- { //"(\\s{0}|*.)"
- hostName = @"\w*.*" + tempHostName.Substring(2).Replace(".", @"\.").Replace("*", @"\w*");
- }
- else
- {
- hostName = tempHostName.Replace(".", @"\.").Replace("*", @"\w*");
- }
-
- // "^https?://"
- hostMatchingRegex = uri.Scheme + "://" + hostName + PathAndQuery(uri);
- //Debug.WriteLine("Adding regex :: " + hostMatchingRegex);
- AllowedDomains.Add(hostMatchingRegex);
-
- }
- catch (Exception)
- {
- Debug.WriteLine("Invalid Whitelist entry (probably missing the protocol):: " + origin);
- }
-
- }
-
- /**
-
- An access request is granted for a given URI if there exists an item inside the access-request list such that:
-
- - The URI's scheme component is the same as scheme; and
- - if subdomains is false or if the URI's host component is not a domain name (as defined in [RFC1034]), the URI's host component is the same as host; or
- - if subdomains is true, the URI's host component is either the same as host, or is a subdomain of host (as defined in [RFC1034]); and
- - the URI's port component is the same as port.
-
- **/
-
- public bool URLIsAllowed(string url)
- {
- // easy case first
- if (AllowAllDomains )
- {
- return true;
- }
- else
- {
- // start simple
- Uri uri = new Uri(url,UriKind.RelativeOrAbsolute);
- if (uri.IsAbsoluteUri)
- {
- if (this.SchemeIsAllowed(uri.Scheme))
- {
- // additional test because our pattern will always have a trailing '/'
- string matchUrl = url;
- if (PathAndQuery(uri) == "/")
- {
- matchUrl = url + "/";
- }
- foreach (string pattern in AllowedDomains)
- {
- if (Regex.IsMatch(matchUrl, pattern))
- {
- // make sure it is at the start, and not part of the query string
- // special case :: http://some.other.domain/page.html?x=1&g=http://build.apache.org/
- if ( Regex.IsMatch(uri.Scheme + "://" + uri.Host + "/", pattern) ||
- (!Regex.IsMatch(PathAndQuery(uri), pattern)))
- {
- return true;
- }
- }
- }
- }
- }
- else
- {
- return true;
- }
- }
- return false;
- }
-
- public bool IsPluginAllowed(string key)
- {
- return AllowAllPlugins || AllowedPlugins.Keys.Contains(key);
- }
-
- private void LoadPluginFeatures(XDocument document)
- {
- var plugins = from results in document.Descendants("plugin")
- select new
- {
- name = (string)results.Attribute("name"),
- autoLoad = results.Attribute("onload")
- };
-
- foreach (var plugin in plugins)
- {
- Debug.WriteLine("Warning: Deprecated use of <plugin> by plugin : " + plugin.name);
- PluginConfig pConfig = new PluginConfig(plugin.name, plugin.autoLoad != null && plugin.autoLoad.Value == "true");
- if (pConfig.Name == "*")
- {
- AllowAllPlugins = true;
- // break; wait, don't, some still could be autoload
- }
- else
- {
- AllowedPlugins[pConfig.Name] = pConfig;
- }
- }
-
- var features = document.Descendants("feature");
-
-
- foreach (var feature in features)
- {
- var name = feature.Attribute("name");
- var values = from results in feature.Descendants("param")
- where ((string)results.Attribute("name") == "wp-package")
- select results;
-
- var value = values.FirstOrDefault();
- if (value != null)
- {
- string key = (string)value.Attribute("value");
- Debug.WriteLine("Adding feature.value=" + key);
- var onload = value.Attribute("onload");
- PluginConfig pConfig = new PluginConfig(key, onload != null && onload.Value == "true");
- AllowedPlugins[key] = pConfig;
- }
- }
- }
-
- public void LoadAppPackageConfig()
- {
- StreamResourceInfo streamInfo = Application.GetResourceStream(new Uri("config.xml", UriKind.Relative));
-
- if (streamInfo != null)
- {
- StreamReader sr = new StreamReader(streamInfo.Stream);
- //This will Read Keys Collection for the xml file
- XDocument document = XDocument.Parse(sr.ReadToEnd());
-
- LoadPluginFeatures(document);
-
- var preferences = from results in document.Descendants("preference")
- select new
- {
- name = (string)results.Attribute("name"),
- value = (string)results.Attribute("value")
- };
-
- foreach (var pref in preferences)
- {
- Preferences[pref.name] = pref.value;
- Debug.WriteLine("pref" + pref.name + ", " + pref.value);
- }
-
- var accessList = from results in document.Descendants("access")
- select new
- {
- origin = (string)results.Attribute("origin"),
- subdomains = (string)results.Attribute("subdomains") == "true"
- };
-
- foreach (var accessElem in accessList)
- {
- AddWhiteListEntry(accessElem.origin, accessElem.subdomains);
- }
-
- var contentsTag = document.Descendants("content").FirstOrDefault();
- if (contentsTag != null)
- {
- var src = contentsTag.Attribute("src");
- ContentSrc = (string)src.Value;
- }
- }
- else
- {
- // no config.xml, allow all
- AllowAllDomains = true;
- AllowAllPlugins = true;
- }
- }
- }
-}
diff --git a/templates/standalone/cordovalib/CordovaCommandCall.cs b/templates/standalone/cordovalib/CordovaCommandCall.cs
deleted file mode 100644
index 810f5e2..0000000
--- a/templates/standalone/cordovalib/CordovaCommandCall.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using System.Linq;
-using System.Collections.Generic;
-
-namespace WPCordovaClassLib.Cordova
-{
- /// <summary>
- /// Represents Cordova native command call: action callback, etc
- /// </summary>
- public class CordovaCommandCall
- {
- public String Service { get; private set; }
- public String Action { get; private set; }
- public String CallbackId { get; private set; }
- public String Args { get; private set; }
-
- /// <summary>
- /// Retrieves command call parameters and creates wrapper for them
- /// </summary>
- /// <param name="commandStr">Command string in the form 'service/action/callback/args'</param>
- /// <returns>New class instance or null of string does not represent Cordova command</returns>
- public static CordovaCommandCall Parse(string commandStr)
- {
- if (string.IsNullOrEmpty(commandStr))
- {
- return null;
- }
-
- string[] split = commandStr.Split('/');
- if (split.Length < 3)
- {
- return null;
- }
-
- CordovaCommandCall commandCallParameters = new CordovaCommandCall();
- commandCallParameters.Service = split[0];
- commandCallParameters.Action = split[1];
- commandCallParameters.CallbackId = split[2];
-
- try
- {
- string arg = split.Length <= 3 ? "[]" : String.Join("/", split.Skip(3));
- if (!arg.StartsWith("[")) // save the exception
- {
- arg = string.Format("[{0}]", arg);
- }
- List<string> args = JSON.JsonHelper.Deserialize<List<string>>(arg);
- args.Add(commandCallParameters.CallbackId);
- commandCallParameters.Args = JSON.JsonHelper.Serialize(args.ToArray());
- }
- catch (Exception)
- {
- return null;
- }
- // sanity check for illegal names
- // was failing with ::
- // CordovaCommandResult :: 1, Device1, {"status":1,"message":"{\"name\":\"XD.....
- if (commandCallParameters.Service.IndexOfAny(new char[] { '@', ':', ',', '!', ' ' }) > -1)
- {
- return null;
- }
-
- return commandCallParameters;
- }
-
-
- /// <summary>
- /// Private ctr to disable class creation.
- /// New class instance must be initialized via CordovaCommandCall.Parse static method.
- /// </summary>
- private CordovaCommandCall() { }
-
-
- }
-}
diff --git a/templates/standalone/cordovalib/CordovaView.xaml b/templates/standalone/cordovalib/CordovaView.xaml
deleted file mode 100644
index b993d97..0000000
--- a/templates/standalone/cordovalib/CordovaView.xaml
+++ /dev/null
@@ -1,65 +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.
--->
-<UserControl x:Class="WPCordovaClassLib.CordovaView"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d"
- FontFamily="{StaticResource PhoneFontFamilyNormal}"
- FontSize="{StaticResource PhoneFontSizeNormal}"
- Foreground="{StaticResource PhoneForegroundBrush}"
- d:DesignHeight="480" d:DesignWidth="480"
- xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone">
-
- <Grid x:Name="LayoutRoot" Background="Transparent">
-
- <phone:WebBrowser x:Name="CordovaBrowser"
- Opacity="0"
- HorizontalAlignment="Stretch"
- VerticalAlignment="Stretch"
- IsScriptEnabled="True"
- Foreground="White"
- Background="Black"
- Navigated="GapBrowser_Navigated"
- Loaded="GapBrowser_Loaded"
- Unloaded="GapBrowser_Unloaded"
- ScriptNotify="GapBrowser_ScriptNotify"
- LoadCompleted="GapBrowser_LoadCompleted"
- Navigating="GapBrowser_Navigating"
- NavigationFailed="GapBrowser_NavigationFailed"
- IsGeolocationEnabled="True">
- <phone:WebBrowser.Projection>
- <PlaneProjection x:Name="BrowserProjector" CenterOfRotationX="0" RotationY="-180"/>
- </phone:WebBrowser.Projection>
- <phone:WebBrowser.Resources>
- <Storyboard x:Name="RotateIn" BeginTime="0:0:0.5">
- <DoubleAnimation
- Storyboard.TargetName="BrowserProjector"
- Storyboard.TargetProperty="RotationY"
- To="0" Duration="0:0:0.6"/>
- </Storyboard>
- </phone:WebBrowser.Resources>
-
- </phone:WebBrowser>
-
- </Grid>
-</UserControl>
-
-
diff --git a/templates/standalone/cordovalib/CordovaView.xaml.cs b/templates/standalone/cordovalib/CordovaView.xaml.cs
deleted file mode 100644
index d57249a..0000000
--- a/templates/standalone/cordovalib/CordovaView.xaml.cs
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using Microsoft.Phone.Controls;
-using System.IO.IsolatedStorage;
-using System.Windows.Resources;
-using System.Windows.Interop;
-using System.Runtime.Serialization.Json;
-using System.IO;
-using System.ComponentModel;
-using System.Xml.Linq;
-using WPCordovaClassLib.Cordova.Commands;
-using System.Diagnostics;
-using System.Text;
-using WPCordovaClassLib.Cordova;
-using System.Threading;
-using Microsoft.Phone.Shell;
-using WPCordovaClassLib.Cordova.JSON;
-using WPCordovaClassLib.CordovaLib;
-
-
-
-namespace WPCordovaClassLib
-{
- public partial class CordovaView : UserControl
- {
-
- /// <summary>
- /// Indicates whether web control has been loaded and no additional initialization is needed.
- /// Prevents data clearing during page transitions.
- /// </summary>
- private bool IsBrowserInitialized = false;
-
- /// <summary>
- /// Set when the user attaches a back button handler inside the WebBrowser
- /// </summary>
- private bool OverrideBackButton = false;
-
- /// <summary>
- /// Sentinel to keep track of page changes as a result of the hardware back button
- /// Set to false when the back-button is pressed, which calls js window.history.back()
- /// If the page changes as a result of the back button the event is cancelled.
- /// </summary>
- private bool PageDidChange = false;
-
- private static string AppRoot = "/app/";
-
-
- /// <summary>
- /// Handles native api calls
- /// </summary>
- private NativeExecution nativeExecution;
-
- protected BrowserMouseHelper bmHelper;
-
- protected DOMStorageHelper domStorageHelper;
- protected OrientationHelper orientationHelper;
-
- private ConfigHandler configHandler;
-
- public System.Windows.Controls.Grid _LayoutRoot
- {
- get
- {
- return ((System.Windows.Controls.Grid)(this.FindName("LayoutRoot")));
- }
- }
-
- public WebBrowser Browser
- {
- get
- {
- return CordovaBrowser;
- }
- }
-
- /*
- * Setting StartPageUri only has an effect if called before the view is loaded.
- **/
- protected Uri _startPageUri = null;
- public Uri StartPageUri
- {
- get
- {
- if (_startPageUri == null)
- {
- // default
- return new Uri(AppRoot + "www/index.html", UriKind.Relative);
- }
- else
- {
- return _startPageUri;
- }
- }
- set
- {
- if (!this.IsBrowserInitialized)
- {
- _startPageUri = value;
- }
- }
- }
-
- public CordovaView()
- {
-
- InitializeComponent();
-
- if (DesignerProperties.IsInDesignTool)
- {
- return;
- }
-
-
- StartupMode mode = PhoneApplicationService.Current.StartupMode;
-
- if (mode == StartupMode.Launch)
- {
- PhoneApplicationService service = PhoneApplicationService.Current;
- service.Activated += new EventHandler<Microsoft.Phone.Shell.ActivatedEventArgs>(AppActivated);
- service.Launching += new EventHandler<LaunchingEventArgs>(AppLaunching);
- service.Deactivated += new EventHandler<DeactivatedEventArgs>(AppDeactivated);
- service.Closing += new EventHandler<ClosingEventArgs>(AppClosing);
- }
- else
- {
-
- }
-
- configHandler = new ConfigHandler();
- configHandler.LoadAppPackageConfig();
-
- if (configHandler.ContentSrc != null)
- {
- if (Uri.IsWellFormedUriString(configHandler.ContentSrc, UriKind.Absolute))
- {
- this.StartPageUri = new Uri(configHandler.ContentSrc, UriKind.Absolute);
- }
- else
- {
- this.StartPageUri = new Uri(AppRoot + "www/" + configHandler.ContentSrc, UriKind.Relative);
- }
- }
-
- // initializes native execution logic
- nativeExecution = new NativeExecution(ref this.CordovaBrowser);
- bmHelper = new BrowserMouseHelper(ref this.CordovaBrowser);
- }
-
-
-
- void AppClosing(object sender, ClosingEventArgs e)
- {
- //Debug.WriteLine("AppClosing");
- }
-
- void AppDeactivated(object sender, DeactivatedEventArgs e)
- {
- Debug.WriteLine("INFO: AppDeactivated");
-
- try
- {
- CordovaBrowser.InvokeScript("eval", new string[] { "cordova.fireDocumentEvent('pause');" });
- }
- catch (Exception)
- {
- Debug.WriteLine("ERROR: Pause event error");
- }
- }
-
- void AppLaunching(object sender, LaunchingEventArgs e)
- {
- //Debug.WriteLine("INFO: AppLaunching");
- }
-
- void AppActivated(object sender, Microsoft.Phone.Shell.ActivatedEventArgs e)
- {
- Debug.WriteLine("INFO: AppActivated");
- try
- {
- CordovaBrowser.InvokeScript("eval", new string[] { "cordova.fireDocumentEvent('resume');" });
- }
- catch (Exception)
- {
- Debug.WriteLine("ERROR: Resume event error");
- }
- }
-
- void GapBrowser_Loaded(object sender, RoutedEventArgs e)
- {
- if (DesignerProperties.IsInDesignTool)
- {
- return;
- }
-
- // prevents refreshing web control to initial state during pages transitions
- if (this.IsBrowserInitialized) return;
-
-
-
- this.domStorageHelper = new DOMStorageHelper(this.CordovaBrowser);
-
- try
- {
-
- // Before we possibly clean the ISO-Store, we need to grab our generated UUID, so we can rewrite it after.
- string deviceUUID = "";
-
- using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
- {
- try
- {
- IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream("DeviceID.txt", FileMode.Open, FileAccess.Read, appStorage);
-
- using (StreamReader reader = new StreamReader(fileStream))
- {
- deviceUUID = reader.ReadLine();
- }
- }
- catch (Exception /*ex*/)
- {
- deviceUUID = Guid.NewGuid().ToString();
- }
-
- Debug.WriteLine("Updating IsolatedStorage for APP:DeviceID :: " + deviceUUID);
- IsolatedStorageFileStream file = new IsolatedStorageFileStream("DeviceID.txt", FileMode.Create, FileAccess.Write, appStorage);
- using (StreamWriter writeFile = new StreamWriter(file))
- {
- writeFile.WriteLine(deviceUUID);
- writeFile.Close();
- }
-
- }
-
- StreamResourceInfo streamInfo = Application.GetResourceStream(new Uri("CordovaSourceDictionary.xml", UriKind.Relative));
-
- if (streamInfo != null)
- {
- StreamReader sr = new StreamReader(streamInfo.Stream);
- //This will Read Keys Collection for the xml file
-
- XDocument document = XDocument.Parse(sr.ReadToEnd());
-
- var files = from results in document.Descendants("FilePath")
- select new
- {
- path = (string)results.Attribute("Value")
- };
- StreamResourceInfo fileResourceStreamInfo;
-
- using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
- {
-
- foreach (var file in files)
- {
- fileResourceStreamInfo = Application.GetResourceStream(new Uri(file.path, UriKind.Relative));
-
- if (fileResourceStreamInfo != null)
- {
- using (BinaryReader br = new BinaryReader(fileResourceStreamInfo.Stream))
- {
- byte[] data = br.ReadBytes((int)fileResourceStreamInfo.Stream.Length);
-
- string strBaseDir = AppRoot + file.path.Substring(0, file.path.LastIndexOf(System.IO.Path.DirectorySeparatorChar));
-
- if (!appStorage.DirectoryExists(strBaseDir))
- {
- Debug.WriteLine("INFO: Creating Directory :: " + strBaseDir);
- appStorage.CreateDirectory(strBaseDir);
- }
-
- // This will truncate/overwrite an existing file, or
- using (IsolatedStorageFileStream outFile = appStorage.OpenFile(AppRoot + file.path, FileMode.Create))
- {
- Debug.WriteLine("INFO: Writing data for " + AppRoot + file.path + " and length = " + data.Length);
- using (var writer = new BinaryWriter(outFile))
- {
- writer.Write(data);
- }
- }
- }
- }
- else
- {
- Debug.WriteLine("ERROR: Failed to write file :: " + file.path + " did you forget to add it to the project?");
- }
- }
- }
- }
-
- CordovaBrowser.Navigate(StartPageUri);
- IsBrowserInitialized = true;
- AttachHardwareButtonHandlers();
- }
- catch (Exception ex)
- {
- Debug.WriteLine("ERROR: Exception in GapBrowser_Loaded :: {0}", ex.Message);
- }
- }
-
- void AttachHardwareButtonHandlers()
- {
- PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
- if (frame != null)
- {
- PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
-
- if (page != null)
- {
- page.BackKeyPress += new EventHandler<CancelEventArgs>(page_BackKeyPress);
-
- this.orientationHelper = new OrientationHelper(this.CordovaBrowser, page);
-
- }
- }
- }
-
- void page_BackKeyPress(object sender, CancelEventArgs e)
- {
-
- if (OverrideBackButton)
- {
- try
- {
- CordovaBrowser.InvokeScript("eval", new string[] { "cordova.fireDocumentEvent('backbutton');" });
- e.Cancel = true;
- }
- catch (Exception ex)
- {
- Console.WriteLine("Exception while invoking backbutton into cordova view: " + ex.Message);
- }
- }
- else
- {
- try
- {
- PageDidChange = false;
-
- Uri uriBefore = this.Browser.Source;
- // calling js history.back with result in a page change if history was valid.
- CordovaBrowser.InvokeScript("eval", new string[] { "(function(){window.history.back();})()" });
-
- Uri uriAfter = this.Browser.Source;
-
- e.Cancel = PageDidChange || (uriBefore != uriAfter);
- }
- catch (Exception)
- {
- e.Cancel = false; // exit the app ... ?
- }
- }
- }
-
- void GapBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
- {
- string nativeReady = "(function(){ cordova.require('cordova/channel').onNativeReady.fire()})();";
-
- try
- {
- CordovaBrowser.InvokeScript("eval", new string[] { nativeReady });
- }
- catch (Exception ex)
- {
- Debug.WriteLine("Error calling js to fire nativeReady event. Did you include cordova-x.x.x.js in your html script tag?");
- }
-
- if (this.CordovaBrowser.Opacity < 1)
- {
- this.CordovaBrowser.Opacity = 1;
- RotateIn.Begin();
- }
- }
-
-
- void GapBrowser_Navigating(object sender, NavigatingEventArgs e)
- {
- if (!configHandler.URLIsAllowed(e.Uri.ToString()))
- {
- e.Cancel = true;
- return;
- }
-
- this.PageDidChange = true;
- // Debug.WriteLine("GapBrowser_Navigating to :: " + e.Uri.ToString());
- this.nativeExecution.ResetAllCommands();
-
- // TODO: check whitelist / blacklist
- // NOTE: Navigation can be cancelled by setting : e.Cancel = true;
- }
-
- /*
- * This method does the work of routing commands
- * NotifyEventArgs.Value contains a string passed from JS
- * If the command already exists in our map, we will just attempt to call the method(action) specified, and pass the args along
- * Otherwise, we create a new instance of the command, add it to the map, and call it ...
- * This method may also receive JS error messages caught by window.onerror, in any case where the commandStr does not appear to be a valid command
- * it is simply output to the debugger output, and the method returns.
- *
- **/
- void GapBrowser_ScriptNotify(object sender, NotifyEventArgs e)
- {
- string commandStr = e.Value;
-
- if (commandStr.IndexOf("DOMStorage") == 0)
- {
- this.domStorageHelper.HandleStorageCommand(commandStr);
- return;
- }
- else if (commandStr.IndexOf("Orientation") == 0)
- {
- this.orientationHelper.HandleCommand(commandStr);
- return;
- }
-
- CordovaCommandCall commandCallParams = CordovaCommandCall.Parse(commandStr);
-
- if (commandCallParams == null)
- {
- // ERROR
- Debug.WriteLine("ScriptNotify :: " + commandStr);
- }
- else if (commandCallParams.Service == "CoreEvents")
- {
- switch (commandCallParams.Action.ToLower())
- {
- case "overridebackbutton":
- string arg0 = JsonHelper.Deserialize<string[]>(commandCallParams.Args)[0];
- this.OverrideBackButton = (arg0 != null && arg0.Length > 0 && arg0.ToLower() == "true");
- break;
- }
- }
- else
- {
- if (configHandler.IsPluginAllowed(commandCallParams.Service))
- {
- nativeExecution.ProcessCommand(commandCallParams);
- }
- else
- {
- Debug.WriteLine("Error::Plugin not allowed in config.xml. " + commandCallParams.Service);
- }
- }
- }
-
- public void LoadPage(string url)
- {
- try
- {
- Uri newLoc = new Uri(url,UriKind.RelativeOrAbsolute);
- CordovaBrowser.Navigate(newLoc);
- }
- catch(Exception)
- {
-
- }
- }
-
- private void GapBrowser_Unloaded(object sender, RoutedEventArgs e)
- {
-
- }
-
- private void GapBrowser_NavigationFailed(object sender, System.Windows.Navigation.NavigationFailedEventArgs e)
- {
- Debug.WriteLine("GapBrowser_NavigationFailed :: " + e.Uri.ToString());
- }
-
- private void GapBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
- {
- Debug.WriteLine("GapBrowser_Navigated :: " + e.Uri.ToString());
- }
-
-
- }
-}
diff --git a/templates/standalone/cordovalib/DOMStorageHelper.cs b/templates/standalone/cordovalib/DOMStorageHelper.cs
deleted file mode 100644
index f57bae4..0000000
--- a/templates/standalone/cordovalib/DOMStorageHelper.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using System.IO.IsolatedStorage;
-using System.Collections.Generic;
-using Microsoft.Phone.Controls;
-using System.Linq;
-using WPCordovaClassLib.Cordova.JSON;
-
-/*
- * Translates DOMStorage API between JS and Isolated Storage
- * Missing pieces : QUOTA_EXCEEDED_ERR + StorageEvent
- * */
-
-namespace WPCordovaClassLib
-{
- public class DOMStorageHelper
- {
- protected WebBrowser webBrowser1;
-
- public DOMStorageHelper(WebBrowser gapBrowser)
- {
- this.webBrowser1 = gapBrowser;
- // always clear session at creation
- UserSettings["sessionStorage"] = new Dictionary<string, string>();
-
- if (!UserSettings.Contains("localStorage"))
- {
- UserSettings["localStorage"] = new Dictionary<string, string>();
- UserSettings.Save();
- }
- Application.Current.Exit += new EventHandler(OnAppExit);
- }
-
- void OnAppExit(object sender, EventArgs e)
- {
- UserSettings.Remove("sessionStorage");
- UserSettings.Save();
- }
-
- protected IsolatedStorageSettings UserSettings
- {
- get
- {
- return IsolatedStorageSettings.ApplicationSettings;
- }
- }
-
- protected Dictionary<string, string> getStorageByType(string type)
- {
- if (!UserSettings.Contains(type))
- {
- UserSettings[type] = new Dictionary<string, string>();
- UserSettings.Save();
- }
- return UserSettings[type] as Dictionary<string, string>;
- }
-
-
- public void HandleStorageCommand(string commandStr)
- {
-
- string[] split = commandStr.Split('/');
- if (split.Length > 3)
- {
- string api = split[0];
- string type = split[1]; // localStorage || sessionStorage
- string command = split[2];
- string param = split[3];
-
- Dictionary<string, string> currentStorage = getStorageByType(type);
-
- switch (command)
- {
- case "get":
- {
-
- if (currentStorage.Keys.Contains(param))
- {
- string value = currentStorage[param];
- webBrowser1.InvokeScript("execScript", "window." + type + ".onResult('" + param + "','" + value + "');");
- }
- else
- {
- webBrowser1.InvokeScript("execScript", "window." + type + ".onResult('" + param + "');");
- }
-
- }
- break;
- case "load":
- {
- string[] keys = currentStorage.Keys.ToArray();
- string jsonString = JsonHelper.Serialize(keys);
- string callbackJS = "window." + type + ".onKeysChanged('" + jsonString + "');";
- webBrowser1.InvokeScript("execScript", callbackJS);
- }
- break;
- case "set":
- {
- // TODO: check that length is not out of bounds
- currentStorage[param] = split[4];
- UserSettings.Save();
- string[] keys = currentStorage.Keys.ToArray();
- string jsonString = JsonHelper.Serialize(keys);
- string callbackJS = "window." + type + ".onKeysChanged('" + jsonString + "');";
- webBrowser1.InvokeScript("execScript", callbackJS);
- }
- break;
- case "remove":
- currentStorage.Remove(param);
- UserSettings.Save();
- break;
- case "clear":
- currentStorage = new Dictionary<string, string>();
- UserSettings[type] = currentStorage;
- UserSettings.Save();
- break;
- }
-
- }
-
- }
- }
-}
diff --git a/templates/standalone/cordovalib/ImageExifHelper.cs b/templates/standalone/cordovalib/ImageExifHelper.cs
deleted file mode 100644
index 62b6462..0000000
--- a/templates/standalone/cordovalib/ImageExifHelper.cs
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- Licensed 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.
-
-*/
-
-using System;
-using System.Diagnostics;
-using System.IO;
-using System.Windows.Media.Imaging;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
- public class ImageExifOrientation
- {
- public const int Portrait = 1;
- public const int PortraitUpsideDown = 3;
- public const int LandscapeLeft = 6;
- public const int LandscapeRight = 8;
- }
-
- public class ImageExifHelper
- {
-
- public static Stream RotateStream(Stream stream, int angle)
- {
- stream.Position = 0;
- if (angle % 90 != 0 || angle < 0)
- {
- throw new ArgumentException();
- }
- if (angle % 360 == 0)
- {
- return stream;
- }
-
- angle = angle % 360;
-
- BitmapImage bitmap = new BitmapImage();
- bitmap.SetSource(stream);
- WriteableBitmap wbSource = new WriteableBitmap(bitmap);
-
- WriteableBitmap wbTarget = null;
-
- int srcPixelWidth = wbSource.PixelWidth;
- int srcPixelHeight = wbSource.PixelHeight;
-
- if (angle % 180 == 0)
- {
- wbTarget = new WriteableBitmap(srcPixelWidth, srcPixelHeight);
- }
- else
- {
- wbTarget = new WriteableBitmap(srcPixelHeight, srcPixelWidth);
- }
-
- int destPixelWidth = wbTarget.PixelWidth;
- int[] srcPxls = wbSource.Pixels;
- int[] destPxls = wbTarget.Pixels;
-
- // this ugly if/else is to avoid a conditional check for every pixel
- if (angle == 90)
- {
- for (int x = 0; x < srcPixelWidth; x++)
- {
- for (int y = 0; y < srcPixelHeight; y++)
- {
- destPxls[(srcPixelHeight - y - 1) + (x * destPixelWidth)] = srcPxls[x + y * srcPixelWidth];
- }
- }
- }
- else if (angle == 180)
- {
- for (int x = 0; x < srcPixelWidth; x++)
- {
- for (int y = 0; y < srcPixelHeight; y++)
- {
- destPxls[(srcPixelWidth - x - 1) + (srcPixelHeight - y - 1) * srcPixelWidth] = srcPxls[x + y * srcPixelWidth];
- }
- }
- }
- else if (angle == 270)
- {
- for (int x = 0; x < srcPixelWidth; x++)
- {
- for (int y = 0; y < srcPixelHeight; y++)
- {
- destPxls[y + (srcPixelWidth - x - 1) * destPixelWidth] = srcPxls[x + y * srcPixelWidth];
- }
- }
- }
-
- MemoryStream targetStream = new MemoryStream();
- wbTarget.SaveJpeg(targetStream, destPixelWidth, wbTarget.PixelHeight, 0, 100);
- return targetStream;
- }
-
- public static int getImageOrientationFromStream(Stream imgStream)
- {
-
- // 0xFFD8 : jpgHeader
- // 0xFFE1 :
- // 0x???? : length of exif data
- // 0x????, 0x???? : Chars 'E','x','i','f'
- // 0x0000 : 2 empty bytes
- // <== mark beginning of tags SIZE:ID:VALUE
- // 0x???? : 'II' or 'MM' for Intel or Motorola ( always getting II on my WP7 devices ), determines littleEndian-ness
- // 0x002A : marker value
- // 0x???? : offset to the Image File Data
-
- // XXXX possible space before actual tag data ... we skip to mark + offset
-
- // 0x???? number of exif tags present
-
- // make sure we are at the beginning
- imgStream.Seek(0, SeekOrigin.Begin);
- BinaryReader reader = new BinaryReader(imgStream);
-
- byte[] jpgHdr = reader.ReadBytes(2); // always (0xFFD8)
-
- byte start = reader.ReadByte(); // 0xFF
- byte index = reader.ReadByte(); // 0xE1
-
- while (start == 0xFF && index != 0xE1) // This never seems to happen, todo: optimize
- {
- // Get the data length
- ushort dLen = BitConverter.ToUInt16(reader.ReadBytes(2), 0);
- // skip along
- reader.ReadBytes(dLen - 2);
- start = reader.ReadByte();
- index = reader.ReadByte();
- }
-
- // It's only success if we found the 0xFFE1 marker
- if (start != 0xFF || index != 0xE1)
- {
- // throw new Exception("Could not find Exif data block");
- Debug.WriteLine("Did not find EXIF data");
- return 0;
- }
-
- // read 2 byte length of EXIF data
- ushort exifLen = BitConverter.ToUInt16(reader.ReadBytes(2), 0);
- String exif = ""; // build the string
- for (var n = 0; n < 4; n++)
- {
- exif += reader.ReadChar();
- }
- if (exif != "Exif")
- {
- // did not find exif data ...
- Debug.WriteLine("Did not find EXIF data");
- return 0;
- }
-
- // read 2 empty bytes
- //ushort emptyBytes = BitConverter.ToUInt16(reader.ReadBytes(2), 0);
- reader.ReadBytes(2);
-
- long headerMark = reader.BaseStream.Position; // where are we now <==
-
- //bool isLEndian = (reader.ReadChar() + "" + reader.ReadChar()) == "II";
- reader.ReadBytes(2); // 'II' or 'MM', but we don't care
-
- if (0x002A != BitConverter.ToUInt16(reader.ReadBytes(2), 0))
- {
- Debug.WriteLine("Error in data != 0x002A");
- return 0;
- }
-
- // Get the offset to the IFD (image file directory)
- ushort imgOffset = BitConverter.ToUInt16(reader.ReadBytes(2), 0);
-
- imgStream.Position = headerMark + imgOffset;
- ushort tagCount = BitConverter.ToUInt16(reader.ReadBytes(2), 0);
- for (ushort x = 0; x < tagCount; x++)
- {
- // Orientation = 0x112, aka 274
- if (0x112 == BitConverter.ToUInt16(reader.ReadBytes(2), 0))
- {
- ushort dType = BitConverter.ToUInt16(reader.ReadBytes(2), 0);
- // don't care ..
- uint comps = reader.ReadUInt32();
- byte[] tagData = reader.ReadBytes(4);
- int orientation = (int)tagData[0];
- Debug.WriteLine("orientation = " + orientation.ToString());
- return orientation;
- // 6 means rotate clockwise 90 deg
- // 8 means rotate counter-clockwise 90 deg
- // 1 means all is good
- // 3 means flip vertical
- }
- // skip to the next item, 12 bytes each
- reader.BaseStream.Seek(10, SeekOrigin.Current);
- }
- return 0;
- }
-
- }
-}
diff --git a/templates/standalone/cordovalib/JSON/JsonHelper.cs b/templates/standalone/cordovalib/JSON/JsonHelper.cs
deleted file mode 100644
index 44511f6..0000000
--- a/templates/standalone/cordovalib/JSON/JsonHelper.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using System.Runtime.Serialization.Json;
-using System.IO;
-using System.Collections.Generic;
-using System.Text;
-using System.Diagnostics;
-
-namespace WPCordovaClassLib.Cordova.JSON
-{
- /// <summary>
- /// Provides JSON serialization/deserialization functionality.
- /// </summary>
- public static class JsonHelper
- {
- /// <summary>
- /// Serializes object to JSON string representation
- /// </summary>
- /// <param name="obj">object to serialize</param>
- /// <returns>JSON representation of the object. Returns 'null' string for null passed as argument</returns>
- public static string Serialize(object obj)
- {
- if (obj == null)
- {
- return "null";
- }
-
- DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());
-
- MemoryStream ms = new MemoryStream();
- ser.WriteObject(ms, obj);
-
- ms.Position = 0;
-
- string json = String.Empty;
-
- using (StreamReader sr = new StreamReader(ms))
- {
- json = sr.ReadToEnd();
- }
-
- ms.Close();
-
- return json;
-
- }
-
- /// <summary>
- /// Parses json string to object instance
- /// </summary>
- /// <typeparam name="T">type of the object</typeparam>
- /// <param name="json">json string representation of the object</param>
- /// <returns>Deserialized object instance</returns>
- public static T Deserialize<T>(string json)
- {
- DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(T));
- object result = null;
- try
- {
- using (MemoryStream mem = new MemoryStream(Encoding.UTF8.GetBytes(json)))
- {
- result = deserializer.ReadObject(mem);
- }
- }
- catch (Exception ex)
- {
- Debug.WriteLine(ex.Message);
- Debug.WriteLine("Failed to deserialize " + typeof(T) + " with JSON value :: " + json);
- }
-
- return (T)result;
-
- }
- }
-}
diff --git a/templates/standalone/cordovalib/NativeExecution.cs b/templates/standalone/cordovalib/NativeExecution.cs
deleted file mode 100644
index af6b207..0000000
--- a/templates/standalone/cordovalib/NativeExecution.cs
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Diagnostics;
-using System.Threading;
-using Microsoft.Devices;
-using Microsoft.Phone.Controls;
-using WPCordovaClassLib.Cordova.Commands;
-using System.Windows;
-
-namespace WPCordovaClassLib.Cordova
-{
- /// <summary>
- /// Implements logic to execute native command and return result back.
- /// All commands are executed asynchronous.
- /// </summary>
- public class NativeExecution
- {
- /// <summary>
- /// Reference to web part where application is hosted
- /// </summary>
- private readonly WebBrowser webBrowser;
-
- /// <summary>
- /// Creates new instance of a NativeExecution class.
- /// </summary>
- /// <param name="browser">Reference to web part where application is hosted</param>
- public NativeExecution(ref WebBrowser browser)
- {
- if (browser == null)
- {
- throw new ArgumentNullException("browser");
- }
-
- this.webBrowser = browser;
- }
-
- /// <summary>
- /// Returns where application is running on emulator
- /// </summary>
- /// <returns>True if running on emulator, otherwise False</returns>
- public static bool IsRunningOnEmulator()
- {
- return Microsoft.Devices.Environment.DeviceType == DeviceType.Emulator;
- }
-
- public void ResetAllCommands()
- {
- CommandFactory.ResetAllCommands();
- }
-
- public void AutoLoadCommand(string commandService)
- {
- BaseCommand bc = CommandFactory.CreateByServiceName(commandService);
- if (bc != null)
- {
- bc.OnInit();
- }
-
- }
-
- /// <summary>
- /// Executes command and returns result back.
- /// </summary>
- /// <param name="commandCallParams">Command to execute</param>
- public void ProcessCommand(CordovaCommandCall commandCallParams)
- {
-
- if (commandCallParams == null)
- {
- throw new ArgumentNullException("commandCallParams");
- }
-
- try
- {
- BaseCommand bc = CommandFactory.CreateByServiceName(commandCallParams.Service);
-
- if (bc == null)
- {
- this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION));
- return;
- }
-
- EventHandler<PluginResult> OnCommandResultHandler = delegate(object o, PluginResult res)
- {
- if (res.CallbackId == null || res.CallbackId == commandCallParams.CallbackId)
- {
- this.OnCommandResult(commandCallParams.CallbackId, res);
- if (!res.KeepCallback)
- {
- bc.RemoveResultHandler(commandCallParams.CallbackId);
- }
- }
- };
-
- //bc.OnCommandResult += OnCommandResultHandler;
- bc.AddResultHandler(commandCallParams.CallbackId, OnCommandResultHandler);
-
- EventHandler<ScriptCallback> OnCustomScriptHandler = delegate(object o, ScriptCallback script)
- {
- this.InvokeScriptCallback(script);
- };
-
- bc.OnCustomScript += OnCustomScriptHandler;
-
- ThreadStart methodInvokation = () =>
- {
- try
- {
- bc.InvokeMethodNamed(commandCallParams.CallbackId,commandCallParams.Action, commandCallParams.Args);
- }
- catch (Exception ex)
- {
- Debug.WriteLine("ERROR: Exception in ProcessCommand :: " + ex.Message);
- bc.RemoveResultHandler(commandCallParams.CallbackId);
- bc.OnCustomScript -= OnCustomScriptHandler;
-
- Debug.WriteLine("ERROR: failed to InvokeMethodNamed :: " + commandCallParams.Action + " on Object :: " + commandCallParams.Service);
- this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.INVALID_ACTION));
- return;
- }
- };
-
- if ((bc is File) || (bc is Accelerometer))
- {
- // Due to some issues with the IsolatedStorage in current version of WP8 SDK we have to run all File Api commands synchronously.
- // TODO: test this in WP8 RTM
- methodInvokation.Invoke();
- }
- else
- {
- new Thread(methodInvokation).Start();
- }
-
-
- }
- catch (Exception ex)
- {
- // ERROR
- Debug.WriteLine(String.Format("ERROR: Unable to execute command :: {0}:{1}:{3} ",
- commandCallParams.Service, commandCallParams.Action, ex.Message));
-
- this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.ERROR));
- return;
- }
- }
-
- /// <summary>
- /// Handles command execution result.
- /// </summary>
- /// <param name="callbackId">Command callback identifier on client side</param>
- /// <param name="result">Execution result</param>
- private void OnCommandResult(string callbackId, PluginResult result)
- {
- #region args checking
-
- if (result == null)
- {
- Debug.WriteLine("ERROR: OnCommandResult missing result argument");
- return;
- }
-
- if (String.IsNullOrEmpty(callbackId))
- {
- Debug.WriteLine("ERROR: OnCommandResult missing callbackId argument");
- return;
- }
-
- if (!String.IsNullOrEmpty(result.CallbackId) && callbackId != result.CallbackId)
- {
- Debug.WriteLine("Multiple Overlapping Results :: " + result.CallbackId + " :: " + callbackId);
- return;
- }
-
- #endregion
-
- string jsonResult = result.ToJSONString();
-
- string callback;
- string args = string.Format("('{0}',{1});", callbackId, jsonResult);
-
- if (result.Result == PluginResult.Status.NO_RESULT ||
- result.Result == PluginResult.Status.OK)
- {
- callback = @"(function(callbackId,args) {
- try { args.message = JSON.parse(args.message); } catch (ex) { }
- cordova.callbackSuccess(callbackId,args);
- })" + args;
- }
- else
- {
- callback = @"(function(callbackId,args) {
- try { args.message = JSON.parse(args.message); } catch (ex) { }
- cordova.callbackError(callbackId,args);
- })" + args;
- }
- this.InvokeScriptCallback(new ScriptCallback("eval", new string[] { callback }));
-
- }
-
- /// <summary>
- /// Executes client java script
- /// </summary>
- /// <param name="script">Script to execute on client side</param>
- private void InvokeScriptCallback(ScriptCallback script)
- {
- if (script == null)
- {
- throw new ArgumentNullException("script");
- }
-
- if (String.IsNullOrEmpty(script.ScriptName))
- {
- throw new ArgumentNullException("ScriptName");
- }
-
- //Debug.WriteLine("INFO:: About to invoke ::" + script.ScriptName + " with args ::" + script.Args[0]);
- this.webBrowser.Dispatcher.BeginInvoke((ThreadStart)delegate()
- {
- try
- {
- //Debug.WriteLine("INFO:: InvokingScript::" + script.ScriptName + " with args ::" + script.Args[0]);
- this.webBrowser.InvokeScript(script.ScriptName, script.Args);
- }
- catch (Exception ex)
- {
- Debug.WriteLine("ERROR: Exception in InvokeScriptCallback :: " + ex.Message);
- }
-
- });
- }
-
- }
-}
\ No newline at end of file
diff --git a/templates/standalone/cordovalib/OrientationHelper.cs b/templates/standalone/cordovalib/OrientationHelper.cs
deleted file mode 100644
index 81a329e..0000000
--- a/templates/standalone/cordovalib/OrientationHelper.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using Microsoft.Phone.Controls;
-
-namespace WPCordovaClassLib.Cordova
-{
- public class OrientationHelper
- {
- protected WebBrowser gapBrowser;
- protected PhoneApplicationPage page;
- // private PageOrientation CurrentOrientation = PageOrientation.PortraitUp;
- //private PageOrientation[] SupportedOrientations; // TODO:
-
- public OrientationHelper(WebBrowser gapBrowser, PhoneApplicationPage gapPage)
- {
- this.gapBrowser = gapBrowser;
- page = gapPage;
-
- page.OrientationChanged += new EventHandler<OrientationChangedEventArgs>(page_OrientationChanged);
- gapBrowser.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(gapBrowser_LoadCompleted);
-
-
- }
-
- void gapBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
- {
- int i = 0;
-
- switch (this.page.Orientation)
- {
- case PageOrientation.Portrait: // intentional fall through
- case PageOrientation.PortraitUp:
- i = 0;
- break;
- case PageOrientation.PortraitDown:
- i = 180;
- break;
- case PageOrientation.Landscape: // intentional fall through
- case PageOrientation.LandscapeLeft:
- i = -90;
- break;
- case PageOrientation.LandscapeRight:
- i = 90;
- break;
- }
- // Cordova.fireEvent('orientationchange', window);
- string jsCallback = String.Format("window.orientation = {0};", i);
-
- try
- {
- gapBrowser.InvokeScript("execScript", jsCallback);
- }
- catch (Exception)
- {
- }
- }
-
- void page_OrientationChanged(object sender, OrientationChangedEventArgs e)
- {
- int i = 0;
-
- switch (e.Orientation)
- {
- case PageOrientation.Portrait: // intentional fall through
- case PageOrientation.PortraitUp:
- i = 0;
- break;
- case PageOrientation.PortraitDown:
- i = 180;
- break;
- case PageOrientation.Landscape: // intentional fall through
- case PageOrientation.LandscapeLeft:
- i = -90;
- break;
- case PageOrientation.LandscapeRight:
- i = 90;
- break;
- }
- // Cordova.fireEvent('orientationchange', window);
- string jsCallback = String.Format("window.orientation = {0};", i);
-
- try
- {
-
- gapBrowser.InvokeScript("execScript", jsCallback);
-
- jsCallback = "var evt = document.createEvent('HTMLEvents');";
- jsCallback += "evt.initEvent( 'orientationchange', true, false );";
- jsCallback += "window.dispatchEvent(evt);";
- jsCallback += "if(window.onorientationchange){window.onorientationchange(evt);}";
-
- gapBrowser.InvokeScript("execScript", jsCallback);
- }
- catch (Exception)
- {
- }
- }
-
- public void HandleCommand(string commandStr)
- {
-
- }
- }
-
-
-}
diff --git a/templates/standalone/cordovalib/PluginResult.cs b/templates/standalone/cordovalib/PluginResult.cs
deleted file mode 100644
index 00017d2..0000000
--- a/templates/standalone/cordovalib/PluginResult.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- Licensed 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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using System.Text;
-using System.Diagnostics;
-
-namespace WPCordovaClassLib.Cordova
-{
- /// <summary>
- /// Represents command execution result
- /// </summary>
- public class PluginResult : EventArgs
- {
- /// <summary>
- /// Predefined resultant messages
- /// </summary>
- public static string[] StatusMessages = new string[]
- {
- "No result",
- "OK",
- "Class not found",
- "Illegal access",
- "Instantiation error",
- "Malformed url",
- "IO error",
- "Invalid action",
- "JSON error",
- "Error"
- };
-
- /// <summary>
- /// Possible command results status codes
- /// </summary>
- public enum Status : int
- {
- NO_RESULT = 0,
- OK,
- CLASS_NOT_FOUND_EXCEPTION,
- ILLEGAL_ACCESS_EXCEPTION,
- INSTANTIATION_EXCEPTION,
- MALFORMED_URL_EXCEPTION,
- IO_EXCEPTION,
- INVALID_ACTION,
- JSON_EXCEPTION,
- ERROR
- };
-
- public Status Result { get; private set; }
- public string Message { get; set; }
- public bool KeepCallback { get; set; }
- public string CallbackId { get; set; }
-
- /// <summary>
- /// Whether command succeded or not
- /// </summary>
- public bool IsSuccess
- {
- get
- {
- return this.Result == Status.OK || this.Result == Status.NO_RESULT;
- }
- }
-
- /// <summary>
- /// Creates new instance of the PluginResult class.
- /// </summary>
- /// <param name="status">Execution result</param>
- public PluginResult(Status status)
- : this(status, PluginResult.StatusMessages[(int)status])
- {
- }
-
- /// <summary>
- /// Creates new instance of the PluginResult class.
- /// </summary>
- /// <param name="status">Execution result</param>
- /// <param name="message">The message</param>
- public PluginResult(Status status, object message)
- {
- this.Result = status;
- this.Message = JSON.JsonHelper.Serialize(message);
- }
-
- public string ToJSONString()
- {
- string res = String.Format("\"status\":{0},\"message\":{1},\"keepCallback\":{2}",
- (int)this.Result,
- this.Message,
- this.KeepCallback.ToString().ToLower());
-
- res = "{" + res + "}";
- return res;
-
- }
-
- [Obsolete]
- public string ToCallbackString(string callbackId, string successCallback, string errorCallback)
- {
- if (this.IsSuccess)
- {
- StringBuilder buf = new StringBuilder("");
- buf.Append(String.Format("{0}('{1}',{2});", successCallback, callbackId, this.ToJSONString()));
- return buf.ToString();
- }
- else
- {
- return String.Format("{0}('{1}',{2});", errorCallback, callbackId, this.ToJSONString());
- }
- }
-
- public override String ToString()
- {
- return this.ToJSONString();
- }
-
- }
-
-}
diff --git a/templates/standalone/cordovalib/ScriptCallback.cs b/templates/standalone/cordovalib/ScriptCallback.cs
deleted file mode 100644
index 7878134..0000000
--- a/templates/standalone/cordovalib/ScriptCallback.cs
+++ /dev/null
@@ -1,80 +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.
-*/
-
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using WPCordovaClassLib.Cordova.JSON;
-using System.Diagnostics;
-
-namespace WPCordovaClassLib.Cordova
-{
- /// <summary>
- /// Represents client script function to execute
- /// </summary>
- public class ScriptCallback : EventArgs
- {
- /// <summary>
- /// The scripting function to execute.
- /// </summary>
- public string ScriptName { get; private set; }
-
- /// <summary>
- /// A variable number of strings to pass to the function as parameters.
- /// </summary>
- public string[] Args { get; private set; }
-
- /// <summary>
- /// Creates new instance of a ScriptCallback class.
- /// </summary>
- /// <param name="function">The scripting function to execute</param>
- /// <param name="args">A variable number of strings to pass to the function as parameters</param>
- public ScriptCallback(string function, string[] args)
- {
- this.ScriptName = function;
- this.Args = args;
- }
-
- /// <summary>
- /// Creates new instance of a ScriptCallback class.
- /// </summary>
- /// <param name="function">The scripting function to execute</param>
- /// <param name="id">The id argument</param>
- /// <param name="msg">The message argument</param>
- /// <param name="value">The value argument</param>
- public ScriptCallback(string function, string id, object msg, object value)
- {
- this.ScriptName = function;
-
- String arg = String.Format("{{\"id\": {0}, \"msg\": {1}, \"value\": {2}}}",
- JsonHelper.Serialize(id), JsonHelper.Serialize(msg), JsonHelper.Serialize(value));
-
- this.Args = new string[] { arg };
- }
-
-
- }
-}
diff --git a/templates/standalone/cordovalib/resources/notification-beep.wav b/templates/standalone/cordovalib/resources/notification-beep.wav
deleted file mode 100644
index d0ad085..0000000
--- a/templates/standalone/cordovalib/resources/notification-beep.wav
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/resources/notification-beep.wav b/templates/standalone/resources/notification-beep.wav
deleted file mode 100644
index d0ad085..0000000
--- a/templates/standalone/resources/notification-beep.wav
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/www/cordova.js b/templates/standalone/www/cordova.js
deleted file mode 100644
index bb348e1..0000000
--- a/templates/standalone/www/cordova.js
+++ /dev/null
@@ -1,6791 +0,0 @@
-// Platform: windowsphone
-// 2.9.0rc1-0-g002f33d
-/*
- 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.
-*/
-;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.9.0rc1-0-g002f33d';
-// file: lib/scripts/require.js
-
-var require,
- define;
-
-(function () {
- var modules = {},
- // Stack of moduleIds currently being built.
- requireStack = [],
- // Map of module ID -> index into requireStack of modules currently being built.
- inProgressModules = {},
- SEPERATOR = ".";
-
-
-
- function build(module) {
- var factory = module.factory,
- localRequire = function (id) {
- var resultantId = id;
- //Its a relative path, so lop off the last portion and add the id (minus "./")
- if (id.charAt(0) === ".") {
- resultantId = module.id.slice(0, module.id.lastIndexOf(SEPERATOR)) + SEPERATOR + id.slice(2);
- }
- return require(resultantId);
- };
- module.exports = {};
- delete module.factory;
- factory(localRequire, module.exports, module);
- return module.exports;
- }
-
- require = function (id) {
- if (!modules[id]) {
- throw "module " + id + " not found";
- } else if (id in inProgressModules) {
- var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id;
- throw "Cycle in require graph: " + cycle;
- }
- if (modules[id].factory) {
- try {
- inProgressModules[id] = requireStack.length;
- requireStack.push(id);
- return build(modules[id]);
- } finally {
- delete inProgressModules[id];
- requireStack.pop();
- }
- }
- return modules[id].exports;
- };
-
- define = function (id, factory) {
- if (modules[id]) {
- throw "module " + id + " already defined";
- }
-
- modules[id] = {
- id: id,
- factory: factory
- };
- };
-
- define.remove = function (id) {
- delete modules[id];
- };
-
- define.moduleMap = modules;
-})();
-
-//Export for use in node
-if (typeof module === "object" && typeof require === "function") {
- module.exports.require = require;
- module.exports.define = define;
-}
-
-// file: lib/cordova.js
-define("cordova", function(require, exports, module) {
-
-
-var channel = require('cordova/channel');
-
-/**
- * Listen for DOMContentLoaded and notify our channel subscribers.
- */
-document.addEventListener('DOMContentLoaded', function() {
- channel.onDOMContentLoaded.fire();
-}, false);
-if (document.readyState == 'complete' || document.readyState == 'interactive') {
- channel.onDOMContentLoaded.fire();
-}
-
-/**
- * Intercept calls to addEventListener + removeEventListener and handle deviceready,
- * resume, and pause events.
- */
-var m_document_addEventListener = document.addEventListener;
-var m_document_removeEventListener = document.removeEventListener;
-var m_window_addEventListener = window.addEventListener;
-var m_window_removeEventListener = window.removeEventListener;
-
-/**
- * Houses custom event handlers to intercept on document + window event listeners.
- */
-var documentEventHandlers = {},
- windowEventHandlers = {};
-
-document.addEventListener = function(evt, handler, capture) {
- var e = evt.toLowerCase();
- if (typeof documentEventHandlers[e] != 'undefined') {
- documentEventHandlers[e].subscribe(handler);
- } else {
- m_document_addEventListener.call(document, evt, handler, capture);
- }
-};
-
-window.addEventListener = function(evt, handler, capture) {
- var e = evt.toLowerCase();
- if (typeof windowEventHandlers[e] != 'undefined') {
- windowEventHandlers[e].subscribe(handler);
- } else {
- m_window_addEventListener.call(window, evt, handler, capture);
- }
-};
-
-document.removeEventListener = function(evt, handler, capture) {
- var e = evt.toLowerCase();
- // If unsubscribing from an event that is handled by a plugin
- if (typeof documentEventHandlers[e] != "undefined") {
- documentEventHandlers[e].unsubscribe(handler);
- } else {
- m_document_removeEventListener.call(document, evt, handler, capture);
- }
-};
-
-window.removeEventListener = function(evt, handler, capture) {
- var e = evt.toLowerCase();
- // If unsubscribing from an event that is handled by a plugin
- if (typeof windowEventHandlers[e] != "undefined") {
- windowEventHandlers[e].unsubscribe(handler);
- } else {
- m_window_removeEventListener.call(window, evt, handler, capture);
- }
-};
-
-function createEvent(type, data) {
- var event = document.createEvent('Events');
- event.initEvent(type, false, false);
- if (data) {
- for (var i in data) {
- if (data.hasOwnProperty(i)) {
- event[i] = data[i];
- }
- }
- }
- return event;
-}
-
-if(typeof window.console === "undefined") {
- window.console = {
- log:function(){}
- };
-}
-
-var cordova = {
- define:define,
- require:require,
- /**
- * Methods to add/remove your own addEventListener hijacking on document + window.
- */
- addWindowEventHandler:function(event) {
- return (windowEventHandlers[event] = channel.create(event));
- },
- addStickyDocumentEventHandler:function(event) {
- return (documentEventHandlers[event] = channel.createSticky(event));
- },
- addDocumentEventHandler:function(event) {
- return (documentEventHandlers[event] = channel.create(event));
- },
- removeWindowEventHandler:function(event) {
- delete windowEventHandlers[event];
- },
- removeDocumentEventHandler:function(event) {
- delete documentEventHandlers[event];
- },
- /**
- * Retrieve original event handlers that were replaced by Cordova
- *
- * @return object
- */
- getOriginalHandlers: function() {
- return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener},
- 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}};
- },
- /**
- * Method to fire event from native code
- * bNoDetach is required for events which cause an exception which needs to be caught in native code
- */
- fireDocumentEvent: function(type, data, bNoDetach) {
- var evt = createEvent(type, data);
- if (typeof documentEventHandlers[type] != 'undefined') {
- if( bNoDetach ) {
- documentEventHandlers[type].fire(evt);
- }
- else {
- setTimeout(function() {
- // Fire deviceready on listeners that were registered before cordova.js was loaded.
- if (type == 'deviceready') {
- document.dispatchEvent(evt);
- }
- documentEventHandlers[type].fire(evt);
- }, 0);
- }
- } else {
- document.dispatchEvent(evt);
- }
- },
- fireWindowEvent: function(type, data) {
- var evt = createEvent(type,data);
- if (typeof windowEventHandlers[type] != 'undefined') {
- setTimeout(function() {
- windowEventHandlers[type].fire(evt);
- }, 0);
- } else {
- window.dispatchEvent(evt);
- }
- },
-
- /**
- * Plugin callback mechanism.
- */
- // Randomize the starting callbackId to avoid collisions after refreshing or navigating.
- // This way, it's very unlikely that any new callback would get the same callbackId as an old callback.
- callbackId: Math.floor(Math.random() * 2000000000),
- callbacks: {},
- callbackStatus: {
- NO_RESULT: 0,
- OK: 1,
- CLASS_NOT_FOUND_EXCEPTION: 2,
- ILLEGAL_ACCESS_EXCEPTION: 3,
- INSTANTIATION_EXCEPTION: 4,
- MALFORMED_URL_EXCEPTION: 5,
- IO_EXCEPTION: 6,
- INVALID_ACTION: 7,
- JSON_EXCEPTION: 8,
- ERROR: 9
- },
-
- /**
- * Called by native code when returning successful result from an action.
- */
- callbackSuccess: function(callbackId, args) {
- try {
- cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback);
- } catch (e) {
- console.log("Error in error callback: " + callbackId + " = "+e);
- }
- },
-
- /**
- * Called by native code when returning error result from an action.
- */
- callbackError: function(callbackId, args) {
- // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative.
- // Derive success from status.
- try {
- cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback);
- } catch (e) {
- console.log("Error in error callback: " + callbackId + " = "+e);
- }
- },
-
- /**
- * Called by native code when returning the result from an action.
- */
- callbackFromNative: function(callbackId, success, status, args, keepCallback) {
- var callback = cordova.callbacks[callbackId];
- if (callback) {
- if (success && status == cordova.callbackStatus.OK) {
- callback.success && callback.success.apply(null, args);
- } else if (!success) {
- callback.fail && callback.fail.apply(null, args);
- }
-
- // Clear callback if not expecting any more results
- if (!keepCallback) {
- delete cordova.callbacks[callbackId];
- }
- }
- },
- addConstructor: function(func) {
- channel.onCordovaReady.subscribe(function() {
- try {
- func();
- } catch(e) {
- console.log("Failed to run constructor: " + e);
- }
- });
- }
-};
-
-// Register pause, resume and deviceready channels as events on document.
-channel.onPause = cordova.addDocumentEventHandler('pause');
-channel.onResume = cordova.addDocumentEventHandler('resume');
-channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready');
-
-module.exports = cordova;
-
-});
-
-// file: lib/common/argscheck.js
-define("cordova/argscheck", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-var utils = require('cordova/utils');
-
-var moduleExports = module.exports;
-
-var typeMap = {
- 'A': 'Array',
- 'D': 'Date',
- 'N': 'Number',
- 'S': 'String',
- 'F': 'Function',
- 'O': 'Object'
-};
-
-function extractParamName(callee, argIndex) {
- return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex];
-}
-
-function checkArgs(spec, functionName, args, opt_callee) {
- if (!moduleExports.enableChecks) {
- return;
- }
- var errMsg = null;
- var typeName;
- for (var i = 0; i < spec.length; ++i) {
- var c = spec.charAt(i),
- cUpper = c.toUpperCase(),
- arg = args[i];
- // Asterix means allow anything.
- if (c == '*') {
- continue;
- }
- typeName = utils.typeName(arg);
- if ((arg === null || arg === undefined) && c == cUpper) {
- continue;
- }
- if (typeName != typeMap[cUpper]) {
- errMsg = 'Expected ' + typeMap[cUpper];
- break;
- }
- }
- if (errMsg) {
- errMsg += ', but got ' + typeName + '.';
- errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg;
- // Don't log when running jake test.
- if (typeof jasmine == 'undefined') {
- console.error(errMsg);
- }
- throw TypeError(errMsg);
- }
-}
-
-function getValue(value, defaultValue) {
- return value === undefined ? defaultValue : value;
-}
-
-moduleExports.checkArgs = checkArgs;
-moduleExports.getValue = getValue;
-moduleExports.enableChecks = true;
-
-
-});
-
-// file: lib/common/builder.js
-define("cordova/builder", function(require, exports, module) {
-
-var utils = require('cordova/utils');
-
-function each(objects, func, context) {
- for (var prop in objects) {
- if (objects.hasOwnProperty(prop)) {
- func.apply(context, [objects[prop], prop]);
- }
- }
-}
-
-function clobber(obj, key, value) {
- exports.replaceHookForTesting(obj, key);
- obj[key] = value;
- // Getters can only be overridden by getters.
- if (obj[key] !== value) {
- utils.defineGetter(obj, key, function() {
- return value;
- });
- }
-}
-
-function assignOrWrapInDeprecateGetter(obj, key, value, message) {
- if (message) {
- utils.defineGetter(obj, key, function() {
- console.log(message);
- delete obj[key];
- clobber(obj, key, value);
- return value;
- });
- } else {
- clobber(obj, key, value);
- }
-}
-
-function include(parent, objects, clobber, merge) {
- each(objects, function (obj, key) {
- try {
- var result = obj.path ? require(obj.path) : {};
-
- if (clobber) {
- // Clobber if it doesn't exist.
- if (typeof parent[key] === 'undefined') {
- assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated);
- } else if (typeof obj.path !== 'undefined') {
- // If merging, merge properties onto parent, otherwise, clobber.
- if (merge) {
- recursiveMerge(parent[key], result);
- } else {
- assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated);
- }
- }
- result = parent[key];
- } else {
- // Overwrite if not currently defined.
- if (typeof parent[key] == 'undefined') {
- assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated);
- } else {
- // Set result to what already exists, so we can build children into it if they exist.
- result = parent[key];
- }
- }
-
- if (obj.children) {
- include(result, obj.children, clobber, merge);
- }
- } catch(e) {
- utils.alert('Exception building cordova JS globals: ' + e + ' for key "' + key + '"');
- }
- });
-}
-
-/**
- * Merge properties from one object onto another recursively. Properties from
- * the src object will overwrite existing target property.
- *
- * @param target Object to merge properties into.
- * @param src Object to merge properties from.
- */
-function recursiveMerge(target, src) {
- for (var prop in src) {
- if (src.hasOwnProperty(prop)) {
- if (target.prototype && target.prototype.constructor === target) {
- // If the target object is a constructor override off prototype.
- clobber(target.prototype, prop, src[prop]);
- } else {
- if (typeof src[prop] === 'object' && typeof target[prop] === 'object') {
- recursiveMerge(target[prop], src[prop]);
- } else {
- clobber(target, prop, src[prop]);
- }
- }
- }
- }
-}
-
-exports.buildIntoButDoNotClobber = function(objects, target) {
- include(target, objects, false, false);
-};
-exports.buildIntoAndClobber = function(objects, target) {
- include(target, objects, true, false);
-};
-exports.buildIntoAndMerge = function(objects, target) {
- include(target, objects, true, true);
-};
-exports.recursiveMerge = recursiveMerge;
-exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter;
-exports.replaceHookForTesting = function() {};
-
-});
-
-// file: lib/common/channel.js
-define("cordova/channel", function(require, exports, module) {
-
-var utils = require('cordova/utils'),
- nextGuid = 1;
-
-/**
- * Custom pub-sub "channel" that can have functions subscribed to it
- * This object is used to define and control firing of events for
- * cordova initialization, as well as for custom events thereafter.
- *
- * The order of events during page load and Cordova startup is as follows:
- *
- * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed.
- * onNativeReady* Internal event that indicates the Cordova native side is ready.
- * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created.
- * onCordovaInfoReady* Internal event fired when device properties are available.
- * onCordovaConnectionReady* Internal event fired when the connection property has been set.
- * onDeviceReady* User event fired to indicate that Cordova is ready
- * onResume User event fired to indicate a start/resume lifecycle event
- * onPause User event fired to indicate a pause lifecycle event
- * onDestroy* Internal event fired when app is being destroyed (User should use window.onunload event, not this one).
- *
- * The events marked with an * are sticky. Once they have fired, they will stay in the fired state.
- * All listeners that subscribe after the event is fired will be executed right away.
- *
- * The only Cordova events that user code should register for are:
- * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript
- * pause App has moved to background
- * resume App has returned to foreground
- *
- * Listeners can be registered as:
- * document.addEventListener("deviceready", myDeviceReadyListener, false);
- * document.addEventListener("resume", myResumeListener, false);
- * document.addEventListener("pause", myPauseListener, false);
- *
- * The DOM lifecycle events should be used for saving and restoring state
- * window.onload
- * window.onunload
- *
- */
-
-/**
- * Channel
- * @constructor
- * @param type String the channel name
- */
-var Channel = function(type, sticky) {
- this.type = type;
- // Map of guid -> function.
- this.handlers = {};
- // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired.
- this.state = sticky ? 1 : 0;
- // Used in sticky mode to remember args passed to fire().
- this.fireArgs = null;
- // Used by onHasSubscribersChange to know if there are any listeners.
- this.numHandlers = 0;
- // Function that is called when the first listener is subscribed, or when
- // the last listener is unsubscribed.
- this.onHasSubscribersChange = null;
-},
- channel = {
- /**
- * Calls the provided function only after all of the channels specified
- * have been fired. All channels must be sticky channels.
- */
- join: function(h, c) {
- var len = c.length,
- i = len,
- f = function() {
- if (!(--i)) h();
- };
- for (var j=0; j<len; j++) {
- if (c[j].state === 0) {
- throw Error('Can only use join with sticky channels.');
- }
- c[j].subscribe(f);
- }
- if (!len) h();
- },
- create: function(type) {
- return channel[type] = new Channel(type, false);
- },
- createSticky: function(type) {
- return channel[type] = new Channel(type, true);
- },
-
- /**
- * cordova Channels that must fire before "deviceready" is fired.
- */
- deviceReadyChannelsArray: [],
- deviceReadyChannelsMap: {},
-
- /**
- * Indicate that a feature needs to be initialized before it is ready to be used.
- * This holds up Cordova's "deviceready" event until the feature has been initialized
- * and Cordova.initComplete(feature) is called.
- *
- * @param feature {String} The unique feature name
- */
- waitForInitialization: function(feature) {
- if (feature) {
- var c = channel[feature] || this.createSticky(feature);
- this.deviceReadyChannelsMap[feature] = c;
- this.deviceReadyChannelsArray.push(c);
- }
- },
-
- /**
- * Indicate that initialization code has completed and the feature is ready to be used.
- *
- * @param feature {String} The unique feature name
- */
- initializationComplete: function(feature) {
- var c = this.deviceReadyChannelsMap[feature];
- if (c) {
- c.fire();
- }
- }
- };
-
-function forceFunction(f) {
- if (typeof f != 'function') throw "Function required as first argument!";
-}
-
-/**
- * Subscribes the given function to the channel. Any time that
- * Channel.fire is called so too will the function.
- * Optionally specify an execution context for the function
- * and a guid that can be used to stop subscribing to the channel.
- * Returns the guid.
- */
-Channel.prototype.subscribe = function(f, c) {
- // need a function to call
- forceFunction(f);
- if (this.state == 2) {
- f.apply(c || this, this.fireArgs);
- return;
- }
-
- var func = f,
- guid = f.observer_guid;
- if (typeof c == "object") { func = utils.close(c, f); }
-
- if (!guid) {
- // first time any channel has seen this subscriber
- guid = '' + nextGuid++;
- }
- func.observer_guid = guid;
- f.observer_guid = guid;
-
- // Don't add the same handler more than once.
- if (!this.handlers[guid]) {
- this.handlers[guid] = func;
- this.numHandlers++;
- if (this.numHandlers == 1) {
- this.onHasSubscribersChange && this.onHasSubscribersChange();
- }
- }
-};
-
-/**
- * Unsubscribes the function with the given guid from the channel.
- */
-Channel.prototype.unsubscribe = function(f) {
- // need a function to unsubscribe
- forceFunction(f);
-
- var guid = f.observer_guid,
- handler = this.handlers[guid];
- if (handler) {
- delete this.handlers[guid];
- this.numHandlers--;
- if (this.numHandlers === 0) {
- this.onHasSubscribersChange && this.onHasSubscribersChange();
- }
- }
-};
-
-/**
- * Calls all functions subscribed to this channel.
- */
-Channel.prototype.fire = function(e) {
- var fail = false,
- fireArgs = Array.prototype.slice.call(arguments);
- // Apply stickiness.
- if (this.state == 1) {
- this.state = 2;
- this.fireArgs = fireArgs;
- }
- if (this.numHandlers) {
- // Copy the values first so that it is safe to modify it from within
- // callbacks.
- var toCall = [];
- for (var item in this.handlers) {
- toCall.push(this.handlers[item]);
- }
- for (var i = 0; i < toCall.length; ++i) {
- toCall[i].apply(this, fireArgs);
- }
- if (this.state == 2 && this.numHandlers) {
- this.numHandlers = 0;
- this.handlers = {};
- this.onHasSubscribersChange && this.onHasSubscribersChange();
- }
- }
-};
-
-
-// defining them here so they are ready super fast!
-// DOM event that is received when the web page is loaded and parsed.
-channel.createSticky('onDOMContentLoaded');
-
-// Event to indicate the Cordova native side is ready.
-channel.createSticky('onNativeReady');
-
-// Event to indicate that all Cordova JavaScript objects have been created
-// and it's time to run plugin constructors.
-channel.createSticky('onCordovaReady');
-
-// Event to indicate that device properties are available
-channel.createSticky('onCordovaInfoReady');
-
-// Event to indicate that the connection property has been set.
-channel.createSticky('onCordovaConnectionReady');
-
-// Event to indicate that all automatically loaded JS plugins are loaded and ready.
-channel.createSticky('onPluginsReady');
-
-// Event to indicate that Cordova is ready
-channel.createSticky('onDeviceReady');
-
-// Event to indicate a resume lifecycle event
-channel.create('onResume');
-
-// Event to indicate a pause lifecycle event
-channel.create('onPause');
-
-// Event to indicate a destroy lifecycle event
-channel.createSticky('onDestroy');
-
-// Channels that must fire before "deviceready" is fired.
-channel.waitForInitialization('onCordovaReady');
-channel.waitForInitialization('onCordovaConnectionReady');
-channel.waitForInitialization('onDOMContentLoaded');
-
-module.exports = channel;
-
-});
-
-// file: lib/common/commandProxy.js
-define("cordova/commandProxy", function(require, exports, module) {
-
-
-// internal map of proxy function
-var CommandProxyMap = {};
-
-module.exports = {
-
- // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...);
- add:function(id,proxyObj) {
- console.log("adding proxy for " + id);
- CommandProxyMap[id] = proxyObj;
- return proxyObj;
- },
-
- // cordova.commandProxy.remove("Accelerometer");
- remove:function(id) {
- var proxy = CommandProxyMap[id];
- delete CommandProxyMap[id];
- CommandProxyMap[id] = null;
- return proxy;
- },
-
- get:function(service,action) {
- return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null );
- }
-};
-});
-
-// file: lib/windowsphone/exec.js
-define("cordova/exec", function(require, exports, module) {
-
-var cordova = require('cordova');
-
-/**
- * Execute a cordova command. It is up to the native side whether this action
- * is synchronous or asynchronous. The native side can return:
- * Synchronous: PluginResult object as a JSON string
- * Asynchronous: Empty string ""
- * If async, the native side will cordova.callbackSuccess or cordova.callbackError,
- * depending upon the result of the action.
- *
- * @param {Function} success The success callback
- * @param {Function} fail The fail callback
- * @param {String} service The name of the service to use
- * @param {String} action Action to be run in cordova
- * @param {String[]} [args] Zero or more arguments to pass to the method
-
- */
-
-module.exports = function(success, fail, service, action, args) {
-
- var callbackId = service + cordova.callbackId++;
- if (typeof success == "function" || typeof fail == "function") {
- cordova.callbacks[callbackId] = {success:success, fail:fail};
- }
- // generate a new command string, ex. DebugConsole/log/DebugConsole23/["wtf dude?"]
- for(var n = 0; n < args.length; n++)
- {
- if(typeof args[n] !== "string")
- {
- args[n] = JSON.stringify(args[n]);
- }
- }
- var command = service + "/" + action + "/" + callbackId + "/" + JSON.stringify(args);
- // pass it on to Notify
- try {
- if(window.external) {
- window.external.Notify(command);
- }
- else {
- console.log("window.external not available :: command=" + command);
- }
- }
- catch(e) {
- console.log("Exception calling native with command :: " + command + " :: exception=" + e);
- }
-};
-
-
-});
-
-// file: lib/common/modulemapper.js
-define("cordova/modulemapper", function(require, exports, module) {
-
-var builder = require('cordova/builder'),
- moduleMap = define.moduleMap,
- symbolList,
- deprecationMap;
-
-exports.reset = function() {
- symbolList = [];
- deprecationMap = {};
-};
-
-function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) {
- if (!(moduleName in moduleMap)) {
- throw new Error('Module ' + moduleName + ' does not exist.');
- }
- symbolList.push(strategy, moduleName, symbolPath);
- if (opt_deprecationMessage) {
- deprecationMap[symbolPath] = opt_deprecationMessage;
- }
-}
-
-// Note: Android 2.3 does have Function.bind().
-exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) {
- addEntry('c', moduleName, symbolPath, opt_deprecationMessage);
-};
-
-exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) {
- addEntry('m', moduleName, symbolPath, opt_deprecationMessage);
-};
-
-exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) {
- addEntry('d', moduleName, symbolPath, opt_deprecationMessage);
-};
-
-function prepareNamespace(symbolPath, context) {
- if (!symbolPath) {
- return context;
- }
- var parts = symbolPath.split('.');
- var cur = context;
- for (var i = 0, part; part = parts[i]; ++i) {
- cur = cur[part] = cur[part] || {};
- }
- return cur;
-}
-
-exports.mapModules = function(context) {
- var origSymbols = {};
- context.CDV_origSymbols = origSymbols;
- for (var i = 0, len = symbolList.length; i < len; i += 3) {
- var strategy = symbolList[i];
- var moduleName = symbolList[i + 1];
- var symbolPath = symbolList[i + 2];
- var lastDot = symbolPath.lastIndexOf('.');
- var namespace = symbolPath.substr(0, lastDot);
- var lastName = symbolPath.substr(lastDot + 1);
-
- var module = require(moduleName);
- var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null;
- var parentObj = prepareNamespace(namespace, context);
- var target = parentObj[lastName];
-
- if (strategy == 'm' && target) {
- builder.recursiveMerge(target, module);
- } else if ((strategy == 'd' && !target) || (strategy != 'd')) {
- if (!(symbolPath in origSymbols)) {
- origSymbols[symbolPath] = target;
- }
- builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg);
- }
- }
-};
-
-exports.getOriginalSymbol = function(context, symbolPath) {
- var origSymbols = context.CDV_origSymbols;
- if (origSymbols && (symbolPath in origSymbols)) {
- return origSymbols[symbolPath];
- }
- var parts = symbolPath.split('.');
- var obj = context;
- for (var i = 0; i < parts.length; ++i) {
- obj = obj && obj[parts[i]];
- }
- return obj;
-};
-
-exports.loadMatchingModules = function(matchingRegExp) {
- for (var k in moduleMap) {
- if (matchingRegExp.exec(k)) {
- require(k);
- }
- }
-};
-
-exports.reset();
-
-
-});
-
-// file: lib/windowsphone/platform.js
-define("cordova/platform", function(require, exports, module) {
-
-var cordova = require('cordova'),
- exec = require('cordova/exec');
-
-module.exports = {
- id: "windowsphone",
- initialize:function() {
- var modulemapper = require('cordova/modulemapper');
-
- modulemapper.loadMatchingModules(/cordova.*\/plugininit$/);
-
- modulemapper.loadMatchingModules(/cordova.*\/symbols$/);
-
- modulemapper.mapModules(window);
-
- // Inject a listener for the backbutton, and tell native to override the flag (true/false) when we have 1 or more, or 0, listeners
- var backButtonChannel = cordova.addDocumentEventHandler('backbutton');
- backButtonChannel.onHasSubscribersChange = function() {
- exec(null, null, "CoreEvents", "overridebackbutton", [this.numHandlers == 1]);
- };
- }
-};
-
-});
-
-// file: lib/common/plugin/Acceleration.js
-define("cordova/plugin/Acceleration", function(require, exports, module) {
-
-var Acceleration = function(x, y, z, timestamp) {
- this.x = x;
- this.y = y;
- this.z = z;
- this.timestamp = timestamp || (new Date()).getTime();
-};
-
-module.exports = Acceleration;
-
-});
-
-// file: lib/common/plugin/Camera.js
-define("cordova/plugin/Camera", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- Camera = require('cordova/plugin/CameraConstants'),
- CameraPopoverHandle = require('cordova/plugin/CameraPopoverHandle');
-
-var cameraExport = {};
-
-// Tack on the Camera Constants to the base camera plugin.
-for (var key in Camera) {
- cameraExport[key] = Camera[key];
-}
-
-/**
- * Gets a picture from source defined by "options.sourceType", and returns the
- * image as defined by the "options.destinationType" option.
-
- * The defaults are sourceType=CAMERA and destinationType=FILE_URI.
- *
- * @param {Function} successCallback
- * @param {Function} errorCallback
- * @param {Object} options
- */
-cameraExport.getPicture = function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'Camera.getPicture', arguments);
- options = options || {};
- var getValue = argscheck.getValue;
-
- var quality = getValue(options.quality, 50);
- var destinationType = getValue(options.destinationType, Camera.DestinationType.FILE_URI);
- var sourceType = getValue(options.sourceType, Camera.PictureSourceType.CAMERA);
- var targetWidth = getValue(options.targetWidth, -1);
- var targetHeight = getValue(options.targetHeight, -1);
- var encodingType = getValue(options.encodingType, Camera.EncodingType.JPEG);
- var mediaType = getValue(options.mediaType, Camera.MediaType.PICTURE);
- var allowEdit = !!options.allowEdit;
- var correctOrientation = !!options.correctOrientation;
- var saveToPhotoAlbum = !!options.saveToPhotoAlbum;
- var popoverOptions = getValue(options.popoverOptions, null);
- var cameraDirection = getValue(options.cameraDirection, Camera.Direction.BACK);
-
- var args = [quality, destinationType, sourceType, targetWidth, targetHeight, encodingType,
- mediaType, allowEdit, correctOrientation, saveToPhotoAlbum, popoverOptions, cameraDirection];
-
- exec(successCallback, errorCallback, "Camera", "takePicture", args);
- return new CameraPopoverHandle();
-};
-
-cameraExport.cleanup = function(successCallback, errorCallback) {
- exec(successCallback, errorCallback, "Camera", "cleanup", []);
-};
-
-module.exports = cameraExport;
-
-});
-
-// file: lib/common/plugin/CameraConstants.js
-define("cordova/plugin/CameraConstants", function(require, exports, module) {
-
-module.exports = {
- DestinationType:{
- DATA_URL: 0, // Return base64 encoded string
- FILE_URI: 1, // Return file uri (content://media/external/images/media/2 for Android)
- NATIVE_URI: 2 // Return native uri (eg. asset-library://... for iOS)
- },
- EncodingType:{
- JPEG: 0, // Return JPEG encoded image
- PNG: 1 // Return PNG encoded image
- },
- MediaType:{
- PICTURE: 0, // allow selection of still pictures only. DEFAULT. Will return format specified via DestinationType
- VIDEO: 1, // allow selection of video only, ONLY RETURNS URL
- ALLMEDIA : 2 // allow selection from all media types
- },
- PictureSourceType:{
- PHOTOLIBRARY : 0, // Choose image from picture library (same as SAVEDPHOTOALBUM for Android)
- CAMERA : 1, // Take picture from camera
- SAVEDPHOTOALBUM : 2 // Choose image from picture library (same as PHOTOLIBRARY for Android)
- },
- PopoverArrowDirection:{
- ARROW_UP : 1, // matches iOS UIPopoverArrowDirection constants to specify arrow location on popover
- ARROW_DOWN : 2,
- ARROW_LEFT : 4,
- ARROW_RIGHT : 8,
- ARROW_ANY : 15
- },
- Direction:{
- BACK: 0,
- FRONT: 1
- }
-};
-
-});
-
-// file: lib/common/plugin/CameraPopoverHandle.js
-define("cordova/plugin/CameraPopoverHandle", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-/**
- * A handle to an image picker popover.
- */
-var CameraPopoverHandle = function() {
- this.setPosition = function(popoverOptions) {
- console.log('CameraPopoverHandle.setPosition is only supported on iOS.');
- };
-};
-
-module.exports = CameraPopoverHandle;
-
-});
-
-// file: lib/common/plugin/CameraPopoverOptions.js
-define("cordova/plugin/CameraPopoverOptions", function(require, exports, module) {
-
-var Camera = require('cordova/plugin/CameraConstants');
-
-/**
- * Encapsulates options for iOS Popover image picker
- */
-var CameraPopoverOptions = function(x,y,width,height,arrowDir){
- // information of rectangle that popover should be anchored to
- this.x = x || 0;
- this.y = y || 32;
- this.width = width || 320;
- this.height = height || 480;
- // The direction of the popover arrow
- this.arrowDir = arrowDir || Camera.PopoverArrowDirection.ARROW_ANY;
-};
-
-module.exports = CameraPopoverOptions;
-
-});
-
-// file: lib/common/plugin/CaptureAudioOptions.js
-define("cordova/plugin/CaptureAudioOptions", function(require, exports, module) {
-
-/**
- * Encapsulates all audio capture operation configuration options.
- */
-var CaptureAudioOptions = function(){
- // Upper limit of sound clips user can record. Value must be equal or greater than 1.
- this.limit = 1;
- // Maximum duration of a single sound clip in seconds.
- this.duration = 0;
-};
-
-module.exports = CaptureAudioOptions;
-
-});
-
-// file: lib/common/plugin/CaptureError.js
-define("cordova/plugin/CaptureError", function(require, exports, module) {
-
-/**
- * The CaptureError interface encapsulates all errors in the Capture API.
- */
-var CaptureError = function(c) {
- this.code = c || null;
-};
-
-// Camera or microphone failed to capture image or sound.
-CaptureError.CAPTURE_INTERNAL_ERR = 0;
-// Camera application or audio capture application is currently serving other capture request.
-CaptureError.CAPTURE_APPLICATION_BUSY = 1;
-// Invalid use of the API (e.g. limit parameter has value less than one).
-CaptureError.CAPTURE_INVALID_ARGUMENT = 2;
-// User exited camera application or audio capture application before capturing anything.
-CaptureError.CAPTURE_NO_MEDIA_FILES = 3;
-// The requested capture operation is not supported.
-CaptureError.CAPTURE_NOT_SUPPORTED = 20;
-
-module.exports = CaptureError;
-
-});
-
-// file: lib/common/plugin/CaptureImageOptions.js
-define("cordova/plugin/CaptureImageOptions", function(require, exports, module) {
-
-/**
- * Encapsulates all image capture operation configuration options.
- */
-var CaptureImageOptions = function(){
- // Upper limit of images user can take. Value must be equal or greater than 1.
- this.limit = 1;
-};
-
-module.exports = CaptureImageOptions;
-
-});
-
-// file: lib/common/plugin/CaptureVideoOptions.js
-define("cordova/plugin/CaptureVideoOptions", function(require, exports, module) {
-
-/**
- * Encapsulates all video capture operation configuration options.
- */
-var CaptureVideoOptions = function(){
- // Upper limit of videos user can record. Value must be equal or greater than 1.
- this.limit = 1;
- // Maximum duration of a single video clip in seconds.
- this.duration = 0;
-};
-
-module.exports = CaptureVideoOptions;
-
-});
-
-// file: lib/common/plugin/CompassError.js
-define("cordova/plugin/CompassError", function(require, exports, module) {
-
-/**
- * CompassError.
- * An error code assigned by an implementation when an error has occurred
- * @constructor
- */
-var CompassError = function(err) {
- this.code = (err !== undefined ? err : null);
-};
-
-CompassError.COMPASS_INTERNAL_ERR = 0;
-CompassError.COMPASS_NOT_SUPPORTED = 20;
-
-module.exports = CompassError;
-
-});
-
-// file: lib/common/plugin/CompassHeading.js
-define("cordova/plugin/CompassHeading", function(require, exports, module) {
-
-var CompassHeading = function(magneticHeading, trueHeading, headingAccuracy, timestamp) {
- this.magneticHeading = magneticHeading;
- this.trueHeading = trueHeading;
- this.headingAccuracy = headingAccuracy;
- this.timestamp = timestamp || new Date().getTime();
-};
-
-module.exports = CompassHeading;
-
-});
-
-// file: lib/common/plugin/ConfigurationData.js
-define("cordova/plugin/ConfigurationData", function(require, exports, module) {
-
-/**
- * Encapsulates a set of parameters that the capture device supports.
- */
-function ConfigurationData() {
- // The ASCII-encoded string in lower case representing the media type.
- this.type = null;
- // The height attribute represents height of the image or video in pixels.
- // In the case of a sound clip this attribute has value 0.
- this.height = 0;
- // The width attribute represents width of the image or video in pixels.
- // In the case of a sound clip this attribute has value 0
- this.width = 0;
-}
-
-module.exports = ConfigurationData;
-
-});
-
-// file: lib/common/plugin/Connection.js
-define("cordova/plugin/Connection", function(require, exports, module) {
-
-/**
- * Network status
- */
-module.exports = {
- UNKNOWN: "unknown",
- ETHERNET: "ethernet",
- WIFI: "wifi",
- CELL_2G: "2g",
- CELL_3G: "3g",
- CELL_4G: "4g",
- CELL:"cellular",
- NONE: "none"
-};
-
-});
-
-// file: lib/common/plugin/Contact.js
-define("cordova/plugin/Contact", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- ContactError = require('cordova/plugin/ContactError'),
- utils = require('cordova/utils');
-
-/**
-* Converts primitives into Complex Object
-* Currently only used for Date fields
-*/
-function convertIn(contact) {
- var value = contact.birthday;
- try {
- contact.birthday = new Date(parseFloat(value));
- } catch (exception){
- console.log("Cordova Contact convertIn error: exception creating date.");
- }
- return contact;
-}
-
-/**
-* Converts Complex objects into primitives
-* Only conversion at present is for Dates.
-**/
-
-function convertOut(contact) {
- var value = contact.birthday;
- if (value !== null) {
- // try to make it a Date object if it is not already
- if (!utils.isDate(value)){
- try {
- value = new Date(value);
- } catch(exception){
- value = null;
- }
- }
- if (utils.isDate(value)){
- value = value.valueOf(); // convert to milliseconds
- }
- contact.birthday = value;
- }
- return contact;
-}
-
-/**
-* Contains information about a single contact.
-* @constructor
-* @param {DOMString} id unique identifier
-* @param {DOMString} displayName
-* @param {ContactName} name
-* @param {DOMString} nickname
-* @param {Array.<ContactField>} phoneNumbers array of phone numbers
-* @param {Array.<ContactField>} emails array of email addresses
-* @param {Array.<ContactAddress>} addresses array of addresses
-* @param {Array.<ContactField>} ims instant messaging user ids
-* @param {Array.<ContactOrganization>} organizations
-* @param {DOMString} birthday contact's birthday
-* @param {DOMString} note user notes about contact
-* @param {Array.<ContactField>} photos
-* @param {Array.<ContactField>} categories
-* @param {Array.<ContactField>} urls contact's web sites
-*/
-var Contact = function (id, displayName, name, nickname, phoneNumbers, emails, addresses,
- ims, organizations, birthday, note, photos, categories, urls) {
- this.id = id || null;
- this.rawId = null;
- this.displayName = displayName || null;
- this.name = name || null; // ContactName
- this.nickname = nickname || null;
- this.phoneNumbers = phoneNumbers || null; // ContactField[]
- this.emails = emails || null; // ContactField[]
- this.addresses = addresses || null; // ContactAddress[]
- this.ims = ims || null; // ContactField[]
- this.organizations = organizations || null; // ContactOrganization[]
- this.birthday = birthday || null;
- this.note = note || null;
- this.photos = photos || null; // ContactField[]
- this.categories = categories || null; // ContactField[]
- this.urls = urls || null; // ContactField[]
-};
-
-/**
-* Removes contact from device storage.
-* @param successCB success callback
-* @param errorCB error callback
-*/
-Contact.prototype.remove = function(successCB, errorCB) {
- argscheck.checkArgs('FF', 'Contact.remove', arguments);
- var fail = errorCB && function(code) {
- errorCB(new ContactError(code));
- };
- if (this.id === null) {
- fail(ContactError.UNKNOWN_ERROR);
- }
- else {
- exec(successCB, fail, "Contacts", "remove", [this.id]);
- }
-};
-
-/**
-* Creates a deep copy of this Contact.
-* With the contact ID set to null.
-* @return copy of this Contact
-*/
-Contact.prototype.clone = function() {
- var clonedContact = utils.clone(this);
- clonedContact.id = null;
- clonedContact.rawId = null;
-
- function nullIds(arr) {
- if (arr) {
- for (var i = 0; i < arr.length; ++i) {
- arr[i].id = null;
- }
- }
- }
-
- // Loop through and clear out any id's in phones, emails, etc.
- nullIds(clonedContact.phoneNumbers);
- nullIds(clonedContact.emails);
- nullIds(clonedContact.addresses);
- nullIds(clonedContact.ims);
- nullIds(clonedContact.organizations);
- nullIds(clonedContact.categories);
- nullIds(clonedContact.photos);
- nullIds(clonedContact.urls);
- return clonedContact;
-};
-
-/**
-* Persists contact to device storage.
-* @param successCB success callback
-* @param errorCB error callback
-*/
-Contact.prototype.save = function(successCB, errorCB) {
- argscheck.checkArgs('FFO', 'Contact.save', arguments);
- var fail = errorCB && function(code) {
- errorCB(new ContactError(code));
- };
- var success = function(result) {
- if (result) {
- if (successCB) {
- var fullContact = require('cordova/plugin/contacts').create(result);
- successCB(convertIn(fullContact));
- }
- }
- else {
- // no Entry object returned
- fail(ContactError.UNKNOWN_ERROR);
- }
- };
- var dupContact = convertOut(utils.clone(this));
- exec(success, fail, "Contacts", "save", [dupContact]);
-};
-
-
-module.exports = Contact;
-
-});
-
-// file: lib/common/plugin/ContactAddress.js
-define("cordova/plugin/ContactAddress", function(require, exports, module) {
-
-/**
-* Contact address.
-* @constructor
-* @param {DOMString} id unique identifier, should only be set by native code
-* @param formatted // NOTE: not a W3C standard
-* @param streetAddress
-* @param locality
-* @param region
-* @param postalCode
-* @param country
-*/
-
-var ContactAddress = function(pref, type, formatted, streetAddress, locality, region, postalCode, country) {
- this.id = null;
- this.pref = (typeof pref != 'undefined' ? pref : false);
- this.type = type || null;
- this.formatted = formatted || null;
- this.streetAddress = streetAddress || null;
- this.locality = locality || null;
- this.region = region || null;
- this.postalCode = postalCode || null;
- this.country = country || null;
-};
-
-module.exports = ContactAddress;
-
-});
-
-// file: lib/common/plugin/ContactError.js
-define("cordova/plugin/ContactError", function(require, exports, module) {
-
-/**
- * ContactError.
- * An error code assigned by an implementation when an error has occurred
- * @constructor
- */
-var ContactError = function(err) {
- this.code = (typeof err != 'undefined' ? err : null);
-};
-
-/**
- * Error codes
- */
-ContactError.UNKNOWN_ERROR = 0;
-ContactError.INVALID_ARGUMENT_ERROR = 1;
-ContactError.TIMEOUT_ERROR = 2;
-ContactError.PENDING_OPERATION_ERROR = 3;
-ContactError.IO_ERROR = 4;
-ContactError.NOT_SUPPORTED_ERROR = 5;
-ContactError.PERMISSION_DENIED_ERROR = 20;
-
-module.exports = ContactError;
-
-});
-
-// file: lib/common/plugin/ContactField.js
-define("cordova/plugin/ContactField", function(require, exports, module) {
-
-/**
-* Generic contact field.
-* @constructor
-* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard
-* @param type
-* @param value
-* @param pref
-*/
-var ContactField = function(type, value, pref) {
- this.id = null;
- this.type = (type && type.toString()) || null;
- this.value = (value && value.toString()) || null;
- this.pref = (typeof pref != 'undefined' ? pref : false);
-};
-
-module.exports = ContactField;
-
-});
-
-// file: lib/common/plugin/ContactFindOptions.js
-define("cordova/plugin/ContactFindOptions", function(require, exports, module) {
-
-/**
- * ContactFindOptions.
- * @constructor
- * @param filter used to match contacts against
- * @param multiple boolean used to determine if more than one contact should be returned
- */
-
-var ContactFindOptions = function(filter, multiple) {
- this.filter = filter || '';
- this.multiple = (typeof multiple != 'undefined' ? multiple : false);
-};
-
-module.exports = ContactFindOptions;
-
-});
-
-// file: lib/common/plugin/ContactName.js
-define("cordova/plugin/ContactName", function(require, exports, module) {
-
-/**
-* Contact name.
-* @constructor
-* @param formatted // NOTE: not part of W3C standard
-* @param familyName
-* @param givenName
-* @param middle
-* @param prefix
-* @param suffix
-*/
-var ContactName = function(formatted, familyName, givenName, middle, prefix, suffix) {
- this.formatted = formatted || null;
- this.familyName = familyName || null;
- this.givenName = givenName || null;
- this.middleName = middle || null;
- this.honorificPrefix = prefix || null;
- this.honorificSuffix = suffix || null;
-};
-
-module.exports = ContactName;
-
-});
-
-// file: lib/common/plugin/ContactOrganization.js
-define("cordova/plugin/ContactOrganization", function(require, exports, module) {
-
-/**
-* Contact organization.
-* @constructor
-* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard
-* @param name
-* @param dept
-* @param title
-* @param startDate
-* @param endDate
-* @param location
-* @param desc
-*/
-
-var ContactOrganization = function(pref, type, name, dept, title) {
- this.id = null;
- this.pref = (typeof pref != 'undefined' ? pref : false);
- this.type = type || null;
- this.name = name || null;
- this.department = dept || null;
- this.title = title || null;
-};
-
-module.exports = ContactOrganization;
-
-});
-
-// file: lib/common/plugin/Coordinates.js
-define("cordova/plugin/Coordinates", function(require, exports, module) {
-
-/**
- * This class contains position information.
- * @param {Object} lat
- * @param {Object} lng
- * @param {Object} alt
- * @param {Object} acc
- * @param {Object} head
- * @param {Object} vel
- * @param {Object} altacc
- * @constructor
- */
-var Coordinates = function(lat, lng, alt, acc, head, vel, altacc) {
- /**
- * The latitude of the position.
- */
- this.latitude = lat;
- /**
- * The longitude of the position,
- */
- this.longitude = lng;
- /**
- * The accuracy of the position.
- */
- this.accuracy = acc;
- /**
- * The altitude of the position.
- */
- this.altitude = (alt !== undefined ? alt : null);
- /**
- * The direction the device is moving at the position.
- */
- this.heading = (head !== undefined ? head : null);
- /**
- * The velocity with which the device is moving at the position.
- */
- this.speed = (vel !== undefined ? vel : null);
-
- if (this.speed === 0 || this.speed === null) {
- this.heading = NaN;
- }
-
- /**
- * The altitude accuracy of the position.
- */
- this.altitudeAccuracy = (altacc !== undefined) ? altacc : null;
-};
-
-module.exports = Coordinates;
-
-});
-
-// file: lib/common/plugin/DirectoryEntry.js
-define("cordova/plugin/DirectoryEntry", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec'),
- Entry = require('cordova/plugin/Entry'),
- FileError = require('cordova/plugin/FileError'),
- DirectoryReader = require('cordova/plugin/DirectoryReader');
-
-/**
- * An interface representing a directory on the file system.
- *
- * {boolean} isFile always false (readonly)
- * {boolean} isDirectory always true (readonly)
- * {DOMString} name of the directory, excluding the path leading to it (readonly)
- * {DOMString} fullPath the absolute full path to the directory (readonly)
- * TODO: implement this!!! {FileSystem} filesystem on which the directory resides (readonly)
- */
-var DirectoryEntry = function(name, fullPath) {
- DirectoryEntry.__super__.constructor.call(this, false, true, name, fullPath);
-};
-
-utils.extend(DirectoryEntry, Entry);
-
-/**
- * Creates a new DirectoryReader to read entries from this directory
- */
-DirectoryEntry.prototype.createReader = function() {
- return new DirectoryReader(this.fullPath);
-};
-
-/**
- * Creates or looks up a directory
- *
- * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a directory
- * @param {Flags} options to create or exclusively create the directory
- * @param {Function} successCallback is called with the new entry
- * @param {Function} errorCallback is called with a FileError
- */
-DirectoryEntry.prototype.getDirectory = function(path, options, successCallback, errorCallback) {
- argscheck.checkArgs('sOFF', 'DirectoryEntry.getDirectory', arguments);
- var win = successCallback && function(result) {
- var entry = new DirectoryEntry(result.name, result.fullPath);
- successCallback(entry);
- };
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, "File", "getDirectory", [this.fullPath, path, options]);
-};
-
-/**
- * Deletes a directory and all of it's contents
- *
- * @param {Function} successCallback is called with no parameters
- * @param {Function} errorCallback is called with a FileError
- */
-DirectoryEntry.prototype.removeRecursively = function(successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'DirectoryEntry.removeRecursively', arguments);
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(successCallback, fail, "File", "removeRecursively", [this.fullPath]);
-};
-
-/**
- * Creates or looks up a file
- *
- * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a file
- * @param {Flags} options to create or exclusively create the file
- * @param {Function} successCallback is called with the new entry
- * @param {Function} errorCallback is called with a FileError
- */
-DirectoryEntry.prototype.getFile = function(path, options, successCallback, errorCallback) {
- argscheck.checkArgs('sOFF', 'DirectoryEntry.getFile', arguments);
- var win = successCallback && function(result) {
- var FileEntry = require('cordova/plugin/FileEntry');
- var entry = new FileEntry(result.name, result.fullPath);
- successCallback(entry);
- };
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, "File", "getFile", [this.fullPath, path, options]);
-};
-
-module.exports = DirectoryEntry;
-
-});
-
-// file: lib/common/plugin/DirectoryReader.js
-define("cordova/plugin/DirectoryReader", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- FileError = require('cordova/plugin/FileError') ;
-
-/**
- * An interface that lists the files and directories in a directory.
- */
-function DirectoryReader(path) {
- this.path = path || null;
-}
-
-/**
- * Returns a list of entries from a directory.
- *
- * @param {Function} successCallback is called with a list of entries
- * @param {Function} errorCallback is called with a FileError
- */
-DirectoryReader.prototype.readEntries = function(successCallback, errorCallback) {
- var win = typeof successCallback !== 'function' ? null : function(result) {
- var retVal = [];
- for (var i=0; i<result.length; i++) {
- var entry = null;
- if (result[i].isDirectory) {
- entry = new (require('cordova/plugin/DirectoryEntry'))();
- }
- else if (result[i].isFile) {
- entry = new (require('cordova/plugin/FileEntry'))();
- }
- entry.isDirectory = result[i].isDirectory;
- entry.isFile = result[i].isFile;
- entry.name = result[i].name;
- entry.fullPath = result[i].fullPath;
- retVal.push(entry);
- }
- successCallback(retVal);
- };
- var fail = typeof errorCallback !== 'function' ? null : function(code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, "File", "readEntries", [this.path]);
-};
-
-module.exports = DirectoryReader;
-
-});
-
-// file: lib/common/plugin/Entry.js
-define("cordova/plugin/Entry", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- FileError = require('cordova/plugin/FileError'),
- Metadata = require('cordova/plugin/Metadata');
-
-/**
- * Represents a file or directory on the local file system.
- *
- * @param isFile
- * {boolean} true if Entry is a file (readonly)
- * @param isDirectory
- * {boolean} true if Entry is a directory (readonly)
- * @param name
- * {DOMString} name of the file or directory, excluding the path
- * leading to it (readonly)
- * @param fullPath
- * {DOMString} the absolute full path to the file or directory
- * (readonly)
- */
-function Entry(isFile, isDirectory, name, fullPath, fileSystem) {
- this.isFile = !!isFile;
- this.isDirectory = !!isDirectory;
- this.name = name || '';
- this.fullPath = fullPath || '';
- this.filesystem = fileSystem || null;
-}
-
-/**
- * Look up the metadata of the entry.
- *
- * @param successCallback
- * {Function} is called with a Metadata object
- * @param errorCallback
- * {Function} is called with a FileError
- */
-Entry.prototype.getMetadata = function(successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'Entry.getMetadata', arguments);
- var success = successCallback && function(lastModified) {
- var metadata = new Metadata(lastModified);
- successCallback(metadata);
- };
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
-
- exec(success, fail, "File", "getMetadata", [this.fullPath]);
-};
-
-/**
- * Set the metadata of the entry.
- *
- * @param successCallback
- * {Function} is called with a Metadata object
- * @param errorCallback
- * {Function} is called with a FileError
- * @param metadataObject
- * {Object} keys and values to set
- */
-Entry.prototype.setMetadata = function(successCallback, errorCallback, metadataObject) {
- argscheck.checkArgs('FFO', 'Entry.setMetadata', arguments);
- exec(successCallback, errorCallback, "File", "setMetadata", [this.fullPath, metadataObject]);
-};
-
-/**
- * Move a file or directory to a new location.
- *
- * @param parent
- * {DirectoryEntry} the directory to which to move this entry
- * @param newName
- * {DOMString} new name of the entry, defaults to the current name
- * @param successCallback
- * {Function} called with the new DirectoryEntry object
- * @param errorCallback
- * {Function} called with a FileError
- */
-Entry.prototype.moveTo = function(parent, newName, successCallback, errorCallback) {
- argscheck.checkArgs('oSFF', 'Entry.moveTo', arguments);
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- // source path
- var srcPath = this.fullPath,
- // entry name
- name = newName || this.name,
- success = function(entry) {
- if (entry) {
- if (successCallback) {
- // create appropriate Entry object
- var result = (entry.isDirectory) ? new (require('cordova/plugin/DirectoryEntry'))(entry.name, entry.fullPath) : new (require('cordova/plugin/FileEntry'))(entry.name, entry.fullPath);
- successCallback(result);
- }
- }
- else {
- // no Entry object returned
- fail && fail(FileError.NOT_FOUND_ERR);
- }
- };
-
- // copy
- exec(success, fail, "File", "moveTo", [srcPath, parent.fullPath, name]);
-};
-
-/**
- * Copy a directory to a different location.
- *
- * @param parent
- * {DirectoryEntry} the directory to which to copy the entry
- * @param newName
- * {DOMString} new name of the entry, defaults to the current name
- * @param successCallback
- * {Function} called with the new Entry object
- * @param errorCallback
- * {Function} called with a FileError
- */
-Entry.prototype.copyTo = function(parent, newName, successCallback, errorCallback) {
- argscheck.checkArgs('oSFF', 'Entry.copyTo', arguments);
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
-
- // source path
- var srcPath = this.fullPath,
- // entry name
- name = newName || this.name,
- // success callback
- success = function(entry) {
- if (entry) {
- if (successCallback) {
- // create appropriate Entry object
- var result = (entry.isDirectory) ? new (require('cordova/plugin/DirectoryEntry'))(entry.name, entry.fullPath) : new (require('cordova/plugin/FileEntry'))(entry.name, entry.fullPath);
- successCallback(result);
- }
- }
- else {
- // no Entry object returned
- fail && fail(FileError.NOT_FOUND_ERR);
- }
- };
-
- // copy
- exec(success, fail, "File", "copyTo", [srcPath, parent.fullPath, name]);
-};
-
-/**
- * Return a URL that can be used to identify this entry.
- */
-Entry.prototype.toURL = function() {
- // fullPath attribute contains the full URL
- return this.fullPath;
-};
-
-/**
- * Returns a URI that can be used to identify this entry.
- *
- * @param {DOMString} mimeType for a FileEntry, the mime type to be used to interpret the file, when loaded through this URI.
- * @return uri
- */
-Entry.prototype.toURI = function(mimeType) {
- console.log("DEPRECATED: Update your code to use 'toURL'");
- // fullPath attribute contains the full URI
- return this.toURL();
-};
-
-/**
- * Remove a file or directory. It is an error to attempt to delete a
- * directory that is not empty. It is an error to attempt to delete a
- * root directory of a file system.
- *
- * @param successCallback {Function} called with no parameters
- * @param errorCallback {Function} called with a FileError
- */
-Entry.prototype.remove = function(successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'Entry.remove', arguments);
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(successCallback, fail, "File", "remove", [this.fullPath]);
-};
-
-/**
- * Look up the parent DirectoryEntry of this entry.
- *
- * @param successCallback {Function} called with the parent DirectoryEntry object
- * @param errorCallback {Function} called with a FileError
- */
-Entry.prototype.getParent = function(successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'Entry.getParent', arguments);
- var win = successCallback && function(result) {
- var DirectoryEntry = require('cordova/plugin/DirectoryEntry');
- var entry = new DirectoryEntry(result.name, result.fullPath);
- successCallback(entry);
- };
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, "File", "getParent", [this.fullPath]);
-};
-
-module.exports = Entry;
-
-});
-
-// file: lib/common/plugin/File.js
-define("cordova/plugin/File", function(require, exports, module) {
-
-/**
- * Constructor.
- * name {DOMString} name of the file, without path information
- * fullPath {DOMString} the full path of the file, including the name
- * type {DOMString} mime type
- * lastModifiedDate {Date} last modified date
- * size {Number} size of the file in bytes
- */
-
-var File = function(name, fullPath, type, lastModifiedDate, size){
- this.name = name || '';
- this.fullPath = fullPath || null;
- this.type = type || null;
- this.lastModifiedDate = lastModifiedDate || null;
- this.size = size || 0;
-
- // These store the absolute start and end for slicing the file.
- this.start = 0;
- this.end = this.size;
-};
-
-/**
- * Returns a "slice" of the file. Since Cordova Files don't contain the actual
- * content, this really returns a File with adjusted start and end.
- * Slices of slices are supported.
- * start {Number} The index at which to start the slice (inclusive).
- * end {Number} The index at which to end the slice (exclusive).
- */
-File.prototype.slice = function(start, end) {
- var size = this.end - this.start;
- var newStart = 0;
- var newEnd = size;
- if (arguments.length) {
- if (start < 0) {
- newStart = Math.max(size + start, 0);
- } else {
- newStart = Math.min(size, start);
- }
- }
-
- if (arguments.length >= 2) {
- if (end < 0) {
- newEnd = Math.max(size + end, 0);
- } else {
- newEnd = Math.min(end, size);
- }
- }
-
- var newFile = new File(this.name, this.fullPath, this.type, this.lastModifiedData, this.size);
- newFile.start = this.start + newStart;
- newFile.end = this.start + newEnd;
- return newFile;
-};
-
-
-module.exports = File;
-
-});
-
-// file: lib/common/plugin/FileEntry.js
-define("cordova/plugin/FileEntry", function(require, exports, module) {
-
-var utils = require('cordova/utils'),
- exec = require('cordova/exec'),
- Entry = require('cordova/plugin/Entry'),
- FileWriter = require('cordova/plugin/FileWriter'),
- File = require('cordova/plugin/File'),
- FileError = require('cordova/plugin/FileError');
-
-/**
- * An interface representing a file on the file system.
- *
- * {boolean} isFile always true (readonly)
- * {boolean} isDirectory always false (readonly)
- * {DOMString} name of the file, excluding the path leading to it (readonly)
- * {DOMString} fullPath the absolute full path to the file (readonly)
- * {FileSystem} filesystem on which the file resides (readonly)
- */
-var FileEntry = function(name, fullPath) {
- FileEntry.__super__.constructor.apply(this, [true, false, name, fullPath]);
-};
-
-utils.extend(FileEntry, Entry);
-
-/**
- * Creates a new FileWriter associated with the file that this FileEntry represents.
- *
- * @param {Function} successCallback is called with the new FileWriter
- * @param {Function} errorCallback is called with a FileError
- */
-FileEntry.prototype.createWriter = function(successCallback, errorCallback) {
- this.file(function(filePointer) {
- var writer = new FileWriter(filePointer);
-
- if (writer.fileName === null || writer.fileName === "") {
- errorCallback && errorCallback(new FileError(FileError.INVALID_STATE_ERR));
- } else {
- successCallback && successCallback(writer);
- }
- }, errorCallback);
-};
-
-/**
- * Returns a File that represents the current state of the file that this FileEntry represents.
- *
- * @param {Function} successCallback is called with the new File object
- * @param {Function} errorCallback is called with a FileError
- */
-FileEntry.prototype.file = function(successCallback, errorCallback) {
- var win = successCallback && function(f) {
- var file = new File(f.name, f.fullPath, f.type, f.lastModifiedDate, f.size);
- successCallback(file);
- };
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, "File", "getFileMetadata", [this.fullPath]);
-};
-
-
-module.exports = FileEntry;
-
-});
-
-// file: lib/common/plugin/FileError.js
-define("cordova/plugin/FileError", function(require, exports, module) {
-
-/**
- * FileError
- */
-function FileError(error) {
- this.code = error || null;
-}
-
-// File error codes
-// Found in DOMException
-FileError.NOT_FOUND_ERR = 1;
-FileError.SECURITY_ERR = 2;
-FileError.ABORT_ERR = 3;
-
-// Added by File API specification
-FileError.NOT_READABLE_ERR = 4;
-FileError.ENCODING_ERR = 5;
-FileError.NO_MODIFICATION_ALLOWED_ERR = 6;
-FileError.INVALID_STATE_ERR = 7;
-FileError.SYNTAX_ERR = 8;
-FileError.INVALID_MODIFICATION_ERR = 9;
-FileError.QUOTA_EXCEEDED_ERR = 10;
-FileError.TYPE_MISMATCH_ERR = 11;
-FileError.PATH_EXISTS_ERR = 12;
-
-module.exports = FileError;
-
-});
-
-// file: lib/common/plugin/FileReader.js
-define("cordova/plugin/FileReader", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- modulemapper = require('cordova/modulemapper'),
- utils = require('cordova/utils'),
- File = require('cordova/plugin/File'),
- FileError = require('cordova/plugin/FileError'),
- ProgressEvent = require('cordova/plugin/ProgressEvent'),
- origFileReader = modulemapper.getOriginalSymbol(this, 'FileReader');
-
-/**
- * This class reads the mobile device file system.
- *
- * For Android:
- * The root directory is the root of the file system.
- * To read from the SD card, the file name is "sdcard/my_file.txt"
- * @constructor
- */
-var FileReader = function() {
- this._readyState = 0;
- this._error = null;
- this._result = null;
- this._fileName = '';
- this._realReader = origFileReader ? new origFileReader() : {};
-};
-
-// States
-FileReader.EMPTY = 0;
-FileReader.LOADING = 1;
-FileReader.DONE = 2;
-
-utils.defineGetter(FileReader.prototype, 'readyState', function() {
- return this._fileName ? this._readyState : this._realReader.readyState;
-});
-
-utils.defineGetter(FileReader.prototype, 'error', function() {
- return this._fileName ? this._error: this._realReader.error;
-});
-
-utils.defineGetter(FileReader.prototype, 'result', function() {
- return this._fileName ? this._result: this._realReader.result;
-});
-
-function defineEvent(eventName) {
- utils.defineGetterSetter(FileReader.prototype, eventName, function() {
- return this._realReader[eventName] || null;
- }, function(value) {
- this._realReader[eventName] = value;
- });
-}
-defineEvent('onloadstart'); // When the read starts.
-defineEvent('onprogress'); // While reading (and decoding) file or fileBlob data, and reporting partial file data (progress.loaded/progress.total)
-defineEvent('onload'); // When the read has successfully completed.
-defineEvent('onerror'); // When the read has failed (see errors).
-defineEvent('onloadend'); // When the request has completed (either in success or failure).
-defineEvent('onabort'); // When the read has been aborted. For instance, by invoking the abort() method.
-
-function initRead(reader, file) {
- // Already loading something
- if (reader.readyState == FileReader.LOADING) {
- throw new FileError(FileError.INVALID_STATE_ERR);
- }
-
- reader._result = null;
- reader._error = null;
- reader._readyState = FileReader.LOADING;
-
- if (typeof file.fullPath == 'string') {
- reader._fileName = file.fullPath;
- } else {
- reader._fileName = '';
- return true;
- }
-
- reader.onloadstart && reader.onloadstart(new ProgressEvent("loadstart", {target:reader}));
-}
-
-/**
- * Abort reading file.
- */
-FileReader.prototype.abort = function() {
- if (origFileReader && !this._fileName) {
- return this._realReader.abort();
- }
- this._result = null;
-
- if (this._readyState == FileReader.DONE || this._readyState == FileReader.EMPTY) {
- return;
- }
-
- this._readyState = FileReader.DONE;
-
- // If abort callback
- if (typeof this.onabort === 'function') {
- this.onabort(new ProgressEvent('abort', {target:this}));
- }
- // If load end callback
- if (typeof this.onloadend === 'function') {
- this.onloadend(new ProgressEvent('loadend', {target:this}));
- }
-};
-
-/**
- * Read text file.
- *
- * @param file {File} File object containing file properties
- * @param encoding [Optional] (see http://www.iana.org/assignments/character-sets)
- */
-FileReader.prototype.readAsText = function(file, encoding) {
- if (initRead(this, file)) {
- return this._realReader.readAsText(file, encoding);
- }
-
- // Default encoding is UTF-8
- var enc = encoding ? encoding : "UTF-8";
- var me = this;
- var execArgs = [this._fileName, enc, file.start, file.end];
-
- // Read file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // Save result
- me._result = r;
-
- // If onload callback
- if (typeof me.onload === "function") {
- me.onload(new ProgressEvent("load", {target:me}));
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- // null result
- me._result = null;
-
- // Save error
- me._error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- }, "File", "readAsText", execArgs);
-};
-
-
-/**
- * Read file and return data as a base64 encoded data url.
- * A data url is of the form:
- * data:[<mediatype>][;base64],<data>
- *
- * @param file {File} File object containing file properties
- */
-FileReader.prototype.readAsDataURL = function(file) {
- if (initRead(this, file)) {
- return this._realReader.readAsDataURL(file);
- }
-
- var me = this;
- var execArgs = [this._fileName, file.start, file.end];
-
- // Read file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- // Save result
- me._result = r;
-
- // If onload callback
- if (typeof me.onload === "function") {
- me.onload(new ProgressEvent("load", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- me._result = null;
-
- // Save error
- me._error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- }, "File", "readAsDataURL", execArgs);
-};
-
-/**
- * Read file and return data as a binary data.
- *
- * @param file {File} File object containing file properties
- */
-FileReader.prototype.readAsBinaryString = function(file) {
- if (initRead(this, file)) {
- return this._realReader.readAsBinaryString(file);
- }
-
- var me = this;
- var execArgs = [this._fileName, file.start, file.end];
-
- // Read file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- me._result = r;
-
- // If onload callback
- if (typeof me.onload === "function") {
- me.onload(new ProgressEvent("load", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- me._result = null;
-
- // Save error
- me._error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- }, "File", "readAsBinaryString", execArgs);
-};
-
-/**
- * Read file and return data as a binary data.
- *
- * @param file {File} File object containing file properties
- */
-FileReader.prototype.readAsArrayBuffer = function(file) {
- if (initRead(this, file)) {
- return this._realReader.readAsArrayBuffer(file);
- }
-
- var me = this;
- var execArgs = [this._fileName, file.start, file.end];
-
- // Read file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- me._result = r;
-
- // If onload callback
- if (typeof me.onload === "function") {
- me.onload(new ProgressEvent("load", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- me._result = null;
-
- // Save error
- me._error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- }, "File", "readAsArrayBuffer", execArgs);
-};
-
-module.exports = FileReader;
-
-});
-
-// file: lib/common/plugin/FileSystem.js
-define("cordova/plugin/FileSystem", function(require, exports, module) {
-
-var DirectoryEntry = require('cordova/plugin/DirectoryEntry');
-
-/**
- * An interface representing a file system
- *
- * @constructor
- * {DOMString} name the unique name of the file system (readonly)
- * {DirectoryEntry} root directory of the file system (readonly)
- */
-var FileSystem = function(name, root) {
- this.name = name || null;
- if (root) {
- this.root = new DirectoryEntry(root.name, root.fullPath);
- }
-};
-
-module.exports = FileSystem;
-
-});
-
-// file: lib/common/plugin/FileTransfer.js
-define("cordova/plugin/FileTransfer", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- FileTransferError = require('cordova/plugin/FileTransferError'),
- ProgressEvent = require('cordova/plugin/ProgressEvent');
-
-function newProgressEvent(result) {
- var pe = new ProgressEvent();
- pe.lengthComputable = result.lengthComputable;
- pe.loaded = result.loaded;
- pe.total = result.total;
- return pe;
-}
-
-function getBasicAuthHeader(urlString) {
- var header = null;
-
- if (window.btoa) {
- // parse the url using the Location object
- var url = document.createElement('a');
- url.href = urlString;
-
- var credentials = null;
- var protocol = url.protocol + "//";
- var origin = protocol + url.host;
-
- // check whether there are the username:password credentials in the url
- if (url.href.indexOf(origin) !== 0) { // credentials found
- var atIndex = url.href.indexOf("@");
- credentials = url.href.substring(protocol.length, atIndex);
- }
-
- if (credentials) {
- var authHeader = "Authorization";
- var authHeaderValue = "Basic " + window.btoa(credentials);
-
- header = {
- name : authHeader,
- value : authHeaderValue
- };
- }
- }
-
- return header;
-}
-
-var idCounter = 0;
-
-/**
- * FileTransfer uploads a file to a remote server.
- * @constructor
- */
-var FileTransfer = function() {
- this._id = ++idCounter;
- this.onprogress = null; // optional callback
-};
-
-/**
-* Given an absolute file path, uploads a file on the device to a remote server
-* using a multipart HTTP request.
-* @param filePath {String} Full path of the file on the device
-* @param server {String} URL of the server to receive the file
-* @param successCallback (Function} Callback to be invoked when upload has completed
-* @param errorCallback {Function} Callback to be invoked upon error
-* @param options {FileUploadOptions} Optional parameters such as file name and mimetype
-* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
-*/
-FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) {
- argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments);
- // check for options
- var fileKey = null;
- var fileName = null;
- var mimeType = null;
- var params = null;
- var chunkedMode = true;
- var headers = null;
- var httpMethod = null;
- var basicAuthHeader = getBasicAuthHeader(server);
- if (basicAuthHeader) {
- options = options || {};
- options.headers = options.headers || {};
- options.headers[basicAuthHeader.name] = basicAuthHeader.value;
- }
-
- if (options) {
- fileKey = options.fileKey;
- fileName = options.fileName;
- mimeType = options.mimeType;
- headers = options.headers;
- httpMethod = options.httpMethod || "POST";
- if (httpMethod.toUpperCase() == "PUT"){
- httpMethod = "PUT";
- } else {
- httpMethod = "POST";
- }
- if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") {
- chunkedMode = options.chunkedMode;
- }
- if (options.params) {
- params = options.params;
- }
- else {
- params = {};
- }
- }
-
- var fail = errorCallback && function(e) {
- var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body);
- errorCallback(error);
- };
-
- var self = this;
- var win = function(result) {
- if (typeof result.lengthComputable != "undefined") {
- if (self.onprogress) {
- self.onprogress(newProgressEvent(result));
- }
- } else {
- successCallback && successCallback(result);
- }
- };
- exec(win, fail, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, trustAllHosts, chunkedMode, headers, this._id, httpMethod]);
-};
-
-/**
- * Downloads a file form a given URL and saves it to the specified directory.
- * @param source {String} URL of the server to receive the file
- * @param target {String} Full path of the file on the device
- * @param successCallback (Function} Callback to be invoked when upload has completed
- * @param errorCallback {Function} Callback to be invoked upon error
- * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
- * @param options {FileDownloadOptions} Optional parameters such as headers
- */
-FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts, options) {
- argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments);
- var self = this;
-
- var basicAuthHeader = getBasicAuthHeader(source);
- if (basicAuthHeader) {
- options = options || {};
- options.headers = options.headers || {};
- options.headers[basicAuthHeader.name] = basicAuthHeader.value;
- }
-
- var headers = null;
- if (options) {
- headers = options.headers || null;
- }
-
- var win = function(result) {
- if (typeof result.lengthComputable != "undefined") {
- if (self.onprogress) {
- return self.onprogress(newProgressEvent(result));
- }
- } else if (successCallback) {
- var entry = null;
- if (result.isDirectory) {
- entry = new (require('cordova/plugin/DirectoryEntry'))();
- }
- else if (result.isFile) {
- entry = new (require('cordova/plugin/FileEntry'))();
- }
- entry.isDirectory = result.isDirectory;
- entry.isFile = result.isFile;
- entry.name = result.name;
- entry.fullPath = result.fullPath;
- successCallback(entry);
- }
- };
-
- var fail = errorCallback && function(e) {
- var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body);
- errorCallback(error);
- };
-
- exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id, headers]);
-};
-
-/**
- * Aborts the ongoing file transfer on this object. The original error
- * callback for the file transfer will be called if necessary.
- */
-FileTransfer.prototype.abort = function() {
- exec(null, null, 'FileTransfer', 'abort', [this._id]);
-};
-
-module.exports = FileTransfer;
-
-});
-
-// file: lib/common/plugin/FileTransferError.js
-define("cordova/plugin/FileTransferError", function(require, exports, module) {
-
-/**
- * FileTransferError
- * @constructor
- */
-var FileTransferError = function(code, source, target, status, body) {
- this.code = code || null;
- this.source = source || null;
- this.target = target || null;
- this.http_status = status || null;
- this.body = body || null;
-};
-
-FileTransferError.FILE_NOT_FOUND_ERR = 1;
-FileTransferError.INVALID_URL_ERR = 2;
-FileTransferError.CONNECTION_ERR = 3;
-FileTransferError.ABORT_ERR = 4;
-
-module.exports = FileTransferError;
-
-});
-
-// file: lib/common/plugin/FileUploadOptions.js
-define("cordova/plugin/FileUploadOptions", function(require, exports, module) {
-
-/**
- * Options to customize the HTTP request used to upload files.
- * @constructor
- * @param fileKey {String} Name of file request parameter.
- * @param fileName {String} Filename to be used by the server. Defaults to image.jpg.
- * @param mimeType {String} Mimetype of the uploaded file. Defaults to image/jpeg.
- * @param params {Object} Object with key: value params to send to the server.
- * @param headers {Object} Keys are header names, values are header values. Multiple
- * headers of the same name are not supported.
- */
-var FileUploadOptions = function(fileKey, fileName, mimeType, params, headers, httpMethod) {
- this.fileKey = fileKey || null;
- this.fileName = fileName || null;
- this.mimeType = mimeType || null;
- this.params = params || null;
- this.headers = headers || null;
- this.httpMethod = httpMethod || null;
-};
-
-module.exports = FileUploadOptions;
-
-});
-
-// file: lib/common/plugin/FileUploadResult.js
-define("cordova/plugin/FileUploadResult", function(require, exports, module) {
-
-/**
- * FileUploadResult
- * @constructor
- */
-var FileUploadResult = function() {
- this.bytesSent = 0;
- this.responseCode = null;
- this.response = null;
-};
-
-module.exports = FileUploadResult;
-
-});
-
-// file: lib/common/plugin/FileWriter.js
-define("cordova/plugin/FileWriter", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- FileError = require('cordova/plugin/FileError'),
- ProgressEvent = require('cordova/plugin/ProgressEvent');
-
-/**
- * This class writes to the mobile device file system.
- *
- * For Android:
- * The root directory is the root of the file system.
- * To write to the SD card, the file name is "sdcard/my_file.txt"
- *
- * @constructor
- * @param file {File} File object containing file properties
- * @param append if true write to the end of the file, otherwise overwrite the file
- */
-var FileWriter = function(file) {
- this.fileName = "";
- this.length = 0;
- if (file) {
- this.fileName = file.fullPath || file;
- this.length = file.size || 0;
- }
- // default is to write at the beginning of the file
- this.position = 0;
-
- this.readyState = 0; // EMPTY
-
- this.result = null;
-
- // Error
- this.error = null;
-
- // Event handlers
- this.onwritestart = null; // When writing starts
- this.onprogress = null; // While writing the file, and reporting partial file data
- this.onwrite = null; // When the write has successfully completed.
- this.onwriteend = null; // When the request has completed (either in success or failure).
- this.onabort = null; // When the write has been aborted. For instance, by invoking the abort() method.
- this.onerror = null; // When the write has failed (see errors).
-};
-
-// States
-FileWriter.INIT = 0;
-FileWriter.WRITING = 1;
-FileWriter.DONE = 2;
-
-/**
- * Abort writing file.
- */
-FileWriter.prototype.abort = function() {
- // check for invalid state
- if (this.readyState === FileWriter.DONE || this.readyState === FileWriter.INIT) {
- throw new FileError(FileError.INVALID_STATE_ERR);
- }
-
- // set error
- this.error = new FileError(FileError.ABORT_ERR);
-
- this.readyState = FileWriter.DONE;
-
- // If abort callback
- if (typeof this.onabort === "function") {
- this.onabort(new ProgressEvent("abort", {"target":this}));
- }
-
- // If write end callback
- if (typeof this.onwriteend === "function") {
- this.onwriteend(new ProgressEvent("writeend", {"target":this}));
- }
-};
-
-/**
- * Writes data to the file
- *
- * @param data text or blob to be written
- */
-FileWriter.prototype.write = function(data) {
-
- var isBinary = false;
-
- // If we don't have Blob or ArrayBuffer support, don't bother.
- if (typeof window.Blob !== 'undefined' && typeof window.ArrayBuffer !== 'undefined') {
-
- // Check to see if the incoming data is a blob
- if (data instanceof Blob) {
- var that=this;
- var fileReader = new FileReader();
- fileReader.onload = function() {
- // Call this method again, with the arraybuffer as argument
- FileWriter.prototype.write.call(that, this.result);
- };
- fileReader.readAsArrayBuffer(data);
- return;
- }
-
- // Mark data type for safer transport over the binary bridge
- isBinary = (data instanceof ArrayBuffer);
- }
-
- // Throw an exception if we are already writing a file
- if (this.readyState === FileWriter.WRITING) {
- throw new FileError(FileError.INVALID_STATE_ERR);
- }
-
- // WRITING state
- this.readyState = FileWriter.WRITING;
-
- var me = this;
-
- // If onwritestart callback
- if (typeof me.onwritestart === "function") {
- me.onwritestart(new ProgressEvent("writestart", {"target":me}));
- }
-
- // Write file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me.readyState === FileWriter.DONE) {
- return;
- }
-
- // position always increases by bytes written because file would be extended
- me.position += r;
- // The length of the file is now where we are done writing.
-
- me.length = me.position;
-
- // DONE state
- me.readyState = FileWriter.DONE;
-
- // If onwrite callback
- if (typeof me.onwrite === "function") {
- me.onwrite(new ProgressEvent("write", {"target":me}));
- }
-
- // If onwriteend callback
- if (typeof me.onwriteend === "function") {
- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me.readyState === FileWriter.DONE) {
- return;
- }
-
- // DONE state
- me.readyState = FileWriter.DONE;
-
- // Save error
- me.error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {"target":me}));
- }
-
- // If onwriteend callback
- if (typeof me.onwriteend === "function") {
- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
- }
- }, "File", "write", [this.fileName, data, this.position, isBinary]);
-};
-
-/**
- * Moves the file pointer to the location specified.
- *
- * If the offset is a negative number the position of the file
- * pointer is rewound. If the offset is greater than the file
- * size the position is set to the end of the file.
- *
- * @param offset is the location to move the file pointer to.
- */
-FileWriter.prototype.seek = function(offset) {
- // Throw an exception if we are already writing a file
- if (this.readyState === FileWriter.WRITING) {
- throw new FileError(FileError.INVALID_STATE_ERR);
- }
-
- if (!offset && offset !== 0) {
- return;
- }
-
- // See back from end of file.
- if (offset < 0) {
- this.position = Math.max(offset + this.length, 0);
- }
- // Offset is bigger than file size so set position
- // to the end of the file.
- else if (offset > this.length) {
- this.position = this.length;
- }
- // Offset is between 0 and file size so set the position
- // to start writing.
- else {
- this.position = offset;
- }
-};
-
-/**
- * Truncates the file to the size specified.
- *
- * @param size to chop the file at.
- */
-FileWriter.prototype.truncate = function(size) {
- // Throw an exception if we are already writing a file
- if (this.readyState === FileWriter.WRITING) {
- throw new FileError(FileError.INVALID_STATE_ERR);
- }
-
- // WRITING state
- this.readyState = FileWriter.WRITING;
-
- var me = this;
-
- // If onwritestart callback
- if (typeof me.onwritestart === "function") {
- me.onwritestart(new ProgressEvent("writestart", {"target":this}));
- }
-
- // Write file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me.readyState === FileWriter.DONE) {
- return;
- }
-
- // DONE state
- me.readyState = FileWriter.DONE;
-
- // Update the length of the file
- me.length = r;
- me.position = Math.min(me.position, r);
-
- // If onwrite callback
- if (typeof me.onwrite === "function") {
- me.onwrite(new ProgressEvent("write", {"target":me}));
- }
-
- // If onwriteend callback
- if (typeof me.onwriteend === "function") {
- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me.readyState === FileWriter.DONE) {
- return;
- }
-
- // DONE state
- me.readyState = FileWriter.DONE;
-
- // Save error
- me.error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {"target":me}));
- }
-
- // If onwriteend callback
- if (typeof me.onwriteend === "function") {
- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
- }
- }, "File", "truncate", [this.fileName, size]);
-};
-
-module.exports = FileWriter;
-
-});
-
-// file: lib/common/plugin/Flags.js
-define("cordova/plugin/Flags", function(require, exports, module) {
-
-/**
- * Supplies arguments to methods that lookup or create files and directories.
- *
- * @param create
- * {boolean} file or directory if it doesn't exist
- * @param exclusive
- * {boolean} used with create; if true the command will fail if
- * target path exists
- */
-function Flags(create, exclusive) {
- this.create = create || false;
- this.exclusive = exclusive || false;
-}
-
-module.exports = Flags;
-
-});
-
-// file: lib/common/plugin/GlobalizationError.js
-define("cordova/plugin/GlobalizationError", function(require, exports, module) {
-
-
-/**
- * Globalization error object
- *
- * @constructor
- * @param code
- * @param message
- */
-var GlobalizationError = function(code, message) {
- this.code = code || null;
- this.message = message || '';
-};
-
-// Globalization error codes
-GlobalizationError.UNKNOWN_ERROR = 0;
-GlobalizationError.FORMATTING_ERROR = 1;
-GlobalizationError.PARSING_ERROR = 2;
-GlobalizationError.PATTERN_ERROR = 3;
-
-module.exports = GlobalizationError;
-
-});
-
-// file: lib/common/plugin/InAppBrowser.js
-define("cordova/plugin/InAppBrowser", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-var channel = require('cordova/channel');
-var modulemapper = require('cordova/modulemapper');
-
-function InAppBrowser() {
- this.channels = {
- 'loadstart': channel.create('loadstart'),
- 'loadstop' : channel.create('loadstop'),
- 'loaderror' : channel.create('loaderror'),
- 'exit' : channel.create('exit')
- };
-}
-
-InAppBrowser.prototype = {
- _eventHandler: function (event) {
- if (event.type in this.channels) {
- this.channels[event.type].fire(event);
- }
- },
- close: function (eventname) {
- exec(null, null, "InAppBrowser", "close", []);
- },
- show: function (eventname) {
- exec(null, null, "InAppBrowser", "show", []);
- },
- addEventListener: function (eventname,f) {
- if (eventname in this.channels) {
- this.channels[eventname].subscribe(f);
- }
- },
- removeEventListener: function(eventname, f) {
- if (eventname in this.channels) {
- this.channels[eventname].unsubscribe(f);
- }
- },
-
- executeScript: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('executeScript requires exactly one of code or file to be specified');
- }
- },
-
- insertCSS: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('insertCSS requires exactly one of code or file to be specified');
- }
- }
-};
-
-module.exports = function(strUrl, strWindowName, strWindowFeatures) {
- var iab = new InAppBrowser();
- var cb = function(eventname) {
- iab._eventHandler(eventname);
- };
-
- // Don't catch calls that write to existing frames (e.g. named iframes).
- if (window.frames && window.frames[strWindowName]) {
- var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
- return origOpenFunc.apply(window, arguments);
- }
-
- exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
- return iab;
-};
-
-
-});
-
-// file: lib/common/plugin/LocalFileSystem.js
-define("cordova/plugin/LocalFileSystem", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-/**
- * Represents a local file system.
- */
-var LocalFileSystem = function() {
-
-};
-
-LocalFileSystem.TEMPORARY = 0; //temporary, with no guarantee of persistence
-LocalFileSystem.PERSISTENT = 1; //persistent
-
-module.exports = LocalFileSystem;
-
-});
-
-// file: lib/common/plugin/Media.js
-define("cordova/plugin/Media", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec');
-
-var mediaObjects = {};
-
-/**
- * This class provides access to the device media, interfaces to both sound and video
- *
- * @constructor
- * @param src The file name or url to play
- * @param successCallback The callback to be called when the file is done playing or recording.
- * successCallback()
- * @param errorCallback The callback to be called if there is an error.
- * errorCallback(int errorCode) - OPTIONAL
- * @param statusCallback The callback to be called when media status has changed.
- * statusCallback(int statusCode) - OPTIONAL
- */
-var Media = function(src, successCallback, errorCallback, statusCallback) {
- argscheck.checkArgs('SFFF', 'Media', arguments);
- this.id = utils.createUUID();
- mediaObjects[this.id] = this;
- this.src = src;
- this.successCallback = successCallback;
- this.errorCallback = errorCallback;
- this.statusCallback = statusCallback;
- this._duration = -1;
- this._position = -1;
- exec(null, this.errorCallback, "Media", "create", [this.id, this.src]);
-};
-
-// Media messages
-Media.MEDIA_STATE = 1;
-Media.MEDIA_DURATION = 2;
-Media.MEDIA_POSITION = 3;
-Media.MEDIA_ERROR = 9;
-
-// Media states
-Media.MEDIA_NONE = 0;
-Media.MEDIA_STARTING = 1;
-Media.MEDIA_RUNNING = 2;
-Media.MEDIA_PAUSED = 3;
-Media.MEDIA_STOPPED = 4;
-Media.MEDIA_MSG = ["None", "Starting", "Running", "Paused", "Stopped"];
-
-// "static" function to return existing objs.
-Media.get = function(id) {
- return mediaObjects[id];
-};
-
-/**
- * Start or resume playing audio file.
- */
-Media.prototype.play = function(options) {
- exec(null, null, "Media", "startPlayingAudio", [this.id, this.src, options]);
-};
-
-/**
- * Stop playing audio file.
- */
-Media.prototype.stop = function() {
- var me = this;
- exec(function() {
- me._position = 0;
- }, this.errorCallback, "Media", "stopPlayingAudio", [this.id]);
-};
-
-/**
- * Seek or jump to a new time in the track..
- */
-Media.prototype.seekTo = function(milliseconds) {
- var me = this;
- exec(function(p) {
- me._position = p;
- }, this.errorCallback, "Media", "seekToAudio", [this.id, milliseconds]);
-};
-
-/**
- * Pause playing audio file.
- */
-Media.prototype.pause = function() {
- exec(null, this.errorCallback, "Media", "pausePlayingAudio", [this.id]);
-};
-
-/**
- * Get duration of an audio file.
- * The duration is only set for audio that is playing, paused or stopped.
- *
- * @return duration or -1 if not known.
- */
-Media.prototype.getDuration = function() {
- return this._duration;
-};
-
-/**
- * Get position of audio.
- */
-Media.prototype.getCurrentPosition = function(success, fail) {
- var me = this;
- exec(function(p) {
- me._position = p;
- success(p);
- }, fail, "Media", "getCurrentPositionAudio", [this.id]);
-};
-
-/**
- * Start recording audio file.
- */
-Media.prototype.startRecord = function() {
- exec(null, this.errorCallback, "Media", "startRecordingAudio", [this.id, this.src]);
-};
-
-/**
- * Stop recording audio file.
- */
-Media.prototype.stopRecord = function() {
- exec(null, this.errorCallback, "Media", "stopRecordingAudio", [this.id]);
-};
-
-/**
- * Release the resources.
- */
-Media.prototype.release = function() {
- exec(null, this.errorCallback, "Media", "release", [this.id]);
-};
-
-/**
- * Adjust the volume.
- */
-Media.prototype.setVolume = function(volume) {
- exec(null, null, "Media", "setVolume", [this.id, volume]);
-};
-
-/**
- * Audio has status update.
- * PRIVATE
- *
- * @param id The media object id (string)
- * @param msgType The 'type' of update this is
- * @param value Use of value is determined by the msgType
- */
-Media.onStatus = function(id, msgType, value) {
-
- var media = mediaObjects[id];
-
- if(media) {
- switch(msgType) {
- case Media.MEDIA_STATE :
- media.statusCallback && media.statusCallback(value);
- if(value == Media.MEDIA_STOPPED) {
- media.successCallback && media.successCallback();
- }
- break;
- case Media.MEDIA_DURATION :
- media._duration = value;
- break;
- case Media.MEDIA_ERROR :
- media.errorCallback && media.errorCallback(value);
- break;
- case Media.MEDIA_POSITION :
- media._position = Number(value);
- break;
- default :
- console.error && console.error("Unhandled Media.onStatus :: " + msgType);
- break;
- }
- }
- else {
- console.error && console.error("Received Media.onStatus callback for unknown media :: " + id);
- }
-
-};
-
-module.exports = Media;
-
-});
-
-// file: lib/common/plugin/MediaError.js
-define("cordova/plugin/MediaError", function(require, exports, module) {
-
-/**
- * This class contains information about any Media errors.
-*/
-/*
- According to :: http://dev.w3.org/html5/spec-author-view/video.html#mediaerror
- We should never be creating these objects, we should just implement the interface
- which has 1 property for an instance, 'code'
-
- instead of doing :
- errorCallbackFunction( new MediaError(3,'msg') );
-we should simply use a literal :
- errorCallbackFunction( {'code':3} );
- */
-
- var _MediaError = window.MediaError;
-
-
-if(!_MediaError) {
- window.MediaError = _MediaError = function(code, msg) {
- this.code = (typeof code != 'undefined') ? code : null;
- this.message = msg || ""; // message is NON-standard! do not use!
- };
-}
-
-_MediaError.MEDIA_ERR_NONE_ACTIVE = _MediaError.MEDIA_ERR_NONE_ACTIVE || 0;
-_MediaError.MEDIA_ERR_ABORTED = _MediaError.MEDIA_ERR_ABORTED || 1;
-_MediaError.MEDIA_ERR_NETWORK = _MediaError.MEDIA_ERR_NETWORK || 2;
-_MediaError.MEDIA_ERR_DECODE = _MediaError.MEDIA_ERR_DECODE || 3;
-_MediaError.MEDIA_ERR_NONE_SUPPORTED = _MediaError.MEDIA_ERR_NONE_SUPPORTED || 4;
-// TODO: MediaError.MEDIA_ERR_NONE_SUPPORTED is legacy, the W3 spec now defines it as below.
-// as defined by http://dev.w3.org/html5/spec-author-view/video.html#error-codes
-_MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = _MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED || 4;
-
-module.exports = _MediaError;
-
-});
-
-// file: lib/common/plugin/MediaFile.js
-define("cordova/plugin/MediaFile", function(require, exports, module) {
-
-var utils = require('cordova/utils'),
- exec = require('cordova/exec'),
- File = require('cordova/plugin/File'),
- CaptureError = require('cordova/plugin/CaptureError');
-/**
- * Represents a single file.
- *
- * name {DOMString} name of the file, without path information
- * fullPath {DOMString} the full path of the file, including the name
- * type {DOMString} mime type
- * lastModifiedDate {Date} last modified date
- * size {Number} size of the file in bytes
- */
-var MediaFile = function(name, fullPath, type, lastModifiedDate, size){
- MediaFile.__super__.constructor.apply(this, arguments);
-};
-
-utils.extend(MediaFile, File);
-
-/**
- * Request capture format data for a specific file and type
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- */
-MediaFile.prototype.getFormatData = function(successCallback, errorCallback) {
- if (typeof this.fullPath === "undefined" || this.fullPath === null) {
- errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT));
- } else {
- exec(successCallback, errorCallback, "Capture", "getFormatData", [this.fullPath, this.type]);
- }
-};
-
-module.exports = MediaFile;
-
-});
-
-// file: lib/common/plugin/MediaFileData.js
-define("cordova/plugin/MediaFileData", function(require, exports, module) {
-
-/**
- * MediaFileData encapsulates format information of a media file.
- *
- * @param {DOMString} codecs
- * @param {long} bitrate
- * @param {long} height
- * @param {long} width
- * @param {float} duration
- */
-var MediaFileData = function(codecs, bitrate, height, width, duration){
- this.codecs = codecs || null;
- this.bitrate = bitrate || 0;
- this.height = height || 0;
- this.width = width || 0;
- this.duration = duration || 0;
-};
-
-module.exports = MediaFileData;
-
-});
-
-// file: lib/common/plugin/Metadata.js
-define("cordova/plugin/Metadata", function(require, exports, module) {
-
-/**
- * Information about the state of the file or directory
- *
- * {Date} modificationTime (readonly)
- */
-var Metadata = function(time) {
- this.modificationTime = (typeof time != 'undefined'?new Date(time):null);
-};
-
-module.exports = Metadata;
-
-});
-
-// file: lib/common/plugin/Position.js
-define("cordova/plugin/Position", function(require, exports, module) {
-
-var Coordinates = require('cordova/plugin/Coordinates');
-
-var Position = function(coords, timestamp) {
- if (coords) {
- this.coords = new Coordinates(coords.latitude, coords.longitude, coords.altitude, coords.accuracy, coords.heading, coords.velocity, coords.altitudeAccuracy);
- } else {
- this.coords = new Coordinates();
- }
- this.timestamp = (timestamp !== undefined) ? timestamp : new Date();
-};
-
-module.exports = Position;
-
-});
-
-// file: lib/common/plugin/PositionError.js
-define("cordova/plugin/PositionError", function(require, exports, module) {
-
-/**
- * Position error object
- *
- * @constructor
- * @param code
- * @param message
- */
-var PositionError = function(code, message) {
- this.code = code || null;
- this.message = message || '';
-};
-
-PositionError.PERMISSION_DENIED = 1;
-PositionError.POSITION_UNAVAILABLE = 2;
-PositionError.TIMEOUT = 3;
-
-module.exports = PositionError;
-
-});
-
-// file: lib/common/plugin/ProgressEvent.js
-define("cordova/plugin/ProgressEvent", function(require, exports, module) {
-
-// If ProgressEvent exists in global context, use it already, otherwise use our own polyfill
-// Feature test: See if we can instantiate a native ProgressEvent;
-// if so, use that approach,
-// otherwise fill-in with our own implementation.
-//
-// NOTE: right now we always fill in with our own. Down the road would be nice if we can use whatever is native in the webview.
-var ProgressEvent = (function() {
- /*
- var createEvent = function(data) {
- var event = document.createEvent('Events');
- event.initEvent('ProgressEvent', false, false);
- if (data) {
- for (var i in data) {
- if (data.hasOwnProperty(i)) {
- event[i] = data[i];
- }
- }
- if (data.target) {
- // TODO: cannot call <some_custom_object>.dispatchEvent
- // need to first figure out how to implement EventTarget
- }
- }
- return event;
- };
- try {
- var ev = createEvent({type:"abort",target:document});
- return function ProgressEvent(type, data) {
- data.type = type;
- return createEvent(data);
- };
- } catch(e){
- */
- return function ProgressEvent(type, dict) {
- this.type = type;
- this.bubbles = false;
- this.cancelBubble = false;
- this.cancelable = false;
- this.lengthComputable = false;
- this.loaded = dict && dict.loaded ? dict.loaded : 0;
- this.total = dict && dict.total ? dict.total : 0;
- this.target = dict && dict.target ? dict.target : null;
- };
- //}
-})();
-
-module.exports = ProgressEvent;
-
-});
-
-// file: lib/common/plugin/accelerometer.js
-define("cordova/plugin/accelerometer", function(require, exports, module) {
-
-/**
- * This class provides access to device accelerometer data.
- * @constructor
- */
-var argscheck = require('cordova/argscheck'),
- utils = require("cordova/utils"),
- exec = require("cordova/exec"),
- Acceleration = require('cordova/plugin/Acceleration');
-
-// Is the accel sensor running?
-var running = false;
-
-// Keeps reference to watchAcceleration calls.
-var timers = {};
-
-// Array of listeners; used to keep track of when we should call start and stop.
-var listeners = [];
-
-// Last returned acceleration object from native
-var accel = null;
-
-// Tells native to start.
-function start() {
- exec(function(a) {
- var tempListeners = listeners.slice(0);
- accel = new Acceleration(a.x, a.y, a.z, a.timestamp);
- for (var i = 0, l = tempListeners.length; i < l; i++) {
- tempListeners[i].win(accel);
- }
- }, function(e) {
- var tempListeners = listeners.slice(0);
- for (var i = 0, l = tempListeners.length; i < l; i++) {
- tempListeners[i].fail(e);
- }
- }, "Accelerometer", "start", []);
- running = true;
-}
-
-// Tells native to stop.
-function stop() {
- exec(null, null, "Accelerometer", "stop", []);
- running = false;
-}
-
-// Adds a callback pair to the listeners array
-function createCallbackPair(win, fail) {
- return {win:win, fail:fail};
-}
-
-// Removes a win/fail listener pair from the listeners array
-function removeListeners(l) {
- var idx = listeners.indexOf(l);
- if (idx > -1) {
- listeners.splice(idx, 1);
- if (listeners.length === 0) {
- stop();
- }
- }
-}
-
-var accelerometer = {
- /**
- * Asynchronously acquires the current acceleration.
- *
- * @param {Function} successCallback The function to call when the acceleration data is available
- * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL)
- * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL)
- */
- getCurrentAcceleration: function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'accelerometer.getCurrentAcceleration', arguments);
-
- var p;
- var win = function(a) {
- removeListeners(p);
- successCallback(a);
- };
- var fail = function(e) {
- removeListeners(p);
- errorCallback && errorCallback(e);
- };
-
- p = createCallbackPair(win, fail);
- listeners.push(p);
-
- if (!running) {
- start();
- }
- },
-
- /**
- * Asynchronously acquires the acceleration repeatedly at a given interval.
- *
- * @param {Function} successCallback The function to call each time the acceleration data is available
- * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL)
- * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL)
- * @return String The watch id that must be passed to #clearWatch to stop watching.
- */
- watchAcceleration: function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'accelerometer.watchAcceleration', arguments);
- // Default interval (10 sec)
- var frequency = (options && options.frequency && typeof options.frequency == 'number') ? options.frequency : 10000;
-
- // Keep reference to watch id, and report accel readings as often as defined in frequency
- var id = utils.createUUID();
-
- var p = createCallbackPair(function(){}, function(e) {
- removeListeners(p);
- errorCallback && errorCallback(e);
- });
- listeners.push(p);
-
- timers[id] = {
- timer:window.setInterval(function() {
- if (accel) {
- successCallback(accel);
- }
- }, frequency),
- listeners:p
- };
-
- if (running) {
- // If we're already running then immediately invoke the success callback
- // but only if we have retrieved a value, sample code does not check for null ...
- if (accel) {
- successCallback(accel);
- }
- } else {
- start();
- }
-
- return id;
- },
-
- /**
- * Clears the specified accelerometer watch.
- *
- * @param {String} id The id of the watch returned from #watchAcceleration.
- */
- clearWatch: function(id) {
- // Stop javascript timer & remove from timer list
- if (id && timers[id]) {
- window.clearInterval(timers[id].timer);
- removeListeners(timers[id].listeners);
- delete timers[id];
- }
- }
-};
-
-module.exports = accelerometer;
-
-});
-
-// file: lib/common/plugin/accelerometer/symbols.js
-define("cordova/plugin/accelerometer/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/Acceleration', 'Acceleration');
-modulemapper.defaults('cordova/plugin/accelerometer', 'navigator.accelerometer');
-
-});
-
-// file: lib/common/plugin/battery.js
-define("cordova/plugin/battery", function(require, exports, module) {
-
-/**
- * This class contains information about the current battery status.
- * @constructor
- */
-var cordova = require('cordova'),
- exec = require('cordova/exec');
-
-function handlers() {
- return battery.channels.batterystatus.numHandlers +
- battery.channels.batterylow.numHandlers +
- battery.channels.batterycritical.numHandlers;
-}
-
-var Battery = function() {
- this._level = null;
- this._isPlugged = null;
- // Create new event handlers on the window (returns a channel instance)
- this.channels = {
- batterystatus:cordova.addWindowEventHandler("batterystatus"),
- batterylow:cordova.addWindowEventHandler("batterylow"),
- batterycritical:cordova.addWindowEventHandler("batterycritical")
- };
- for (var key in this.channels) {
- this.channels[key].onHasSubscribersChange = Battery.onHasSubscribersChange;
- }
-};
-/**
- * Event handlers for when callbacks get registered for the battery.
- * Keep track of how many handlers we have so we can start and stop the native battery listener
- * appropriately (and hopefully save on battery life!).
- */
-Battery.onHasSubscribersChange = function() {
- // If we just registered the first handler, make sure native listener is started.
- if (this.numHandlers === 1 && handlers() === 1) {
- exec(battery._status, battery._error, "Battery", "start", []);
- } else if (handlers() === 0) {
- exec(null, null, "Battery", "stop", []);
- }
-};
-
-/**
- * Callback for battery status
- *
- * @param {Object} info keys: level, isPlugged
- */
-Battery.prototype._status = function(info) {
- if (info) {
- var me = battery;
- var level = info.level;
- if (me._level !== level || me._isPlugged !== info.isPlugged) {
- // Fire batterystatus event
- cordova.fireWindowEvent("batterystatus", info);
-
- // Fire low battery event
- if (level === 20 || level === 5) {
- if (level === 20) {
- cordova.fireWindowEvent("batterylow", info);
- }
- else {
- cordova.fireWindowEvent("batterycritical", info);
- }
- }
- }
- me._level = level;
- me._isPlugged = info.isPlugged;
- }
-};
-
-/**
- * Error callback for battery start
- */
-Battery.prototype._error = function(e) {
- console.log("Error initializing Battery: " + e);
-};
-
-var battery = new Battery();
-
-module.exports = battery;
-
-});
-
-// file: lib/common/plugin/battery/symbols.js
-define("cordova/plugin/battery/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/battery', 'navigator.battery');
-
-});
-
-// file: lib/common/plugin/camera/symbols.js
-define("cordova/plugin/camera/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/Camera', 'navigator.camera');
-modulemapper.defaults('cordova/plugin/CameraConstants', 'Camera');
-modulemapper.defaults('cordova/plugin/CameraPopoverOptions', 'CameraPopoverOptions');
-
-});
-
-// file: lib/common/plugin/capture.js
-define("cordova/plugin/capture", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- MediaFile = require('cordova/plugin/MediaFile');
-
-/**
- * Launches a capture of different types.
- *
- * @param (DOMString} type
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureVideoOptions} options
- */
-function _capture(type, successCallback, errorCallback, options) {
- var win = function(pluginResult) {
- var mediaFiles = [];
- var i;
- for (i = 0; i < pluginResult.length; i++) {
- var mediaFile = new MediaFile();
- mediaFile.name = pluginResult[i].name;
- mediaFile.fullPath = pluginResult[i].fullPath;
- mediaFile.type = pluginResult[i].type;
- mediaFile.lastModifiedDate = pluginResult[i].lastModifiedDate;
- mediaFile.size = pluginResult[i].size;
- mediaFiles.push(mediaFile);
- }
- successCallback(mediaFiles);
- };
- exec(win, errorCallback, "Capture", type, [options]);
-}
-/**
- * The Capture interface exposes an interface to the camera and microphone of the hosting device.
- */
-function Capture() {
- this.supportedAudioModes = [];
- this.supportedImageModes = [];
- this.supportedVideoModes = [];
-}
-
-/**
- * Launch audio recorder application for recording audio clip(s).
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureAudioOptions} options
- */
-Capture.prototype.captureAudio = function(successCallback, errorCallback, options){
- _capture("captureAudio", successCallback, errorCallback, options);
-};
-
-/**
- * Launch camera application for taking image(s).
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureImageOptions} options
- */
-Capture.prototype.captureImage = function(successCallback, errorCallback, options){
- _capture("captureImage", successCallback, errorCallback, options);
-};
-
-/**
- * Launch device camera application for recording video(s).
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureVideoOptions} options
- */
-Capture.prototype.captureVideo = function(successCallback, errorCallback, options){
- _capture("captureVideo", successCallback, errorCallback, options);
-};
-
-
-module.exports = new Capture();
-
-});
-
-// file: lib/common/plugin/capture/symbols.js
-define("cordova/plugin/capture/symbols", function(require, exports, module) {
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/CaptureError', 'CaptureError');
-modulemapper.clobbers('cordova/plugin/CaptureAudioOptions', 'CaptureAudioOptions');
-modulemapper.clobbers('cordova/plugin/CaptureImageOptions', 'CaptureImageOptions');
-modulemapper.clobbers('cordova/plugin/CaptureVideoOptions', 'CaptureVideoOptions');
-modulemapper.clobbers('cordova/plugin/ConfigurationData', 'ConfigurationData');
-modulemapper.clobbers('cordova/plugin/MediaFile', 'MediaFile');
-modulemapper.clobbers('cordova/plugin/MediaFileData', 'MediaFileData');
-modulemapper.clobbers('cordova/plugin/capture', 'navigator.device.capture');
-
-});
-
-// file: lib/common/plugin/compass.js
-define("cordova/plugin/compass", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- utils = require('cordova/utils'),
- CompassHeading = require('cordova/plugin/CompassHeading'),
- CompassError = require('cordova/plugin/CompassError'),
- timers = {},
- compass = {
- /**
- * Asynchronously acquires the current heading.
- * @param {Function} successCallback The function to call when the heading
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the heading data.
- * @param {CompassOptions} options The options for getting the heading data (not used).
- */
- getCurrentHeading:function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'compass.getCurrentHeading', arguments);
-
- var win = function(result) {
- var ch = new CompassHeading(result.magneticHeading, result.trueHeading, result.headingAccuracy, result.timestamp);
- successCallback(ch);
- };
- var fail = errorCallback && function(code) {
- var ce = new CompassError(code);
- errorCallback(ce);
- };
-
- // Get heading
- exec(win, fail, "Compass", "getHeading", [options]);
- },
-
- /**
- * Asynchronously acquires the heading repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the heading
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the heading data.
- * @param {HeadingOptions} options The options for getting the heading data
- * such as timeout and the frequency of the watch. For iOS, filter parameter
- * specifies to watch via a distance filter rather than time.
- */
- watchHeading:function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'compass.watchHeading', arguments);
- // Default interval (100 msec)
- var frequency = (options !== undefined && options.frequency !== undefined) ? options.frequency : 100;
- var filter = (options !== undefined && options.filter !== undefined) ? options.filter : 0;
-
- var id = utils.createUUID();
- if (filter > 0) {
- // is an iOS request for watch by filter, no timer needed
- timers[id] = "iOS";
- compass.getCurrentHeading(successCallback, errorCallback, options);
- } else {
- // Start watch timer to get headings
- timers[id] = window.setInterval(function() {
- compass.getCurrentHeading(successCallback, errorCallback);
- }, frequency);
- }
-
- return id;
- },
-
- /**
- * Clears the specified heading watch.
- * @param {String} watchId The ID of the watch returned from #watchHeading.
- */
- clearWatch:function(id) {
- // Stop javascript timer & remove from timer list
- if (id && timers[id]) {
- if (timers[id] != "iOS") {
- clearInterval(timers[id]);
- } else {
- // is iOS watch by filter so call into device to stop
- exec(null, null, "Compass", "stopHeading", []);
- }
- delete timers[id];
- }
- }
- };
-
-module.exports = compass;
-
-});
-
-// file: lib/common/plugin/compass/symbols.js
-define("cordova/plugin/compass/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/CompassHeading', 'CompassHeading');
-modulemapper.clobbers('cordova/plugin/CompassError', 'CompassError');
-modulemapper.clobbers('cordova/plugin/compass', 'navigator.compass');
-
-});
-
-// file: lib/common/plugin/console-via-logger.js
-define("cordova/plugin/console-via-logger", function(require, exports, module) {
-
-//------------------------------------------------------------------------------
-
-var logger = require("cordova/plugin/logger");
-var utils = require("cordova/utils");
-
-//------------------------------------------------------------------------------
-// object that we're exporting
-//------------------------------------------------------------------------------
-var console = module.exports;
-
-//------------------------------------------------------------------------------
-// copy of the original console object
-//------------------------------------------------------------------------------
-var WinConsole = window.console;
-
-//------------------------------------------------------------------------------
-// whether to use the logger
-//------------------------------------------------------------------------------
-var UseLogger = false;
-
-//------------------------------------------------------------------------------
-// Timers
-//------------------------------------------------------------------------------
-var Timers = {};
-
-//------------------------------------------------------------------------------
-// used for unimplemented methods
-//------------------------------------------------------------------------------
-function noop() {}
-
-//------------------------------------------------------------------------------
-// used for unimplemented methods
-//------------------------------------------------------------------------------
-console.useLogger = function (value) {
- if (arguments.length) UseLogger = !!value;
-
- if (UseLogger) {
- if (logger.useConsole()) {
- throw new Error("console and logger are too intertwingly");
- }
- }
-
- return UseLogger;
-};
-
-//------------------------------------------------------------------------------
-console.log = function() {
- if (logger.useConsole()) return;
- logger.log.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.error = function() {
- if (logger.useConsole()) return;
- logger.error.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.warn = function() {
- if (logger.useConsole()) return;
- logger.warn.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.info = function() {
- if (logger.useConsole()) return;
- logger.info.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.debug = function() {
- if (logger.useConsole()) return;
- logger.debug.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.assert = function(expression) {
- if (expression) return;
-
- var message = logger.format.apply(logger.format, [].slice.call(arguments, 1));
- console.log("ASSERT: " + message);
-};
-
-//------------------------------------------------------------------------------
-console.clear = function() {};
-
-//------------------------------------------------------------------------------
-console.dir = function(object) {
- console.log("%o", object);
-};
-
-//------------------------------------------------------------------------------
-console.dirxml = function(node) {
- console.log(node.innerHTML);
-};
-
-//------------------------------------------------------------------------------
-console.trace = noop;
-
-//------------------------------------------------------------------------------
-console.group = console.log;
-
-//------------------------------------------------------------------------------
-console.groupCollapsed = console.log;
-
-//------------------------------------------------------------------------------
-console.groupEnd = noop;
-
-//------------------------------------------------------------------------------
-console.time = function(name) {
- Timers[name] = new Date().valueOf();
-};
-
-//------------------------------------------------------------------------------
-console.timeEnd = function(name) {
- var timeStart = Timers[name];
- if (!timeStart) {
- console.warn("unknown timer: " + name);
- return;
- }
-
- var timeElapsed = new Date().valueOf() - timeStart;
- console.log(name + ": " + timeElapsed + "ms");
-};
-
-//------------------------------------------------------------------------------
-console.timeStamp = noop;
-
-//------------------------------------------------------------------------------
-console.profile = noop;
-
-//------------------------------------------------------------------------------
-console.profileEnd = noop;
-
-//------------------------------------------------------------------------------
-console.count = noop;
-
-//------------------------------------------------------------------------------
-console.exception = console.log;
-
-//------------------------------------------------------------------------------
-console.table = function(data, columns) {
- console.log("%o", data);
-};
-
-//------------------------------------------------------------------------------
-// return a new function that calls both functions passed as args
-//------------------------------------------------------------------------------
-function wrappedOrigCall(orgFunc, newFunc) {
- return function() {
- var args = [].slice.call(arguments);
- try { orgFunc.apply(WinConsole, args); } catch (e) {}
- try { newFunc.apply(console, args); } catch (e) {}
- };
-}
-
-//------------------------------------------------------------------------------
-// For every function that exists in the original console object, that
-// also exists in the new console object, wrap the new console method
-// with one that calls both
-//------------------------------------------------------------------------------
-for (var key in console) {
- if (typeof WinConsole[key] == "function") {
- console[key] = wrappedOrigCall(WinConsole[key], console[key]);
- }
-}
-
-});
-
-// file: lib/common/plugin/contacts.js
-define("cordova/plugin/contacts", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- ContactError = require('cordova/plugin/ContactError'),
- utils = require('cordova/utils'),
- Contact = require('cordova/plugin/Contact');
-
-/**
-* Represents a group of Contacts.
-* @constructor
-*/
-var contacts = {
- /**
- * Returns an array of Contacts matching the search criteria.
- * @param fields that should be searched
- * @param successCB success callback
- * @param errorCB error callback
- * @param {ContactFindOptions} options that can be applied to contact searching
- * @return array of Contacts matching search criteria
- */
- find:function(fields, successCB, errorCB, options) {
- argscheck.checkArgs('afFO', 'contacts.find', arguments);
- if (!fields.length) {
- errorCB && errorCB(new ContactError(ContactError.INVALID_ARGUMENT_ERROR));
- } else {
- var win = function(result) {
- var cs = [];
- for (var i = 0, l = result.length; i < l; i++) {
- cs.push(contacts.create(result[i]));
- }
- successCB(cs);
- };
- exec(win, errorCB, "Contacts", "search", [fields, options]);
- }
- },
-
- /**
- * This function creates a new contact, but it does not persist the contact
- * to device storage. To persist the contact to device storage, invoke
- * contact.save().
- * @param properties an object whose properties will be examined to create a new Contact
- * @returns new Contact object
- */
- create:function(properties) {
- argscheck.checkArgs('O', 'contacts.create', arguments);
- var contact = new Contact();
- for (var i in properties) {
- if (typeof contact[i] !== 'undefined' && properties.hasOwnProperty(i)) {
- contact[i] = properties[i];
- }
- }
- return contact;
- }
-};
-
-module.exports = contacts;
-
-});
-
-// file: lib/common/plugin/contacts/symbols.js
-define("cordova/plugin/contacts/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/contacts', 'navigator.contacts');
-modulemapper.clobbers('cordova/plugin/Contact', 'Contact');
-modulemapper.clobbers('cordova/plugin/ContactAddress', 'ContactAddress');
-modulemapper.clobbers('cordova/plugin/ContactError', 'ContactError');
-modulemapper.clobbers('cordova/plugin/ContactField', 'ContactField');
-modulemapper.clobbers('cordova/plugin/ContactFindOptions', 'ContactFindOptions');
-modulemapper.clobbers('cordova/plugin/ContactName', 'ContactName');
-modulemapper.clobbers('cordova/plugin/ContactOrganization', 'ContactOrganization');
-
-});
-
-// file: lib/common/plugin/device.js
-define("cordova/plugin/device", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- channel = require('cordova/channel'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec');
-
-// Tell cordova channel to wait on the CordovaInfoReady event
-channel.waitForInitialization('onCordovaInfoReady');
-
-/**
- * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the
- * phone, etc.
- * @constructor
- */
-function Device() {
- this.available = false;
- this.platform = null;
- this.version = null;
- this.uuid = null;
- this.cordova = null;
- this.model = null;
-
- var me = this;
-
- channel.onCordovaReady.subscribe(function() {
- me.getInfo(function(info) {
- var buildLabel = info.cordova;
- if (buildLabel != CORDOVA_JS_BUILD_LABEL) {
- buildLabel += ' JS=' + CORDOVA_JS_BUILD_LABEL;
- }
- me.available = true;
- me.platform = info.platform;
- me.version = info.version;
- me.uuid = info.uuid;
- me.cordova = buildLabel;
- me.model = info.model;
- channel.onCordovaInfoReady.fire();
- },function(e) {
- me.available = false;
- utils.alert("[ERROR] Error initializing Cordova: " + e);
- });
- });
-}
-
-/**
- * Get device info
- *
- * @param {Function} successCallback The function to call when the heading data is available
- * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL)
- */
-Device.prototype.getInfo = function(successCallback, errorCallback) {
- argscheck.checkArgs('fF', 'Device.getInfo', arguments);
- exec(successCallback, errorCallback, "Device", "getDeviceInfo", []);
-};
-
-module.exports = new Device();
-
-});
-
-// file: lib/common/plugin/device/symbols.js
-define("cordova/plugin/device/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/device', 'device');
-
-});
-
-// file: lib/common/plugin/echo.js
-define("cordova/plugin/echo", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- utils = require('cordova/utils');
-
-/**
- * Sends the given message through exec() to the Echo plugin, which sends it back to the successCallback.
- * @param successCallback invoked with a FileSystem object
- * @param errorCallback invoked if error occurs retrieving file system
- * @param message The string to be echoed.
- * @param forceAsync Whether to force an async return value (for testing native->js bridge).
- */
-module.exports = function(successCallback, errorCallback, message, forceAsync) {
- var action = 'echo';
- var messageIsMultipart = (utils.typeName(message) == "Array");
- var args = messageIsMultipart ? message : [message];
-
- if (utils.typeName(message) == 'ArrayBuffer') {
- if (forceAsync) {
- console.warn('Cannot echo ArrayBuffer with forced async, falling back to sync.');
- }
- action += 'ArrayBuffer';
- } else if (messageIsMultipart) {
- if (forceAsync) {
- console.warn('Cannot echo MultiPart Array with forced async, falling back to sync.');
- }
- action += 'MultiPart';
- } else if (forceAsync) {
- action += 'Async';
- }
-
- exec(successCallback, errorCallback, "Echo", action, args);
-};
-
-
-});
-
-// file: lib/windowsphone/plugin/file/symbols.js
-define("cordova/plugin/file/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper'),
- symbolshelper = require('cordova/plugin/file/symbolshelper');
-
-symbolshelper(modulemapper.defaults);
-
-});
-
-// file: lib/common/plugin/file/symbolshelper.js
-define("cordova/plugin/file/symbolshelper", function(require, exports, module) {
-
-module.exports = function(exportFunc) {
- exportFunc('cordova/plugin/DirectoryEntry', 'DirectoryEntry');
- exportFunc('cordova/plugin/DirectoryReader', 'DirectoryReader');
- exportFunc('cordova/plugin/Entry', 'Entry');
- exportFunc('cordova/plugin/File', 'File');
- exportFunc('cordova/plugin/FileEntry', 'FileEntry');
- exportFunc('cordova/plugin/FileError', 'FileError');
- exportFunc('cordova/plugin/FileReader', 'FileReader');
- exportFunc('cordova/plugin/FileSystem', 'FileSystem');
- exportFunc('cordova/plugin/FileUploadOptions', 'FileUploadOptions');
- exportFunc('cordova/plugin/FileUploadResult', 'FileUploadResult');
- exportFunc('cordova/plugin/FileWriter', 'FileWriter');
- exportFunc('cordova/plugin/Flags', 'Flags');
- exportFunc('cordova/plugin/LocalFileSystem', 'LocalFileSystem');
- exportFunc('cordova/plugin/Metadata', 'Metadata');
- exportFunc('cordova/plugin/ProgressEvent', 'ProgressEvent');
- exportFunc('cordova/plugin/requestFileSystem', 'requestFileSystem');
- exportFunc('cordova/plugin/resolveLocalFileSystemURI', 'resolveLocalFileSystemURI');
-};
-
-});
-
-// file: lib/windowsphone/plugin/filetransfer/symbols.js
-define("cordova/plugin/filetransfer/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/windowsphone/FileTransfer', 'FileTransfer');
-modulemapper.clobbers('cordova/plugin/FileTransferError', 'FileTransferError');
-
-});
-
-// file: lib/common/plugin/geolocation.js
-define("cordova/plugin/geolocation", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec'),
- PositionError = require('cordova/plugin/PositionError'),
- Position = require('cordova/plugin/Position');
-
-var timers = {}; // list of timers in use
-
-// Returns default params, overrides if provided with values
-function parseParameters(options) {
- var opt = {
- maximumAge: 0,
- enableHighAccuracy: false,
- timeout: Infinity
- };
-
- if (options) {
- if (options.maximumAge !== undefined && !isNaN(options.maximumAge) && options.maximumAge > 0) {
- opt.maximumAge = options.maximumAge;
- }
- if (options.enableHighAccuracy !== undefined) {
- opt.enableHighAccuracy = options.enableHighAccuracy;
- }
- if (options.timeout !== undefined && !isNaN(options.timeout)) {
- if (options.timeout < 0) {
- opt.timeout = 0;
- } else {
- opt.timeout = options.timeout;
- }
- }
- }
-
- return opt;
-}
-
-// Returns a timeout failure, closed over a specified timeout value and error callback.
-function createTimeout(errorCallback, timeout) {
- var t = setTimeout(function() {
- clearTimeout(t);
- t = null;
- errorCallback({
- code:PositionError.TIMEOUT,
- message:"Position retrieval timed out."
- });
- }, timeout);
- return t;
-}
-
-var geolocation = {
- lastPosition:null, // reference to last known (cached) position returned
- /**
- * Asynchronously acquires the current position.
- *
- * @param {Function} successCallback The function to call when the position data is available
- * @param {Function} errorCallback The function to call when there is an error getting the heading position. (OPTIONAL)
- * @param {PositionOptions} options The options for getting the position data. (OPTIONAL)
- */
- getCurrentPosition:function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments);
- options = parseParameters(options);
-
- // Timer var that will fire an error callback if no position is retrieved from native
- // before the "timeout" param provided expires
- var timeoutTimer = {timer:null};
-
- var win = function(p) {
- clearTimeout(timeoutTimer.timer);
- if (!(timeoutTimer.timer)) {
- // Timeout already happened, or native fired error callback for
- // this geo request.
- // Don't continue with success callback.
- return;
- }
- var pos = new Position(
- {
- latitude:p.latitude,
- longitude:p.longitude,
- altitude:p.altitude,
- accuracy:p.accuracy,
- heading:p.heading,
- velocity:p.velocity,
- altitudeAccuracy:p.altitudeAccuracy
- },
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
- );
- geolocation.lastPosition = pos;
- successCallback(pos);
- };
- var fail = function(e) {
- clearTimeout(timeoutTimer.timer);
- timeoutTimer.timer = null;
- var err = new PositionError(e.code, e.message);
- if (errorCallback) {
- errorCallback(err);
- }
- };
-
- // Check our cached position, if its timestamp difference with current time is less than the maximumAge, then just
- // fire the success callback with the cached position.
- if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp.getTime()) <= options.maximumAge)) {
- successCallback(geolocation.lastPosition);
- // If the cached position check failed and the timeout was set to 0, error out with a TIMEOUT error object.
- } else if (options.timeout === 0) {
- fail({
- code:PositionError.TIMEOUT,
- message:"timeout value in PositionOptions set to 0 and no cached Position object available, or cached Position object's age exceeds provided PositionOptions' maximumAge parameter."
- });
- // Otherwise we have to call into native to retrieve a position.
- } else {
- if (options.timeout !== Infinity) {
- // If the timeout value was not set to Infinity (default), then
- // set up a timeout function that will fire the error callback
- // if no successful position was retrieved before timeout expired.
- timeoutTimer.timer = createTimeout(fail, options.timeout);
- } else {
- // This is here so the check in the win function doesn't mess stuff up
- // may seem weird but this guarantees timeoutTimer is
- // always truthy before we call into native
- timeoutTimer.timer = true;
- }
- exec(win, fail, "Geolocation", "getLocation", [options.enableHighAccuracy, options.maximumAge]);
- }
- return timeoutTimer;
- },
- /**
- * Asynchronously watches the geolocation for changes to geolocation. When a change occurs,
- * the successCallback is called with the new location.
- *
- * @param {Function} successCallback The function to call each time the location data is available
- * @param {Function} errorCallback The function to call when there is an error getting the location data. (OPTIONAL)
- * @param {PositionOptions} options The options for getting the location data such as frequency. (OPTIONAL)
- * @return String The watch id that must be passed to #clearWatch to stop watching.
- */
- watchPosition:function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments);
- options = parseParameters(options);
-
- var id = utils.createUUID();
-
- // Tell device to get a position ASAP, and also retrieve a reference to the timeout timer generated in getCurrentPosition
- timers[id] = geolocation.getCurrentPosition(successCallback, errorCallback, options);
-
- var fail = function(e) {
- clearTimeout(timers[id].timer);
- var err = new PositionError(e.code, e.message);
- if (errorCallback) {
- errorCallback(err);
- }
- };
-
- var win = function(p) {
- clearTimeout(timers[id].timer);
- if (options.timeout !== Infinity) {
- timers[id].timer = createTimeout(fail, options.timeout);
- }
- var pos = new Position(
- {
- latitude:p.latitude,
- longitude:p.longitude,
- altitude:p.altitude,
- accuracy:p.accuracy,
- heading:p.heading,
- velocity:p.velocity,
- altitudeAccuracy:p.altitudeAccuracy
- },
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
- );
- geolocation.lastPosition = pos;
- successCallback(pos);
- };
-
- exec(win, fail, "Geolocation", "addWatch", [id, options.enableHighAccuracy]);
-
- return id;
- },
- /**
- * Clears the specified heading watch.
- *
- * @param {String} id The ID of the watch returned from #watchPosition
- */
- clearWatch:function(id) {
- if (id && timers[id] !== undefined) {
- clearTimeout(timers[id].timer);
- timers[id].timer = false;
- exec(null, null, "Geolocation", "clearWatch", [id]);
- }
- }
-};
-
-module.exports = geolocation;
-
-});
-
-// file: lib/common/plugin/geolocation/symbols.js
-define("cordova/plugin/geolocation/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/geolocation', 'navigator.geolocation');
-modulemapper.clobbers('cordova/plugin/PositionError', 'PositionError');
-modulemapper.clobbers('cordova/plugin/Position', 'Position');
-modulemapper.clobbers('cordova/plugin/Coordinates', 'Coordinates');
-
-});
-
-// file: lib/common/plugin/globalization.js
-define("cordova/plugin/globalization", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- GlobalizationError = require('cordova/plugin/GlobalizationError');
-
-var globalization = {
-
-/**
-* Returns the string identifier for the client's current language.
-* It returns the language identifier string to the successCB callback with a
-* properties object as a parameter. If there is an error getting the language,
-* then the errorCB callback is invoked.
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-*
-* @return Object.value {String}: The language identifier
-*
-* @error GlobalizationError.UNKNOWN_ERROR
-*
-* Example
-* globalization.getPreferredLanguage(function (language) {alert('language:' + language.value + '\n');},
-* function () {});
-*/
-getPreferredLanguage:function(successCB, failureCB) {
- argscheck.checkArgs('fF', 'Globalization.getPreferredLanguage', arguments);
- exec(successCB, failureCB, "Globalization","getPreferredLanguage", []);
-},
-
-/**
-* Returns the string identifier for the client's current locale setting.
-* It returns the locale identifier string to the successCB callback with a
-* properties object as a parameter. If there is an error getting the locale,
-* then the errorCB callback is invoked.
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-*
-* @return Object.value {String}: The locale identifier
-*
-* @error GlobalizationError.UNKNOWN_ERROR
-*
-* Example
-* globalization.getLocaleName(function (locale) {alert('locale:' + locale.value + '\n');},
-* function () {});
-*/
-getLocaleName:function(successCB, failureCB) {
- argscheck.checkArgs('fF', 'Globalization.getLocaleName', arguments);
- exec(successCB, failureCB, "Globalization","getLocaleName", []);
-},
-
-
-/**
-* Returns a date formatted as a string according to the client's user preferences and
-* calendar using the time zone of the client. It returns the formatted date string to the
-* successCB callback with a properties object as a parameter. If there is an error
-* formatting the date, then the errorCB callback is invoked.
-*
-* The defaults are: formatLenght="short" and selector="date and time"
-*
-* @param {Date} date
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* formatLength {String}: 'short', 'medium', 'long', or 'full'
-* selector {String}: 'date', 'time', or 'date and time'
-*
-* @return Object.value {String}: The localized date string
-*
-* @error GlobalizationError.FORMATTING_ERROR
-*
-* Example
-* globalization.dateToString(new Date(),
-* function (date) {alert('date:' + date.value + '\n');},
-* function (errorCode) {alert(errorCode);},
-* {formatLength:'short'});
-*/
-dateToString:function(date, successCB, failureCB, options) {
- argscheck.checkArgs('dfFO', 'Globalization.dateToString', arguments);
- var dateValue = date.valueOf();
- exec(successCB, failureCB, "Globalization", "dateToString", [{"date": dateValue, "options": options}]);
-},
-
-
-/**
-* Parses a date formatted as a string according to the client's user
-* preferences and calendar using the time zone of the client and returns
-* the corresponding date object. It returns the date to the successCB
-* callback with a properties object as a parameter. If there is an error
-* parsing the date string, then the errorCB callback is invoked.
-*
-* The defaults are: formatLength="short" and selector="date and time"
-*
-* @param {String} dateString
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* formatLength {String}: 'short', 'medium', 'long', or 'full'
-* selector {String}: 'date', 'time', or 'date and time'
-*
-* @return Object.year {Number}: The four digit year
-* Object.month {Number}: The month from (0 - 11)
-* Object.day {Number}: The day from (1 - 31)
-* Object.hour {Number}: The hour from (0 - 23)
-* Object.minute {Number}: The minute from (0 - 59)
-* Object.second {Number}: The second from (0 - 59)
-* Object.millisecond {Number}: The milliseconds (from 0 - 999),
-* not available on all platforms
-*
-* @error GlobalizationError.PARSING_ERROR
-*
-* Example
-* globalization.stringToDate('4/11/2011',
-* function (date) { alert('Month:' + date.month + '\n' +
-* 'Day:' + date.day + '\n' +
-* 'Year:' + date.year + '\n');},
-* function (errorCode) {alert(errorCode);},
-* {selector:'date'});
-*/
-stringToDate:function(dateString, successCB, failureCB, options) {
- argscheck.checkArgs('sfFO', 'Globalization.stringToDate', arguments);
- exec(successCB, failureCB, "Globalization", "stringToDate", [{"dateString": dateString, "options": options}]);
-},
-
-
-/**
-* Returns a pattern string for formatting and parsing dates according to the client's
-* user preferences. It returns the pattern to the successCB callback with a
-* properties object as a parameter. If there is an error obtaining the pattern,
-* then the errorCB callback is invoked.
-*
-* The defaults are: formatLength="short" and selector="date and time"
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* formatLength {String}: 'short', 'medium', 'long', or 'full'
-* selector {String}: 'date', 'time', or 'date and time'
-*
-* @return Object.pattern {String}: The date and time pattern for formatting and parsing dates.
-* The patterns follow Unicode Technical Standard #35
-* http://unicode.org/reports/tr35/tr35-4.html
-* Object.timezone {String}: The abbreviated name of the time zone on the client
-* Object.utc_offset {Number}: The current difference in seconds between the client's
-* time zone and coordinated universal time.
-* Object.dst_offset {Number}: The current daylight saving time offset in seconds
-* between the client's non-daylight saving's time zone
-* and the client's daylight saving's time zone.
-*
-* @error GlobalizationError.PATTERN_ERROR
-*
-* Example
-* globalization.getDatePattern(
-* function (date) {alert('pattern:' + date.pattern + '\n');},
-* function () {},
-* {formatLength:'short'});
-*/
-getDatePattern:function(successCB, failureCB, options) {
- argscheck.checkArgs('fFO', 'Globalization.getDatePattern', arguments);
- exec(successCB, failureCB, "Globalization", "getDatePattern", [{"options": options}]);
-},
-
-
-/**
-* Returns an array of either the names of the months or days of the week
-* according to the client's user preferences and calendar. It returns the array of names to the
-* successCB callback with a properties object as a parameter. If there is an error obtaining the
-* names, then the errorCB callback is invoked.
-*
-* The defaults are: type="wide" and item="months"
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* type {String}: 'narrow' or 'wide'
-* item {String}: 'months', or 'days'
-*
-* @return Object.value {Array{String}}: The array of names starting from either
-* the first month in the year or the
-* first day of the week.
-* @error GlobalizationError.UNKNOWN_ERROR
-*
-* Example
-* globalization.getDateNames(function (names) {
-* for(var i = 0; i < names.value.length; i++) {
-* alert('Month:' + names.value[i] + '\n');}},
-* function () {});
-*/
-getDateNames:function(successCB, failureCB, options) {
- argscheck.checkArgs('fFO', 'Globalization.getDateNames', arguments);
- exec(successCB, failureCB, "Globalization", "getDateNames", [{"options": options}]);
-},
-
-/**
-* Returns whether daylight savings time is in effect for a given date using the client's
-* time zone and calendar. It returns whether or not daylight savings time is in effect
-* to the successCB callback with a properties object as a parameter. If there is an error
-* reading the date, then the errorCB callback is invoked.
-*
-* @param {Date} date
-* @param {Function} successCB
-* @param {Function} errorCB
-*
-* @return Object.dst {Boolean}: The value "true" indicates that daylight savings time is
-* in effect for the given date and "false" indicate that it is not.
-*
-* @error GlobalizationError.UNKNOWN_ERROR
-*
-* Example
-* globalization.isDayLightSavingsTime(new Date(),
-* function (date) {alert('dst:' + date.dst + '\n');}
-* function () {});
-*/
-isDayLightSavingsTime:function(date, successCB, failureCB) {
- argscheck.checkArgs('dfF', 'Globalization.isDayLightSavingsTime', arguments);
- var dateValue = date.valueOf();
- exec(successCB, failureCB, "Globalization", "isDayLightSavingsTime", [{"date": dateValue}]);
-},
-
-/**
-* Returns the first day of the week according to the client's user preferences and calendar.
-* The days of the week are numbered starting from 1 where 1 is considered to be Sunday.
-* It returns the day to the successCB callback with a properties object as a parameter.
-* If there is an error obtaining the pattern, then the errorCB callback is invoked.
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-*
-* @return Object.value {Number}: The number of the first day of the week.
-*
-* @error GlobalizationError.UNKNOWN_ERROR
-*
-* Example
-* globalization.getFirstDayOfWeek(function (day)
-* { alert('Day:' + day.value + '\n');},
-* function () {});
-*/
-getFirstDayOfWeek:function(successCB, failureCB) {
- argscheck.checkArgs('fF', 'Globalization.getFirstDayOfWeek', arguments);
- exec(successCB, failureCB, "Globalization", "getFirstDayOfWeek", []);
-},
-
-
-/**
-* Returns a number formatted as a string according to the client's user preferences.
-* It returns the formatted number string to the successCB callback with a properties object as a
-* parameter. If there is an error formatting the number, then the errorCB callback is invoked.
-*
-* The defaults are: type="decimal"
-*
-* @param {Number} number
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* type {String}: 'decimal', "percent", or 'currency'
-*
-* @return Object.value {String}: The formatted number string.
-*
-* @error GlobalizationError.FORMATTING_ERROR
-*
-* Example
-* globalization.numberToString(3.25,
-* function (number) {alert('number:' + number.value + '\n');},
-* function () {},
-* {type:'decimal'});
-*/
-numberToString:function(number, successCB, failureCB, options) {
- argscheck.checkArgs('nfFO', 'Globalization.numberToString', arguments);
- exec(successCB, failureCB, "Globalization", "numberToString", [{"number": number, "options": options}]);
-},
-
-/**
-* Parses a number formatted as a string according to the client's user preferences and
-* returns the corresponding number. It returns the number to the successCB callback with a
-* properties object as a parameter. If there is an error parsing the number string, then
-* the errorCB callback is invoked.
-*
-* The defaults are: type="decimal"
-*
-* @param {String} numberString
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* type {String}: 'decimal', "percent", or 'currency'
-*
-* @return Object.value {Number}: The parsed number.
-*
-* @error GlobalizationError.PARSING_ERROR
-*
-* Example
-* globalization.stringToNumber('1234.56',
-* function (number) {alert('Number:' + number.value + '\n');},
-* function () { alert('Error parsing number');});
-*/
-stringToNumber:function(numberString, successCB, failureCB, options) {
- argscheck.checkArgs('sfFO', 'Globalization.stringToNumber', arguments);
- exec(successCB, failureCB, "Globalization", "stringToNumber", [{"numberString": numberString, "options": options}]);
-},
-
-/**
-* Returns a pattern string for formatting and parsing numbers according to the client's user
-* preferences. It returns the pattern to the successCB callback with a properties object as a
-* parameter. If there is an error obtaining the pattern, then the errorCB callback is invoked.
-*
-* The defaults are: type="decimal"
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* type {String}: 'decimal', "percent", or 'currency'
-*
-* @return Object.pattern {String}: The number pattern for formatting and parsing numbers.
-* The patterns follow Unicode Technical Standard #35.
-* http://unicode.org/reports/tr35/tr35-4.html
-* Object.symbol {String}: The symbol to be used when formatting and parsing
-* e.g., percent or currency symbol.
-* Object.fraction {Number}: The number of fractional digits to use when parsing and
-* formatting numbers.
-* Object.rounding {Number}: The rounding increment to use when parsing and formatting.
-* Object.positive {String}: The symbol to use for positive numbers when parsing and formatting.
-* Object.negative: {String}: The symbol to use for negative numbers when parsing and formatting.
-* Object.decimal: {String}: The decimal symbol to use for parsing and formatting.
-* Object.grouping: {String}: The grouping symbol to use for parsing and formatting.
-*
-* @error GlobalizationError.PATTERN_ERROR
-*
-* Example
-* globalization.getNumberPattern(
-* function (pattern) {alert('Pattern:' + pattern.pattern + '\n');},
-* function () {});
-*/
-getNumberPattern:function(successCB, failureCB, options) {
- argscheck.checkArgs('fFO', 'Globalization.getNumberPattern', arguments);
- exec(successCB, failureCB, "Globalization", "getNumberPattern", [{"options": options}]);
-},
-
-/**
-* Returns a pattern string for formatting and parsing currency values according to the client's
-* user preferences and ISO 4217 currency code. It returns the pattern to the successCB callback with a
-* properties object as a parameter. If there is an error obtaining the pattern, then the errorCB
-* callback is invoked.
-*
-* @param {String} currencyCode
-* @param {Function} successCB
-* @param {Function} errorCB
-*
-* @return Object.pattern {String}: The currency pattern for formatting and parsing currency values.
-* The patterns follow Unicode Technical Standard #35
-* http://unicode.org/reports/tr35/tr35-4.html
-* Object.code {String}: The ISO 4217 currency code for the pattern.
-* Object.fraction {Number}: The number of fractional digits to use when parsing and
-* formatting currency.
-* Object.rounding {Number}: The rounding increment to use when parsing and formatting.
-* Object.decimal: {String}: The decimal symbol to use for parsing and formatting.
-* Object.grouping: {String}: The grouping symbol to use for parsing and formatting.
-*
-* @error GlobalizationError.FORMATTING_ERROR
-*
-* Example
-* globalization.getCurrencyPattern('EUR',
-* function (currency) {alert('Pattern:' + currency.pattern + '\n');}
-* function () {});
-*/
-getCurrencyPattern:function(currencyCode, successCB, failureCB) {
- argscheck.checkArgs('sfF', 'Globalization.getCurrencyPattern', arguments);
- exec(successCB, failureCB, "Globalization", "getCurrencyPattern", [{"currencyCode": currencyCode}]);
-}
-
-};
-
-module.exports = globalization;
-
-});
-
-// file: lib/common/plugin/globalization/symbols.js
-define("cordova/plugin/globalization/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/globalization', 'navigator.globalization');
-modulemapper.clobbers('cordova/plugin/GlobalizationError', 'GlobalizationError');
-
-});
-
-// file: lib/windowsphone/plugin/inappbrowser/symbols.js
-define("cordova/plugin/inappbrowser/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/InAppBrowser', 'open');
-
-});
-
-// file: lib/common/plugin/logger.js
-define("cordova/plugin/logger", function(require, exports, module) {
-
-//------------------------------------------------------------------------------
-// The logger module exports the following properties/functions:
-//
-// LOG - constant for the level LOG
-// ERROR - constant for the level ERROR
-// WARN - constant for the level WARN
-// INFO - constant for the level INFO
-// DEBUG - constant for the level DEBUG
-// logLevel() - returns current log level
-// logLevel(value) - sets and returns a new log level
-// useConsole() - returns whether logger is using console
-// useConsole(value) - sets and returns whether logger is using console
-// log(message,...) - logs a message at level LOG
-// error(message,...) - logs a message at level ERROR
-// warn(message,...) - logs a message at level WARN
-// info(message,...) - logs a message at level INFO
-// debug(message,...) - logs a message at level DEBUG
-// logLevel(level,message,...) - logs a message specified level
-//
-//------------------------------------------------------------------------------
-
-var logger = exports;
-
-var exec = require('cordova/exec');
-var utils = require('cordova/utils');
-
-var UseConsole = true;
-var UseLogger = true;
-var Queued = [];
-var DeviceReady = false;
-var CurrentLevel;
-
-var originalConsole = console;
-
-/**
- * Logging levels
- */
-
-var Levels = [
- "LOG",
- "ERROR",
- "WARN",
- "INFO",
- "DEBUG"
-];
-
-/*
- * add the logging levels to the logger object and
- * to a separate levelsMap object for testing
- */
-
-var LevelsMap = {};
-for (var i=0; i<Levels.length; i++) {
- var level = Levels[i];
- LevelsMap[level] = i;
- logger[level] = level;
-}
-
-CurrentLevel = LevelsMap.WARN;
-
-/**
- * Getter/Setter for the logging level
- *
- * Returns the current logging level.
- *
- * When a value is passed, sets the logging level to that value.
- * The values should be one of the following constants:
- * logger.LOG
- * logger.ERROR
- * logger.WARN
- * logger.INFO
- * logger.DEBUG
- *
- * The value used determines which messages get printed. The logging
- * values above are in order, and only messages logged at the logging
- * level or above will actually be displayed to the user. E.g., the
- * default level is WARN, so only messages logged with LOG, ERROR, or
- * WARN will be displayed; INFO and DEBUG messages will be ignored.
- */
-logger.level = function (value) {
- if (arguments.length) {
- if (LevelsMap[value] === null) {
- throw new Error("invalid logging level: " + value);
- }
- CurrentLevel = LevelsMap[value];
- }
-
- return Levels[CurrentLevel];
-};
-
-/**
- * Getter/Setter for the useConsole functionality
- *
- * When useConsole is true, the logger will log via the
- * browser 'console' object.
- */
-logger.useConsole = function (value) {
- if (arguments.length) UseConsole = !!value;
-
- if (UseConsole) {
- if (typeof console == "undefined") {
- throw new Error("global console object is not defined");
- }
-
- if (typeof console.log != "function") {
- throw new Error("global console object does not have a log function");
- }
-
- if (typeof console.useLogger == "function") {
- if (console.useLogger()) {
- throw new Error("console and logger are too intertwingly");
- }
- }
- }
-
- return UseConsole;
-};
-
-/**
- * Getter/Setter for the useLogger functionality
- *
- * When useLogger is true, the logger will log via the
- * native Logger plugin.
- */
-logger.useLogger = function (value) {
- // Enforce boolean
- if (arguments.length) UseLogger = !!value;
- return UseLogger;
-};
-
-/**
- * Logs a message at the LOG level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.log = function(message) { logWithArgs("LOG", arguments); };
-
-/**
- * Logs a message at the ERROR level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.error = function(message) { logWithArgs("ERROR", arguments); };
-
-/**
- * Logs a message at the WARN level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.warn = function(message) { logWithArgs("WARN", arguments); };
-
-/**
- * Logs a message at the INFO level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.info = function(message) { logWithArgs("INFO", arguments); };
-
-/**
- * Logs a message at the DEBUG level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.debug = function(message) { logWithArgs("DEBUG", arguments); };
-
-// log at the specified level with args
-function logWithArgs(level, args) {
- args = [level].concat([].slice.call(args));
- logger.logLevel.apply(logger, args);
-}
-
-/**
- * Logs a message at the specified level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.logLevel = function(level /* , ... */) {
- // format the message with the parameters
- var formatArgs = [].slice.call(arguments, 1);
- var message = logger.format.apply(logger.format, formatArgs);
-
- if (LevelsMap[level] === null) {
- throw new Error("invalid logging level: " + level);
- }
-
- if (LevelsMap[level] > CurrentLevel) return;
-
- // queue the message if not yet at deviceready
- if (!DeviceReady && !UseConsole) {
- Queued.push([level, message]);
- return;
- }
-
- // Log using the native logger if that is enabled
- if (UseLogger) {
- exec(null, null, "Logger", "logLevel", [level, message]);
- }
-
- // Log using the console if that is enabled
- if (UseConsole) {
- // make sure console is not using logger
- if (console.__usingCordovaLogger) {
- throw new Error("console and logger are too intertwingly");
- }
-
- // log to the console
- switch (level) {
- case logger.LOG: originalConsole.log(message); break;
- case logger.ERROR: originalConsole.log("ERROR: " + message); break;
- case logger.WARN: originalConsole.log("WARN: " + message); break;
- case logger.INFO: originalConsole.log("INFO: " + message); break;
- case logger.DEBUG: originalConsole.log("DEBUG: " + message); break;
- }
- }
-};
-
-
-/**
- * Formats a string and arguments following it ala console.log()
- *
- * Any remaining arguments will be appended to the formatted string.
- *
- * for rationale, see FireBug's Console API:
- * http://getfirebug.com/wiki/index.php/Console_API
- */
-logger.format = function(formatString, args) {
- return __format(arguments[0], [].slice.call(arguments,1)).join(' ');
-};
-
-
-//------------------------------------------------------------------------------
-/**
- * Formats a string and arguments following it ala vsprintf()
- *
- * format chars:
- * %j - format arg as JSON
- * %o - format arg as JSON
- * %c - format arg as ''
- * %% - replace with '%'
- * any other char following % will format it's
- * arg via toString().
- *
- * Returns an array containing the formatted string and any remaining
- * arguments.
- */
-function __format(formatString, args) {
- if (formatString === null || formatString === undefined) return [""];
- if (arguments.length == 1) return [formatString.toString()];
-
- if (typeof formatString != "string")
- formatString = formatString.toString();
-
- var pattern = /(.*?)%(.)(.*)/;
- var rest = formatString;
- var result = [];
-
- while (args.length) {
- var match = pattern.exec(rest);
- if (!match) break;
-
- var arg = args.shift();
- rest = match[3];
- result.push(match[1]);
-
- if (match[2] == '%') {
- result.push('%');
- args.unshift(arg);
- continue;
- }
-
- result.push(__formatted(arg, match[2]));
- }
-
- result.push(rest);
-
- var remainingArgs = [].slice.call(args);
- remainingArgs.unshift(result.join(''));
- return remainingArgs;
-}
-
-function __formatted(object, formatChar) {
-
- try {
- switch(formatChar) {
- case 'j':
- case 'o': return JSON.stringify(object);
- case 'c': return '';
- }
- }
- catch (e) {
- return "error JSON.stringify()ing argument: " + e;
- }
-
- if ((object === null) || (object === undefined)) {
- return Object.prototype.toString.call(object);
- }
-
- return object.toString();
-}
-
-
-//------------------------------------------------------------------------------
-// when deviceready fires, log queued messages
-logger.__onDeviceReady = function() {
- if (DeviceReady) return;
-
- DeviceReady = true;
-
- for (var i=0; i<Queued.length; i++) {
- var messageArgs = Queued[i];
- logger.logLevel(messageArgs[0], messageArgs[1]);
- }
-
- Queued = null;
-};
-
-// add a deviceready event to log queued messages
-document.addEventListener("deviceready", logger.__onDeviceReady, false);
-
-});
-
-// file: lib/common/plugin/logger/symbols.js
-define("cordova/plugin/logger/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/logger', 'cordova.logger');
-
-});
-
-// file: lib/windowsphone/plugin/media/symbols.js
-define("cordova/plugin/media/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/Media', 'Media');
-modulemapper.defaults('cordova/plugin/MediaError', 'MediaError');
-
-});
-
-// file: lib/common/plugin/network.js
-define("cordova/plugin/network", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- cordova = require('cordova'),
- channel = require('cordova/channel'),
- utils = require('cordova/utils');
-
-// Link the onLine property with the Cordova-supplied network info.
-// This works because we clobber the naviagtor object with our own
-// object in bootstrap.js.
-if (typeof navigator != 'undefined') {
- utils.defineGetter(navigator, 'onLine', function() {
- return this.connection.type != 'none';
- });
-}
-
-function NetworkConnection() {
- this.type = 'unknown';
-}
-
-/**
- * Get connection info
- *
- * @param {Function} successCallback The function to call when the Connection data is available
- * @param {Function} errorCallback The function to call when there is an error getting the Connection data. (OPTIONAL)
- */
-NetworkConnection.prototype.getInfo = function(successCallback, errorCallback) {
- exec(successCallback, errorCallback, "NetworkStatus", "getConnectionInfo", []);
-};
-
-var me = new NetworkConnection();
-var timerId = null;
-var timeout = 500;
-
-channel.onCordovaReady.subscribe(function() {
- me.getInfo(function(info) {
- me.type = info;
- if (info === "none") {
- // set a timer if still offline at the end of timer send the offline event
- timerId = setTimeout(function(){
- cordova.fireDocumentEvent("offline");
- timerId = null;
- }, timeout);
- } else {
- // If there is a current offline event pending clear it
- if (timerId !== null) {
- clearTimeout(timerId);
- timerId = null;
- }
- cordova.fireDocumentEvent("online");
- }
-
- // should only fire this once
- if (channel.onCordovaConnectionReady.state !== 2) {
- channel.onCordovaConnectionReady.fire();
- }
- },
- function (e) {
- // If we can't get the network info we should still tell Cordova
- // to fire the deviceready event.
- if (channel.onCordovaConnectionReady.state !== 2) {
- channel.onCordovaConnectionReady.fire();
- }
- console.log("Error initializing Network Connection: " + e);
- });
-});
-
-module.exports = me;
-
-});
-
-// file: lib/common/plugin/networkstatus/symbols.js
-define("cordova/plugin/networkstatus/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/network', 'navigator.network.connection', 'navigator.network.connection is deprecated. Use navigator.connection instead.');
-modulemapper.clobbers('cordova/plugin/network', 'navigator.connection');
-modulemapper.defaults('cordova/plugin/Connection', 'Connection');
-
-});
-
-// file: lib/common/plugin/notification.js
-define("cordova/plugin/notification", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-var platform = require('cordova/platform');
-
-/**
- * Provides access to notifications on the device.
- */
-
-module.exports = {
-
- /**
- * Open a native alert dialog, with a customizable title and button text.
- *
- * @param {String} message Message to print in the body of the alert
- * @param {Function} completeCallback The callback that is called when user clicks on a button.
- * @param {String} title Title of the alert dialog (default: Alert)
- * @param {String} buttonLabel Label of the close button (default: OK)
- */
- alert: function(message, completeCallback, title, buttonLabel) {
- var _title = (title || "Alert");
- var _buttonLabel = (buttonLabel || "OK");
- exec(completeCallback, null, "Notification", "alert", [message, _title, _buttonLabel]);
- },
-
- /**
- * Open a native confirm dialog, with a customizable title and button text.
- * The result that the user selects is returned to the result callback.
- *
- * @param {String} message Message to print in the body of the alert
- * @param {Function} resultCallback The callback that is called when user clicks on a button.
- * @param {String} title Title of the alert dialog (default: Confirm)
- * @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel'])
- */
- confirm: function(message, resultCallback, title, buttonLabels) {
- var _title = (title || "Confirm");
- var _buttonLabels = (buttonLabels || ["OK", "Cancel"]);
-
- // Strings are deprecated!
- if (typeof _buttonLabels === 'string') {
- console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
- }
-
- // Some platforms take an array of button label names.
- // Other platforms take a comma separated list.
- // For compatibility, we convert to the desired type based on the platform.
- if (platform.id == "android" || platform.id == "ios" || platform.id == "windowsphone" || platform.id == "blackberry10") {
- if (typeof _buttonLabels === 'string') {
- var buttonLabelString = _buttonLabels;
- _buttonLabels = _buttonLabels.split(","); // not crazy about changing the var type here
- }
- } else {
- if (Array.isArray(_buttonLabels)) {
- var buttonLabelArray = _buttonLabels;
- _buttonLabels = buttonLabelArray.toString();
- }
- }
- exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]);
- },
-
- /**
- * Open a native prompt dialog, with a customizable title and button text.
- * The following results are returned to the result callback:
- * buttonIndex Index number of the button selected.
- * input1 The text entered in the prompt dialog box.
- *
- * @param {String} message Dialog message to display (default: "Prompt message")
- * @param {Function} resultCallback The callback that is called when user clicks on a button.
- * @param {String} title Title of the dialog (default: "Prompt")
- * @param {Array} buttonLabels Array of strings for the button labels (default: ["OK","Cancel"])
- * @param {String} defaultText Textbox input value (default: "Default text")
- */
- prompt: function(message, resultCallback, title, buttonLabels, defaultText) {
- var _message = (message || "Prompt message");
- var _title = (title || "Prompt");
- var _buttonLabels = (buttonLabels || ["OK","Cancel"]);
- var _defaultText = (defaultText || "Default text");
- exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels, _defaultText]);
- },
-
- /**
- * Causes the device to vibrate.
- *
- * @param {Integer} mills The number of milliseconds to vibrate for.
- */
- vibrate: function(mills) {
- exec(null, null, "Notification", "vibrate", [mills]);
- },
-
- /**
- * Causes the device to beep.
- * On Android, the default notification ringtone is played "count" times.
- *
- * @param {Integer} count The number of beeps.
- */
- beep: function(count) {
- exec(null, null, "Notification", "beep", [count]);
- }
-};
-
-});
-
-// file: lib/common/plugin/notification/symbols.js
-define("cordova/plugin/notification/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/notification', 'navigator.notification');
-
-});
-
-// file: lib/common/plugin/requestFileSystem.js
-define("cordova/plugin/requestFileSystem", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- FileError = require('cordova/plugin/FileError'),
- FileSystem = require('cordova/plugin/FileSystem'),
- exec = require('cordova/exec');
-
-/**
- * Request a file system in which to store application data.
- * @param type local file system type
- * @param size indicates how much storage space, in bytes, the application expects to need
- * @param successCallback invoked with a FileSystem object
- * @param errorCallback invoked if error occurs retrieving file system
- */
-var requestFileSystem = function(type, size, successCallback, errorCallback) {
- argscheck.checkArgs('nnFF', 'requestFileSystem', arguments);
- var fail = function(code) {
- errorCallback && errorCallback(new FileError(code));
- };
-
- if (type < 0 || type > 3) {
- fail(FileError.SYNTAX_ERR);
- } else {
- // if successful, return a FileSystem object
- var success = function(file_system) {
- if (file_system) {
- if (successCallback) {
- // grab the name and root from the file system object
- var result = new FileSystem(file_system.name, file_system.root);
- successCallback(result);
- }
- }
- else {
- // no FileSystem object returned
- fail(FileError.NOT_FOUND_ERR);
- }
- };
- exec(success, fail, "File", "requestFileSystem", [type, size]);
- }
-};
-
-module.exports = requestFileSystem;
-
-});
-
-// file: lib/common/plugin/resolveLocalFileSystemURI.js
-define("cordova/plugin/resolveLocalFileSystemURI", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- DirectoryEntry = require('cordova/plugin/DirectoryEntry'),
- FileEntry = require('cordova/plugin/FileEntry'),
- FileError = require('cordova/plugin/FileError'),
- exec = require('cordova/exec');
-
-/**
- * Look up file system Entry referred to by local URI.
- * @param {DOMString} uri URI referring to a local file or directory
- * @param successCallback invoked with Entry object corresponding to URI
- * @param errorCallback invoked if error occurs retrieving file system entry
- */
-module.exports = function(uri, successCallback, errorCallback) {
- argscheck.checkArgs('sFF', 'resolveLocalFileSystemURI', arguments);
- // error callback
- var fail = function(error) {
- errorCallback && errorCallback(new FileError(error));
- };
- // sanity check for 'not:valid:filename'
- if(!uri || uri.split(":").length > 2) {
- setTimeout( function() {
- fail(FileError.ENCODING_ERR);
- },0);
- return;
- }
- // if successful, return either a file or directory entry
- var success = function(entry) {
- var result;
- if (entry) {
- if (successCallback) {
- // create appropriate Entry object
- result = (entry.isDirectory) ? new DirectoryEntry(entry.name, entry.fullPath) : new FileEntry(entry.name, entry.fullPath);
- successCallback(result);
- }
- }
- else {
- // no Entry object returned
- fail(FileError.NOT_FOUND_ERR);
- }
- };
-
- exec(success, fail, "File", "resolveLocalFileSystemURI", [uri]);
-};
-
-});
-
-// file: lib/common/plugin/splashscreen.js
-define("cordova/plugin/splashscreen", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-var splashscreen = {
- show:function() {
- exec(null, null, "SplashScreen", "show", []);
- },
- hide:function() {
- exec(null, null, "SplashScreen", "hide", []);
- }
-};
-
-module.exports = splashscreen;
-
-});
-
-// file: lib/common/plugin/splashscreen/symbols.js
-define("cordova/plugin/splashscreen/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/splashscreen', 'navigator.splashscreen');
-
-});
-
-// file: lib/windowsphone/plugin/windowsphone/DOMStorage/plugininit.js
-define("cordova/plugin/windowsphone/DOMStorage/plugininit", function(require, exports, module) {
-
-(function(win,doc) {
-
-var docDomain = null;
-try {
- docDomain = doc.domain;
-} catch (err) {
- //console.log("caught exception trying to access document.domain");
-}
-
-// conditionally patch the window.localStorage and window.sessionStorage objects
-if (!docDomain || docDomain.length === 0) {
-
- var DOMStorage = function(type) {
- // default type is local
- if(type == "sessionStorage") {
- this._type = type;
- }
- Object.defineProperty( this, "length", {
- configurable: true,
- get: function(){ return this.getLength(); }
- });
- };
-
- DOMStorage.prototype = {
- _type:"localStorage",
- _result:null,
- keys:null,
-
- onResult:function(key,valueStr) {
- if(!this.keys) {
- this.keys = [];
- }
- this._result = valueStr;
- },
-
- onKeysChanged:function(jsonKeys) {
- this.keys = JSON.parse(jsonKeys);
-
- var key;
- for(var n = 0,len = this.keys.length; n < len; n++) {
- key = this.keys[n];
- if(!this.hasOwnProperty(key)) {
- Object.defineProperty( this, key, {
- configurable: true,
- get: function(){ return this.getItem(key); },
- set: function(val){ return this.setItem(key,val); }
- });
- }
- }
-
- },
-
- initialize:function() {
- window.external.Notify("DOMStorage/" + this._type + "/load/keys");
- },
-
- /*
- The length attribute must return the number of key/value pairs currently present
- in the list associated with the object.
- */
- getLength:function() {
- if(!this.keys) {
- this.initialize();
- }
- return this.keys.length;
- },
-
- /*
- The key(n) method must return the name of the nth key in the list.
- The order of keys is user-agent defined, but must be consistent within an object so long as the number of keys doesn't change.
- (Thus, adding or removing a key may change the order of the keys, but merely changing the value of an existing key must not.)
- If n is greater than or equal to the number of key/value pairs in the object, then this method must return null.
- */
- key:function(n) {
- if(!this.keys) {
- this.initialize();
- }
-
- if(n >= this.keys.length) {
- return null;
- } else {
- return this.keys[n];
- }
- },
-
- /*
- The getItem(key) method must return the current value associated with the given key.
- If the given key does not exist in the list associated with the object then this method must return null.
- */
- getItem:function(key) {
- if(!this.keys) {
- this.initialize();
- }
-
- var retVal = null;
- if(this.keys.indexOf(key) > -1) {
- window.external.Notify("DOMStorage/" + this._type + "/get/" + key);
- retVal = window.unescape(decodeURIComponent(this._result));
- this._result = null;
- }
- return retVal;
- },
- /*
- The setItem(key, value) method must first check if a key/value pair with the given key already exists
- in the list associated with the object.
- If it does not, then a new key/value pair must be added to the list, with the given key and with its value set to value.
- If the given key does exist in the list, then it must have its value updated to value.
- If it couldn't set the new value, the method must raise an QUOTA_EXCEEDED_ERR exception.
- (Setting could fail if, e.g., the user has disabled storage for the site, or if the quota has been exceeded.)
- */
- setItem:function(key,value) {
- if(!this.keys) {
- this.initialize();
- }
- window.external.Notify("DOMStorage/" + this._type + "/set/" + key + "/" + encodeURIComponent(window.escape(value)));
- },
-
- /*
- The removeItem(key) method must cause the key/value pair with the given key to be removed from the list
- associated with the object, if it exists.
- If no item with that key exists, the method must do nothing.
- */
- removeItem:function(key) {
- if(!this.keys) {
- this.initialize();
- }
- var index = this.keys.indexOf(key);
- if(index > -1) {
- this.keys.splice(index,1);
- // TODO: need sanity check for keys ? like 'clear','setItem', ...
- window.external.Notify("DOMStorage/" + this._type + "/remove/" + key);
- delete this[key];
- }
- },
-
- /*
- The clear() method must atomically cause the list associated with the object to be emptied of all
- key/value pairs, if there are any.
- If there are none, then the method must do nothing.
- */
- clear:function() {
- if(!this.keys) {
- this.initialize();
- }
-
- for(var n=0,len=this.keys.length; n < len;n++) {
- // TODO: do we need a sanity check for keys ? like 'clear','setItem', ...
- delete this[this.keys[n]];
- }
- this.keys = [];
- window.external.Notify("DOMStorage/" + this._type + "/clear/");
- }
- };
-
- // initialize DOMStorage
-
- if (typeof window.localStorage === "undefined") {
-
- Object.defineProperty(window, "localStorage", {
- writable: false,
- configurable: false,
- value: new DOMStorage("localStorage")
- });
- window.localStorage.initialize();
- }
-
- if (typeof window.sessionStorage === "undefined") {
- Object.defineProperty(window, "sessionStorage", {
- writable: false,
- configurable: false,
- value: new DOMStorage("sessionStorage")
- });
- window.sessionStorage.initialize();
- }
-}
-
-})(window, document);
-
-module.exports = null;
-
-});
-
-// file: lib/windowsphone/plugin/windowsphone/FileTransfer.js
-define("cordova/plugin/windowsphone/FileTransfer", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- FileTransferError = require('cordova/plugin/FileTransferError');
-
-// Note that the only difference between this and the default implementation is the
-// object literal passed to exec() in upload - jm
-
-/**
- * FileTransfer uploads a file to a remote server.
- * @constructor
- */
-var FileTransfer = function() {};
-
-/**
-* Given an absolute file path, uploads a file on the device to a remote server
-* using a multipart HTTP request.
-* @param filePath {String} Full path of the file on the device
-* @param server {String} URL of the server to receive the file
-* @param successCallback (Function} Callback to be invoked when upload has completed
-* @param errorCallback {Function} Callback to be invoked upon error
-* @param options {FileUploadOptions} Optional parameters such as file name and mimetype
-* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
-*/
-
-FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) {
-
- // sanity parameter checking
- if (!filePath || !server) throw new Error("FileTransfer.upload requires filePath and server URL parameters at the minimum.");
- // check for options
- var fileKey = null;
- var fileName = null;
- var mimeType = null;
- var params = null;
- var chunkedMode = true;
-
- if (options) {
- fileKey = options.fileKey;
- fileName = options.fileName;
- mimeType = options.mimeType;
- if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") {
- chunkedMode = options.chunkedMode;
- }
-
- // if options are specified, and NOT a string already, we will stringify it.
- if(options.params && typeof options.params != typeof "") {
- var arrParams = [];
- for(var v in options.params) {
- arrParams.push(v + "=" + options.params[v]);
- }
- params = encodeURI(arrParams.join("&"));
- }
- }
-
- var fail = function(e) {
- var error = new FileTransferError(e.code, e.source, e.target, e.http_status);
- errorCallback(error);
- };
- exec(successCallback, fail, 'FileTransfer', 'upload', [{"filePath":filePath,
- "server":server,
- "fileKey":fileKey,
- "fileName":fileName,
- "mimeType":mimeType,
- "params":params,
- "trustAllHosts":trustAllHosts,
- "chunkedMode":chunkedMode}]);
-};
-
-/**
- * Downloads a file form a given URL and saves it to the specified directory.
- * @param source {String} URL of the server to receive the file
- * @param target {String} Full path of the file on the device
- * @param successCallback (Function} Callback to be invoked when upload has completed
- * @param errorCallback {Function} Callback to be invoked upon error
- */
-
-FileTransfer.prototype.download = function(source, target, successCallback, errorCallback) {
- // sanity parameter checking
- if (!source || !target) throw new Error("FileTransfer.download requires source URI and target URI parameters at the minimum.");
- var win = function(result) {
- var entry = null;
- if (result.isDirectory) {
- entry = new (require('cordova/plugin/DirectoryEntry'))();
- }
- else if (result.isFile) {
- entry = new (require('cordova/plugin/FileEntry'))();
- }
- entry.isDirectory = result.isDirectory;
- entry.isFile = result.isFile;
- entry.name = result.name;
- entry.fullPath = result.fullPath;
- successCallback(entry);
- };
-
- var fail = function(e) {
- var error = new FileTransferError(e.code, e.source, e.target, e.http_status);
- errorCallback(error);
- };
-
- exec(win, errorCallback, 'FileTransfer', 'download', [source, target]);
-};
-
-
-module.exports = FileTransfer;
-
-});
-
-// file: lib/windowsphone/plugin/windowsphone/FileUploadOptions.js
-define("cordova/plugin/windowsphone/FileUploadOptions", function(require, exports, module) {
-
-/**
- * Options to customize the HTTP request used to upload files.
- * @constructor
- * @param fileKey {String} Name of file request parameter.
- * @param fileName {String} Filename to be used by the server. Defaults to image.jpg.
- * @param mimeType {String} Mimetype of the uploaded file. Defaults to image/jpeg.
- * @param params {Object} Object with key: value params to send to the server.
- */
-var FileUploadOptions = function(fileKey, fileName, mimeType, params) {
- this.fileKey = fileKey || null;
- this.fileName = fileName || null;
- this.mimeType = mimeType || null;
-
- if(params && typeof params != typeof "") {
- var arrParams = [];
- for(var v in params) {
- arrParams.push(v + "=" + params[v]);
- }
- this.params = encodeURIComponent(arrParams.join("&"));
- }
- else {
- this.params = params || null;
- }
-};
-
-module.exports = FileUploadOptions;
-
-});
-
-// file: lib/windowsphone/plugin/windowsphone/XHRPatch/plugininit.js
-define("cordova/plugin/windowsphone/XHRPatch/plugininit", function(require, exports, module) {
-
-// TODO: the build process will implicitly wrap this in a define() call
-// with a closure of its own; do you need this extra closure?
-
-var LocalFileSystem = require('cordova/plugin/LocalFileSystem');
-
-(function (win, doc) {
-
-var docDomain = null;
-try {
- docDomain = doc.domain;
-} catch (err) {
- //console.log("caught exception trying to access document.domain");
-}
-
-if (!docDomain || docDomain.length === 0) {
-
- var aliasXHR = win.XMLHttpRequest;
-
- win.XMLHttpRequest = function () { };
- win.XMLHttpRequest.noConflict = aliasXHR;
- win.XMLHttpRequest.UNSENT = 0;
- win.XMLHttpRequest.OPENED = 1;
- win.XMLHttpRequest.HEADERS_RECEIVED = 2;
- win.XMLHttpRequest.LOADING = 3;
- win.XMLHttpRequest.DONE = 4;
-
- win.XMLHttpRequest.prototype = {
- UNSENT: 0,
- OPENED: 1,
- HEADERS_RECEIVED: 2,
- LOADING: 3,
- DONE: 4,
-
- isAsync: false,
- onreadystatechange: null,
- readyState: 0,
- _url: "",
- timeout: 0,
- withCredentials: false,
- _requestHeaders: null,
- open: function (reqType, uri, isAsync, user, password) {
-
- if (uri && uri.indexOf("http") === 0) {
- if (!this.wrappedXHR) {
- this.wrappedXHR = new aliasXHR();
- var self = this;
-
- // timeout
- if (this.timeout > 0) {
- this.wrappedXHR.timeout = this.timeout;
- }
- Object.defineProperty(this, "timeout", {
- set: function (val) {
- this.wrappedXHR.timeout = val;
- },
- get: function () {
- return this.wrappedXHR.timeout;
- }
- });
-
-
-
- if (this.withCredentials) {
- this.wrappedXHR.withCredentials = this.withCredentials;
- }
- Object.defineProperty(this, "withCredentials", {
- set: function (val) {
- this.wrappedXHR.withCredentials = val;
- },
- get: function () {
- return this.wrappedXHR.withCredentials;
- }
- });
-
-
- Object.defineProperty(this, "status", { get: function () {
- return this.wrappedXHR.status;
- }
- });
- Object.defineProperty(this, "responseText", { get: function () {
- return this.wrappedXHR.responseText;
- }
- });
- Object.defineProperty(this, "statusText", { get: function () {
- return this.wrappedXHR.statusText;
- }
- });
-
- Object.defineProperty(this, "responseXML", { get: function () {
- return this.wrappedXHR.responseXML;
- }
- });
-
- this.getResponseHeader = function (header) {
- return this.wrappedXHR.getResponseHeader(header);
- };
- this.getAllResponseHeaders = function () {
- return this.wrappedXHR.getAllResponseHeaders();
- };
-
- this.wrappedXHR.onreadystatechange = function () {
- self.changeReadyState(self.wrappedXHR.readyState);
- };
- }
- return this.wrappedXHR.open(reqType, uri, isAsync, user, password);
- }
- else {
- // x-wmapp1://app/www/page2.html
- // need to work some magic on the actual url/filepath
- var newUrl = uri;
- if (newUrl.indexOf(":/") > -1) {
- newUrl = newUrl.split(":/")[1];
- }
- // prefix relative urls to our physical root
- if(newUrl.indexOf("app/www/") < 0 && this.getContentLocation() == this.contentLocation.ISOLATED_STORAGE)
- {
- newUrl = "app/www/" + newUrl;
- }
-
- if (newUrl.lastIndexOf("/") === newUrl.length - 1) {
- newUrl += "index.html"; // default page is index.html, when call is to a dir/ ( why not ...? )
- }
- this._url = newUrl;
- }
- },
- statusText: "",
- changeReadyState: function (newState) {
- this.readyState = newState;
- if (this.onreadystatechange) {
- this.onreadystatechange();
- }
- },
- setRequestHeader: function (header, value) {
- if (this.wrappedXHR) {
- this.wrappedXHR.setRequestHeader(header, value);
- }
- },
- getResponseHeader: function (header) {
- return this.wrappedXHR ? this.wrappedXHR.getResponseHeader(header) : "";
- },
- getAllResponseHeaders: function () {
- return this.wrappedXHR ? this.wrappedXHR.getAllResponseHeaders() : "";
- },
- responseText: "",
- responseXML: "",
- onResult: function (res) {
- this.status = 200;
- if(typeof res == "object")
- { // callback result handler may have already parsed this from a string-> a JSON object,
- // if so, we need to restore its stringyness, as handlers are expecting string data.
- // especially if used with jQ -> $.getJSON
- res = JSON.stringify(res);
- }
- this.responseText = res;
- this.responseXML = res;
- this.changeReadyState(this.DONE);
- },
- onError: function (err) {
- this.status = 404;
- this.changeReadyState(this.DONE);
- },
-
- abort: function () {
- if (this.wrappedXHR) {
- return this.wrappedXHR.abort();
- }
- },
-
- send: function (data) {
- if (this.wrappedXHR) {
- return this.wrappedXHR.send(data);
- }
- else {
- this.changeReadyState(this.OPENED);
-
- var alias = this;
-
- var fail = function fail(evt) {
- alias.onError(evt.code);
- };
-
- if (alias.getContentLocation() == this.contentLocation.RESOURCES) {
- var exec = require('cordova/exec');
- exec(function(result) {
- alias.onResult.apply(alias, [result]);
- },
- fail,
- "File", "readResourceAsText", [alias._url]
- );
- }
- else {
- var gotFile = function gotFile(file) {
- var reader = new FileReader();
- reader.onloadend = function (evt) {
- alias.onResult.apply(alias,[evt.target.result]);
- };
- reader.readAsText(file);
- };
-
- var gotEntry = function gotEntry(entry) {
- entry.file(gotFile, fail);
- };
-
- var gotFS = function gotFS(fs) {
- fs.root.getFile(alias._url, null, gotEntry, fail);
- };
-
- window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
- }
- }
- },
-
- getContentLocation: function () {
- if (window.contentLocation === undefined) {
- window.contentLocation = (navigator.userAgent.toUpperCase().indexOf('MSIE 10') > -1) ?
- this.contentLocation.RESOURCES : this.contentLocation.ISOLATED_STORAGE;
- }
-
- return window.contentLocation;
- },
-
- contentLocation:{
- ISOLATED_STORAGE: 0,
- RESOURCES: 1
- },
-
- status: 404
- };
-} // if doc domain
-
-// end closure wrap
-})(window, document);
-
-module.exports = null;
-
-});
-
-// file: lib/windowsphone/plugin/windowsphone/console.js
-define("cordova/plugin/windowsphone/console", function(require, exports, module) {
-
-
-var exec = require('cordova/exec'),
- channel = require('cordova/channel');
-var cordova = require("cordova");
-
-var debugConsole = {
- log:function(msg){
- exec(null,null,"DebugConsole","log",msg);
- },
- warn:function(msg){
- exec(null,null,"DebugConsole","warn",msg);
- },
- error:function(msg){
- exec(null,null,"DebugConsole","error",msg);
- }
-};
-
-var oldOnError = window.onerror;
-window.onerror = function(msg,fileName,line) {
- oldOnError && oldOnError(msg,fileName,line);
- debugConsole.error(msg + " file:" + fileName + " Line:" + line);
-};
-
-module.exports = debugConsole;
-
-});
-
-// file: lib/windowsphone/plugin/windowsphone/console/symbols.js
-define("cordova/plugin/windowsphone/console/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/windowsphone/console', 'navigator.console');
-modulemapper.clobbers('cordova/plugin/windowsphone/console', 'console');
-
-});
-
-// file: lib/common/symbols.js
-define("cordova/symbols", function(require, exports, module) {
-
-var modulemapper = require('cordova/modulemapper');
-
-// Use merges here in case others symbols files depend on this running first,
-// but fail to declare the dependency with a require().
-modulemapper.merges('cordova', 'cordova');
-modulemapper.clobbers('cordova/exec', 'cordova.exec');
-modulemapper.clobbers('cordova/exec', 'Cordova.exec');
-
-});
-
-// file: lib/common/utils.js
-define("cordova/utils", function(require, exports, module) {
-
-var utils = exports;
-
-/**
- * Defines a property getter / setter for obj[key].
- */
-utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) {
- if (Object.defineProperty) {
- var desc = {
- get: getFunc,
- configurable: true
- };
- if (opt_setFunc) {
- desc.set = opt_setFunc;
- }
- Object.defineProperty(obj, key, desc);
- } else {
- obj.__defineGetter__(key, getFunc);
- if (opt_setFunc) {
- obj.__defineSetter__(key, opt_setFunc);
- }
- }
-};
-
-/**
- * Defines a property getter for obj[key].
- */
-utils.defineGetter = utils.defineGetterSetter;
-
-utils.arrayIndexOf = function(a, item) {
- if (a.indexOf) {
- return a.indexOf(item);
- }
- var len = a.length;
- for (var i = 0; i < len; ++i) {
- if (a[i] == item) {
- return i;
- }
- }
- return -1;
-};
-
-/**
- * Returns whether the item was found in the array.
- */
-utils.arrayRemove = function(a, item) {
- var index = utils.arrayIndexOf(a, item);
- if (index != -1) {
- a.splice(index, 1);
- }
- return index != -1;
-};
-
-utils.typeName = function(val) {
- return Object.prototype.toString.call(val).slice(8, -1);
-};
-
-/**
- * Returns an indication of whether the argument is an array or not
- */
-utils.isArray = function(a) {
- return utils.typeName(a) == 'Array';
-};
-
-/**
- * Returns an indication of whether the argument is a Date or not
- */
-utils.isDate = function(d) {
- return utils.typeName(d) == 'Date';
-};
-
-/**
- * Does a deep clone of the object.
- */
-utils.clone = function(obj) {
- if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') {
- return obj;
- }
-
- var retVal, i;
-
- if(utils.isArray(obj)){
- retVal = [];
- for(i = 0; i < obj.length; ++i){
- retVal.push(utils.clone(obj[i]));
- }
- return retVal;
- }
-
- retVal = {};
- for(i in obj){
- if(!(i in retVal) || retVal[i] != obj[i]) {
- retVal[i] = utils.clone(obj[i]);
- }
- }
- return retVal;
-};
-
-/**
- * Returns a wrapped version of the function
- */
-utils.close = function(context, func, params) {
- if (typeof params == 'undefined') {
- return function() {
- return func.apply(context, arguments);
- };
- } else {
- return function() {
- return func.apply(context, params);
- };
- }
-};
-
-/**
- * Create a UUID
- */
-utils.createUUID = function() {
- return UUIDcreatePart(4) + '-' +
- UUIDcreatePart(2) + '-' +
- UUIDcreatePart(2) + '-' +
- UUIDcreatePart(2) + '-' +
- UUIDcreatePart(6);
-};
-
-/**
- * Extends a child object from a parent object using classical inheritance
- * pattern.
- */
-utils.extend = (function() {
- // proxy used to establish prototype chain
- var F = function() {};
- // extend Child from Parent
- return function(Child, Parent) {
- F.prototype = Parent.prototype;
- Child.prototype = new F();
- Child.__super__ = Parent.prototype;
- Child.prototype.constructor = Child;
- };
-}());
-
-/**
- * Alerts a message in any available way: alert or console.log.
- */
-utils.alert = function(msg) {
- if (window.alert) {
- window.alert(msg);
- } else if (console && console.log) {
- console.log(msg);
- }
-};
-
-
-//------------------------------------------------------------------------------
-function UUIDcreatePart(length) {
- var uuidpart = "";
- for (var i=0; i<length; i++) {
- var uuidchar = parseInt((Math.random() * 256), 10).toString(16);
- if (uuidchar.length == 1) {
- uuidchar = "0" + uuidchar;
- }
- uuidpart += uuidchar;
- }
- return uuidpart;
-}
-
-
-});
-
-window.cordova = require('cordova');
-// file: lib/scripts/bootstrap.js
-
-(function (context) {
- if (context._cordovaJsLoaded) {
- throw new Error('cordova.js included multiple times.');
- }
- context._cordovaJsLoaded = true;
-
- var channel = require('cordova/channel');
- var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady];
-
- function logUnfiredChannels(arr) {
- for (var i = 0; i < arr.length; ++i) {
- if (arr[i].state != 2) {
- console.log('Channel not fired: ' + arr[i].type);
- }
- }
- }
-
- window.setTimeout(function() {
- if (channel.onDeviceReady.state != 2) {
- console.log('deviceready has not fired after 5 seconds.');
- logUnfiredChannels(platformInitChannelsArray);
- logUnfiredChannels(channel.deviceReadyChannelsArray);
- }
- }, 5000);
-
- // Replace navigator before any modules are required(), to ensure it happens as soon as possible.
- // We replace it so that properties that can't be clobbered can instead be overridden.
- function replaceNavigator(origNavigator) {
- var CordovaNavigator = function() {};
- CordovaNavigator.prototype = origNavigator;
- var newNavigator = new CordovaNavigator();
- // This work-around really only applies to new APIs that are newer than Function.bind.
- // Without it, APIs such as getGamepads() break.
- if (CordovaNavigator.bind) {
- for (var key in origNavigator) {
- if (typeof origNavigator[key] == 'function') {
- newNavigator[key] = origNavigator[key].bind(origNavigator);
- }
- }
- }
- return newNavigator;
- }
- if (context.navigator) {
- context.navigator = replaceNavigator(context.navigator);
- }
-
- // _nativeReady is global variable that the native side can set
- // to signify that the native code is ready. It is a global since
- // it may be called before any cordova JS is ready.
- if (window._nativeReady) {
- channel.onNativeReady.fire();
- }
-
- /**
- * Create all cordova objects once native side is ready.
- */
- channel.join(function() {
- // Call the platform-specific initialization
- require('cordova/platform').initialize();
-
- // Fire event to notify that all objects are created
- channel.onCordovaReady.fire();
-
- // Fire onDeviceReady event once page has fully loaded, all
- // constructors have run and cordova info has been received from native
- // side.
- // This join call is deliberately made after platform.initialize() in
- // order that plugins may manipulate channel.deviceReadyChannelsArray
- // if necessary.
- channel.join(function() {
- require('cordova').fireDocumentEvent('deviceready');
- }, channel.deviceReadyChannelsArray);
-
- }, platformInitChannelsArray);
-
-}(window));
-
-// file: lib/scripts/plugin_loader.js
-
-// Tries to load all plugins' js-modules.
-// This is an async process, but onDeviceReady is blocked on onPluginsReady.
-// onPluginsReady is fired when there are no plugins to load, or they are all done.
-(function (context) {
- // To be populated with the handler by handlePluginsObject.
- var onScriptLoadingComplete;
-
- var scriptCounter = 0;
- function scriptLoadedCallback() {
- scriptCounter--;
- if (scriptCounter === 0) {
- onScriptLoadingComplete && onScriptLoadingComplete();
- }
- }
-
- function scriptErrorCallback(err) {
- // Open Question: If a script path specified in cordova_plugins.js does not exist, do we fail for all?
- // this is currently just continuing.
- scriptCounter--;
- if (scriptCounter === 0) {
- onScriptLoadingComplete && onScriptLoadingComplete();
- }
- }
-
- // Helper function to inject a <script> tag.
- function injectScript(path) {
- scriptCounter++;
- var script = document.createElement("script");
- script.onload = scriptLoadedCallback;
- script.onerror = scriptErrorCallback;
- script.src = path;
- document.head.appendChild(script);
- }
-
- // Called when:
- // * There are plugins defined and all plugins are finished loading.
- // * There are no plugins to load.
- function finishPluginLoading() {
- context.cordova.require('cordova/channel').onPluginsReady.fire();
- }
-
- // Handler for the cordova_plugins.js content.
- // See plugman's plugin_loader.js for the details of this object.
- // This function is only called if the really is a plugins array that isn't empty.
- // Otherwise the onerror response handler will just call finishPluginLoading().
- function handlePluginsObject(modules, path) {
- // First create the callback for when all plugins are loaded.
- var mapper = context.cordova.require('cordova/modulemapper');
- onScriptLoadingComplete = function() {
- // Loop through all the plugins and then through their clobbers and merges.
- for (var i = 0; i < modules.length; i++) {
- var module = modules[i];
- if (module) {
- try {
- if (module.clobbers && module.clobbers.length) {
- for (var j = 0; j < module.clobbers.length; j++) {
- mapper.clobbers(module.id, module.clobbers[j]);
- }
- }
-
- if (module.merges && module.merges.length) {
- for (var k = 0; k < module.merges.length; k++) {
- mapper.merges(module.id, module.merges[k]);
- }
- }
-
- // Finally, if runs is truthy we want to simply require() the module.
- // This can be skipped if it had any merges or clobbers, though,
- // since the mapper will already have required the module.
- if (module.runs && !(module.clobbers && module.clobbers.length) && !(module.merges && module.merges.length)) {
- context.cordova.require(module.id);
- }
- }
- catch(err) {
- // error with module, most likely clobbers, should we continue?
- }
- }
- }
-
- finishPluginLoading();
- };
-
- // Now inject the scripts.
- for (var i = 0; i < modules.length; i++) {
- injectScript(path + modules[i].file);
- }
- }
-
- // Find the root of the app
- var path = '';
- var scripts = document.getElementsByTagName('script');
- var term = 'cordova.js';
- for (var n = scripts.length-1; n>-1; n--) {
- var src = scripts[n].src;
- if (src.indexOf(term) == (src.length - term.length)) {
- path = src.substring(0, src.length - term.length);
- break;
- }
- }
-
- var plugins_json = path + 'cordova_plugins.json';
- var plugins_js = path + 'cordova_plugins.js';
-
- // One some phones (Windows) this xhr.open throws an Access Denied exception
- // So lets keep trying, but with a script tag injection technique instead of XHR
- var injectPluginScript = function injectPluginScript() {
- try {
- var script = document.createElement("script");
- script.onload = function(){
- var list = cordova.require("cordova/plugin_list");
- handlePluginsObject(list,path);
- };
- script.onerror = function() {
- // Error loading cordova_plugins.js, file not found or something
- // this is an acceptable error, pre-3.0.0, so we just move on.
- finishPluginLoading();
- };
- script.src = plugins_js;
- document.head.appendChild(script);
-
- } catch(err){
- finishPluginLoading();
- }
- }
-
-
- // Try to XHR the cordova_plugins.json file asynchronously.
- var xhr = new XMLHttpRequest();
- xhr.onload = function() {
- // If the response is a JSON string which composes an array, call handlePluginsObject.
- // If the request fails, or the response is not a JSON array, just call finishPluginLoading.
- var obj;
- try {
- obj = (this.status == 0 || this.status == 200) && this.responseText && JSON.parse(this.responseText);
- } catch (err) {
- // obj will be undefined.
- }
- if (Array.isArray(obj) && obj.length > 0) {
- handlePluginsObject(obj, path);
- } else {
- finishPluginLoading();
- }
- };
- xhr.onerror = function() {
- // In this case, the json file was not present, but XHR was allowed,
- // so we should still try the script injection technique with the js file
- // in case that is there.
- injectPluginScript();
- };
- try { // we commented we were going to try, so let us actually try and catch
- xhr.open('GET', plugins_json, true); // Async
- xhr.send();
- } catch(err){
- injectPluginScript();
- }
-}(window));
-
-
-})();
\ No newline at end of file
diff --git a/templates/standalone/www/css/index.css b/templates/standalone/www/css/index.css
deleted file mode 100644
index 1d34d88..0000000
--- a/templates/standalone/www/css/index.css
+++ /dev/null
@@ -1,115 +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.
- */
-* {
- -webkit-touch-callout: none; /* prevent callout to copy image, etc when tap to hold */
- -webkit-text-size-adjust: none; /* prevent WebKit from resizing text to fit */
- -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */
- -webkit-user-select: none; /* prevent copy paste, to allow, change 'none' to 'text' */
-}
-
-body {
- background-color:#E4E4E4;
- background-image:linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
- background-image:-webkit-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
- background-image:-ms-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
- background-image:-webkit-gradient(
- linear,
- left top,
- left bottom,
- color-stop(0, #A7A7A7),
- color-stop(0.51, #E4E4E4)
- );
- background-attachment:fixed;
- font-family:'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, sans-serif;
- font-size:12px;
- height:100%;
- margin:0px;
- padding:0px;
- text-transform:uppercase;
- width:100%;
-}
-
-/* Portrait layout (default) */
-.app {
- background:url(../img/logo.png) no-repeat center top; /* 170px x 200px */
- position:absolute; /* position in the center of the screen */
- left:50%;
- top:50%;
- height:50px; /* text area height */
- width:225px; /* text area width */
- text-align:center;
- padding:180px 0px 0px 0px; /* image height is 200px (bottom 20px are overlapped with text) */
- margin:-115px 0px 0px -112px; /* offset vertical: half of image height and text area height */
- /* offset horizontal: half of text area width */
-}
-
-/* Landscape layout (with min-width) */
-@media screen and (min-aspect-ratio: 1/1) and (min-width:400px) {
- .app {
- background-position:left center;
- padding:75px 0px 75px 170px; /* padding-top + padding-bottom + text area = image height */
- margin:-90px 0px 0px -198px; /* offset vertical: half of image height */
- /* offset horizontal: half of image width and text area width */
- }
-}
-
-h1 {
- font-size:24px;
- font-weight:normal;
- margin:0px;
- overflow:visible;
- padding:0px;
- text-align:center;
-}
-
-.event {
- border-radius:4px;
- -webkit-border-radius:4px;
- color:#FFFFFF;
- font-size:12px;
- margin:0px 30px;
- padding:2px 0px;
-}
-
-.event.listening {
- background-color:#333333;
- display:block;
-}
-
-.event.received {
- background-color:#4B946A;
- display:none;
-}
-
-@keyframes fade {
- from { opacity: 1.0; }
- 50% { opacity: 0.4; }
- to { opacity: 1.0; }
-}
-
-@-webkit-keyframes fade {
- from { opacity: 1.0; }
- 50% { opacity: 0.4; }
- to { opacity: 1.0; }
-}
-
-.blink {
- animation:fade 3000ms infinite;
- -webkit-animation:fade 3000ms infinite;
-}
diff --git a/templates/standalone/www/img/logo.png b/templates/standalone/www/img/logo.png
deleted file mode 100644
index 9519e7d..0000000
--- a/templates/standalone/www/img/logo.png
+++ /dev/null
Binary files differ
diff --git a/templates/standalone/www/index.html b/templates/standalone/www/index.html
deleted file mode 100644
index e8fb3e5..0000000
--- a/templates/standalone/www/index.html
+++ /dev/null
@@ -1,42 +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="format-detection" content="telephone=no" />
- <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
- <link rel="stylesheet" type="text/css" href="css/index.css" />
- <title>Hello World</title>
- </head>
- <body>
- <div class="app">
- <h1>Apache Cordova</h1>
- <div id="deviceready" class="blink">
- <p class="event listening">Connecting to Device</p>
- <p class="event received">Device is Ready</p>
- </div>
- </div>
- <script type="text/javascript" src="cordova.js"></script>
- <script type="text/javascript" src="js/index.js"></script>
- <script type="text/javascript">
- app.initialize();
- </script>
- </body>
-</html>
diff --git a/templates/standalone/www/js/index.js b/templates/standalone/www/js/index.js
deleted file mode 100644
index bf02e98..0000000
--- a/templates/standalone/www/js/index.js
+++ /dev/null
@@ -1,49 +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 app = {
- // Application Constructor
- initialize: function() {
- this.bindEvents();
- },
- // Bind Event Listeners
- //
- // Bind any events that are required on startup. Common events are:
- // `load`, `deviceready`, `offline`, and `online`.
- bindEvents: function() {
- document.addEventListener('deviceready', this.onDeviceReady, false);
- },
- // deviceready Event Handler
- //
- // The scope of `this` is the event. In order to call the `receivedEvent`
- // function, we must explicitly call `app.receivedEvent(...);`
- onDeviceReady: function() {
- app.receivedEvent('deviceready');
- },
- // Update DOM on a Received Event
- receivedEvent: function(id) {
- var parentElement = document.getElementById(id);
- var listeningElement = parentElement.querySelector('.listening');
- var receivedElement = parentElement.querySelector('.received');
-
- listeningElement.setAttribute('style', 'display:none;');
- receivedElement.setAttribute('style', 'display:block;');
-
- console.log('Received Event: ' + id);
- }
-};
diff --git a/templates/vs/MyTemplateStandAlone.vstemplate b/templates/vs/MyTemplateStandAlone.vstemplate
deleted file mode 100644
index 22ace38..0000000
--- a/templates/vs/MyTemplateStandAlone.vstemplate
+++ /dev/null
@@ -1,143 +0,0 @@
-<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
- <TemplateData>
- <Name>CordovaWP7_2_9_0</Name>
- <Description>Cordova 2.9.0 for Windows Phone 7.5 using the Cordova source code directly.</Description>
- <ProjectType>CSharp</ProjectType>
- <ProjectSubType>
- </ProjectSubType>
- <SortOrder>1000</SortOrder>
- <CreateNewFolder>true</CreateNewFolder>
- <DefaultName>CordovaWP7_2_9_0</DefaultName>
- <ProvideDefaultName>true</ProvideDefaultName>
- <LocationField>Enabled</LocationField>
- <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
- <Icon>__TemplateIcon.png</Icon>
- <PreviewImage>__PreviewImage.jpg</PreviewImage>
- </TemplateData>
- <TemplateContent>
- <Project TargetFileName="CordovaAppProj.csproj" File="CordovaAppProj.csproj" ReplaceParameters="true">
- <ProjectItem ReplaceParameters="true" TargetFileName="App.xaml">App.xaml</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="App.xaml.cs">App.xaml.cs</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="ApplicationIcon.png">ApplicationIcon.png</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="Background.png">Background.png</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="BuildManifestProcessor.js">BuildManifestProcessor.js</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="config.xml">config.xml</ProjectItem>
- <Folder Name="cordovalib" TargetFolderName="cordovalib">
- <ProjectItem ReplaceParameters="true" TargetFileName="BaseCommand.cs">BaseCommand.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="BrowserMouseHelper.cs">BrowserMouseHelper.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="CommandFactory.cs">CommandFactory.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="ConfigHandler.cs">ConfigHandler.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="CordovaCommandCall.cs">CordovaCommandCall.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="CordovaView.xaml">CordovaView.xaml</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="CordovaView.xaml.cs">CordovaView.xaml.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="DOMStorageHelper.cs">DOMStorageHelper.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="ImageExifHelper.cs">ImageExifHelper.cs</ProjectItem>
- <Folder Name="JSON" TargetFolderName="JSON">
- <ProjectItem ReplaceParameters="true" TargetFileName="JsonHelper.cs">JsonHelper.cs</ProjectItem>
- </Folder>
- <ProjectItem ReplaceParameters="true" TargetFileName="NativeExecution.cs">NativeExecution.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="OrientationHelper.cs">OrientationHelper.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="PluginResult.cs">PluginResult.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="ScriptCallback.cs">ScriptCallback.cs</ProjectItem>
- </Folder>
- <ProjectItem ReplaceParameters="true" TargetFileName="CordovaSourceDictionary.xml">CordovaSourceDictionary.xml</ProjectItem>
- <Folder Name="Images" TargetFolderName="Images">
- <ProjectItem ReplaceParameters="false" TargetFileName="appbar.back.rest.png">appbar.back.rest.png</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="appbar.close.rest.png">appbar.close.rest.png</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="appbar.feature.video.rest.png">appbar.feature.video.rest.png</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="appbar.next.rest.png">appbar.next.rest.png</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="appbar.save.rest.png">appbar.save.rest.png</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="appbar.stop.rest.png">appbar.stop.rest.png</ProjectItem>
- </Folder>
- <ProjectItem ReplaceParameters="true" TargetFileName="MainPage.xaml">MainPage.xaml</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="MainPage.xaml.cs">MainPage.xaml.cs</ProjectItem>
- <Folder Name="Plugins" TargetFolderName="Plugins">
- <ProjectItem ReplaceParameters="true" TargetFileName="Accelerometer.cs">Accelerometer.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="AudioFormatsHelper.cs">AudioFormatsHelper.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="AudioPlayer.cs">AudioPlayer.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="Battery.cs">Battery.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="Camera.cs">Camera.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="Capture.cs">Capture.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="Compass.cs">Compass.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="Contacts.cs">Contacts.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="DebugConsole.cs">DebugConsole.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="Device.cs">Device.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="File.cs">File.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="FileTransfer.cs">FileTransfer.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="GeoLocation.cs">GeoLocation.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="Globalization.cs">Globalization.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="InAppBrowser.cs">InAppBrowser.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="Media.cs">Media.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="MimeTypeMapper.cs">MimeTypeMapper.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="NetworkStatus.cs">NetworkStatus.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="Notification.cs">Notification.cs</ProjectItem>
- <Folder Name="UI" TargetFolderName="UI">
- <ProjectItem ReplaceParameters="true" TargetFileName="AudioCaptureTask.cs">AudioCaptureTask.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="AudioRecorder.xaml">AudioRecorder.xaml</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="AudioRecorder.xaml.cs">AudioRecorder.xaml.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="ImageCapture.xaml">ImageCapture.xaml</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="ImageCapture.xaml.cs">ImageCapture.xaml.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="NotificationBox.xaml">NotificationBox.xaml</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="NotificationBox.xaml.cs">NotificationBox.xaml.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="VideoCaptureTask.cs">VideoCaptureTask.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="VideoRecorder.xaml">VideoRecorder.xaml</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="VideoRecorder.xaml.cs">VideoRecorder.xaml.cs</ProjectItem>
- </Folder>
- </Folder>
- <Folder Name="Properties" TargetFolderName="Properties">
- <ProjectItem ReplaceParameters="true" TargetFileName="AppManifest.xml">AppManifest.xml</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
- <ProjectItem ReplaceParameters="true" TargetFileName="WMAppManifest.xml">WMAppManifest.xml</ProjectItem>
- </Folder>
- <Folder Name="resources" TargetFolderName="resources">
- <ProjectItem ReplaceParameters="false" TargetFileName="notification-beep.wav">notification-beep.wav</ProjectItem>
- </Folder>
- <Folder Name="Service References" TargetFolderName="Service References" />
- <ProjectItem ReplaceParameters="false" TargetFileName="SplashScreenImage.jpg">SplashScreenImage.jpg</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="VERSION">VERSION</ProjectItem>
- <Folder Name="www" TargetFolderName="www">
- <ProjectItem ReplaceParameters="true" TargetFileName="cordova.js">cordova.js</ProjectItem>
- <Folder Name="css" TargetFolderName="css">
- <ProjectItem ReplaceParameters="true" TargetFileName="index.css">index.css</ProjectItem>
- </Folder>
- <Folder Name="img" TargetFolderName="img">
- <ProjectItem ReplaceParameters="false" TargetFileName="logo.png">logo.png</ProjectItem>
- </Folder>
- <ProjectItem ReplaceParameters="true" TargetFileName="index.html">index.html</ProjectItem>
- <Folder Name="js" TargetFolderName="js">
- <ProjectItem ReplaceParameters="true" TargetFileName="index.js">index.js</ProjectItem>
- </Folder>
- </Folder>
- <Folder Name="cordova" TargetFolderName="cordova">
- <ProjectItem ReplaceParameters="false" TargetFileName="build.bat">build.bat</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="clean.bat">clean.bat</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="log.bat">log.bat</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="run.bat">run.bat</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="version.bat">version.bat</ProjectItem>
- <Folder Name="lib" TargetFolderName="lib">
- <ProjectItem ReplaceParameters="false" TargetFileName="build.js">build.js</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="clean.js">clean.js</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="deploy.js">deploy.js</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="install-device.bat">install-device.bat</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="install-emulator.bat">install-emulator.bat</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="list-devices.bat">list-devices.bat</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="list-emulator-images.bat">list-emulator-images.bat</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="list-started-emulators.bat">list-started-emulators.bat</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="log.js">log.js</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="start-emulator.bat">start-emulator.bat</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="target-list.js">target-list.js</ProjectItem>
- <Folder Name="CordovaDeploy" TargetFolderName="CordovaDeploy">
- <ProjectItem ReplaceParameters="false" TargetFileName="CordovaDeploy.sln">CordovaDeploy.sln</ProjectItem>
- <Folder Name="CordovaDeploy" TargetFolderName="CordovaDeploy">
- <ProjectItem ReplaceParameters="false" TargetFileName="CordovaDeploy.csproj">CordovaDeploy.csproj</ProjectItem>
- <ProjectItem ReplaceParameters="false" TargetFileName="Program.cs">Program.cs</ProjectItem>
- <Folder Name="Properties" TargetFolderName="Properties">
- <ProjectItem ReplaceParameters="false" TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
- </Folder>
- </Folder>
- </Folder>
- </Folder>
- </Folder>
- </Project>
- </TemplateContent>
-</VSTemplate>
\ No newline at end of file
diff --git a/templates/vs/description.txt b/templates/vs/description.txt
deleted file mode 100644
index 089ad81..0000000
--- a/templates/vs/description.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-CordovaStarter
-
-Starter project for building a Cordova app for Windows Phone version: 2.6.0
-
diff --git a/templates/vs/pg_templateIcon.png b/templates/vs/pg_templateIcon.png
deleted file mode 100644
index 75c17c7..0000000
--- a/templates/vs/pg_templateIcon.png
+++ /dev/null
Binary files differ
diff --git a/templates/vs/pg_templatePreview.jpg b/templates/vs/pg_templatePreview.jpg
deleted file mode 100644
index 1d72941..0000000
--- a/templates/vs/pg_templatePreview.jpg
+++ /dev/null
Binary files differ
diff --git a/tests/README.md b/tests/README.md
deleted file mode 100644
index cdf9516..0000000
--- a/tests/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Tests Have Moved
-===
-
-Tests now live in the MobileSpec repo at:
-https://github.com/apache/incubator-cordova-mobile-spec
-
-You will need to create a new project, and add the mobile-spec files to it to run the tests.
\ No newline at end of file
diff --git a/tooling/scripts/buildjs.bat b/tooling/scripts/buildjs.bat
deleted file mode 100644
index 28d2423..0000000
--- a/tooling/scripts/buildjs.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-cscript "%~dp0\buildjs.js" %* //nologo
\ No newline at end of file
diff --git a/tooling/scripts/buildjs.js b/tooling/scripts/buildjs.js
deleted file mode 100644
index 4bfba53..0000000
--- a/tooling/scripts/buildjs.js
+++ /dev/null
@@ -1,216 +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 fso = WScript.CreateObject('Scripting.FileSystemObject'),
- shell = WScript.CreateObject("shell.application"),
- wscript_shell = WScript.CreateObject("WScript.Shell");
-
-var args = WScript.Arguments,
- //Root folder of cordova-wp7 (i.e C:\Cordova\cordova-wp7)
- ROOT = WScript.ScriptFullName.split('\\tooling\\', 1),
- //Sub folder containing templates
- TEMPLATES_PATH = '\\templates',
- //Sub folder for standalone project
- STANDALONE_PATH = TEMPLATES_PATH + '\\standalone',
- //Sub folder containing framework
- FRAMEWORK_PATH = '\\framework',
- //Subfolder containing example project
- EXAMPLE_PATH = '\\example',
- //Git Repositories
- CORDOVA_JS = "https://git-wip-us.apache.org/repos/asf/cordova-js.git",
- // get version
- VERSION = read(ROOT+'\\VERSION').replace(/\r\n/,'').replace(/\n/,''),
- BUILD_DESTINATION;
-
-
-// help function
-function Usage()
-{
- Log("");
- Log("This Script builds the given virsion of cordova.js and injects it into this or the given cordova-wp7 ");
- Log("");
- Log("Usage: buildjs [ Version PathTOCordovaWP7 ]");
- Log(" Version : The version of cordova.js to build (must already be tagged)");
- Log(" PathTOCordovaWP7 : The path to the cordova directory where the new cordova.js will go.");
- Log("examples:");
- Log(" buildjs 2.5.0rc1 //Puts cordova-2.5.0rc1 as the cordova.js in the current working directory");
- Log(" buildjs 2.4.0 C:\\Users\\anonymous\\Desktop\\cordova-wp7 //Puts cordova-2.4.0.js in the given directory");
- Log(" buildjs //Builds the version of cordova.js from the root folder and adds it to the working directory repo");
- Log("");
-}
-
-// logs messaged to stdout and stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-// returns the contents of a file
-function read(filename) {
- //Log('Reading in ' + filename);
- if(fso.FileExists(filename))
- {
- var f=fso.OpenTextFile(filename, 1,2);
- var s=f.ReadAll();
- f.Close();
- return s;
- }
- else
- {
- Log('Cannot read non-existant file : ' + filename);
- WScript.Quit(1);
- }
- return null;
-}
-
-// executes a commmand in the shell
-function exec(command) {
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status === 0) {
- WScript.sleep(100);
- }
-}
-
-// executes a commmand in the shell
-function exec_verbose(command) {
- //Log("Command: " + command);
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status === 0) {
- //Wait a little bit so we're not super looping
- WScript.sleep(100);
- //Print any stdout output from the script
- if(!oShell.StdOut.AtEndOfStream) {
- var line = oShell.StdOut.ReadLine();
- Log(line);
- }
- }
- //Check to make sure our scripts did not encounter an error
- if(!oShell.StdErr.AtEndOfStream)
- {
- var err_line = oShell.StdErr.ReadAll();
- Log(err_line, true);
- WScript.Quit(1);
- }
-}
-
-function build_js(path)
-{
- if(fso.FolderExists(path + '\\temp'))
- {
- fso.DeleteFolder(path + '\\temp', true);
- }
- fso.CreateFolder(path + '\\temp');
- wscript_shell.CurrentDirectory = path + '\\temp';
-
- Log('\tCloning js tagged with ' + VERSION + '...');
- exec('%comspec% /c git clone ' + CORDOVA_JS + ' && cd cordova-js && git fetch && git checkout ' + VERSION );
- if(!fso.FolderExists(path + '\\temp\\cordova-js'))
- {
- WScript.StdErr.WriteLine("ERROR: Failed to clone cordova-js. Aborting...");
- WScript.Quit(1);
- }
- wscript_shell.CurrentDirectory = path + '\\temp\\cordova-js';
- Log("Building Cordova.js...");
-
- exec_verbose('%comspec% /c jake build');
- if(!fso.FolderExists(path + '\\temp\\cordova-js\\pkg'))
- {
- WScript.StdErr.WriteLine("ERROR: Failed to build cordova-js. Aborting...");
- WScript.Quit(1);
- }
-
- //copy the javascript wherever it needs to go.
- wscript_shell.CurrentDirectory = path + '\\temp\\cordova-js\\pkg';
- exec('%comspec% /c copy /Y cordova.windowsphone.js ' + path + STANDALONE_PATH + '\\www\\cordova.js');
- exec('%comspec% /c copy /Y cordova.windowsphone.js ' + path + EXAMPLE_PATH + '\\www\\cordova.js');
-
- //TODO: Delete old cordova.js (done in reversion.js)
-
- Log("SUCESS");
-}
-
-function set_path(some_arg)
-{
- if(some_arg.indexOf('-p:')!= -1)
- {
- var path = some_arg.split('-p:')[1];
- if(fso.FolderExists(path) && fso.FolderExists(path + '\\tooling'))
- {
- BUILD_DESTINATION = path;
- return true;
- }
- else
- {
- Log("ERROR: The given path is not a cordova-wp7 repo, or", true);
- Log(" does not exist. If your trying to reversion a", true);
- Log(" cordova repo other then this one, please provide", true);
- Log(" it's path in the form: -p:C:\\Path\\to\\repo", true);
- WScript.Quit(1);
- }
-
- }
- return false;
-}
-
-Log("");
-
-if(args.Count() > 1)
-{
- set_path(args(1));
-}
-
-if(args.Count() > 0)
-{
- //Support help flags
- if(args(0).indexOf("--help") > -1 ||
- args(0).indexOf("/?") > -1 )
- {
- Usage();
- WScript.Quit(1);
- }
-
- if(args(0).match(/(\d+)[.](\d+)[.](\d+)(rc\d)?/))
- {
- VERSION = args(0);
- if(args.Count() == 1)
- {
- BUILD_DESTINATION = ROOT;
- }
- }
- else if(set_path(arg(0))) {} //do nothing
- else
- {
- Log("The provided version number is invalid, please provide", true);
- Log(" a version number in the format Major.Minor.Fix[rc#]", true);
- Usage();
- WScript.Quit(1);
- }
-}
-else
-{
- BUILD_DESTINATION = ROOT;
-}
-
-//If we haven't quit by here, build the damn javascript!
-Log("Creating js for " + BUILD_DESTINATION);
-build_js(BUILD_DESTINATION);
\ No newline at end of file
diff --git a/tooling/scripts/dist.bat b/tooling/scripts/dist.bat
deleted file mode 100644
index a1c0e1d..0000000
--- a/tooling/scripts/dist.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-cscript "%~dp0\dist.js" %* //nologo
diff --git a/tooling/scripts/dist.js b/tooling/scripts/dist.js
deleted file mode 100644
index 8b27bb9..0000000
--- a/tooling/scripts/dist.js
+++ /dev/null
@@ -1,224 +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.
-*/
-
-
-/*************************************************/
-/**************** REQUIREMENTS *****************/
-/*************************************************/
-/*
-Paths:
- - path to git.exe -> C:\msysgit\bin
- - path to msbuild -> C:\Windows\Microsoft.NET\Framework\v4.0.30319
-Famework
- - .NET 4.0
- - Windows phone SDKs
-
-
-/************ Globals ********/
-
-var fso = WScript.CreateObject('Scripting.FileSystemObject'),
- wscript_shell = WScript.CreateObject("WScript.Shell");
-
-//Replace root directory or create new directory?
-var replace = false;
-
-//Set up directory structure of current release
- //arguments passed in
-var args = WScript.Arguments,
- //Root folder of cordova-wp7 (i.e C:\Cordova\cordova-wp7)
- ROOT = WScript.ScriptFullName.split('\\tooling\\', 1),
- // tooling scripts
- SCRIPTS = '\\tooling\\scripts';
- //Get version number
- VERSION=read(ROOT+'\\VERSION').replace(/\r\n/,'').replace(/\n/,'');
-
-//Destination to build to
-var BUILD_DESTINATION;
-//current script that is running
-var current_script = "dist";
-
-
-/*************************************************/
-/**************** FUNCTIONS ********************/
-/*************************************************/
-
-
-// help function
-function Usage()
-{
- Log("");
- Log("This is a command line tool for building new releases. It will package a new release");
- Log(" of a cordova-wp7 project, reversioning it to match the VERSION file in the root directory.");
- Log("Usage: dist [ <PATH_TO_NEW_REPO> | -f ] ");
- Log(" -f : reversion the repositoy this script is in.");
- Log(" <PATH_TO_NEW_REPO> : path to create the new reversioned repositoy in.");
- Log("");
-}
-
-// logs messaged to stdout and stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-
-// returns the contents of a file
-function read(filename) {
- //Log('Reading in ' + filename);
- if(fso.FileExists(filename))
- {
- var f=fso.OpenTextFile(filename, 1,2);
- var s=f.ReadAll();
- f.Close();
- return s;
- }
- else
- {
- Log('Cannot read non-existant file : ' + filename);
- WScript.Quit(1);
- }
- return null;
-}
-
-// executes a commmand in the shell
-function exec(command) {
- Log("Command: " + command);
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status === 0) {
- //Wait a little bit so we're not super looping
- WScript.sleep(100);
- //Print any stdout output from the script
- if(!oShell.StdOut.AtEndOfStream) {
- var line = oShell.StdOut.ReadLine();
- Log(line);
- }
- }
- //Check to make sure our scripts did not encounter an error
- if(!oShell.StdErr.AtEndOfStream)
- {
- var err_line = oShell.StdErr.ReadAll();
- Log(err_line, true);
- Log("ERROR: Could not complete distribution, failed while running: " + current_script, true);
- WScript.Quit(1);
- }
-}
-
-function space()
-{
- Log("");
- Log("*****************************************************");
- Log("");
-}
-
-
-/*************************************************/
-/************** MAIN SCRIPT ********************/
-/*************************************************/
-
-if (args.Count() > 0) {
- if (args.Count() == 1) {
- // support help flags
- if (args(0).indexOf("--help") > -1 ||
- args(0).indexOf("/?") > -1 ) {
- Usage();
- WScript.Quit(1);
- }
- else if (args(0) == '-f') {
- BUILD_DESTINATION = ROOT;
- replace = true;
- }
- else {
- BUILD_DESTINATION = args(0);
- }
-
- }
- else if (args.Count() == 2) {
- if (args(0) == '-f') {
- replace = true;
- BUILD_DESTINATION = args(1);
- } else {
- BUILD_DESTINATION = args(0);
- if (args(1) == '-f') {
- replace = true;
- }
- else {
- Log('WARNING : "' + args(1) + '" is not regognized, attempting to continue distribution.');
- }
- }
- }
- else {
- Log("Error : too many arguments provided.", true);
- WScript.Quit(1);
- }
-}
-else {
- Usage();
- WScript.Quit(1);
-}
-
-
-/*************************************************/
-/****************** Step 1 *********************/
-/*************************************************/
-/** - Copy source code to new directory **/
-/*************************************************/
-if (!replace) {
- current_script = "new.js";
- exec('cscript ' + ROOT + SCRIPTS + '\\new.js ' + BUILD_DESTINATION + ' //nologo');
- space();
-}
-
-/*************************************************/
-/****************** Step 2 *********************/
-/*************************************************/
-/** - Retag everything with new version numbers **/
-/** - Delete any generated files and cordova.js **/
-/** - Rebuild dll **/
-/*************************************************/
-current_script = "reversion.js";
-exec('cscript ' + BUILD_DESTINATION + SCRIPTS + '\\reversion.js ' + VERSION + ' //nologo');
-space();
-
-/*************************************************/
-/****************** Step 3 *********************/
-/*************************************************/
-/** - Download tagged version of cordova.js **/
-/** - build cordova.js **/
-/** - windows.cordova.js -> templates + example **/
-/*************************************************/
-// New Workflow may not require building the new js, it should already be in place.
-/*current_script = "buildjs.js";
-exec('cscript ' + BUILD_DESTINATION + SCRIPTS + '\\buildjs.js //nologo');
-space();*/
-
-/*************************************************/
-/****************** Step 5 *********************/
-/*************************************************/
-/** - Build templates **/
-/** - Zip templates **/
-/** - inject into Visual Studio **/
-/*************************************************/
-current_script = "package.js";
-exec('cscript ' + BUILD_DESTINATION + SCRIPTS + '\\package.js //nologo');
-space();
-Log("Distribution Complete.");
\ No newline at end of file
diff --git a/tooling/scripts/new.bat b/tooling/scripts/new.bat
deleted file mode 100644
index cb08e2e..0000000
--- a/tooling/scripts/new.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-cscript "%~dp0\new.js" %* //nologo
\ No newline at end of file
diff --git a/tooling/scripts/new.js b/tooling/scripts/new.js
deleted file mode 100644
index c17dc94..0000000
--- a/tooling/scripts/new.js
+++ /dev/null
@@ -1,151 +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 fso = WScript.CreateObject('Scripting.FileSystemObject'),
- shell = WScript.CreateObject("shell.application"),
- wscript_shell = WScript.CreateObject("WScript.Shell");
-
-var args = WScript.Arguments,
- //Root folder of cordova-wp7 (i.e C:\Cordova\cordova-wp7)
- ROOT = WScript.ScriptFullName.split('\\tooling\\', 1),
- //Sub folder containing templates
- TEMPLATES_PATH = '\\templates',
- //Sub folder containing framework
- FRAMEWORK_PATH = '\\framework',
- //Subfolder containing example project
- EXAMPLE_PATH = '\\example';
-// git repo for cordova-wp7
-var CORDOVA_WP7 = 'https://git-wip-us.apache.org/repos/asf/cordova-wp7.git';
-//Destination to build to
-var BUILD_DESTINATION;
-// pull the project down from github?
-var GET_NEW = false;
-
-// help function
-function Usage()
-{
- WScript.StdOut.WriteLine("");
- WScript.StdOut.WriteLine("Usage: new [ PathToDestinationFolder ]");
- WScript.StdOut.WriteLine(" PathToDestinationFolder : Folder you wish to be created for a new cordova-wp7 repo");
- WScript.StdOut.WriteLine("examples:");
- WScript.StdOut.WriteLine(" new C:\\Users\\anonymous\\Desktop\\cordova-wp7");
- WScript.StdOut.WriteLine("");
-}
-
-// returns the contents of a file
-function read(filename) {
- //WScript.StdOut.WriteLine('Reading in ' + filename);
- if(fso.FileExists(filename))
- {
- var f=fso.OpenTextFile(filename, 1,2);
- var s=f.ReadAll();
- f.Close();
- return s;
- }
- else
- {
- WScript.StdErr.WriteLine('Cannot read non-existant file : ' + filename);
- WScript.Quit(1);
- }
- return null;
-}
-
-// executes a commmand in the shell
-function exec(command) {
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status === 0) {
- WScript.sleep(100);
- }
-}
-
-function copy_to(path)
-{
- //Copy everything over to BUILD_DESTINATION
- var dest = shell.NameSpace(path);
- WScript.StdOut.WriteLine("Copying files to build directory...");
-
- /** copy by file instead? (just what we need)**/
- dest.CopyHere(ROOT + "\\bin", 4|20);
- dest.CopyHere(ROOT + EXAMPLE_PATH, 4|20); //Should mostly be copied from standalone
- dest.CopyHere(ROOT + FRAMEWORK_PATH, 4|20);
- dest.CopyHere(ROOT + TEMPLATES_PATH, 4|20);
- dest.CopyHere(ROOT + "\\tests", 4|20);
- dest.CopyHere(ROOT + "\\tooling", 4|20);
- dest.CopyHere(ROOT + "\\.gitignore", 4|20);
- dest.CopyHere(ROOT + "\\LICENSE", 4|20);
- dest.CopyHere(ROOT + "\\NOTICE", 4|20);
- dest.CopyHere(ROOT + "\\README.md", 4|20);
- dest.CopyHere(ROOT + "\\VERSION", 4|20);
-}
-
-WScript.StdOut.WriteLine("");
-
-if(args.Count() > 0)
-{
- if(fso.FolderExists(args(0)))
- {
- WScript.StdErr.WriteLine("The given directory already exists!");
- Usage();
- WScript.Quit(1);
- }
- else
- {
- BUILD_DESTINATION = args(0);
-
- }
-
- if(!GET_NEW) {
-
- if(fso.FolderExists(BUILD_DESTINATION))
- {
- WScript.StdErr.WriteLine("The given directory already exists!");
- Usage();
- WScript.Quit(1);
- }
- else
- {
- BUILD_DESTINATION = args(0);
- }
-
- // set up file structure
- fso.CreateFolder(BUILD_DESTINATION);
- // copy nessisary files
- copy_to(BUILD_DESTINATION);
- }
- else
- {
- wscript_shell.CurrentDirectory = arg(0) + '\\..';
- BUILD_DESTINATION = wscript_shell.CurrentDirectory + '\\cordova-wp7';
-
- WScript.StdOut.WriteLine('Cloning cordova-wp7 from git, build destination now ' + BUILD_DESTINATION);
- if(fso.FolderExists(BUILD_DESTINATION))
- {
- WScript.StdErr.WriteLine("Could not clone cordova-wp7 from git because it's directory already exists!");
- WScript.Quit(1);
- }
-
- exec('git clone ' + CORDOVA_WP7); //git fetch --tags && git checkout?
-
- }
-}
-else
-{
- Usage();
- WScript.Quit(1);
-}
\ No newline at end of file
diff --git a/tooling/scripts/package.bat b/tooling/scripts/package.bat
deleted file mode 100644
index c00551e..0000000
--- a/tooling/scripts/package.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-cscript "%~dp0\package.js" %* //nologo
\ No newline at end of file
diff --git a/tooling/scripts/package.js b/tooling/scripts/package.js
deleted file mode 100644
index b5f882d..0000000
--- a/tooling/scripts/package.js
+++ /dev/null
@@ -1,257 +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 fso = WScript.CreateObject('Scripting.FileSystemObject'),
- shell = WScript.CreateObject("shell.application"),
- wscript_shell = WScript.CreateObject("WScript.Shell");
-
-var args = WScript.Arguments,
- // root folder of cordova-wp7 (i.e C:\Cordova\cordova-wp7)
- ROOT = WScript.ScriptFullName.split('\\tooling\\', 1),
- // sub folder containing templates
- TEMPLATES_PATH = '\\templates',
- // sub folder for standalone project
- STANDALONE_PATH = TEMPLATES_PATH + '\\standalone',
- // sub folder containing framework
- FRAMEWORK_PATH = '\\framework',
- // subfolder containing example project
- EXAMPLE_PATH = '\\example',
- // get version number
- VERSION=read(ROOT+'\\VERSION').replace(/\r\n/,'').replace(/\n/,''),
- BASE_VERSION = VERSION.split('rc', 1) + ".0";
-
-// destination directory to package
-var BUILD_DESTINATION;
-// add templates to visual studio?
-var ADD_TO_VS = false;
-// build the dll?
-var BUILD_DLL = false;
-
-
-// help function
-function Usage()
-{
- Log("");
- Log("Usage: package [ PathToCordovaWP7 ]");
- Log(" PathToCordovaWP7 : Cordova-wp7 repo you wish to package for release");
- Log("examples:");
- Log(" package C:\\Users\\anonymous\\Desktop\\cordova-wp7");
- Log(" package // packages current cordova directory");
- Log("");
-}
-
-// logs messaged to stdout and stderr
-function Log(msg, error) {
- if (error) {
- WScript.StdErr.WriteLine(msg);
- }
- else {
- WScript.StdOut.WriteLine(msg);
- }
-}
-
-// returns the contents of a file
-function read(filename) {
- //Log('Reading in ' + filename);
- if(fso.FileExists(filename))
- {
- var f=fso.OpenTextFile(filename, 1,2);
- var s=f.ReadAll();
- f.Close();
- return s;
- }
- else
- {
- Log('ERROR: Cannot read non-existant file : ' + filename);
- WScript.Quit(1);
- }
- return null;
-}
-
-// executes a commmand in the shell
-function exec(command) {
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status === 0) {
- WScript.sleep(100);
- }
-}
-
-// executes a commmand in the shell
-function exec_verbose(command) {
- Log("Command: " + command);
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status === 0) {
- //Wait a little bit so we're not super looping
- WScript.sleep(100);
- //Print any stdout output from the script
- if(!oShell.StdOut.AtEndOfStream) {
- var line = oShell.StdOut.ReadLine();
- Log(line);
- }
- }
- //Check to make sure our scripts did not encounter an error
- if(!oShell.StdErr.AtEndOfStream)
- {
- var err_line = oShell.StdErr.ReadAll();
- Log(err_lin, true);
- WScript.Quit(1);
- }
-}
-
-// packages templates into .zip
-function package_templates()
-{
- Log("Creating template .zip files ...");
-
- var template_path = BUILD_DESTINATION + '\\CordovaWP7_' + VERSION.replace(/\./g, '_') + '.zip';
- if(fso.FileExists(template_path))
- {
- fso.DeleteFile(template_path);
- }
-
- exec('%comspec% /c copy /Y ' + BUILD_DESTINATION + TEMPLATES_PATH + '\\vs\\MyTemplateStandAlone.vstemplate ' + BUILD_DESTINATION + STANDALONE_PATH + '\\MyTemplate.vstemplate');
- exec('%comspec% /c copy /Y ' + BUILD_DESTINATION + TEMPLATES_PATH + '\\vs\\pg_templateIcon.png ' + BUILD_DESTINATION + STANDALONE_PATH + '\\__TemplateIcon.png');
- exec('%comspec% /c copy /Y ' + BUILD_DESTINATION + TEMPLATES_PATH + '\\vs\\pg_templatePreview.jpg ' + BUILD_DESTINATION + STANDALONE_PATH + '\\__PreviewImage.jpg');
- exec('%comspec% /c copy /Y ' + BUILD_DESTINATION + '\\VERSION ' + BUILD_DESTINATION + STANDALONE_PATH);
-
- zip_project(template_path, BUILD_DESTINATION + STANDALONE_PATH);
-
-
- if(ADD_TO_VS)
- {
- var template_dir = wscript_shell.ExpandEnvironmentStrings("%USERPROFILE%") + '\\Documents\\Visual Studio 2012\\Templates\\ProjectTemplates';
- if(fso.FolderExists(template_dir ))
- {
- dest = shell.NameSpace(template_dir);
- dest.CopyHere(template_path, 4|20);
- }
- else
- {
- Log("WARNING: Could not find template directory in Visual Studio,\n you can manually copy over the template .zip files.");
- }
- }
-}
-
-function zip_project(zip_path, project_path)
-{
- // create empty ZIP file and open for adding
- var file = fso.CreateTextFile(zip_path, true);
-
- // create twenty-two byte "fingerprint" for .zip
- file.write("PK");
- file.write(String.fromCharCode(5));
- file.write(String.fromCharCode(6));
- file.write('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0');
- file.Close();
-
- // open .zip foder and copy contents of project_path to zip_path
- var zipFolder = shell.NameSpace(zip_path);
- var sourceItems = shell.NameSpace(project_path).items();
- if (zipFolder !== null) {
- zipFolder.CopyHere(sourceItems, 4|20|16);
- var maxTime = 5000;
- while(zipFolder.items().Count < sourceItems.Count)
- {
- maxTime -= 100;
- if(maxTime > 0 ) {
- WScript.Sleep(100);
- }
- else {
- Log('Failed to create .zip file.', true);
- break;
- }
- }
- }
- else {
- Log('Failed to create .zip file.', true);
- }
-}
-
-// builds the new cordova dll and copys it to the full template (only done because of the version referance in Device.cs)
-function build_dll()
-{
- Log("Packaging .dll ...");
- // move to framework directory
- wscript_shell.CurrentDirectory = BUILD_DESTINATION + FRAMEWORK_PATH;
- // build .dll in Release
- exec_verbose('msbuild /p:Configuration=Release;VersionNumber=' + VERSION + ';BaseVersionNumber=' + BASE_VERSION);
- //Check if file dll was created
- if(!fso.FileExists(BUILD_DESTINATION + FRAMEWORK_PATH + '\\Bin\\Release\\WPCordovaClassLib.dll'))
- {
- WScript.StdErr.WriteLine('ERROR: MSBuild failed to create .dll.');
- WScript.Quit(1);
- }
-
- Log("SUCESS");
-}
-
-// delete any unnessisary files when finished
-function cleanUp() {
-
- if(fso.FileExists(BUILD_DESTINATION + STANDALONE_PATH + '\\MyTemplate.vstemplate')) {
- fso.DeleteFile(BUILD_DESTINATION + STANDALONE_PATH + '\\MyTemplate.vstemplate');
- }
- if(fso.FileExists(BUILD_DESTINATION + STANDALONE_PATH + '\\__PreviewImage.jpg')) {
- fso.DeleteFile(BUILD_DESTINATION + STANDALONE_PATH + '\\__PreviewImage.jpg');
- }
- if(fso.FileExists(BUILD_DESTINATION + STANDALONE_PATH + '\\__TemplateIcon.png')) {
- fso.DeleteFile(BUILD_DESTINATION + STANDALONE_PATH + '\\__TemplateIcon.png');
- }
- //Add any other cleanup here
-}
-
-
-Log("");
-
-if(args.Count() > 0)
-{
- //Support help flags
- if(args(0).indexOf("--help") > -1 ||
- args(0).indexOf("/?") > -1 )
- {
- Usage();
- WScript.Quit(1);
- }
-
- if(fso.FolderExists(args(0)) && fso.FolderExists(args(0) + '\\tooling'))
- {
- BUILD_DESTINATION = args(0);
- }
- else
- {
- Log("ERROR: The given directory is not a cordova-wp7 repo.");
- Usage();
- WScript.Quit(1);
-
- }
-}
-else
-{
- BUILD_DESTINATION = ROOT;
-}
-
-// build dll for full template
-if (BUILD_DLL) {
- build_dll();
-}
-
-// build/package the templates
-package_templates(BUILD_DESTINATION);
-
-cleanUp();
\ No newline at end of file
diff --git a/tooling/scripts/reversion.bat b/tooling/scripts/reversion.bat
deleted file mode 100644
index b35ab08..0000000
--- a/tooling/scripts/reversion.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-cscript "%~dp0\reversion.js" %* //nologo
\ No newline at end of file
diff --git a/tooling/scripts/reversion.js b/tooling/scripts/reversion.js
deleted file mode 100644
index 753cbdd..0000000
--- a/tooling/scripts/reversion.js
+++ /dev/null
@@ -1,270 +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.
-*/
-
-
-/************ Globals ********/
-
-var fso = WScript.CreateObject('Scripting.FileSystemObject'),
- shell = WScript.CreateObject("shell.application"),
- wscript_shell = WScript.CreateObject("WScript.Shell");
-
-//Get new version from git or build off this version?
-var GET_NEW = false;
-
-//Set up directory structure of current release
- //arguments passed in
-var args = WScript.Arguments,
- //Root folder of cordova-wp7 (i.e C:\Cordova\cordova-wp7)
- ROOT = WScript.ScriptFullName.split('\\tooling\\', 1),
- //Sub folder containing templates
- TEMPLATES_PATH = '\\templates',
- //Sub folder for standalone project
- STANDALONE_PATH = TEMPLATES_PATH + '\\standalone',
- //Sub folder containing framework
- FRAMEWORK_PATH = '\\framework',
- //Subfolder containing example project
- EXAMPLE_PATH = '\\example',
- //Path to cordovalib folder, containing source for .dll
- CORDOVA_LIB = STANDALONE_PATH + '\\cordovalib',
- //Get version number
- VERSION='',
- BASE_VERSION = '';
-
-//Destination to build to
-var BUILD_DESTINATION;
-
-// help function
-function Usage()
-{
- WScript.StdOut.WriteLine("");
- WScript.StdOut.WriteLine("Usage: reversion [ Version PathTOCordovaWP7 ]");
- WScript.StdOut.WriteLine(" Version : The new version for codova-wp7");
- WScript.StdOut.WriteLine(" PathTOCordovaWP7 : The path to the cordova directory being reversioned.");
- WScript.StdOut.WriteLine("examples:");
- WScript.StdOut.WriteLine(" reversion 2.5.0rc1 //Reversions the current working directory");
- WScript.StdOut.WriteLine(" reversion 2.5.0 C :\\Users\\anonymous\\Desktop\\cordova-wp7");
- WScript.StdOut.WriteLine("");
-}
-
-var ForReading = 1, ForWriting = 2, ForAppending = 8;
-var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;
-
-// returns the contents of a file
-function read(filename) {
- //WScript.Echo('Reading in ' + filename);
- if(fso.FileExists(filename))
- {
- var f=fso.OpenTextFile(filename, 1,2);
- var s=f.ReadAll();
- f.Close();
- return s;
- }
- else
- {
- WScript.StdErr.WriteLine('Cannot read non-existant file : ' + filename);
- WScript.Quit(1);
- }
- return null;
-}
-
-// writes the contents to the specified file
-function write(filename, contents) {
- var f=fso.OpenTextFile(filename, ForWriting, TristateTrue);
- f.Write(contents);
- f.Close();
-}
-
-// replaces the matches of regexp with replacement
-function replaceInFile(filename, regexp, replacement) {
- //WScript.Echo("Replaceing with "+replacement+ " in:");
- var text = read(filename).replace(regexp,replacement);
- //WScript.Echo(text);
- write(filename,text);
-}
-
-// executes a commmand in the shell
-function exec(command) {
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status === 0) {
- WScript.sleep(100);
- }
-}
-
-// executes a commmand in the shell
-function exec_verbose(command) {
- //WScript.StdOut.WriteLine("Command: " + command);
- var oShell=wscript_shell.Exec(command);
- while (oShell.Status === 0) {
- //Wait a little bit so we're not super looping
- WScript.sleep(100);
- //Print any stdout output from the script
- if(!oShell.StdOut.AtEndOfStream) {
- var line = oShell.StdOut.ReadLine();
- WScript.StdOut.WriteLine(line);
- }
- }
- //Check to make sure our scripts did not encounter an error
- if(!oShell.StdErr.AtEndOfStream)
- {
- var err_line = oShell.StdErr.ReadAll();
- WScript.StdErr.WriteLine(err_line);
- WScript.Quit(1);
- }
-}
-
-function updateVersionNumbers() {
- WScript.StdOut.WriteLine("Updating version numbers....");
- var version_regex = /(\d+)[.](\d+)[.](\d+)(rc\d)?/;
- replaceInFile(BUILD_DESTINATION + '\\VERSION', version_regex, VERSION);
- // replace assembaly versions in framework
- var framework_regex = /Description\(\"(\d+)[.](\d+)[.](\d+)(rc\d)?\"\)\]/; //Will match ("x.x.x[rcx]")]
- replaceInFile(BUILD_DESTINATION + FRAMEWORK_PATH + "\\Properties\\AssemblyInfo.cs", framework_regex, "Description(\"" + VERSION + "\")]");
- framework_regex = /Version\(\"(\d+)[.](\d+)[.](\d+)[.](\d+)\"\)\]/g;
- replaceInFile(BUILD_DESTINATION + FRAMEWORK_PATH + "\\Properties\\AssemblyInfo.cs", framework_regex, "Version(\"" + BASE_VERSION + "\")]");
-
- // update standalone project
- exec('%comspec% /c copy /Y /V ' + BUILD_DESTINATION + "\\VERSION " + BUILD_DESTINATION + STANDALONE_PATH + "\\VERSION");
- var cordova_regex = /cordova-(\d+)[.](\d+)[.](\d+)(rc\d)?/g; //Matches *first* cordova-x.x.x[rcx] (just ad g at end to make global)
- version_regex = /return\s*\"(\d+)[.](\d+)[.](\d+)(rc\d)?/; //Matches return "x.x.x[rcx]
- replaceInFile(BUILD_DESTINATION + CORDOVA_LIB + '\\..\\Plugins\\Device.cs', version_regex, "return \"" + VERSION);
-
- // update template discription
- version_regex = /Cordova\s*(\d+)[.](\d+)[.](\d+)(rc\d)?\s*Windows/g; //Matches version: x.x.x[rcx]
- replaceInFile(BUILD_DESTINATION + TEMPLATES_PATH + '\\vs\\description.txt', version_regex, "Cordova " + VERSION + " Windows");
-
- // update .vstemplate files for the template zips.
- var name_regex = /CordovaWP7[_](\d+)[_](\d+)[_](\d+)(rc\d)?/g;
- var discript_regex = /Cordova\s*(\d+)[.](\d+)[.](\d+)(rc\d)?/;
-
- replaceInFile(BUILD_DESTINATION + TEMPLATES_PATH + '\\vs\\MyTemplateStandAlone.vstemplate', name_regex, 'CordovaWP7_' + VERSION.replace(/\./g, '_'));
- replaceInFile(BUILD_DESTINATION + TEMPLATES_PATH + '\\vs\\MyTemplateStandAlone.vstemplate', discript_regex, "Cordova " + VERSION);
-}
-
-// delete all cordova.js and generated files (templates) from old version numbers
-function cleanup()
-{
- WScript.StdOut.WriteLine("Cleanup");
- // remove old template .zip files
- if(fso.FileExists(BUILD_DESTINATION + '\\*.zip'))
- {
- fso.DeleteFile(BUILD_DESTINATION + '\\*.zip');
- }
- // remove any generated framework files
- if(fso.FolderExists(BUILD_DESTINATION + FRAMEWORK_PATH + '\\Bin'))
- {
- fso.DeleteFolder(BUILD_DESTINATION + FRAMEWORK_PATH + '\\Bin');
- }
- if(fso.FolderExists(BUILD_DESTINATION + FRAMEWORK_PATH + '\\obj'))
- {
- fso.DeleteFolder(BUILD_DESTINATION + FRAMEWORK_PATH + '\\obj');
- }
- // remove any generated CordovaDeploy
- if(fso.FolderExists(BUILD_DESTINATION + '\\tooling\\CordovaDeploy\\CordovaDeploy\\bin'))
- {
- fso.DeleteFolder(BUILD_DESTINATION + '\\tooling\\CordovaDeploy\\CordovaDeploy\\bin');
- }
- if(fso.FolderExists(BUILD_DESTINATION + '\\tooling\\CordovaDeploy\\CordovaDeploy\\obj'))
- {
- fso.DeleteFolder(BUILD_DESTINATION + '\\tooling\\CordovaDeploy\\CordovaDeploy\\obj');
- }
- //remove old template .zip files
- WScript.Echo(BUILD_DESTINATION);
- var root_folder = shell.NameSpace(BUILD_DESTINATION + '\\').Items();
- for(var i = 0; i < root_folder.Count; i++)
- {
- if(root_folder.Item(i).Name.match(/CordovaWP7[_](\d+)[_](\d+)[_](\d+)(rc\d)?/))
- {
- fso.DeleteFile(BUILD_DESTINATION + '\\' + root_folder.Item(i).Name);
- }
- }
- // remove old cordova.js
- /*var example_www = shell.NameSpace(BUILD_DESTINATION + EXAMPLE_PATH + '\\www').Items();
- for(i = 0; i < example_www.Count; i++)
- {
- if(example_www.Item(i).Name.match(/cordova\-(\d+)[.](\d+)[.](\d+)(rc\d)?[.]js/))
- {
- fso.DeleteFile(BUILD_DESTINATION + EXAMPLE_PATH + '\\www\\' + example_www.Item(i).Name);
- }
- }*/
-
- var standalone_www = shell.NameSpace(BUILD_DESTINATION + STANDALONE_PATH + '\\www').Items();
- for(i = 0; i < standalone_www.Count; i++)
- {
- if(standalone_www.Item(i).Name.match(/cordova\-(\d+)[.](\d+)[.](\d+)(rc\d)?[.]js/))
- {
- fso.DeleteFile(BUILD_DESTINATION + STANDALONE_PATH + '\\www\\' + standalone_www.Item(i).Name);
- }
- }
-}
-
-
-WScript.StdOut.WriteLine("");
-
-if(args.Count() > 1)
-{
- if(fso.FolderExists(args(1)) && fso.FolderExists(args(1) + '\\tooling'))
- {
- BUILD_DESTINATION = args(1);
- }
- else
- {
- WScript.StdErr.WriteLine("The given path is not a cordova-wp7 repo, if");
- WScript.StdErr.WriteLine(" your trying to reversion a cordova-wp7 repo");
- WScript.StdErr.WriteLine(" other then this one, please provide its path.");
- Usage();
- WScript.Quit(1);
- }
-}
-
-if(args.Count() > 0)
-{
- //Support help flags
- if(args(0).indexOf("--help") > -1 ||
- args(0).indexOf("/?") > -1 )
- {
- Usage();
- WScript.Quit(1);
- }
-
- if(args(0).match(/(\d+)[.](\d+)[.](\d+)(rc\d)?/))
- {
- VERSION = args(0);
- BASE_VERSION = VERSION.split('rc', 1) + ".0";
- if(args.Count() < 2)
- {
- BUILD_DESTINATION = ROOT;
- }
- // remove old cordova.js files and any generated files
- cleanup();
- // update version numbers
- updateVersionNumbers();
- }
- else
- {
- WScript.StdOut.WriteLine("The version number is invalid, please provide");
- WScript.StdOut.WriteLine(" a version number in the format Major.Minor.Fix[rc#]");
- Usage();
- WScript.Quit(1);
- }
-}
-else
-{
- Usage();
- WScript.Quit(1);
-}
\ No newline at end of file