You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by pu...@apache.org on 2014/09/19 00:49:40 UTC

[05/27] moving stuff around

http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/c74fdafa/wp8/template/cordovalib/CordovaView.xaml.cs
----------------------------------------------------------------------
diff --git a/wp8/template/cordovalib/CordovaView.xaml.cs b/wp8/template/cordovalib/CordovaView.xaml.cs
deleted file mode 100644
index 0514aa6..0000000
--- a/wp8/template/cordovalib/CordovaView.xaml.cs
+++ /dev/null
@@ -1,567 +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.Globalization;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Shell;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Media;
-using WPCordovaClassLib.Cordova;
-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>
-        /// Sentinal 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 = "";
-
-
-        /// <summary>
-        /// Handles native api calls
-        /// </summary>
-        private NativeExecution nativeExecution;
-
-        protected BrowserMouseHelper bmHelper;
-
-        private ConfigHandler configHandler;
-
-        protected bool IsExiting = false;
-
-        private Dictionary<string, IBrowserDecorator> browserDecorators;
-
-        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;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets whether to suppress bouncy scrolling of
-        /// the WebBrowser control;
-        /// </summary>
-        public bool DisableBouncyScrolling
-        {
-            get;
-            set;
-        }
-
-        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
-            {
-
-            }
-
-            // initializes native execution logic
-            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);
-                }
-            }
-
-            browserDecorators = new Dictionary<string, IBrowserDecorator>();
-
-            nativeExecution = new NativeExecution(ref this.CordovaBrowser);
-            bmHelper = new BrowserMouseHelper(ref this.CordovaBrowser);
-
-            ApplyConfigurationPreferences();
-
-            CreateDecorators();
-        }
-
-        /// <summary>
-        /// Applies configuration preferences. Only BackgroundColor+fullscreen is currently supported.
-        /// </summary>
-        private void ApplyConfigurationPreferences()
-        {
-            string bgColor = configHandler.GetPreference("backgroundcolor");
-
-            if (!String.IsNullOrEmpty(bgColor))
-            {
-                try
-                {
-                    Browser.Background = new SolidColorBrush(ColorFromHex(bgColor));
-                }
-                catch (Exception ex)
-                {
-                    Debug.WriteLine("Unable to parse BackgroundColor value '{0}'. Error: {1}", bgColor, ex.Message);
-                }
-            }
-        }
-
-        /*
-         *   browserDecorators are a collection of plugin-like classes (IBrowserDecorator) that add some bit of functionality to the browser.
-         *   These are somewhat different than plugins in that they are usually not async and patch a browser feature that we would
-         *   already expect to have.  Essentially these are browser polyfills that are patched from the outside in.
-         * */
-        void CreateDecorators()
-        {
-            XHRHelper xhrProxy = new XHRHelper();
-            xhrProxy.Browser = CordovaBrowser;
-            browserDecorators.Add("XHRLOCAL", xhrProxy);
-
-            OrientationHelper orientHelper = new OrientationHelper();
-            orientHelper.Browser = CordovaBrowser;
-            browserDecorators.Add("Orientation", orientHelper);
-
-            ConsoleHelper console = new ConsoleHelper();
-            console.Browser = CordovaBrowser;
-            browserDecorators.Add("ConsoleLog", console);
-
-        }
-
-        void AppClosing(object sender, ClosingEventArgs e)
-        {
-            Debug.WriteLine("AppClosing");
-        }
-
-        void AppDeactivated(object sender, DeactivatedEventArgs e)
-        {
-            Debug.WriteLine("INFO: AppDeactivated because " + e.Reason);
-            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 CordovaBrowser_Loaded(object sender, RoutedEventArgs e)
-        {
-
-            this.bmHelper.ScrollDisabled = this.DisableBouncyScrolling;
-
-            if (DesignerProperties.IsInDesignTool)
-            {
-                return;
-            }
-
-            // prevents refreshing web control to initial state during pages transitions
-            if (this.IsBrowserInitialized) return;
-
-
-            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();
-                        }
-                    }
-                }
-
-                CordovaBrowser.Navigate(StartPageUri);
-                IsBrowserInitialized = true;
-                AttachHardwareButtonHandlers();
-            }
-            catch (Exception ex)
-            {
-                Debug.WriteLine("ERROR: Exception in CordovaBrowser_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);
-                    // CB-2347 -jm
-                    string fullscreen = configHandler.GetPreference("fullscreen");
-                    bool bFullScreen = false;
-                    if (bool.TryParse(fullscreen, out bFullScreen) && bFullScreen)
-                    {
-                        SystemTray.SetIsVisible(page, false);
-                    }
-                }
-            }
-        }
-
-        void page_BackKeyPress(object sender, CancelEventArgs e)
-        {
-
-            if (OverrideBackButton)
-            {
-                try
-                {
-                    CordovaBrowser.InvokeScript("eval", new string[] { "cordova.fireDocumentEvent('backbutton', {}, true);" });
-                    e.Cancel = true;
-                }
-                catch (Exception ex)
-                {
-                    Debug.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 CordovaBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
-        {
-            if (IsExiting)
-            {
-                // Special case, we navigate to about:blank when we are about to exit.
-                IsolatedStorageSettings.ApplicationSettings.Save();
-                Application.Current.Terminate();
-                return;
-            }
-
-            Debug.WriteLine("CordovaBrowser_LoadCompleted");
-
-            string version = "?";
-            System.Windows.Resources.StreamResourceInfo streamInfo = Application.GetResourceStream(new Uri("VERSION", UriKind.Relative));
-            if (streamInfo != null)
-            {
-                using(StreamReader sr = new StreamReader(streamInfo.Stream))
-                {
-                    version = sr.ReadLine();
-                }
-            }
-            Debug.WriteLine("Apache Cordova native platform version " + version + " is starting");
-
-            string[] autoloadPlugs = this.configHandler.AutoloadPlugins;
-            foreach (string plugName in autoloadPlugs)
-            {
-                nativeExecution.AutoLoadCommand(plugName);
-            }
-
-            // send js code to fire ready event
-            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.js in your html script tag?");
-            }
-            // attach js code to dispatch exitApp 
-            string appExitHandler = "(function(){navigator.app = navigator.app || {}; navigator.app.exitApp= function(){cordova.exec(null,null,'CoreEvents','__exitApp',[]); }})();";
-            try
-            {
-                CordovaBrowser.InvokeScript("eval", new string[] { appExitHandler });
-            }
-            catch (Exception /*ex*/)
-            {
-                Debug.WriteLine("Error calling js to add appExit funtion.");
-            }
-
-            if (this.CordovaBrowser.Opacity < 1)
-            {
-                FadeIn.Begin();
-            }
-        }
-
-
-        void CordovaBrowser_Navigating(object sender, NavigatingEventArgs e)
-        {
-            if (!configHandler.URLIsAllowed(e.Uri.ToString()))
-            {
-                Debug.WriteLine("Whitelist exception: Stopping browser from navigating to :: " + e.Uri.ToString());
-                e.Cancel = true;
-                return;
-            }
-
-            this.PageDidChange = true;
-            this.nativeExecution.ResetAllCommands();
-        }
-
-        /*
-         *  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 CordovaBrowser_ScriptNotify(object sender, NotifyEventArgs e)
-        {
-            string commandStr = e.Value;
-
-            string commandName = commandStr.Split('/').FirstOrDefault();
-
-            if (browserDecorators.ContainsKey(commandName))
-            {
-                browserDecorators[commandName].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;
-                    case "__exitapp":
-                        Debug.WriteLine("Received exitApp command from javascript, app will now exit.");
-                        CordovaBrowser.InvokeScript("eval", new string[] { "cordova.fireDocumentEvent('pause');" });
-                        CordovaBrowser.InvokeScript("eval", new string[] { "setTimeout(function(){ cordova.fireDocumentEvent('exit'); cordova.exec(null,null,'CoreEvents','__finalexit',[]); },0);" });
-                        break;
-                    case "__finalexit":
-                        IsExiting = true;
-                        // hide the browser to prevent white flashes, since about:blank seems to always be white
-                        CordovaBrowser.Opacity = 0d; 
-                        CordovaBrowser.Navigate(new Uri("about:blank", UriKind.Absolute));
-                        break;
-                }
-            }
-            else
-            {
-                if (configHandler.IsPluginAllowed(commandCallParams.Service))
-                {
-                    commandCallParams.Namespace = configHandler.GetNamespaceForCommand(commandCallParams.Service);
-                    nativeExecution.ProcessCommand(commandCallParams);
-                }
-                else
-                {
-                    Debug.WriteLine("Error::Plugin not allowed in config.xml. " + commandCallParams.Service);
-                }
-            }
-        }
-
-        public void LoadPage(string url)
-        {
-            if (this.configHandler.URLIsAllowed(url))
-            {
-                this.CordovaBrowser.Navigate(new Uri(url, UriKind.RelativeOrAbsolute));
-            }
-            else
-            {
-                Debug.WriteLine("Oops, Can't load url based on config.xml :: " + url);
-            }
-        }
-
-        private void CordovaBrowser_Unloaded(object sender, RoutedEventArgs e)
-        {
-            IBrowserDecorator console;
-            if (browserDecorators.TryGetValue("ConsoleLog", out console))
-            {
-                ((ConsoleHelper)console).DetachHandler();
-            }
-
-            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);
-        }
-
-        private void CordovaBrowser_NavigationFailed(object sender, System.Windows.Navigation.NavigationFailedEventArgs e)
-        {
-            Debug.WriteLine("CordovaBrowser_NavigationFailed :: " + e.Uri.ToString());
-        }
-
-        private void CordovaBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
-        {
-           foreach(IBrowserDecorator iBD in browserDecorators.Values)
-           {
-               iBD.InjectScript();
-           }
-        }
-
-        /// <summary>
-        /// Converts hex color string to a new System.Windows.Media.Color structure.
-        /// If the hex is only rgb, it will be full opacity.
-        /// </summary>
-        protected Color ColorFromHex(string hexString)
-        {
-            string cleanHex = hexString.Replace("#", "").Replace("0x", "");
-            // turn #FFF into #FFFFFF
-            if (cleanHex.Length == 3)
-            {
-                cleanHex = "" + cleanHex[0] + cleanHex[0] + cleanHex[1] + cleanHex[1] + cleanHex[2] + cleanHex[2];
-            }
-            // add an alpha 100% if it is missing
-            if (cleanHex.Length == 6)
-            {
-                cleanHex = "FF" + cleanHex;
-            }
-            int argb = Int32.Parse(cleanHex, NumberStyles.HexNumber);
-            Color clr = Color.FromArgb((byte)((argb & 0xff000000) >> 0x18),
-                              (byte)((argb & 0xff0000) >> 0x10),
-                              (byte)((argb & 0xff00) >> 8),
-                              (byte)(argb & 0xff));
-            return clr;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/c74fdafa/wp8/template/cordovalib/IBrowserDecorator.cs
----------------------------------------------------------------------
diff --git a/wp8/template/cordovalib/IBrowserDecorator.cs b/wp8/template/cordovalib/IBrowserDecorator.cs
deleted file mode 100644
index bc1dbee..0000000
--- a/wp8/template/cordovalib/IBrowserDecorator.cs
+++ /dev/null
@@ -1,30 +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 System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace WPCordovaClassLib.CordovaLib
-{
-    interface IBrowserDecorator
-    {
-        WebBrowser Browser { get; set; }
-        void InjectScript();
-        bool HandleCommand(string cmd);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/c74fdafa/wp8/template/cordovalib/ImageExifHelper.cs
----------------------------------------------------------------------
diff --git a/wp8/template/cordovalib/ImageExifHelper.cs b/wp8/template/cordovalib/ImageExifHelper.cs
deleted file mode 100644
index 62b6462..0000000
--- a/wp8/template/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;
-        }
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/c74fdafa/wp8/template/cordovalib/JSON/JsonHelper.cs
----------------------------------------------------------------------
diff --git a/wp8/template/cordovalib/JSON/JsonHelper.cs b/wp8/template/cordovalib/JSON/JsonHelper.cs
deleted file mode 100644
index 44511f6..0000000
--- a/wp8/template/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;
-
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/c74fdafa/wp8/template/cordovalib/MimeTypeMapper.cs
----------------------------------------------------------------------
diff --git a/wp8/template/cordovalib/MimeTypeMapper.cs b/wp8/template/cordovalib/MimeTypeMapper.cs
deleted file mode 100644
index a2794f5..0000000
--- a/wp8/template/cordovalib/MimeTypeMapper.cs
+++ /dev/null
@@ -1,101 +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"},
-                                                                                 {"html","text/html"},                                                                              
-                                                                                 {"jpe", "image/jpeg"},
-                                                                                 {"jpeg", "image/jpeg"},
-                                                                                 {"jpg", "image/jpeg"},     
-                                                                                 {"js","text/javascript"},                                                                         
-                                                                                 {"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;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/c74fdafa/wp8/template/cordovalib/NativeExecution.cs
----------------------------------------------------------------------
diff --git a/wp8/template/cordovalib/NativeExecution.cs b/wp8/template/cordovalib/NativeExecution.cs
deleted file mode 100644
index 18ca910..0000000
--- a/wp8/template/cordovalib/NativeExecution.cs
+++ /dev/null
@@ -1,259 +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.Collections.Generic;
-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>
-        /// List of commands with attached handlers
-        /// </summary>
-        private List<BaseCommand> commands;
-
-        /// <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;
-            this.commands = new List<BaseCommand>();
-            webBrowser.Unloaded += webBrowser_Unloaded;
-        }
-
-        /// <summary>
-        /// Detaches event handlers to prevent memory leak on page navigation
-        /// </summary>
-        void webBrowser_Unloaded(object sender, RoutedEventArgs e)
-        {
-            for (int i = commands.Count - 1; i >= 0; i--)
-            {
-                if (commands[i] != null)
-                {
-                    commands[i].DetachHandlers();
-                }
-            }
-        }
-
-        /// <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, commandCallParams.Namespace);
-
-                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);
-                        commands.Add(bc);
-                    }
-                    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;
-                    }
-                };
-
-                new Thread(methodInvokation).Start();
-
-            }
-            catch (Exception ex)
-            {
-                // ERROR
-                Debug.WriteLine(String.Format("ERROR: Unable to execute command :: {0}:{1}:{2} ",
-                    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

http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/c74fdafa/wp8/template/cordovalib/OrientationHelper.cs
----------------------------------------------------------------------
diff --git a/wp8/template/cordovalib/OrientationHelper.cs b/wp8/template/cordovalib/OrientationHelper.cs
deleted file mode 100644
index 299f9dd..0000000
--- a/wp8/template/cordovalib/OrientationHelper.cs
+++ /dev/null
@@ -1,131 +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;
-using WPCordovaClassLib.CordovaLib;
-
-namespace WPCordovaClassLib.Cordova
-{
-    public class OrientationHelper : IBrowserDecorator
-    {
-        public WebBrowser Browser { get; set; }
-
-        public PhoneApplicationPage Page
-        {
-            get
-            {
-                PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
-                if (frame != null)
-                {
-                    return frame.Content as PhoneApplicationPage;
-                }
-                return null;
-            }
-        }
-
-        // private PageOrientation CurrentOrientation = PageOrientation.PortraitUp;
-        //private PageOrientation[] SupportedOrientations; // TODO:
-
-        public void InjectScript()
-        {
-            int i = 0;
-
-            switch (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;
-            }
-            string jsCallback = String.Format("window.orientation = {0};", i);
-
-            try
-            {
-                Browser.InvokeScript("eval", new string[] { 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
-            {
-
-                Browser.InvokeScript("eval", new string[] { jsCallback });
-
-                jsCallback = "var evt = document.createEvent('HTMLEvents');";
-                jsCallback += "evt.initEvent( 'orientationchange', true, false );";
-                jsCallback += "window.dispatchEvent(evt);";
-                jsCallback += "if(window.onorientationchange){window.onorientationchange(evt);}";
-
-                Browser.InvokeScript("eval", new string[] {jsCallback});
-            }
-            catch (Exception)
-            {
-            }
-        }
-
-        public bool HandleCommand(string commandStr)
-        {
-            // No commands are currently accepted.
-            return true;
-        }
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/c74fdafa/wp8/template/cordovalib/PluginResult.cs
----------------------------------------------------------------------
diff --git a/wp8/template/cordovalib/PluginResult.cs b/wp8/template/cordovalib/PluginResult.cs
deleted file mode 100644
index 00017d2..0000000
--- a/wp8/template/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();
-        }
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/c74fdafa/wp8/template/cordovalib/ScriptCallback.cs
----------------------------------------------------------------------
diff --git a/wp8/template/cordovalib/ScriptCallback.cs b/wp8/template/cordovalib/ScriptCallback.cs
deleted file mode 100644
index 05bba06..0000000
--- a/wp8/template/cordovalib/ScriptCallback.cs
+++ /dev/null
@@ -1,75 +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 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 };
-        }
-
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/c74fdafa/wp8/template/cordovalib/XHRHelper.cs
----------------------------------------------------------------------
diff --git a/wp8/template/cordovalib/XHRHelper.cs b/wp8/template/cordovalib/XHRHelper.cs
deleted file mode 100644
index 81256fe..0000000
--- a/wp8/template/cordovalib/XHRHelper.cs
+++ /dev/null
@@ -1,341 +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 System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Linq;
-using System.Text;
-using System.Windows;
-
-namespace WPCordovaClassLib.CordovaLib
-{
-    public class XHRHelper : IBrowserDecorator
-    {
-
-        public WebBrowser Browser { get; set; }
-        public PhoneApplicationPage Page { get; set; }
-
-        public void InjectScript()
-        {
-            string script = @"(function(win, doc) {
-
-    var __XHRShimAliases = {};
-
-    window.__onXHRLocalCallback = function (responseCode, responseText, reqId) {
-        if (__XHRShimAliases[reqId]){
-            var alias = __XHRShimAliases[reqId];
-            if (alias){
-                delete __XHRShimAliases[reqId];
-                if (responseCode == '200'){
-                    alias.onResult && alias.onResult(responseText);
-                    Object.defineProperty(alias, 'responseXML', {
-                        get: function () {
-                            return new DOMParser().parseFromString(this.responseText, 'text/xml');
-                        }
-                    });
-                } else {
-                    alias.onError && alias.onError(responseText);
-                }
-            }
-        }
-    };
-
-    var docDomain = null;
-    try {
-        docDomain = doc.domain;
-    } catch (err) {}
-
-    if (!docDomain || docDomain.length === 0) {
-
-        var aliasXHR = win.XMLHttpRequest;
-
-        var XHRShim = function() {};
-        win.XMLHttpRequest = XHRShim;
-        XHRShim.noConflict = aliasXHR;
-        XHRShim.UNSENT = 0;
-        XHRShim.OPENED = 1;
-        XHRShim.HEADERS_RECEIVED = 2;
-        XHRShim.LOADING = 3;
-        XHRShim.DONE = 4;
-        XHRShim.prototype = {
-            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;
-                        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;
-                            }
-                        });
-                        Object.defineProperty(this, 'response', {
-                            get: function() {
-                                return this.wrappedXHR.response;
-                            }
-                        });
-                        Object.defineProperty(this, 'responseType', {
-                            set: function(val) {
-                                return this.wrappedXHR.responseType = val;
-                            }
-                        });
-                        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
-                {
-                    this.isAsync = isAsync;
-                    this.reqType = reqType;
-                    this._url = uri;
-                }
-            },
-            statusText: '',
-            changeReadyState: function(newState) {
-                this.readyState = newState;
-                if (this.onreadystatechange) {
-                    // mimic simple 'readystatechange' event which should be passed as per spec
-                    var evt = {type: 'readystatechange', target: this, timeStamp: new Date().getTime()};
-                    this.onreadystatechange(evt);
-                }
-                if (this.readyState == XHRShim.DONE){
-                    this.onload && this.onload();
-                }
-            },
-            addEventListener: function (type, listener, useCapture){
-                if (this.wrappedXHR) {
-                    this.wrappedXHR.addEventListener(type, listener, useCapture);
-                } else {
-                    this['on' + type] = listener;
-                }
-            },
-            removeEventListener: function (type, listener, useCapture){
-                if (this.wrappedXHR) {
-                    this.wrappedXHR.removeEventListener(type, listener, useCapture);
-                } else {
-                    if (this['on' + type] == listener) { // if listener is currently used
-                        delete this['on' + type];
-                    }
-                }
-            },
-            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() : '';
-            },
-            overrideMimeType: function(mimetype) {
-                return this.wrappedXHR ? this.wrappedXHR.overrideMimeType(mimetype) : '';
-            },
-            responseText: '',
-            responseXML: '',
-            onResult: function(res) {
-                this.status = 200;
-                if (typeof res == 'object') {
-                    res = JSON.stringify(res);
-                }
-                this.responseText = res;
-                this.responseXML = res;
-                this.changeReadyState(XHRShim.DONE);
-            },
-            onError: function(err) {
-                this.status = 404;
-                this.changeReadyState(XHRShim.DONE);
-            },
-            abort: function() {
-                if (this.wrappedXHR) {
-                    return this.wrappedXHR.abort();
-                }
-            },
-            send: function(data) {
-                if (this.wrappedXHR) {
-                    return this.wrappedXHR.send(data);
-                }
-                else {
-                    this.changeReadyState(XHRShim.OPENED);
-                    var alias = this;
-
-                    var root = window.location.href.split('#')[0];   // remove hash
-                    
-                    var rootPath = root.substr(0,root.lastIndexOf('/')) + '/';
-                    // Removing unwanted slashes after x-wmapp0 from the basePath, URI cannot process x-wmapp0: /www or //www
-                    var basePath = rootPath.replace(/:\/+/gi, ':');
-
-                    //console.log( 'Stripping protocol if present and removing leading / characters' );
-                    var resolvedUrl =
-                            // remove protocol from the beginning of the url if present
-                            ( this._url.indexOf( window.location.protocol ) === 0 ?
-                                this._url.substring( window.location.protocol.length ) :
-                                this._url )
-                            // get rid of all the starting slashes
-                            .replace(/^[/]*/, '')
-                            .split('#')[0]; // remove hash
-
-                    var wwwFolderPath = navigator.userAgent.indexOf('MSIE 9.0') > -1 ? 'app/www/' : 'www/';
-
-                    // handle special case where url is of form app/www but we are loaded just from /www
-                    if( resolvedUrl.indexOf('app/www') == 0 ) {
-                        resolvedUrl = window.location.protocol  + wwwFolderPath + resolvedUrl.substr(7);
-                    }
-                    else if( resolvedUrl.indexOf('www') == 0) {
-                        resolvedUrl = window.location.protocol  + wwwFolderPath + resolvedUrl.substr(4);
-                    }
-
-                    if(resolvedUrl.indexOf(':') < 0) {
-                        resolvedUrl = basePath + resolvedUrl; // consider it relative
-                    }
-
-                    // Generate unique request ID
-                    var reqId = new Date().getTime().toString() + Math.random();
-
-                    var funk = function () {
-                        __XHRShimAliases[reqId] = alias;
-
-                        alias.changeReadyState(XHRShim.LOADING);
-                        window.external.Notify('XHRLOCAL/' + reqId + '/' + resolvedUrl);
-                    };
-
-                    this.isAsync ? setTimeout(funk, 0) : funk();
-                }
-            },
-            status: 404
-        };
-    }
-})(window, document); ";
-
-
-            Browser.InvokeScript("eval", new string[] { script });
-        }
-
-        public bool HandleCommand(string commandStr)
-        {
-            if (commandStr.IndexOf("XHRLOCAL") == 0)
-            {
-                var reqStr = commandStr.Replace("XHRLOCAL/", "").Split(new char[] {'/'}, 2);
-                string reqId = reqStr[0];
-                string url = reqStr[1];
-
-                Uri uri = new Uri(url, UriKind.RelativeOrAbsolute);
-                try
-                {
-                    using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
-                    {
-                        if (isoFile.FileExists(uri.AbsolutePath))
-                        {
-                            using (TextReader reader = new StreamReader(isoFile.OpenFile(uri.AbsolutePath, FileMode.Open, FileAccess.Read)))
-                            {
-                                string text = reader.ReadToEnd();
-                                Browser.InvokeScript("__onXHRLocalCallback", new string[] { "200", text, reqId });
-                                return true;
-                            }
-                        }
-                    }
-                }
-                catch (Exception ex)
-                {
-                    Debug.WriteLine("ERROR: Exception in HandleCommand: " + ex);
-                }
-
-                Uri relUri = new Uri(uri.AbsolutePath, UriKind.Relative);
-
-                var resource = Application.GetResourceStream(relUri);
-                try
-                {
-                    if (resource == null)
-                    {
-                        // 404 ?
-                        Browser.InvokeScript("__onXHRLocalCallback", new string[] { "404", string.Empty, reqId });
-                        return true;
-                    }
-                    else
-                    {
-                        using (StreamReader streamReader = new StreamReader(resource.Stream))
-                        {
-                            string text = streamReader.ReadToEnd();
-                            Browser.InvokeScript("__onXHRLocalCallback", new string[] { "200", text, reqId });
-                            return true;
-                        }
-                    }
-                }
-                catch (Exception ex)
-                {
-                    Debug.WriteLine("ERROR: Exception in HandleCommand: " + ex);
-                }
-            }
-
-            return false;
-        }
-    }
-}