Using gantt view with the Calendar List

Use the following script to a content editor webpart on the view page

<!DOCTYPE html>
<html>
<head>

<script src="http://code.jquery.com/jquery-1.9.1.min.js" type="text/javascript">
// SPGanttControlPanel by Jesper G. Simonsen, http://jesper-simonsen.blogspot.dk/2013/11/using-gantt-view-with-sp-calendar.html 

// It's recommended to download the jquery and refer to it locally, e.g. to a document library on your site

</script>

<script type="text/javascript">

// Modify these two links to get the New and Edit button to work

var Link2NewItem="Replace this text with the Add new events shortcut of your calendars Current Events view (rightclick + copy shortcut)"
var StrEditLink="Replace this text with your calendars Current Events view url (goto the view + F4 + CtrlC)"

var InitialZoomIn=1
var ZoomStep=1

// Only modify after this line if you know what you are doing:)

var SavedGridControl=null

ExecuteOrDelayUntilScriptLoaded(function(){
  var oldGanttControl = SP.GanttControl
  SP.GanttControl = function(){
    oldGanttControl.call(this)
    var oldInit = this.Init
    this.Init = function(jsGridControl, jsRawGridData, params){
      oldInit.call(this, jsGridControl, jsRawGridData, params)
      SavedGridControl=jsGridControl
      DoSetSplitterPosition(jsGridControl)
      DoSetWidth(jsGridControl)
      ZoomIn(jsGridControl, InitialZoomIn)
      DoSetHeight(jsGridControl)
      scrollToToday()
    }
  }
}, "SPGantt.js")

function DoSetSplitterPosition(grid){
  grid.SetSplitterPosition(200)
}

function DoSetWidth(grid) {
  var columns = grid.GetColumns();
  try{$.each(columns, function(key, value){try{value.width=200}catch(err){}})}catch(err){alert(err.message)};
  grid.UpdateColumns(grid.parentNode.jsgridtableviewparams.columns);
}

function DoSetHeight(grid) {
    try {
      var tableHeight = $("table [id$='_ListViewWebPartJSGrid_leftpane_mainTable']")[0].offsetHeight;
      var LVWPGrid = $("div [id$='_ListViewWebPartJSGrid']")[0];
      LVWPGrid.style.height = tableHeight;
      var divs = LVWPGrid.getElementsByTagName("div");
      divs[1].style.height = tableHeight;
    } catch (ex) {
        alert(ex.toString());
    }
}

function DoZoomIn(){
  ZoomIn(SavedGridControl, ZoomStep)
}
function DoZoomOut(){
  ZoomOut(SavedGridControl, ZoomStep)
}

function ZoomIn(grid, zoomstp){
  grid.SetGanttZoomLevel(grid.GetGanttZoomLevel()-zoomstp)
}

function ZoomOut(grid, zoomstp){
  grid.SetGanttZoomLevel(grid.GetGanttZoomLevel()+zoomstp)
}

function scrollToToday() {
  $("div [id$='_ListViewWebPartJSGrid']")[0].jsgrid.ScrollGanttToDate(new Date()) 
}

function scrollToTask() {
    this.ScrollGanttToTask()
}


function openNewDialog() {
  var options = SP.UI.$create_DialogOptions();
  options.title = "New...";
  options.width = 800;
  options.height = 700;
  options.url = Link2NewItem;
  options.dialogReturnValueCallback = dialogCallback; 
  SP.UI.ModalDialog.showModalDialog(options);     
} 

function dialogCallback(dialogResult, returnValue) {
 if(dialogResult == SP.UI.DialogResult.OK) {
    location.reload();
 }
} 

function DoEditLink() {
window.location.assign(StrEditLink);
}

</script>

</head>
<body>
<table>
<tr>
<td>
<button type=button onclick="openNewDialog()">New...</button>
</td>
<td>
<button type=button onclick="DoEditLink()">Edit...</button>
</td>
<td>
<button type=button onclick="DoZoomIn()">Zoom in</button>
</td>
<td>
<button type=button onclick="DoZoomOut()">Zoom out</button>
</td>
<td>
<button type=button onclick="scrollToToday()">Today</button>
</td>
</tr>
<tr>
<td> </td>
</tr>
</table>
</body>
</html>

Comments

Popular Posts