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

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

There is a newer version: 5.3.43
Show newest version
(function ($) {
  // register namespace
  $.extend(true, window, {
    "Slick": {
      "RowMoveManager": RowMoveManager
    }
  });

  function RowMoveManager(options) {
    var _grid;
    var _canvas;
    var _dragging;
    var _self = this;
    var _handler = new Slick.EventHandler();
    var _defaults = {
      cancelEditOnDrag: false
    };

    function init(grid) {
      options = $.extend(true, {}, _defaults, options);
      _grid = grid;
      _canvas = _grid.getCanvasNode();
      _handler
        .subscribe(_grid.onDragInit, handleDragInit)
        .subscribe(_grid.onDragStart, handleDragStart)
        .subscribe(_grid.onDrag, handleDrag)
        .subscribe(_grid.onDragEnd, handleDragEnd);
    }

    function destroy() {
      _handler.unsubscribeAll();
    }

    function handleDragInit(e, dd) {
      // prevent the grid from cancelling drag'n'drop by default
      e.stopImmediatePropagation();
    }

    function handleDragStart(e, dd) {
      var cell = _grid.getCellFromEvent(e);

      if (options.cancelEditOnDrag && _grid.getEditorLock().isActive()) {
        _grid.getEditorLock().cancelCurrentEdit();
      }

      if (_grid.getEditorLock().isActive() || !/move|selectAndMove/.test(_grid.getColumns()[cell.cell].behavior)) {
        return false;
      }

      _dragging = true;
      e.stopImmediatePropagation();

      var selectedRows = _grid.getSelectedRows();

      if (selectedRows.length == 0 || $.inArray(cell.row, selectedRows) == -1) {
        selectedRows = [cell.row];
        _grid.setSelectedRows(selectedRows);
      }

      var rowHeight = _grid.getOptions().rowHeight;

      dd.selectedRows = selectedRows;

      dd.selectionProxy = $("
") .css("position", "absolute") .css("zIndex", "99999") .css("width", $(_canvas).innerWidth()) .css("height", rowHeight * selectedRows.length) .appendTo(_canvas); dd.guide = $("
") .css("position", "absolute") .css("zIndex", "99998") .css("width", $(_canvas).innerWidth()) .css("top", -1000) .appendTo(_canvas); dd.insertBefore = -1; } function handleDrag(e, dd) { if (!_dragging) { return; } e.stopImmediatePropagation(); var top = e.pageY - $(_canvas).offset().top; dd.selectionProxy.css("top", top - 5); var insertBefore = Math.max(0, Math.min(Math.round(top / _grid.getOptions().rowHeight), _grid.getDataLength())); if (insertBefore !== dd.insertBefore) { var eventData = { "rows": dd.selectedRows, "insertBefore": insertBefore }; if (_self.onBeforeMoveRows.notify(eventData) === false) { dd.guide.css("top", -1000); dd.canMove = false; } else { dd.guide.css("top", insertBefore * _grid.getOptions().rowHeight); dd.canMove = true; } dd.insertBefore = insertBefore; } } function handleDragEnd(e, dd) { if (!_dragging) { return; } _dragging = false; e.stopImmediatePropagation(); dd.guide.remove(); dd.selectionProxy.remove(); if (dd.canMove) { var eventData = { "rows": dd.selectedRows, "insertBefore": dd.insertBefore }; // TODO: _grid.remapCellCssClasses ? _self.onMoveRows.notify(eventData); } } $.extend(this, { "onBeforeMoveRows": new Slick.Event(), "onMoveRows": new Slick.Event(), "init": init, "destroy": destroy }); } })(jQuery);




© 2015 - 2025 Weber Informatics LLC | Privacy Policy