PageSourceSearch

https://www.internationalscholarships.com/assets/dad3674f/yii.gridView.js

js internationalscholarships.com collected 2026-09-24 09:11:23 UTC 9,507 bytes, 258 lines download raw bytes

1/**
2 * Yii GridView widget.
3 *
4 * This is the JavaScript widget used by the yii\grid\GridView widget.
5 *
6 * @link http://www.yiiframework.com/
7 * @copyright Copyright (c) 2008 Yii Software LLC
8 * @license http://www.yiiframework.com/license/
9 * @author Qiang Xue <[email protected]>
10 * @since 2.0
11 */
12(function ($) {
13    $.fn.yiiGridView = function (method) {
14        if (methods[method]) {
15            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
16        } else if (typeof method === 'object' || !method) {
17                return methods.init.apply(this, arguments);
18        } else {
19            $.error('Method ' + method + ' does not exist in jQuery.yiiGridView');
20            return false;
21        }
22    };
23
24    var defaults = {
25        filterUrl: undefined,
26        filterSelector: undefined,
27        filterOnFocusOut: true
28    };
29
30    var gridData = {};
31
32    var gridEvents = {
33        /**
34         * beforeFilter event is triggered before filtering the grid.
35         * The signature of the event handler should be:
36         *     function (event)
37         * where
38         *  - event: an Event object.
39         *
40         * If the handler returns a boolean false, it will stop filter form submission after this event. As
41         * a result, afterFilter event will not be triggered.
42         */
43        beforeFilter: 'beforeFilter',
44        /**
45         * afterFilter event is triggered after filtering the grid and filtered results are fetched.
46         * The signature of the event handler should be:
47         *     function (event)
48         * where
49         *  - event: an Event object.
50         */
51        afterFilter: 'afterFilter'
52    };
53
54    /**
55     * Used for storing active event handlers and removing them later.
56     * The structure of single event handler is:
57     *
58     * {
59     *     gridViewId: {
60     *         type: {
61     *             event: '...',
62     *             selector: '...'
63     *         }
64     *     }
65     * }
66     *
67     * Used types:
68     *
69     * - filter, used for filtering grid with elements found by filterSelector
70     * - checkRow, used for checking single row
71     * - checkAllRows, used for checking all rows with according "Check all" checkbox
72     *
73     * event is the name of event, for example: 'change.yiiGridView'
74     * selector is a jQuery selector for finding elements
75     *
76     * @type {{}}
77     */
78    var gridEventHandlers = {};
79
80    var methods = {
81        init: function (options) {
82            return this.each(function () {
83                var $e = $(this);
84                var settings = $.extend({}, defaults, options || {});
85                var id = $e.attr('id');
86                if (gridData[id] === undefined) {
87                    gridData[id] = {};
88                }
89
90                gridData[id] = $.extend(gridData[id], {settings: settings});
91
92                var filterEvents = 'change.yiiGridView keydown.yiiGridView';
93                var enterPressed = false;
94                initEventHandler($e, 'filter', filterEvents, settings.filterSelector, function (event) {
95                    if (event.type === 'keydown') {
96                        if (event.keyCode !== 13) {
97                            return; // only react to enter key
98                        } else {
99                            enterPressed = true;
100                        }
101                    } else {
102                        // prevent processing for both keydown and change events
103                        if (enterPressed) {
104                            enterPressed = false;
105                            return;
106                        }
107                    }
108                    if (!settings.filterOnFocusOut && event.type !== 'keydown') {
109                        return false;
110                    }
111
112                    methods.applyFilter.apply($e);
113
114                    return false;
115                });
116            });
117        },
118
119        applyFilter: function () {
120            var $grid = $(this);
121            var settings = gridData[$grid.attr('id')].settings;
122            var data = {};
123            $.each($(settings.filterSelector).serializeArray(), function () {
124                if (!(this.name in data)) {
125                    data[this.name] = [];
126                }
127                data[this.name].push(this.value);
128            });
129
130            var namesInFilter = Object.keys(data);
131
132            $.each(yii.getQueryParams(settings.filterUrl), function (name, value) {
133                if (namesInFilter.indexOf(name) === -1 && namesInFilter.indexOf(name.replace(/\[\d*\]$/, '')) === -1) {
134                    if (!$.isArray(value)) {
135                        value = [value];
136                    }
137                    if (!(name in data)) {
138                        data[name] = value;
139                    } else {
140                        $.each(value, function (i, val) {
141                            if ($.inArray(val, data[name])) {
142                                data[name].push(val);
143                            }
144                        });
145                    }
146                }
147            });
148
149            var pos = settings.filterUrl.indexOf('?');
150            var url = pos < 0 ? settings.filterUrl : settings.filterUrl.substring(0, pos);
151            var hashPos = settings.filterUrl.indexOf('#');
152            if (pos >= 0 && hashPos >= 0) {
153                url += settings.filterUrl.substring(hashPos);
154            }
155
156            $grid.find('form.gridview-filter-form').remove();
157            var $form = $('<form/>', {
158                action: url,
159                method: 'get',
160                'class': 'gridview-filter-form',
161                style: 'display:none',
162                'data-pjax': ''
163            }).appendTo($grid);
164            $.each(data, function (name, values) {
165                $.each(values, function (index, value) {
166                    $form.append($('<input/>').attr({type: 'hidden', name: name, value: value}));
167                });
168            });
169
170            var event = $.Event(gridEvents.beforeFilter);
171            $grid.trigger(event);
172            if (event.result === false) {
173                return;
174            }
175
176            $form.submit();
177
178            $grid.trigger(gridEvents.afterFilter);
179        },
180
181        setSelectionColumn: function (options) {
182            var $grid = $(this);
183            var id = $(this).attr('id');
184            if (gridData[id] === undefined) {
185                gridData[id] = {};
186            }
187            gridData[id].selectionColumn = options.name;
188            if (!options.multiple || !options.checkAll) {
189                return;
190            }
191            var checkAll = "#" + id + " input[name='" + options.checkAll + "']";
192            var inputs = options['class'] ? "input." + options['class'] : "input[name='" + options.name + "']";
193            var inputsEnabled = "#" + id + " " + inputs + ":enabled";
194            initEventHandler($grid, 'checkAllRows', 'click.yiiGridView', checkAll, function () {
195                $grid.find(inputs + ":enabled").prop('checked', this.checked).change();
196            });
197            initEventHandler($grid, 'checkRow', 'click.yiiGridView', inputsEnabled, function () {
198                var all = $grid.find(inputs).length == $grid.find(inputs + ":checked").length;
199                $grid.find("input[name='" + options.checkAll + "']").prop('checked', all).change();
200            });
201        },
202
203        getSelectedRows: function () {
204            var $grid = $(this);
205            var data = gridData[$grid.attr('id')];
206            var keys = [];
207            if (data.selectionColumn) {
208                $grid.find("input[name='" + data.selectionColumn + "']:checked").each(function () {
209                    keys.push($(this).parent().closest('tr').data('key'));
210                });
211            }
212
213            return keys;
214        },
215
216        destroy: function () {
217            var events = ['.yiiGridView', gridEvents.beforeFilter, gridEvents.afterFilter].join(' ');
218            this.off(events);
219
220            var id = $(this).attr('id');
221            $.each(gridEventHandlers[id], function (type, data) {
222                $(document).off(data.event, data.selector);
223            });
224
225            delete gridData[id];
226
227            return this;
228        },
229
230        data: function () {
231            var id = $(this).attr('id');
232            return gridData[id];
233        }
234    };
235
236    /**
237     * Used for attaching event handler and prevent of duplicating them. With each call previously attached handler of
238     * the same type is removed even selector was changed.
239     * @param {jQuery} $gridView According jQuery grid view element
240     * @param {string} type Type of the event which acts like a key
241     * @param {string}
241 event Event name, for example 'change.yiiGridView'
242     * @param {string} selector jQuery selector
243     * @param {function} callback The actual function to be executed with this event
244     */
245    function initEventHandler($gridView, type, event, selector, callback) {
246        var id = $gridView.attr('id');
247        var prevHandler = gridEventHandlers[id];
248        if (prevHandler !== undefined && prevHandler[type] !== undefined) {
249            var data = prevHandler[type];
250            $(document).off(data.event, data.selector);
251        }
252        if (prevHandler === undefined) {
253            gridEventHandlers[id] = {};
254        }
255        $(document).on(event, selector, callback);
256        gridEventHandlers[id][type] = {event: event, selector: selector};
257    }
258})(window.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.