All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jwic.lib.slickgrid.plugins.slick.draggablegrouping.js Maven / Gradle / Ivy

There is a newer version: 5.3.43
Show newest version
/**
 *
 * Draggable Grouping contributed by:  Muthukumar Selvarasu
 *  muthukumar{dot}se{at}gmail{dot}com
 *  github.com/muthukumarse/Slickgrid
 *
 * NOTES:
 *     This plugin provides the Draggable Grouping feature
 */

(function ($) {
  // Register namespace
  $.extend(true, window, {
    "Slick": {
      "DraggableGrouping": DraggableGrouping
    }
  });

  /**
   * DraggableGrouping plugin to show/hide tooltips when columns are too narrow to fit content.
   * @constructor
   * @param {boolean} [options.enableForCells=true]        - Enable tooltip for grid cells
   * @param {boolean} [options.enableForHeaderCells=false] - Enable tooltip for header cells
   * @param {number}  [options.maxToolTipLength=null]      - The maximum length for a tooltip
   */
  function DraggableGrouping(options) {
    var _grid;
    var _gridUid;
    var _gridColumns;
    var _dataView;
    var dropbox;
    var dropboxPlaceholder;
    var _self = this;
    var _defaults = {
    };
    
    /**
     * Initialize plugin.
     */
    function init(grid) {
      options = $.extend(true, {}, _defaults, options);
      _grid = grid;
      _gridUid = _grid.getUID();
      _gridColumns =  _grid.getColumns();
      _dataView = _grid.getData();
      
      dropbox = $(_grid.getPreHeaderPanel());
      dropbox.html("
Drop a column header here to group by the column
"); dropboxPlaceholder = dropbox.find(".slick-placeholder"); setupColumnDropbox(); } /** * Destroy plugin. */ function destroy() { } function setColumns(col) { _gridColumns = col; } var emptyDropbox; function setupColumnDropbox() { dropbox.droppable({ activeClass: "ui-state-default", hoverClass: "ui-state-hover", accept: ":not(.ui-sortable-helper)", deactivate: function(event, ui) { dropbox.removeClass("slick-header-column-denied"); }, drop: function(event, ui) { handleGroupByDrop(this, ui.draggable); }, over: function(event, ui) { var id = (ui.draggable).attr('id').replace(_gridUid, ""); _gridColumns.forEach(function(e, i, a) { if (e.id == id) { if (e.grouping == null) { dropbox.addClass("slick-header-column-denied"); } } }); } }); dropbox.sortable({ items: "div.slick-dropped-grouping", cursor: "default", tolerance: "pointer", helper: "clone", update: function(event, ui) { var sortArray = $(this).sortable('toArray', { attribute: 'data-id' }), newGroupingOrder = []; for (var i = 0, l = sortArray.length; i < l; i++) { for (var a = 0, b = columnsGroupBy.length; a < b; a++) { if (columnsGroupBy[a].id == sortArray[i]) { newGroupingOrder.push(columnsGroupBy[a]); break; } } } columnsGroupBy = newGroupingOrder; updateGroupBy(); } }); emptyDropbox = dropbox.html(); } var columnsGroupBy = []; var groupBySorters = []; function handleGroupByDrop(container, column) { var columnid = column.attr('id').replace(_gridUid, ""); var columnAllowed = true; columnsGroupBy.forEach(function(e, i, a) { if (e.id == columnid) { columnAllowed = false; } }); if (columnAllowed) { _gridColumns.forEach(function(e, i, a) { if (e.id == columnid) { if (e.grouping != null) { var entry = $("
"); var span = $("").text(column.text() + " ") span.appendTo(entry); $("
").appendTo(entry); entry.appendTo(container); addColumnGroupBy(e, column, container, entry); addGroupByRemoveClickHandler(e.id, container, column, entry); } } }); } } function addColumnGroupBy(column) { columnsGroupBy.push(column); updateGroupBy(); } function addGroupByRemoveClickHandler(id, container, column, entry) { var text = entry; $("#" + _gridUid + id + "_entry").on('click', function() { $(this).off('click'); removeGroupBy(id, column, text); }); } function clearDroppedGroups() { columnsGroupBy = []; } function removeFromArray(arr) { var what, a = arguments, L = a.length, ax; while (L > 1 && arr.length) { what = a[--L]; while ((ax = arr.indexOf(what)) != -1) { arr.splice(ax, 1); } } return arr; } function removeGroupBy(id, column, entry) { entry.remove(); var groupby = []; _gridColumns.forEach(function(e, i, a) { groupby[e.id] = e; }); removeFromArray(columnsGroupBy, groupby[id]); if(columnsGroupBy.length == 0){ dropboxPlaceholder.show(); } updateGroupBy(); } function updateGroupBy() { if (columnsGroupBy.length == 0) { _dataView.setGrouping([]); return; } var groupingArray = []; columnsGroupBy.forEach(function(element, index, array) { groupingArray.push(element.grouping); }); _dataView.setGrouping(groupingArray); /* collapseAllGroups(); */ } // Public API $.extend(this, { "init": init, "destroy": destroy, "clearDroppedGroups": clearDroppedGroups }); } })(jQuery);




© 2015 - 2025 Weber Informatics LLC | Privacy Policy