Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Need help with Ex 14-1 extra: Convert the Clock app to closures Open the HTML and JavaScript files in this folder: Note that the folder

Need help with Ex 14-1 extra: Convert the Clock app to closures

Open the HTML and JavaScript files in this folder:

Note that the folder contains two library files named library_clock.js and library_stopwatch.js. In the JavaScript file, youll see the variables, objects, and functions that provide all the functionality for the clock and stopwatch, but without using the libraries. Also note that the event library isnt used in this version of the application.

In the library_clock.js file, theres a start for a function called createClock. Note that this function has parameters for the span tags that display the clock in the page. In the library_stopwatch.js file, theres a start for a function called createStopwatch. Note that this function has parameters for the span tags that display the stopwatch in the page.

In the clock.js file, find the functions that run the clock and move them to the private state section of the library_clock.js file. Then, in the public methods section of the library file, code and return an object that contains a method named start that used the private state to start the clock. Adjust as needed to make this work.

In the clock.js file, find the variables, objects, and functions that run the stopwatch and move them to the private section of the library_stopwatch.js file. Then, in the public methods section, code and return an object that contains methods named start, stop, and reset that use the private state to start, stop, and reset the stopwatch. Adjust as needed to make this work.

Still in the clock.js file, re-write the remaining code so the onload event handler calls the functions in the library files, passes them the span tags they need, and uses the returned objects to start the clock and attach the stopwatch event handlers.

Files:

clock.css:

body { font-family: Arial, Helvetica, sans-serif; background-color: white; margin: 0 auto; width: 450px; border: 3px solid blue; padding: 0 2em 1em; } h1 { color: blue; } label { float: left; width: 11em; text-align: right; padding-bottom: .5em; } input { margin-right: 1em; margin-bottom: .5em; } fieldset { margin-bottom: 1em; }

clock.js:

"use strict"; var $ = function(id) { return document.getElementById(id); };

//global stop watch timer variable and elapsed time object var stopwatchTimer; var elapsed = { minutes:0, seconds:0, milliseconds:0 };

var displayCurrentTime = function() { var now = new Date(); var hours = now.getHours(); var ampm = "AM"; // set default value // correct hours and AM/PM value for display if (hours > 12) { // convert from military time hours = hours - 12; ampm = "PM"; } else { // adjust 12 noon and 12 midnight switch (hours) { case 12: // noon ampm = "PM"; break; case 0: // midnight hours = 12; ampm = "AM"; } } $("hours").firstChild.nodeValue = hours; $("minutes").firstChild.nodeValue = padSingleDigit(now.getMinutes()); $("seconds").firstChild.nodeValue = padSingleDigit(now.getSeconds()); $("ampm").firstChild.nodeValue = ampm; };

var padSingleDigit = function(num) { return (num < 10) ? "0" + num : num; };

var tickStopwatch = function() { // increment milliseconds by 10 milliseconds elapsed.milliseconds = elapsed.milliseconds + 10;

// if milliseconds total 1000, increment seconds by one and reset milliseconds to zero if (elapsed.milliseconds === 1000) { elapsed.seconds++; elapsed.milliseconds = 0; } // if seconds total 60, increment minutes by one and reset seconds to zero if (elapsed.seconds === 60) { elapsed.minutes++; elapsed.seconds = 0; }

//display new stopwatch time $("s_minutes").firstChild.nodeValue = padSingleDigit(elapsed.minutes); $("s_seconds").firstChild.nodeValue = padSingleDigit(elapsed.seconds); $("s_ms").firstChild.nodeValue = elapsed.milliseconds; };

// event handler functions var startStopwatch = function() { // do first tick of stop watch and then set interval timer to tick // stop watch every 10 milliseconds. Store timer object in stopwatchTimer // variable so next two functions can stop timer. tickStopwatch(); stopwatchTimer = setInterval(tickStopwatch, 10); };

var stopStopwatch = function() { // stop timer clearInterval(stopwatchTimer); };

var resetStopwatch = function() { // stop timer clearInterval(stopwatchTimer); // clear elapsed object and stopwatch display elapsed = { minutes:0, seconds:0, milliseconds:0 }; $("s_minutes").firstChild.nodeValue = "00"; $("s_seconds").firstChild.nodeValue = "00"; $("s_ms").firstChild.nodeValue = "000"; };

window.onload = function() { // set initial clock display and then set interval timer to display // new time every second. Don't store timer object because it // won't be needed - clock will just run. displayCurrentTime(); setInterval(displayCurrentTime, 1000); // set up stopwatch event handlers $("start").onclick = startStopwatch; $("stop").onclick = stopStopwatch; $("reset").onclick = resetStopwatch; };

index.html:

Clock

Digital clock with stopwatch

Clock

:

:

Stop Watch

00:

00:

000

library_clock.js:

"use strict";

var createClock = function(hourSpan, minuteSpan, secondSpan, ampmSpan) { // private state // public methods };

library_stopwatch.js:

"use strict";

var createStopwatch = function(minuteSpan, secondSpan, msSpan) { // private state // public methods };

Thanks!

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Modern Database Management

Authors: Jeffrey A. Hoffer Fred R. McFadden

9th Edition

B01JXPZ7AK, 9780805360479

More Books

Students also viewed these Databases questions

Question

Describe the new structures for the HRM function. page 676

Answered: 1 week ago

Question

* What is the importance of soil testing in civil engineering?

Answered: 1 week ago

Question

Explain the concept of shear force and bending moment in beams.

Answered: 1 week ago