Customize context menu to create new pivot in the pop-up
Embedding Flexmonster
HTML
<link rel="stylesheet" href="https://s3.amazonaws.com/flexmonster/2.3/demo.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://cdn.flexmonster.com/2.4/flexmonster.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div id="pivot-container"></div>
<div id="drill-down">
<div aria-labelledby="drill-down-title" class="modal fade" id="drill-down-dialog" role="dialog" tab-index="-1">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button aria-label="close" class="close" data-dismiss="modal" role="button">×</button>
<h4 class="modal-title" id="drill-down-title">Drill Down</h4>
</div>
<div class="modal-body">
<div id="pivot-container-1"></div>
</div>
</div>
</div>
</div>
</div>
CSS
#drill-down .modal-dialog {
width: 80%;
height: 80%;
min-height: 600px;
}
#drill-down .modal-content {
height: 100%;
}
#drill-down .modal-header {
height: 56px;
}
#drill-down .modal-body-test {
height: calc(100% - 56px);
}
#drill-down #drill-container {
height: 100%;
}
JavaScript
var pivot = new Flexmonster({
container: "#pivot-container",
componentFolder: "https://cdn.flexmonster.com/2.4/",
width: "100%",
height: 350,
toolbar: true,
report: {
dataSource: {
filename: "data/data.csv"
},
slice: {
rows: [{
uniqueName: "Color"
}, {
uniqueName: "Country"
}],
columns: [{
uniqueName: "Business Type"
}, {
uniqueName: "[Measures]"
}],
measures: [{
uniqueName: "Price"
}],
},
options: {
configuratorActive: false
}
}
});
document.body.addEventListener('contextmenu', onRightClick);
var cell = null;
function onRightClick(e) {
var addItem = ($(e.target).hasClass("fm-cell") && !$(e.target).hasClass("fm-header"));
cell = pivot.getSelectedCell();
setTimeout(function() {
customizeFlexmonsterContextMenu(pivot, addItem);
}, 1);
}
function customizeFlexmonsterContextMenu(pivot, addItem) {
if (!addItem) {
$('#fm-context-menu ul #fm-open-pivot').remove();
return;
}
if ($('#fm-context-menu ul #fm-open-pivot').length > 0) {
return;
}
var openInNewPivot = $('<li class="fm-ui" id="fm-open-pivot"></li>');
openInNewPivot.append('<span class="fm-ui" id="#fm-text-display">Open in New Pivot</span>');
openInNewPivot.click(function(e) {
e.stopImmediatePropagation();
openNewPivot(cell);
});
$('#fm-context-menu ul').prepend(openInNewPivot);
}
var dialog = $('#drill-down-dialog');
var pivot1 = null;
var openNewPivot = function(cell) {
console.log(">>", cell);
var measure = cell.measure.uniqueName;
var rowTuple = [];
var rows = []
for (var i = 0; i < cell.rows.length; i++) {
rowTuple.push(cell.rows[i].uniqueName);
rows.push(cell.rows[i].caption);
}
var columnTuple = [];
var cols = [];
for (var i = 0; i < cell.columns.length; i++) {
columnTuple.push(cell.columns[i].uniqueName);
cols.push(cell.columns[i].caption);
}
console.log(
"Click on cell: "...