Our main goals are to understand and demonstrate knowledge:
This example program from JsObjects should help you get started:
A few of the slides near the beginning of this deck might prove useful:
And don't forget the elvenware jQuery page.
I don't care much how the page looks, but mine looks like this:
I use gravatar to manage my picture.
You should use mixins for all, or nearly all, the elements that use bootstrap. For instance, you should use mixins for these bootstrap elements:
When you add items to the list-group, do it like this:
$("#jsonDisplay").append('' + etc...
The version of Bootstrap that you use is important. My bower file looks like this:
{
"name": "seltest",
"version": "0.0.1",
"ignore": [
"**/.*",
"node_modules",
"components"
],
"dependencies": {
"bootstrap": "~3.3.2"
}
}
You can see that I'm using 3.3.2 bootstrap. That brought with it, automatically, jquery. It is version 2.1.3. Here is the header for that version of jquery.js:
/*!
* jQuery JavaScript Library v2.1.3
* http://jquery.com/
*
* Includes Sizzle.js
* http://sizzlejs.com/
*
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2014-12-18T15:11Z
*/
It is not necessarily important that you have those exact versions, but you should have versions that work well together. If you screen looks like the image shown below, then something is wrong, and one likely candidate is the versions of bootstrap that you are loading. In particular, the image below is what things look like if no CSS has been applied to the web page.
You are looking at plain, default HTML with no CSS. Below you can see what the menu should look like.
Here are the IDs for a number of the controls used in the program.
##Menus on Each Page {#menus}
Each page should have a copy of the menu. For instance, there will be three jade files involved in composing each page. They are named like this
layout.jade : headers
The menu in: menu-mix-in.jade
The new page in index.jade, or in about.jade, etc.
And of course at least the last two pages will both have mixins.jade in it. I gave you a new copy of mixins.jade in the JadeMixinsComplete project.
There is a hierarchy in the three files used to compose each page:
For instance, top of menu-mix-in.jade, might look like this:
extends layout
include mixins
The top of index.jade and your JsonAjax page might look like this:
extends menu-mix-in
block append content
NOTE: If you decide to use mixins in layout.jade then you should move the include statement back to the top of layout.jade.
I gave you the actual menu to use during the in-class assignment on Thursday. You also saw the code for high-lighting the menus.
You need to create a new page for displaying a list of the loaded JSON. It should look like this:
Here we are using a bootstrap list-group to display the scientists names. We have a mixin for this as described above.
One of the trickier parts of unit tests, perhaps, is handling ajax calls. Please see these resources.
In your tests, you may optionally continue to use the HTML for MainCode.html generated for the jQuery assignment. The underlying structure of the program has not really changed structure very much, so it is semi-acceptable to do that. Even though we have split the program into two pages, we can, at least for now, continue to pretend in our tests that it is all one page. Please check back here for possible updates on this issue.
I originally taught you to put code to load Control.js and other files at the top MainCode.html. I knew that was strange from the start, but it has taken me a long time to see the problem. Here is what you should do.
Here is what it looks like, minus a few details such as the getAjax method:
function errorHandler(jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
$('#debug').html("Request Failed: " + err);
}
function getJson(callback) {
var result = $.getJSON('./Presidents.json', callback);
result.fail(errorHandler);
}
function initialize() {
// place all the code from document ready here.
// This is mostly the jquery onClick handlers that begin $("#...
}
$(document).ready(function() {
initialize();
});
At the top of the tests I gave you, add a call to initialize after MainCode.html has been loaded:
beforeEach(function (done) {
$('#mainArea').load('./MainCode.html', function() {
initialize(); // << Add this call
$("#insertMale").trigger('click');
$("#getFirstName").trigger("click");
$("#getAge").trigger("click");
$("#getCityStateZip").trigger("click");
done();
});
});
Now you can load jquery and your css in index.html:
The point is that we have to initialize the onclick methods after we have loaded the HTML. JQuery does not know how to connect your on click methods to your HTML unless the HTML is already loaded. So first we load MainCode.html, then we ask jquery to connect you onclick events to the HTML by writing code like this:
$('#getJson').click(function() {
getJson(display);
});
Its these types of methods that need to be in initialize. You should have a good number of them.
Once you are done, you no longer need to paste any script or link tags at the top of MainCode.html
For more guidance, see the MochaIntegrationTests from JsObjects.
To start the application, type: grunt. This does two things:
See these parts of Gruntfiles.js:
grunt.registerTask('delayed-livereload', 'Reload after server start.', function () {
etc...
grunt.registerTask('default', [
'develop',
'watch'
]);
And in package.json we load watch and grunt-develop:
"devDependencies": {
"grunt": "~0.4.5",
"grunt-develop": "~0.4.0",
"grunt-contrib-watch": "~0.6.1",
etc...
}
The point here is that you can configure Grunt to do all kinds of background tasks during development.
##Turn it in
Place your work in a folder called Week08-Midterm. Include screenshots of the main pages of your application. This time I would prefer for you to attach the screenshots to the assignment when you submit. Put the project in your repository, and attach the screen shots to your assignment.
Screenshots:
Summary (Thanks to Mr. Yee):