<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Making a page counter in Xerte 1.8</TITLE>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.6000.16544" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
color=#0000ff size=2>Thanks for the tip on using the XML nodes. I no longer need 
the Time Limit interaction. I would like to make my script more generic, so that 
I don't need to refer to any specific icon ids, but I haven't found the right 
property or method to determine the index position of the current node. Is there 
an analog to childIndex() [which is an AS3 method for XMLNode] that I can 
use?</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
color=#0000ff size=2>I currently use this to print "Slide x of 
y":</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
size=2>slideCounter.setText('Slide ' + (prereqs.currentPage + 1) + ' of ' + 
(icon.parentNode.parentNode.childNodes.length - 1));</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
color=#0000ff size=2>-- note that <EM>prereqs</EM> is the id of my framework 
icon.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
color=#0000ff size=2>and I would like to make something like 
this:</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
size=2>slideCounter.setText('Slide ' + (icon.parentNode.parentNode.childIndex() 
+ 1) + ' of ' + (icon.parentNode.parentNode.childNodes.length - 
1));</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
color=#0000ff size=2>Thanks,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=676495018-30102007><FONT face=Verdana 
color=#0000ff size=2>Paul</FONT></SPAN></DIV><BR>
<BLOCKQUOTE dir=ltr 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> xerte-bounces@lists.nottingham.ac.uk 
  [mailto:xerte-bounces@lists.nottingham.ac.uk] <B>On Behalf Of </B>Tenney 
  Julian<BR><B>Sent:</B> Tuesday, October 30, 2007 1:52 AM<BR><B>To:</B> Xerte 
  discussion list<BR><B>Subject:</B> RE: [Xerte] Making a page counter in Xerte 
  1.8 - Solved<BR></FONT><BR></DIV>
  <DIV></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>Paul,</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>You're really getting into the innards of things here. 
  The reason is this. The .rlo is a hierarchical xml file. The engine parses it, 
  by looping through each node, then all of it's children, and so on, and then 
  on to the next node. As it encounters each node it says 'what have&nbsp;I got 
  here? Oh, a&nbsp;node that defines a Graphic icon - better add a graphic to 
  the screen. What's next?"</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>So, when you execute code in page one, page two doesn't 
  exist yet.</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>Each icon can be thought of as two things: the xmlNode in 
  the rlo file, and the resulting MovieClip on the stage. Each MovieClip keeps a 
  reference to it's corresponding XML node, in the .XMLElement property. This 
  can be useful sometimes.</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>Also, note that the XML file is fully loaded before it is 
  parsed. So whilst rootIcon.pages.length will be 1 in the first page (because 
  the parser hasn't added the other pages yet), 
  icon.parentNode.childNodes.length WILL contain the right number of children 
  for the framework. Alternatively rootIcon.XMLElement.childNodes.length will do 
  the same thing. Sometimes it is more convenient to use the XML to figure 
  things out than the MovieClips. You always have all of the XML. You don't 
  always have all of the MovieClips (items inside an interaction response for 
  example).</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>This brings us to an important point for the more 
  hardcore Xerte developer. Because the XML hasn't finished parsing, you can 
  manipulate it at runtime before it is parsed to create dynamic pieces on the 
  fly. Try a script before a text icon that sets it's 
  attributes:</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>icon.nextSibling.attributes.x = 100; //when the parser 
  parses the next icon, it will create the movieclip with _x = 
  100;</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>A real world appliaction of this might be something like 
  a dynamic layout:</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>if (align == 'left'){</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>&nbsp; icon.nextSibling.attributes.x = 
  20;</FONT></SPAN></FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>} else {</FONT></SPAN></DIV><SPAN 
  class=689493108-30102007><FONT face=Verdana color=#0000ff size=2>&nbsp; 
  icon.nextSibling.attributes.x = 400;</FONT></SPAN> 
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>}</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>Of course, you could position the MovieClips with a 
  script after them as well. There are some things that are much more convenient 
  to do on the XML though, for instance adding dragItems to a target area 
  response. You might not know ahead of time how many items to add, or what 
  their IDs are.</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>So, you have a script above a graphic above an 
  interaction with a target area on it. You can create as many graphics as you 
  need:</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>icon.nextSibling.duplicate(numOfItems - 1);//because you 
  already have the first one. Do something similar to set the url attribute to 
  load different images</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>//now set their IDs and build a string for drag 
  items</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>dragItemsStr = "";</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>for (i = 0; i &lt; numOfItems; i++){</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>&nbsp; icon.parentNode.childNodes[i+i].attributes.id = 
  'item' + i;</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>&nbsp; dragItemsStr += "item" + i + 
  ",snap,0~";</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>}</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV dir=ltr align=left><SPAN class=689493108-30102007><FONT face=Verdana 
  color=#0000ff size=2>//now set the dragItems attribute of the target area's 
  xml node before it is parsed</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><FONT face=Verdana><FONT size=2><FONT 
  color=#0000ff><SPAN 
  class=689493108-30102007>icon.parentNode.lastChild.firstChild.attributes.dragItems 
  = dragItemsStr;</SPAN></FONT></FONT></FONT></DIV>
  <DIV dir=ltr align=left><FONT face=Verdana><FONT size=2><FONT 
  color=#0000ff><SPAN class=689493108-30102007></SPAN><SPAN 
  class=689493108-30102007></SPAN><SPAN 
  class=689493108-30102007></SPAN></FONT></FONT></FONT>&nbsp;</DIV>
  <DIV><SPAN class=689493108-30102007><FONT face=Verdana color=#0000ff 
  size=2>This technique opens up VERY powerful possibilities, akin to creating 
  Authorware icons at runtime, particuarly when loading a seperate XML file to 
  drive a template.</FONT></SPAN></DIV>
  <DIV><SPAN class=689493108-30102007><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=689493108-30102007><FONT face=Verdana color=#0000ff 
  size=2>Have fun,</FONT></SPAN></DIV>
  <DIV><SPAN class=689493108-30102007><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=689493108-30102007><FONT face=Verdana color=#0000ff 
  size=2>Julian</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><BR></DIV>
  <BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
    <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
    <HR tabIndex=-1>
    <FONT face=Tahoma size=2><B>From:</B> xerte-bounces@lists.nottingham.ac.uk 
    [mailto:xerte-bounces@lists.nottingham.ac.uk] <B>On Behalf Of </B>Paul 
    Swanson<BR><B>Sent:</B> 29 October 2007 21:21<BR><B>To:</B> Xerte discussion 
    list<BR><B>Subject:</B> RE: [Xerte] Making a page counter in Xerte 1.8 - 
    Solved<BR></FONT><BR></DIV>
    <DIV></DIV>
    <DIV dir=ltr align=left><SPAN class=718261921-29102007><FONT face=Arial 
    color=#0000ff size=2>Correction: it is a Time Limit interaction, not Tries 
    Limit. (But you probably already guessed that...)</FONT></SPAN></DIV><BR>
    <BLOCKQUOTE dir=ltr 
    style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
      <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
      <HR tabIndex=-1>
      <FONT face=Tahoma size=2><B>From:</B> xerte-bounces@lists.nottingham.ac.uk 
      [mailto:xerte-bounces@lists.nottingham.ac.uk] <B>On Behalf Of </B>Paul 
      Swanson<BR><B>Sent:</B> Monday, October 29, 2007 2:10 PM<BR><B>To:</B> 
      Xerte discussion list<BR><B>Subject:</B> RE: [Xerte] Making a page counter 
      in Xerte 1.8 - Solved<BR></FONT><BR></DIV>
      <DIV></DIV>
      <DIV dir=ltr align=left><SPAN class=741500721-29102007><FONT face=Arial 
      color=#0000ff size=2>It seems to be a timing issue. I added a 0.1 second 
      Tries Limit interaction before the script that prints the counter on the 
      first page, and it correctly prints the number of pages in the 
      framework.</FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN class=741500721-29102007><FONT face=Arial 
      color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
      <DIV dir=ltr align=left><SPAN class=741500721-29102007><FONT face=Arial 
      color=#0000ff size=2>- Paul</FONT></SPAN></DIV><BR>
      <BLOCKQUOTE dir=ltr 
      style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
        <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
        <HR tabIndex=-1>
        <FONT face=Tahoma size=2><B>From:</B> 
        xerte-bounces@lists.nottingham.ac.uk 
        [mailto:xerte-bounces@lists.nottingham.ac.uk] <B>On Behalf Of </B>Paul 
        Swanson<BR><B>Sent:</B> Monday, October 29, 2007 1:48 PM<BR><B>To:</B> 
        xerte@lists.nottingham.ac.uk<BR><B>Subject:</B> [Xerte] Making a page 
        counter in Xerte 1.8<BR></FONT><BR></DIV>
        <DIV></DIV><!-- Converted from text/rtf format -->
        <P><FONT face=Arial size=2>I've been working on creating a page counter 
        within a Framework, and when you get to the first page of the framework, 
        the total number of pages isn't calculating correctly.</FONT></P>
        <P><FONT face=Arial size=2>I have an empty text icon with an ID of 
        'slideCounter' that is in the Entry Frame of the framework. The 
        framework ID is dbInst. I am placing the following code in a script icon 
        on each page (not in the Entry Frame):</FONT></P>
        <P><FONT face="Lucida Console" size=2>slideCounter.setText('Slide ' + 
        (dbInst.currentPage + 1) + ' of ' + dbInst.pages.length);</FONT> </P>
        <P><FONT face=Arial size=2>On the first page of the framework, this 
        prints 'Slide 1 of 1'. Moving to the second page, it correctly prints 
        'Slide 2 of 20' and returning to the previous page, it prints 'Slide 1 
        of 20' -- so it isn't giving the correct value for the length of the 
        pages array on the first pass, but correctly does so after that. And if 
        that wasn't strange enough, if I use Ctrl+F5 to open Page 1, it displays 
        the correct values, but if I navigate to this framework from the page 
        prior to it (or use Ctrl+F5 with the Framework icon selected), it 
        displays the incorrect value.</FONT></P>
        <P><FONT face=Arial size=2>Is there a better way to do this?</FONT> </P>
        <P><FONT face="Courier New" color=#808080 
        size=2>_____________________________</FONT> </P>
        <P><FONT face="Courier New" color=#808080 size=2>&nbsp;Paul 
        Swanson</FONT> <BR><FONT face="Courier New" color=#808080 
        size=2>&nbsp;Harland Financial Solutions</FONT> <BR><FONT 
        face="Courier New" color=#808080 
        size=2>_____________________________</FONT> 
  </P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>