Report hyperlink in new page

Select a report hyperlink to open a drill down report in a new page.

by Kishoreajey

HTML

<script src="https://underscorejs.org/underscore.js"></script>
<script src="https://code.jquery.com/jquery-2.1.0.js"></script>
<!-- Provide the URL to visualize.js -->
<script src="https://mobiledemo.jaspersoft.com/jasperserver-pro/client/visualize.js"></script>
<div id="main"></div>

JavaScript

visualize({
  auth: {
    name: "joeuser",
    password: "joeuser",
    organization: "organization_1"
  }
}, function(v) {

  var reportOptions = collectReportProperties({
    resource: "/public/viz/Hyperlinks/Drill_Reports_with_Controls/main_report",
    linkOptions: {
      beforeRender: function(linkToElemPairs) {
        linkToElemPairs.forEach(showCursor);
      },
      events: {
        "click": function(ev, link) {
          if (link.type == "ReportExecution") {
            openInNewTab({
              resource: link.parameters._report,
              params: convertToReportParams(link.parameters)
            });
          }
          console.log(link);
        }
      }
    },
    error: function(err) {
      alert(err.message);
    }
  });

  v("#main").report(reportOptions);


  function collectReportProperties(reportProperties) {
    var newProperties = findReportProperties(location.href);
    reportProperties = _.extend(reportProperties, newProperties);
    console.log('Report Properties:', reportProperties);
    return reportProperties;
  }

  function convertToReportParams(linkParams) {
    return _.chain(linkParams)
      .pairs()
      .map(function(pair) {
        var key = pair[0],
          val = pair[1];
        if (!_.isArray(val)) {
          return [key, [val]];
        }
        return pair;
      })
      .object()
      .value();
  }

  function findReportProperties(url) {
    var parser = document.createElement('a');
    parser.href = url;

    var urlParams = parser.search,
      result = {};

    if (urlParams) {
      result = paramsFromUrlQueryParams(urlParams);
    }

    return result;
  }

  function openInNewTab(reportProperties) {
    var first = false,
      urlToOpen = _.reduce(reportProperties, function(memo, value, key) {
        if (!first) {
          memo += '?';
          first = true;
        }
        if (_.isObject(value) && key == 'params') {
          memo = memo + paramsToUrlQueryParams(value);
        } else {
 ...