PageSourceSearch

https://www.iidh.ed.cr/media/vendor/debugbar/openhandler.js

js iidh.ed.cr collected 2026-09-24 09:35:02 UTC 7,408 bytes, 208 lines download raw bytes

1if (typeof(PhpDebugBar) == 'undefined') {
2    // namespace
3    var PhpDebugBar = {};
4    PhpDebugBar.$ = jQuery;
5}
6
7(function($) {
8
9    var csscls = function(cls) {
10        return PhpDebugBar.utils.csscls(cls, 'phpdebugbar-openhandler-');
11    };
12
13    PhpDebugBar.OpenHandler = PhpDebugBar.Widget.extend({
14
15        className: 'phpdebugbar-openhandler',
16
17        defaults: {
18            items_per_page: 20
19        },
20
21        render: function() {
22            var self = this;
23
24            this.$el.appendTo('body').hide();
25            this.$closebtn = $('<a><i class="phpdebugbar-fa phpdebugbar-fa-times"></i></a>');
26            this.$table = $('<tbody />');
27            $('<div>PHP DebugBar | Open</div>').addClass(csscls('header')).append(this.$closebtn).appendTo(this.$el);
28            $('<table><thead><tr><th width="155">Date</th><th width="75">Method</th><th>URL</th><th width="125">IP</th><th width="100">Filter data</th></tr></thead></table>').append(this.$table).appendTo(this.$el);
29            this.$actions = $('<div />').addClass(csscls('actions')).appendTo(this.$el);
30
31            this.$closebtn.on('click', function() {
32                self.hide();
33            });
34
35            this.$loadmorebtn = $('<a>Load more</a>')
36                .appendTo(this.$actions)
37                .on('click', function() {
38                    self.find(self.last_find_request, self.last_find_request.offset + self.get('items_per_page'), self.handleFind.bind(self));
39                });
40
41            this.$showonlycurrentbtn = $('<a>Show only current URL</a>')
42                .appendTo(this.$actions)
43                .on('click', function() {
44                    self.$table.empty();
45                    self.find({uri: window.location.pathname}, 0, self.handleFind.bind(self));
46                });
47
48            this.$showallbtn = $('<a>Show all</a>')
49                .appendTo(this.$actions)
50                .on('click', function() {
51                    self.refresh();
52                });
53
54            this.$clearbtn = $('<a>Delete all</a>')
55                .appendTo(this.$actions)
56                .on('click', function() {
57                    self.clear(function() {
58                        self.hide();
59                    });
60                });
61
62            this.addSearch();
63
64            this.$overlay = $('<div />').addClass(csscls('overlay')).hide().appendTo('body');
65            this.$overlay.on('click', function() {
66                self.hide();
67            });
68        },
69
70        refresh: function() {
71            this.$table.empty();
72            this.$loadmorebtn.show();
73            this.find({}, 0, this.handleFind.bind(this));
74        },
75
76        addSearch: function(){
77            var self = this;
78            var searchBtn = $('<button />')
79                .text('Search')
80                .attr('type', 'submit')
81                .on('click', function(e) {
82                    self.$table.empty();
83                    var search = {};
84                    var a = $(this).parent().serializeArray();
85                    $.each(a, function() {
86                        if(this.value){
87                            search[this.name] = this.value;
88                        }
89                    });
90
91                    self.find(search, 0, self.handleFind.bind(self));
92                    e.preventDefault();
93                });
94
95            $('<form />')
96                .append('<br/><b>Filter results</b><br/>')
97                .append('<select name="method"><option selected>(Method)</option><option>GET</option><option>POST</option><option>PUT</option><option>DELETE</option></select>')
98                .append('<input type="text" name="uri" placeholder="URI">')
99                .append('<input type="text" name="ip" placeholder="IP">')
100                .append(searchBtn)
101                .appendTo(this.$actions);
102        },
103
104        handleFind: function(data) {
105            var self = this;
106            $.each(data, function(i, meta) {
107               var a = $('<a />')
108                    .text('Load dataset')
109                    .on('click', function(e) {
110                       self.hide();
111                       self.load(meta['id'], function(data) {
112                           self.callback(meta['id'], data);
113                       });
114                       e.preventDefault();
115                    });
116
117                var method = $('<a />')
118                    .text(meta['method'])
119                    .on('click', function(e) {
120                        self.$table.empty();
121                        self.find({method: meta['method']}, 0, self.handleFind.bind(self));
122                        e.preventDefault();
123                    });
124
125                var uri = $('<a />')
126                    .text(meta['uri'])
127                    .on('click', function(e) {
128                        self.hide();
129                        self.load(meta['id'], function(data) {
130                            self.callback(meta['id'], data);
131                        });
132                        e.preventDefault();
133                    });
134
135                var ip = $('<a />')
136                    .text(meta['ip'])
137                    .on('click', function(e) {
138                        self.$table.empty();
139                        self.find({ip: meta['ip']}, 0, self.handleFind.bind(self));
140                        e.preventDefault();
141                    });
142
143                var search = $('<a />')
144                    .text('Show URL')
145                    .on('click', function(e) {
146                        self.$table.empty();
147                        self.find({uri: meta['uri']}, 0, self.handleFind.bind(self));
148                        e.preventDefault();
149                    });
150
151                $('<tr />')
152                    .append('<td>' + meta['datetime'] + '</td>')
153                    .append('<td>' + meta['method'] + '</td>')
154                    .append($('<td />').append(uri))
155                    .append($('<td />').append(ip))
156                    .append($('<td />').append(search))
157                    .appendTo(self.$table);
158            });
159            if (data.length < this.get('items_per_page')) {
160                this.$loadmorebtn.hide();
161            }
162        },
163
164        show: function(callback) {
165            this.callback = callback;
166            this.$el.show();
167            this.$overlay.show();
168            this.refresh();
169        },
170
171        hide: function() {
172            this.$el.hide();
173            this.$overlay.hide();
174        },
175
176        find: function(filters, offset, callback) {
177            var data = $.extend({}, filters, {max: this.get('items_per_page'), offset: offset || 0});
178            this.last_find_request = data;
179            this.ajax(data, callback);
180        },
181
182        load: function(id, callback) {
183            this.ajax({op: "get", id: id}, callback);
184        },
185
186        clear: function(callback) {
187            this.ajax({op: "clear"}, callback);
188        },
189
190        ajax: function(data, callback) {
191            var url = this.get('url');
192            if (data) {
193                url = url + ( url.includes('?') ? '&' : '?' ) + new URLSearchParams(data);
194            }
195
196            fetch(url, {
197                method: "GET",
198                headers: {
199                    "Accept": "application/json",
200                },
201            })
202                .then((data) => data.json())
203                .then(callback);
204        }
205
206    });
207
208})(PhpDebugBar.$);

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.