This is an old revision of the document!


Lab 10. User Interface and User Experience

In this laboratory we will try to see different ways we can interact interact programmatically with the interface from javascript.

In order to do these exercises you will need a new phoengap project and the IoT template. Also, in order to make builds, you will need an adobe account to access phonegap build.

For starters we will need the following pages:

  • news (which will display some news)
  • chat (will allow the IoT app users to chat)
  • images (display a gallery of images uploaded by IoT App users)
  • sensors (interact with your boards)
  • templates (a page that should never be shown to the users which will contain copies of the HTML elements you need to use in the code)

Don't forget to give each page and ID and for testing purposes also write the name of the page inside the page. Eg:

<div id="news" data-role="page">
   news
</div>

Now that you've created the pages start linking them to the menu by creating buttons as shown in the course: Eg:

<li>
  <a href="#news">
    <i class="fa fa-newspaper-o"></i> News
  </a>
</li>

In your template you will find the close button already defined, so start creating your own buttons after that. Also try assigning a relevant icon to each menu item.

You should achieve an end result similar with the one presented in the course.

2) Inputs, buttons and message boxes

Alerts and Timing

The standard way to display a message box on the web is alert() for a notification base message box, confirm() for a yes/no answer message box.

The normal usage for the 2 is

alert("Welcome");
if( confirm('Are you human?') ){
  //code for yes
}else{
  //code for no
}

There is a problem with apple phones where they need a delay of at least 0ms (a delay of 0 might not make sense but it actually waits 1 event loop cycle which can be less than 1ms) in order to show alerts. This problem exist for more elements not just alerts. In javascript there are 2 main timing methods: setTimeout which delays a function and setInterval which run a function at set intervals.

var id_of_timer = setTimeout(callback, time); //  to create a delay
clearTimeout(id_of_timer); // to delete the delay before it actually runs

var id_of_timer = setInterval(callback, time); //  to create an interval
clearInterval(id_of_timer); // to delete the interval

the callback can be the name of a function,method created before or an anonymous function crated in place:

setTimeout(show_alert,0);

or

setTimeout(function(){
  alert("Hello");
},0);

This is true for any callbacks in javascript. You can always either point to a method/function or create a new one on the spot.

CSS selectors,input boxes and values

jQuery (and javascript in general, we use jQuery for simplification) allows us to access elements by providing a css selector towards them. The selection can result 0,1 or more elements.

A css selector can select elements based on tag,id,class,attributes and many other constraints, but we will stick to tag id and class here. An html/xml node in general looks like

<tag_name id="id" class="class1 class2 class3" attr1="attr1 value" attr2="attr2 value">
  html content
</tag_name>

Even if browsers allow you to give the same id to multiple elements, each id needs to be unique for things to work properly. In order to select a certain element the selector can be:

tag_name#id.class
 

but each part can be omitted. In this case for example since the id is already unique there is no need to mention the tag_name and the class so

#id

should suffice.

Also in order to select certain children we can use ”>” or ” ” (black space) where

#id>div /*selects all the divs that are direct children of the tag with id #id*/
#id div /*selects all the divs that are children(including grandchildren) of the tag with id #id*/

For a complete list of CSS selectors check here.

In order to select an element from javascript

$(cssSelector as string); // EG $("#username")

This call returns a jQuery object on which we can use jQuery methods to modify the HTML node.

In order to retrieve or change the contents of a javascript element we can muse the .html() jQuery method.

<div id="example">
  <p>Example</p>
</div>

For the above code:

$("#example").html(); //would return  <p>Example</p>
$("#example").html("hi");
/* would change the node too
   <div id="example">
     hi
   </div>
*/

Now, let's go to the chat page and create some interactive input boxes and buttons. Since this page will represent a chat box we need to divide our space in 2:

  • top part = diplaying the messages
  • bottom part allowing user to send messages

In order to do that just copy the following code into your page

<div id="chat_controls">
</div>
<div id="chat_box">
</div>

Now add to chat controls 2 input text boxes and a button. The code for generating an input box in html is

<input type="text">

give the first input id username and the 2nd one id msg. After the 2 inputs include a button from the ones offered by the template.

The javasript will be written in teh index.js file (it can be written anywhere but in general event handling should be broken apart from design). The general structure of an phoengap app is an app object containing properties and methods. The properties are used to store data and states of the apps while the methods are usuall used for events. Your send button should be accessible by the

$("chat_controls>button") //cause there should be only one button

So in order to keep with the phonegap app structure instead of writing the whole code in bindEvents we should link a chatSend event.

app={
  bindEvents: function(){
    
    ...other event binding code here ...
    
    $("chat_controls>button").click(app.chatSend); //this jQuery method links 
    // the given function/method to the click event
    // click events can be linked to any html elemtns and not just buttons
  },
  chatSend:function(){
    //code for chatSend here
  }
  
}
iot/labs/10.1435566506.txt.gz · Last modified: 2015/06/29 11:28 by avner.solomon
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0