// reportOptions variable comes from respective config file
var tableauDOMId = "tableauViz";
var authTicket;
//var tableauProdSuffix = "_0/";
var workbook, activeSheet;
var filterReplace = tableauSoftware.FilterUpdateType.REPLACE;
var filterAll = tableauSoftware.FilterUpdateType.ALL;
var platforms, builds, gamertags, startDate, endDate;
function initPage() {
// function from generic.js, variable from config file
initHeaderAndFilters(headerAndFilters);
$("#content-body")
//.css("overflow", "hidden")
.append(
$("
")
.attr("id", tableauDOMId)
);
$("#filter").click(function() {
//generateCharts();
filterCharts();
});
generateCharts();
}
function generateCharts() {
if (!authTicket)
authTicket = getAuthenticatedTicket();
if (authTicket == -1) {
Sexy.error("Tableau authentication failed!");
return;
}
var subpath = (((config.serverType == config.serverTypeProd) && (reportOptions.tableauReportProd))
? reportOptions.tableauReportProd
: reportOptions.tableauReportDev
);
var url = reportOptions.tableauEndpoint + subpath
var trustedUrl = reportOptions.tableauEndpoint
+ "trusted/"
+ authTicket
+ "/views/"
+ subpath;
//console.log(trustedUrl);
// Add a link to the original tableau page
$("#content-description")
.append(
$("
")
.attr("href", url)
.attr("target", "_blank")
.attr("title", "View on Tableau Server")
.text(url)
);
if (reportOptions.oldTelemetryReport) {
$("#content-description")
.append(
$("
")
)
.append(
$("")
.attr("href", reportOptions.oldTelemetryReport)
.attr("target", "_blank")
.attr("title", "Old Report")
.text(reportOptions.oldTelemetryReport)
);
}
// get the social club header filtering parameter values, headerAndFilters.headerType comes from local conf
if (headerAndFilters)
var pValues = config.headerOptions[headerAndFilters.headerType].getParamValues();
var placeholderDiv = document.getElementById(tableauDOMId);
var options = {
width: placeholderDiv.offsetWidth,
height: placeholderDiv.offsetHeight,
hideTabs: true,
hideToolbar: true,
onFirstInteractive: function () {
workbook = viz.getWorkbook();
activeSheet = workbook.getActiveSheet();
filterCharts();
},
};
viz = new tableauSoftware.Viz(placeholderDiv, trustedUrl, options);
}
function filterCharts() {
if (!headerAndFilters)
return;
var pValues = config.headerOptions[headerAndFilters.headerType].getParamValues();
builds = (pValues.Pairs["BuildIdentifiers"]) ? pValues.Pairs["BuildIdentifiers"].split(",") : null;
platforms = (pValues.Pairs["PlatformNames"]) ? pValues.Pairs["PlatformNames"].split(",") : null;
gamertags = (pValues.Pairs["GamerHandlePlatformPairs"])
? pValues.Pairs["GamerHandlePlatformPairs"].split(",").map(function(d) {return d.split("|")[0].substring(1)})
: null;
gamertags = (pValues.Pairs["GamerGroups"])
? getGamertagsFromGroups(pValues.Pairs["GamerGroups"].split(","))
.map(function(d) {return d.split("|")[0].substring(1)})
: gamertags;
startDate = pValues.Pairs["StartDate"];
endDate = pValues.Pairs["EndDate"];
if (activeSheet.getWorksheets) { // If it's a dashboard it implements getWorksheets()
//activeSheet.changeSizeAsync({
// behavior: tableauSoftware.SheetSizeBehavior.AUTOMATIC
// });
$.each(activeSheet.getWorksheets(), function(i, sheet) {
filterTableauSheet(sheet);
});
}
else if (activeSheet.applyFilterAsync) { // If it's a sheet it implements applyFilterAsync()
filterTableauSheet(activeSheet);
}
}
function filterTableauSheet(sheet) {
//sheet.getFiltersAsync().then(function(d) { console.log(d); });
//workbook.activateSheetAsync(sheet.getName())
sheet.selectMarksAsync()
.then(function () {
return (builds)
? sheet.applyFilterAsync("Builds", builds, filterReplace)
: sheet.applyFilterAsync("Builds", "", filterAll);
})
.then(function () {
return (platforms)
? sheet.applyFilterAsync("Platforms", platforms, filterReplace)
: sheet.applyFilterAsync("Platforms", "", filterAll);
})
.then(function () {
return (gamertags)
? sheet.applyFilterAsync("Gamertags", gamertags, filterReplace)
: sheet.applyFilterAsync("Gamertags", "", filterAll);
})
.then(function () {
return sheet.applyRangeFilterAsync("Dates", {
min: new Date(startDate),
max: (endDate) ? (new Date(endDate)) : new Date(new Date().getFullYear()+1, 0, 1),
})
});
}
function getAuthenticatedTicket() {
var ticket;
var trustedURL = reportOptions.tableauEndpoint + "trusted/";
$.ajax({
type: "GET",
url: config.tableauAuthBackend,
contentType: "application/json",
dataType: "json",
async: false,
data: {
TableauUsername: config.tableauUsername,
TableauUrl: trustedURL,
},
success: function (result) {
ticket = result.authToken;
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(this.url + "\n" + ajaxOptions + " " + xhr.status + " " + thrownError);
},
});
return ticket;
}