slickgrid.js 3.41 KB
var loader = new Slick.Data.RemoteModel($dj.ajax_get_page);

var slickgrid = {
    grid: null,
    sort_rules: $dj.sort_rules,
    changed: false,

    show_changed: function() {
        "use strict";
        if (!slickgrid.changed) {
            slickgrid.changed = true;
            $('#' + slickgrid.edit_form_submit_id).button('enable');
            $('#' + slickgrid.edit_form_cancel_id).button('enable');
            $('#edit-tab').html('<strong>Edycja (niezapisane)</strong>');
            $(window).on('beforeunload', function () {
                return "Są niezapisane zmiany.";
            });
        }
    },

    hide_changed: function() {
        "use strict";
        if (slickgrid.changed) {
            slickgrid.changed = false;
            $('#edit-tab').html('Edycja');
            $(window).off('beforeunload');
        }
    }
};

var options = {
    editable: false,
    enableAddRow: false,
    enableCellNavigation: true
};

var loadingIndicator = null;

$(function() {
    "use strict";
    slickgrid.element = $('#' + slickgrid.grid_element_id);
    slickgrid.grid = new Slick.Grid(
        slickgrid.element, loader.data, slickgrid.columns, options);

    slickgrid.grid.setSelectionModel(new Slick.RowSelectionModel());

    slickgrid.grid.onViewportChanged.subscribe(function (e, args) {
        var vp = slickgrid.grid.getViewport();
        loader.ensureData(vp.top, vp.bottom);
    });

    slickgrid.grid.onSort.subscribe(function (e, args) {
        loader.setSort(args.sortCol.field, args.sortAsc ? 1 : -1);
        var vp = slickgrid.grid.getViewport();
        loader.ensureData(vp.top, vp.bottom);
    });

    slickgrid.grid.onActiveCellChanged.subscribe(function(e, cell) {
        var row = cell.row,
            item = slickgrid.grid.getDataItem(row);
        // TODO timeout
        window.console.log(cell);
        slickgrid.load_content(item.id);
    });

    loader.onDataLoading.subscribe(function () {
        if (!loadingIndicator) {
            loadingIndicator = $(
                "<span class='loading-indicator'><label>Ładowanie..." +
                "</label></span>").appendTo(document.body);
            var $g = slickgrid.element;

            loadingIndicator
                .css("position", "absolute")
                .css("top", $g.position().top + $g.height() / 2 - loadingIndicator.height() / 2)
                .css("left", $g.position().left + $g.width() / 2 - loadingIndicator.width() / 2);
        }

        loadingIndicator.show();
    });

    loader.onDataLoaded.subscribe(function (e, args) {
        for (var i = args.from; i <= args.to; i++) {
            slickgrid.grid.invalidateRow(i);
        }

        slickgrid.grid.updateRowCount();
        slickgrid.grid.render();

        loadingIndicator.fadeOut();
        layout.adjust_grid_size();
        var num = slickgrid.grid.getDataLength();
        document.title = slickgrid.grid_caption + ' (' + num + ')';

    });

    var text_search = $("#text-search");
    text_search.keyup(function (e) {
        if (e.which === 13) {
            loader.setSearch($(this).val());
            var vp = slickgrid.grid.getViewport();
            loader.ensureData(vp.top, vp.bottom);
        }
    });

    loader.setSearch(text_search.val());
    loader.setSort("create_ts", -1);
    slickgrid.grid.setSortColumn("date", false);

    // load the first page
    slickgrid.grid.onViewportChanged.notify();

    slickgrid.init_form_widgets();
    layout.adjust_tabs();
});