PageSourceSearch

https://permits.lakecountyin.gov/Scripts/SlickGrid/Plugins/slick.headerbuttons.js?v=ZqqqA6b9fuE_-En7fXFNTA2

js lakecountyin.gov collected 2026-09-26 07:07:46 UTC 5,302 bytes, 177 lines download raw bytes

1(function ($) {
2  // register namespace
3  $.extend(true, window, {
4    "Slick": {
5      "Plugins": {
6        "HeaderButtons": HeaderButtons
7      }
8    }
9  });
10
11
12  /***
13   * A plugin to add custom buttons to column headers.
14   *
15   * USAGE:
16   *
17   * Add the plugin .js & .css files and register it with the grid.
18   *
19   * To specify a custom button in a column header, extend the column definition like so:
20   *
21   *   var columns = [
22   *     {
23   *       id: 'myColumn',
24   *       name: 'My column',
25   *
26   *       // This is the relevant part
27   *       header: {
28   *          buttons: [
29   *              {
30   *                // button options
31   *              },
32   *              {
33   *                // button options
34   *              }
35   *          ]
36   *       }
37   *     }
38   *   ];
39   *
40   * Available button options:
41   *    cssClass:     CSS class to add to the button.
42   *    image:        Relative button image path.
43   *    tooltip:      Button tooltip.
44   *    showOnHover:  Only show the button on hover.
45   *    handler:      Button click handler.
46   *    command:      A command identifier to be passed to the onCommand event handlers.
47   *
48   * The plugin exposes the following events:
49   *    onCommand:    Fired on button click for buttons with 'command' specified.
50   *        Event args:
51   *            grid:     Reference to the grid.
52   *            column:   Column definition.
53   *            command:  Button command identified.
54   *            button:   Button options.  Note that you can change the button options in your
55   *                      event handler, and the column header will be automatically updated to
56   *                      reflect them.  This is useful if you want to implement something like a
57   *                      toggle button.
58   *
59   *
60   * @param options {Object} Options:
61   *    buttonCssClass:   a CSS class to use for buttons (default 'slick-header-button')
62   * @class Slick.Plugins.HeaderButtons
63   * @constructor
64   */
65  function HeaderButtons(options) {
66    var _grid;
67    var _self = this;
68    var _handler = new Slick.EventHandler();
69    var _defaults = {
70      buttonCssClass: "slick-header-button"
71    };
72
73
74    function init(grid) {
75      options = $.extend(true, {}, _defaults, options);
76      _grid = grid;
77      _handler
78        .subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered)
79        .subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy);
80
81      // Force the grid to re-render the header now that the events are hooked up.
82      _grid.setColumns(_grid.getColumns());
83    }
84
85
86    function destroy() {
87      _handler.unsubscribeAll();
88    }
89
90
91    function handleHeaderCellRendered(e, args) {
92      var column = args.column;
93
94      if (column.header && column.header.buttons) {
95        // Append buttons in reverse order since they are floated to the right.
96        var i = column.header.buttons.length;
97        while (i--) {
98          var button = column.header.buttons[i];
99          var btn = $("<div></div>")
100            .addClass(options.buttonCssClass)
101            .data("column", column)
102            .data("button", button);
103
104          if (button.showOnHover) {
105            btn.addClass("slick-header-button-hidden");
106          }
107
108          if (button.image) {
109            btn.css("backgroundImage", "url(" + button.image + ")");
110          }
111
112          if (button.cssClass) {
113            btn.addClass(button.cssClass);
114          }
115
116          if (button.tooltip) {
117            btn.attr("title", button.tooltip);
118          }
119
120          if (button.command) {
121            btn.data("command", button.command);
122          }
123
124          if (button.handler) {
125            btn.bind("click", button.handler);
126          }
127
128          btn
129            .bind("click", handleButtonClick)
130            .appendTo(args.node);
131        }
132      }
133    }
134
135
136    function handleBeforeHeaderCellDestroy(e, args) {
137      var column = args.column;
138
139      if (column.header && column.header.buttons) {
140        // Removing buttons via jQuery will also clean up any event handlers and data.
141        // NOTE: If you attach event handlers directly or using a different framework,
142        //       you must also clean them up here to avoid memory leaks.
143        $(args.node).find("." + options.buttonCssClass).remove();
144      }
145    }
146
147
148    function handleButtonClick(e) {
149      var command = $(this).data("command");
150      var columnDef = $(this).data("column");
151      var button = $(this).data("button");
152
153      if (command != null) {
154        _self.onCommand.notify({
155            "grid": _grid,
156            "column": columnDef,
157            "command": command,
158            "button": button
159          }, e, _self);
160
161        // Update the header in case the user updated the button definition in the handler.
162        _grid.updateColumnHeader(columnDef.id);
163      }
164
165      // Stop propagation so that it doesn't register as a header click event.
166      e.preventDefault();
167      e.stopPropagation();
168    }
169
170    $.extend(this, {
171      "init": init,
172      "destroy": destroy,
173
174      "onCommand": new Slick.Event()
175    });
176  }
177})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.