I said that CSS would come in early, but the first thing to discuss in migrating the Here My Am! files from my existing Windows Store app project to a Cordova project. For this I'm just starting with the HereMyAm2a code from Chapter 2 of my free ebook. And in fact I'll keep it simple for starters and just migrate the HTML and CSS, leaving off the JS code for now.
Preliminary notes/build environment
Although I'd started working on a universal Windows app migration for this project, it's not a necessary step for working with Cordova, because it also produces cross-platform apps that will work on Windows and Windows Phone alike, as well as iOS and Android. With Cordova, you let plugins worry about platform-specific things–you don't want that kind of code in your project.
In addition, it's helpful to know that you don't need a Mac as a build server to work with Cordova until you really want to produce an app for the store. With the Visual Studio extension installed, you can run a Cordova app directly in the Ripple emulator , which is very cool in that you can switch between devices, resolutions, and orientations (including between target platforms) much like Blend for Visual Studio does for Windows, so you can see just how (badly) your CSS is performing.
For myself, I'm working on a Surface Pro 3 as my main machine, have a Windows Phone hanging off it, have an Asus MemoPad7 as an Android dev device, which I wrote about recently. My team has a Mac laptop set up in one of my co-worker's offices as a build server (also for Xamarin) which I can get to over VPN to the Microsoft corpnet from my home office…pretty cool!
|Windows Project File||Cordova Project File|
|default.html||index.html (This is the default; you can use default.html if you change the start page in config.xml)|
|js/default.js||scripts/index.js (didn't migrate the code yet; the project template uses scripts instead of js as a folder…I might change this later)|
|package.appxmanifest||config.xml (the Cordova generic manifest)|
|html/map.html||html/map.html (there is no default html folder, so I created one just to hold this file for the time being)|
|images/taphere.scale-100.png||images/taphere.png; I'll be switching to draw this with a canvas later on, so it's just a placeholder.|
|images/<logos>||Not migrated yet as these need to be specific for each platform, whcih I haven't done yet.|
WinJS is not a cross-platform, open-source library, an instead of having it in the project references I downloaded WinJS 3.0 and brought it directly into the project:
I don't know how much of WinJS I'll be using, but given that I have lots of experience in this area, it seemed like a good opportunity to keep up! Plus the ui-dark.css has styling that I'm used to with this app. We'll see how it goes.
|The project template also includes a merges folder for platform-specific code, and a res folder for resources that I'll get to later on.|
With this migrated project, I fixed up the references in index.html to bring in the appropriate files:
<link href="css/frameworks/ui-dark.css" rel="stylesheet" /> <link href="css/index.css" rel="stylesheet" /> <!-- Cordova standard --> <script src="cordova.js"></script> <!-- WinJS --> <script src="scripts/frameworks/base.js"></script> <script src="scripts/frameworks/ui.js"></script> <script src="scripts/frameworks/winjs.js"></script> <!-- Project references --> <script src="scripts/platformOverrides.js"></script> <script src="scripts/index.js"></script>
Note: in a Windows project, especially with WinJS page controls, it's usually helpful to prefix all references with a leading /. You do not want to do this with Cordova because it doesn't work. I'll have to see what happens later on when I try using page controls.
Note also that you need the reference to cordova.js even though it doesn't exist in your project.
With my script/css references fixed up, I just use the same markup as before in index.html:
<body> <div id="mainContent"> <header id="header" aria-label="Header content" role="banner"> <h1 class="titlearea "> <span class="pagetitle">Here My Am!</span> </h1> </header> <section id="section" aria-label="Main content" role="main"> <div id="photoSection" class="subsection" aria-label="Photo section"> <h2 class="group-title" role="heading">Photo</h2> <img id="photo" class="graphic" src="images/taphere.png" alt="Tap to capture image from camera" role="img" /> </div> <div id="locationSection" class="subsection" aria-label="Location section"> <h2 class="group-title" role="heading">Location</h2> <div id="map" class="graphic" aria-label="Map"></div> </div> </section> </div> </body>