Code Changes

Files Modified:

(Bolded codes are modified or added.)

config/container.js

"gadgets.features" : {

  "shindig.monitor" : {
    "enabled" : true
  }

  "core.io" : {
  ...

features/features.txt

  ...

  features/monitor/feature.xml

features/core/util.js

  runOnLoadHandlers : function () {
    for (var i = 0, j = onLoadHandlers.length; i < j; ++i) {
      onLoadHandlers[i]();
    }

    if (shindig && shindig.monitor) {
      gadgets.rpc.call(null, 'shindig.monitor.onAppReady', null);
    }

  },

features/core.io/io.js

  function processNonProxiedResponse(url, callback, params, xobj) {

    if (shindig && shindig.monitor && xobj.readyState == 4) {
      gadgets.rpc.call(null, 'shindig.monitor.onResponse', null, url, params, xobj.responseText.length, false);
    }

    if (hadError(xobj, callback)) {
    ...
  function processResponse(url, callback, params, xobj) {

    if (shindig && shindig.monitor && xobj.readyState == 4) {
      gadgets.rpc.call(null, 'shindig.monitor.onResponse', null, url, params, xobj.responseText.length, true);
    }

    if (hadError(xobj, callback)) {
    ...
  function makeXhrRequest(realUrl, proxyUrl, callback, paramData, method,
      params, processResponseFunction, opt_contentType) {

    if (shindig && shindig.monitor) {
      gadgets.rpc.call(null, 'shindig.monitor.onRequest', null, realUrl, params);
    }

    var xhr = makeXhr();
    ...

features/opensocial-current/feature.xml

  <dependency>opensocial-jsonrpc</dependency>
  <dependency>opensocial-rest</dependency>

  <dependency>shindig.monitor</dependency>

  <!-- <dependency>caja</dependency> -->
  ...


Files Added:

features/monitor/feature.xml

features/monitor/monitor.js

javascript/container/monitor.css


Sample Page:

(Bolded codes are important.)

javascript/container/sample-monitor.html

<!DOCTYPE html>
<html>
<head>
<title>Sample Monitor</title>
<!-- default container look and feel -->
<link rel="stylesheet" href="gadgets.css">
<style>
  .gadgets-gadget-chrome {
    width: 80%;
    float: none;
    margin: auto;
  }
  .gadgets-gadget {
    width: 100%;
  }
</style>
<link rel="stylesheet" href="monitor.css"> <script src="http://www.google.com/jsapi" type="text/javascript"></script> <script type="text/javascript"> google.load("jquery", "1.2.6"); </script>
<script type="text/javascript" src="/gadgets/js/rpc:shindig.monitor.js?c=1"></script>
<script type="text/javascript" src="util.js"></script> <script type="text/javascript" src="gadgets.js"></script> <script type="text/javascript"> var my = {}; my.LayoutManager = function() { gadgets.LayoutManager.call(this); }; my.LayoutManager.inherits(gadgets.LayoutManager); my.LayoutManager.prototype.getGadgetChrome = function(gadget) { var chromeId = 'gadget-chrome-' + gadget.id; return chromeId ? document.getElementById(chromeId) : null; }; my.renderGadgets = function() { for (var i = 0; i < my.gadgetSpecUrls.length; ++i) { var gadget = gadgets.container.createGadget( {specUrl: my.gadgetSpecUrls[i], title: ("Sample App - " + i)}); gadgets.container.addGadget(gadget); gadgets.container.renderGadget(gadget);
shindig.monitor.add(gadget);
} }; my.gadgetSpecUrls = [ 'http://www.unickway.org.cn/vcdemo/oauth-client.xml', 'http://www.unickway.org.cn/asClient/release/sample/SampleApp.xml' ]; my.init = function() { gadgets.container.layoutManager = new my.LayoutManager();
shindig.monitor.init();
}; </script> </head> <body onLoad="my.init(); my.renderGadgets();"> <center> <h2>Shindig Monitor Demo</h2> </center> <div id="gadget-chrome-0" class="gadgets-gadget-chrome"></div> <hr> <div id="gadget-chrome-1" class="gadgets-gadget-chrome"></div> <div id="output" style="clear: left;"> </div>
<!-- The monitor --> <hr> <button onclick="shindig.monitor.dump();">Dump Cosnole</button> <button onclick="shindig.monitor.report();">View Report</button> <button onclick="shindig.monitor.clear();">Clear</button> <div id="monitor-report"></div>
</body> </html>