<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- Copyright (c) 2012 Rally Software Development Corp. All rights reserved -->
<html>
<head>
  <title>Release Summary</title>
  <meta name="Name" content="App: Release Summary" />
  <meta name="Version" content="2012.11.19" />
  <meta name="Vendor" content="Rally Software" />

  <script type ="text/javascript" src="/apps/1.32/sdk.js"></script>
  <script type ="text/javascript">
    function ReleaseSummary() {
        var that = this;
        var rallyDataSource = new rally.sdk.data.RallyDataSource('__WORKSPACE_OID__',
                '__PROJECT_OID__',
                '__PROJECT_SCOPING_UP__',
                '__PROJECT_SCOPING_DOWN__');
        var releaseDropdown;
        var releaseNotesDiv;
        var wait;
        var loadingSpan;
    
        this._renderReleaseNotes = function(items) {
            if (wait) {
                wait.hide();
                wait = null;
            }
    
            var notesHeader = dojo.create('div', {'class': 'notesHeader'}, releaseNotesDiv);
            notesHeader.appendChild(document.createTextNode("About this release:"));
    
            if (items.release && items.release.length > 0 && items.release[0].Notes) {
                //use innerhtml so it will render html characters
                dojo.create('div', {'class': 'notes', innerHTML: items.release[0].Notes}, releaseNotesDiv);
            }
    
            var additionalInfo = dojo.create('div', {'class': 'additionalInfo'}, releaseNotesDiv);
            additionalInfo.appendChild(document.createTextNode("Additional information is available "));
            var releaseLink = new rally.sdk.ui.basic.Link({item: releaseDropdown.getSelectedItem(), text: "here"});
            releaseLink.display(additionalInfo);
            additionalInfo.appendChild(document.createTextNode("."));
    
            if (items.stories) {
                var storiesHeader = dojo.create('div', {'class': 'storiesHeader'}, releaseNotesDiv);
                storiesHeader.appendChild(document.createTextNode("Stories: " + items.stories.length));
    
                var stories = dojo.create('ul', {'class': 'storiesList'}, releaseNotesDiv);
                rally.forEach(items.stories, function(s) {
                    var li = dojo.create('li', {'class': 'story'}, stories);
                    var link = new rally.sdk.ui.basic.Link({item: s});
                    link.display(li);
                    dojo.create('span', {innerHTML: " - " + s.Name}, li);
                });
            }
    
            if (items.defects) {
                var defectsHeader = dojo.create('div', {'class': 'defectsHeader'}, releaseNotesDiv);
                defectsHeader.appendChild(document.createTextNode("Defects: " + items.defects.length));
    
                var defects = dojo.create('ul', {'class': 'defectsList'}, releaseNotesDiv);
                rally.forEach(items.defects, function(d) {
                    var li = dojo.create('li', {'class': 'defect'}, defects);
                    var link = new rally.sdk.ui.basic.Link({item: d});
                    link.display(li);
                    dojo.create('span', {innerHTML: " - " + d.Name}, li);
                });
            }
        };
    
        this._queryForItems = function() {
            dojo.empty(releaseNotesDiv);
            wait = new rally.sdk.ui.basic.Wait({});
            wait.display(loadingSpan);
    
            var query = new rally.sdk.util.Query("ScheduleState = Accepted");
            if (releaseDropdown.getQueryFromSelected()) {
                query = query.and(releaseDropdown.getQueryFromSelected());
            }
            rallyDataSource.findAll([
                {
                    key: "stories",
                    type: "hierarchicalrequirement",
                    query: query,
                    fetch: "FormattedID,Name",
                    order: "ObjectID"
                },
                {
                    key: "defects",
                    type: "defect",
                    query: query,
                    fetch: "FormattedID,Name",
                    order: "ObjectID"
                },
                {
                    key: "release",
                    type: "release",
                    fetch: "Notes",
                    query: new rally.sdk.util.Query("ObjectID = " + rally.sdk.util.Ref.getOidFromRef(releaseDropdown.getSelectedItem()))
                }
            ], that._renderReleaseNotes);
    
        };
    
        this._createLayout = function(element) {
            var headerDiv = dojo.create('div', {'class': 'header'}, element);
            var dropdownContainerSpan = dojo.create('span', {'class': 'dropdownContainer'}, headerDiv);
    
            loadingSpan = dojo.create('span', {'class': 'loading'}, headerDiv);
            //IE7 requires child content to display wait/span correctly
            loadingSpan.appendChild(document.createTextNode(" "));
    
            releaseNotesDiv = dojo.create('div', {'class': 'releaseNotes'}, element);
    
            //Create dropdowns
            var dropdownConfig = {
                showLabel: true,
                label: "Release: "
            };
            releaseDropdown = new rally.sdk.ui.ReleaseDropdown(dropdownConfig, rallyDataSource);
            releaseDropdown.display(dropdownContainerSpan, that._queryForItems);
        };
    
        this.display = function(element) {
    
            rally.sdk.ui.AppHeader.setHelpTopic("247");
            rally.sdk.ui.AppHeader.showPageTools(true);
    
            //Build app layout
            that._createLayout(element);
        };
    }
  </script>

  <style type="text/css">
        .defectsHeader, .storiesHeader, .notesHeader {
        font-weight: bold;
        margin-top: 20px;
    }
    
    .loading {
        margin-left: 20px;
    }
    
    .header {
        line-height: 30px;
        vertical-align: middle;
    }
    
    .notes, .additionalInfo {
        padding-top: 10px;
    }
  </style>

  <script type="text/javascript">
    function onLoad() {
      var appCustom = new ReleaseSummary();
      appCustom.display(dojo.body());
    }

    rally.addOnLoad(onLoad);
  </script>
</head>

<body></body>
</html>