Skip to content

Instantly share code, notes, and snippets.

@bvaughn
Last active August 29, 2015 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bvaughn/23749a3464d94a162205 to your computer and use it in GitHub Desktop.
Save bvaughn/23749a3464d94a162205 to your computer and use it in GitHub Desktop.
Task Runner example script

Here is a simple example showing how to use:

  • XHRTask to load data via an XML HTTP request.
  • ClosureTask to define a small task within the context of a larger task-flow.
  • DependencyGraphTask to define application flow with only a few lines of code.

index.html

<html>
  <head>
    <script src="libs/task-runner/task-runner.js"></script>
    <script src="script2.js"></script>

    <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
  </head>
  <body onload="init()">
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td>IP Address</td>
          <td id="ipLabel">
            <button id="loadIpButton" type="button" class="btn">Get IP</button>
          </td>
        </tr>
        <tr>
          <td>User Agent</td>
          <td id="userAgentLabel">
            <button id="loadUserAgentButton" type="button" class="btn">Get User Agent</button>
          </td>
        </tr>
        <tr>
          <td>XML</td>
          <td id="xmlLabel">
            <button id="loadXmlButton" type="button" class="btn">Load XML</button>
          </td>
        </tr>
        <tr>
          <td>Text</td>
          <td id="textLabel">
            <button id="loadTextButton" type="button" class="btn">Load Text</button>
          </td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

script.js

function init() {
  window.dependencyGraphTask = new taskrunner.DependencyGraphTask();

  taskrunner.XHRTask.setDefaultResponseType(taskrunner.XHRTask.ResponseType.JSON);

  var waitForClickTask;

  // Sequence to load IP address JSON
  var getIpTask = new taskrunner.XHRTask('http://httpbin.org/ip');
  waitForClickTask = new taskrunner.EventListenerTask(document.getElementById('loadIpButton'), 'click');
  dependencyGraphTask.addTask(waitForClickTask);
  dependencyGraphTask.addTask(getIpTask, [waitForClickTask]);
  dependencyGraphTask.addTask(
    new taskrunner.ClosureTask(
      function() {
        var data = getIpTask.getData();

        document.getElementById('ipLabel').innerText = data['origin'];
      }, true),
    [getIpTask]);

  // Sequence to load user agent JSON
  var getUserAgentTask = new taskrunner.XHRTask('http://httpbin.org/user-agent');
  waitForClickTask = new taskrunner.EventListenerTask(document.getElementById('loadUserAgentButton'), 'click');
  dependencyGraphTask.addTask(waitForClickTask);
  dependencyGraphTask.addTask(getUserAgentTask, [waitForClickTask]);
  dependencyGraphTask.addTask(
    new taskrunner.ClosureTask(
      function() {
        var data = getUserAgentTask.getData();

        document.getElementById('userAgentLabel').innerText = data['user-agent'];
      }, true),
    [getUserAgentTask]);

  // Sequence to load arbitrary text
  var getTextTask = new taskrunner.XHRTask('http://httpbin.org/html', undefined, taskrunner.XHRTask.ResponseType.TEXT);
  waitForClickTask = new taskrunner.EventListenerTask(document.getElementById('loadTextButton'), 'click');
  dependencyGraphTask.addTask(waitForClickTask);
  dependencyGraphTask.addTask(getTextTask, [waitForClickTask]);
  dependencyGraphTask.addTask(
    new taskrunner.ClosureTask(
      function() {
        var data = getTextTask.getData();

        document.getElementById('textLabel').innerText = data.substring(0, 100) + '...';
      }, true),
    [getTextTask]);

  // Sequence to load arbitrary XML
  var getXmlTask = new taskrunner.XHRTask('http://httpbin.org/xml', undefined, taskrunner.XHRTask.ResponseType.XML);
  waitForClickTask = new taskrunner.EventListenerTask(document.getElementById('loadXmlButton'), 'click');
  dependencyGraphTask.addTask(waitForClickTask);
  dependencyGraphTask.addTask(getXmlTask, [waitForClickTask]);
  dependencyGraphTask.addTask(
    new taskrunner.ClosureTask(
      function() {
        var data = getXmlTask.getData();

        document.getElementById('xmlLabel').innerText = new XMLSerializer().serializeToString(data).substring(0, 100) + '...';
      }, true),
    [getXmlTask]);

  // Run all of the above sequences in parallel.
  dependencyGraphTask.run();
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment