<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="Super Lame Game" author_email="hi5@innate.net">
  <Require feature="opensocial-0.7" />
  <Require feature="views"/>
</ModulePrefs>
<Content type="html" view="profile"><![CDATA[
<script type="text/javascript" src="http://ostemplates-demo.appspot.com/ostemplates.js"></script>
<script type="text/javascript">

function fetchData(callback) {
  var req = opensocial.newDataRequest();

  req.add(req.newFetchPersonRequest('OWNER'), 'Owner');
  req.add(req.newFetchPersonAppDataRequest('OWNER', 'score'), 'OwnerScore');
  req.send(function(data) {
    callback(data);
  });
}
  
function setScores(data) {
  var owner = data.get('Owner').getData();
  var ownerScore = Number(data.get('OwnerScore').getData()[owner.getId()].score) || '0';
  owner.fields_.score = ownerScore;
}

function drawit(data) {
  setScores(data);
  os.Container.processDocument(data);
}
gadgets.util.registerOnLoadHandler(function() {
  fetchData(drawit);
});

</script>

<script type="text/os-template">
  ${Owner.displayName}'s lameness rating is:
  <br/>
  <os:LameFactor score="${Owner.score}"/>
  <br/>
  <a href="#" onclick="gadgets.views.requestNavigateTo(gadgets.views.getSupportedViews()['canvas']); return false;">Try it!</a>
</script>
]]></Content>
<Content type="html" view="canvas"><![CDATA[
<script type="text/javascript" src="http://ostemplates-demo.appspot.com/ostemplates.js"></script>
<script type="text/javascript">
// Fix for 0 value = ""
os.setIdentifierResolver(function(object, name) {
  // Simple property from object.
  if (typeof(object[name]) != "undefined") {
    return object[name];
  }

  // JavaBean-style getter method.
  var functionName = os.getPropertyGetterName(name);
  if (object[functionName]) {
    return object[functionName]();
  }

  // Check OpenSocial field by dictionary mapping
  if (object.getField) {
    var fieldData = object.getField(name);
    if (fieldData != null) {
      return fieldData;
    }
  }

  // Multi-purpose get() method
  if (object.get) {
    var responseItem = object.get(name);

    // ResponseItem is a data set
    if (responseItem && responseItem.getData) {
      var data = responseItem.getData();
      // Return array payload where appropriate
      return data.array_ || data;
    }
    return responseItem;
  }

  // Return undefined value, to avoid confusing with existing value of "null".
  var und;
  return und;
});

function fetchData(callback) {
  var req = opensocial.newDataRequest();
  req.add(req.newFetchPersonRequest('VIEWER'), 'Viewer');
  req.add(req.newFetchPeopleRequest('VIEWER_FRIENDS'), 'ViewerFriends');

  req.add(req.newFetchPersonRequest('OWNER'), 'Owner');
  req.add(req.newFetchPeopleRequest('OWNER_FRIENDS'), 'OwnerFriends');
  req.add(req.newFetchPersonAppDataRequest('VIEWER', 'score'), 'ViewerScore');
  req.add(req.newFetchPersonAppDataRequest('VIEWER_FRIENDS', 'score'), 'ViewerFriendScores');
  req.send(function(data) {
    callback(data);
  });
}
  
function setScores(data) {
  var viewer = data.get('Viewer').getData();
  if (!viewerScore && data.get('ViewerScore').getData()[viewer.getId()]) {
    viewerScore = Number(data.get('ViewerScore').getData()[viewer.getId()].score) || 0;
  }
  viewer.fields_.score = viewerScore;
  
  var friends = data.get('ViewerFriends').getData();
  var viewerFriendsScores = data.get('ViewerFriendScores').getData();
  friends.each(function(friend) {
    var score = Number(viewerFriendsScores[friend.getId()]) 
        || Math.floor(Math.random()*7);
    friend.fields_.score = String(score);
    friend.fields_.numberScore = score;
  });
}

var viewerScore;

function drawit(data) {
  setScores(data);
  os.Container.processDocument(data);
}
  
function redrawit(data) { 
  setScores(data);
  os.Container.renderInlineTemplates(data);
}

function iAmLame() {
  viewerScore++;
  var req = opensocial.newDataRequest();
  req.add(req.newUpdatePersonAppDataRequest('VIEWER', 'score', viewerScore));
  req.send(function() {
    fetchData(redrawit);
  });
}
  
gadgets.util.registerOnLoadHandler(function() {
  fetchData(drawit);
});

</script>

<script type="text/os-template">
  Hello, ${Viewer.displayName}. Your score is <os:LameFactor score="${Viewer.score}"/>
<div style="margin: 4px">
<table class="mytable">
<tr>
  <td colspan="2"><b>High scores / Most Obsessive</b></td>
</tr>
<tr repeat="ViewerFriends">
  <td>${displayName}</td><td><os:LameFactor score="${score}"/></td>
</tr>
</table>
</div>
<div style="margin: 4px">
<input type="button" value="Click Me" onclick="iAmLame(); return false;"/>
</div>
</script>
]]></Content>
<Content type="html" view="canvas,profile"><![CDATA[
<script type="text/os-template" tag="os:LameFactor" view="canvas,profle">
  ${My.score}
  <span if="${My.score lt 5}"> (alive?)</span>
  <span if="${My.score gte 5 and My.score lt 10}"> (twitchy)</span>
  <span if="${My.score gte 10 and My.score lt 20}"> (click happy)</span>
  <span if="${My.score gte 20 and My.score lt 50}"> (obsessed)</span>
  <span if="${My.score gte 50 and My.score lt 100}"> (truly compulsive)</span>
  <span if="${My.score gte 100}"> (lame)</span>
</script>
]]></Content>
</Module>
