first commit

This commit is contained in:
2025-06-17 11:53:18 +02:00
commit 9f0f7ba12b
8804 changed files with 1369176 additions and 0 deletions

View File

@ -0,0 +1,118 @@
div.phpdebugbar-widgets-sqlqueries .phpdebugbar-widgets-status {
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
padding: 6px 6px;
border-bottom: 1px solid #ddd;
font-weight: bold;
color: #555;
background: #fafafa;
}
div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-error {
color: red;
}
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database,
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration,
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory,
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count,
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard,
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id {
float: right;
margin-left: 8px;
color: #888;
}
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-database,
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-duration,
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-memory,
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-row-count,
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-copy-clipboard,
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-stmt-id {
color: #555;
}
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database:before,
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration:before,
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory:before,
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count:before,
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard:before,
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id:before {
font-family: PhpDebugbarFontAwesome;
margin-right: 4px;
font-size: 12px;
}
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database:before {
content: "\f1c0";
}
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration:before {
content: "\f017";
}
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory:before {
content: "\f085";
}
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count:before {
content: "\f0ce";
}
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id:before {
content: "\f08d";
}
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard:before {
content: "\f0c5";
}
div.phpdebugbar-widgets-sqlqueries table.phpdebugbar-widgets-params {
display: none;
width: 70%;
margin: 10px;
border: 1px solid #ddd;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
border-collapse: collapse;
}
div.phpdebugbar-widgets-sqlqueries table.phpdebugbar-widgets-params td {
border: 1px solid #ddd;
text-align: center;
}
div.phpdebugbar-widgets-sqlqueries table.phpdebugbar-widgets-params .phpdebugbar-widgets-name {
width: 20%;
font-weight: bold;
}
div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-error {
display: block;
font-weight: bold;
}
code.phpdebugbar-widgets-sql {
white-space: pre-wrap;
overflow-wrap: break-word;
word-wrap: break-word;
}
div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-sql-duplicate {
background-color: #edeff0;
}
div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-sql-duplicate:hover {
background-color: #ffc;
}
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-toolbar {
display:none;
position: fixed;
bottom: 0;
width: 100%;
background: #fff;
z-index: 1;
}
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter {
float: right;
font-size: 12px;
padding: 2px 4px;
background: #7cacd5;
margin: 0 2px;
border-radius: 4px;
color: #fff;
text-decoration: none;
}
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter.phpdebugbar-widgets-excluded {
background: #eee;
color: #888;
}

View File

@ -0,0 +1,171 @@
(function($) {
var csscls = PhpDebugBar.utils.makecsscls('phpdebugbar-widgets-');
/**
* Widget for the displaying sql queries
*
* Options:
* - data
*/
var SQLQueriesWidget = PhpDebugBar.Widgets.SQLQueriesWidget = PhpDebugBar.Widget.extend({
className: csscls('sqlqueries'),
onFilterClick: function(el) {
$(el).toggleClass(csscls('excluded'));
var excludedLabels = [];
this.$toolbar.find(csscls('.filter') + csscls('.excluded')).each(function() {
excludedLabels.push(this.rel);
});
this.$list.$el.find("li[connection=" + $(el).attr("rel") + "]").toggle();
this.set('exclude', excludedLabels);
},
onCopyToClipboard: function (el) {
var code = $(el).parent('li').find('code').get(0);
var copy = function () {
try {
document.execCommand('copy');
alert('Query copied to the clipboard');
} catch (err) {
console.log('Oops, unable to copy');
}
};
var select = function (node) {
if (document.selection) {
var range = document.body.createTextRange();
range.moveToElementText(node);
range.select();
} else if (window.getSelection) {
var range = document.createRange();
range.selectNodeContents(node);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
copy();
window.getSelection().removeAllRanges();
};
select(code);
},
render: function() {
this.$status = $('<div />').addClass(csscls('status')).appendTo(this.$el);
this.$toolbar = $('<div></div>').addClass(csscls('toolbar')).appendTo(this.$el);
var filters = [], self = this;
this.$list = new PhpDebugBar.Widgets.ListWidget({ itemRenderer: function(li, stmt) {
$('<code />').addClass(csscls('sql')).html(PhpDebugBar.Widgets.highlight(stmt.sql, 'sql')).appendTo(li);
if (stmt.duration_str) {
$('<span title="Duration" />').addClass(csscls('duration')).text(stmt.duration_str).appendTo(li);
}
if (stmt.memory_str) {
$('<span title="Memory usage" />').addClass(csscls('memory')).text(stmt.memory_str).appendTo(li);
}
if (typeof(stmt.row_count) != 'undefined') {
$('<span title="Row count" />').addClass(csscls('row-count')).text(stmt.row_count).appendTo(li);
}
if (typeof(stmt.stmt_id) != 'undefined' && stmt.stmt_id) {
$('<span title="Prepared statement ID" />').addClass(csscls('stmt-id')).text(stmt.stmt_id).appendTo(li);
}
if (stmt.connection) {
$('<span title="Connection" />').addClass(csscls('database')).text(stmt.connection).appendTo(li);
li.attr("connection",stmt.connection);
if ( $.inArray(stmt.connection, filters) == -1 ) {
filters.push(stmt.connection);
$('<a />')
.addClass(csscls('filter'))
.text(stmt.connection)
.attr('rel', stmt.connection)
.on('click', function() { self.onFilterClick(this); })
.appendTo(self.$toolbar);
if (filters.length>1) {
self.$toolbar.show();
self.$list.$el.css("margin-bottom","20px");
}
}
}
if (typeof(stmt.is_success) != 'undefined' && !stmt.is_success) {
li.addClass(csscls('error'));
li.append($('<span />').addClass(csscls('error')).text("[" + stmt.error_code + "] " + stmt.error_message));
}
$('<span title="Copy to clipboard" />')
.addClass(csscls('copy-clipboard'))
.css('cursor', 'pointer')
.on('click', function (event) {
self.onCopyToClipboard(this);
event.stopPropagation();
})
.appendTo(li);
if (stmt.params && !$.isEmptyObject(stmt.params)) {
var table = $('<table><tr><th colspan="2">Params</th></tr></table>').addClass(csscls('params')).appendTo(li);
for (var key in stmt.params) {
if (typeof stmt.params[key] !== 'function') {
table.append('<tr><td class="' + csscls('name') + '">' + key + '</td><td class="' + csscls('value') +
'">' + stmt.params[key] + '</td></tr>');
}
}
li.css('cursor', 'pointer').click(function() {
if (table.is(':visible')) {
table.hide();
} else {
table.show();
}
});
}
}});
this.$list.$el.appendTo(this.$el);
this.bindAttr('data', function(data) {
// the PDO collector maybe is empty
if (data.length <= 0) {
return false;
}
this.$list.set('data', data.statements);
this.$status.empty();
// Search for duplicate statements.
for (var sql = {}, unique = 0, duplicate = 0, i = 0; i < data.statements.length; i++) {
var stmt = data.statements[i].sql;
if (data.statements[i].params && !$.isEmptyObject(data.statements[i].params)) {
stmt += ' {' + $.param(data.statements[i].params, false) + '}';
}
sql[stmt] = sql[stmt] || { keys: [] };
sql[stmt].keys.push(i);
}
// Add classes to all duplicate SQL statements.
for (var stmt in sql) {
if (sql[stmt].keys.length > 1) {
duplicate += sql[stmt].keys.length;
for (var i = 0; i < sql[stmt].keys.length; i++) {
this.$list.$el.find('.' + csscls('list-item')).eq(sql[stmt].keys[i])
.addClass(csscls('sql-duplicate'));
}
} else {
unique++;
}
}
var t = $('<span />').text(data.nb_statements + " statements were executed").appendTo(this.$status);
if (data.nb_failed_statements) {
t.append(", " + data.nb_failed_statements + " of which failed");
}
if (duplicate) {
t.append(", " + duplicate + " of which were duplicates");
t.append(", " + unique + " unique");
}
if (data.accumulated_duration_str) {
this.$status.append($('<span title="Accumulated duration" />').addClass(csscls('duration')).text(data.accumulated_duration_str));
}
if (data.memory_usage_str) {
this.$status.append($('<span title="Memory usage" />').addClass(csscls('memory')).text(data.memory_usage_str));
}
});
}
});
})(PhpDebugBar.$);

View File

@ -0,0 +1 @@
div.phpdebugbar-widgets-sqlqueries .phpdebugbar-widgets-status{background:#fafafa;border-bottom:1px solid #ddd;color:#555;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:700;padding:6px}div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-error{color:red}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id{color:#888;float:right;margin-left:8px}div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-copy-clipboard,div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-database,div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-duration,div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-memory,div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-row-count,div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-stmt-id{color:#555}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id:before{font-family:PhpDebugbarFontAwesome;font-size:12px;margin-right:4px}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database:before{content:"\f1c0"}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration:before{content:"\f017"}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory:before{content:"\f085"}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count:before{content:"\f0ce"}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id:before{content:"\f08d"}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard:before{content:"\f0c5"}div.phpdebugbar-widgets-sqlqueries table.phpdebugbar-widgets-params{border:1px solid #ddd;border-collapse:collapse;display:none;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;margin:10px;width:70%}div.phpdebugbar-widgets-sqlqueries table.phpdebugbar-widgets-params td{border:1px solid #ddd;text-align:center}div.phpdebugbar-widgets-sqlqueries table.phpdebugbar-widgets-params .phpdebugbar-widgets-name{font-weight:700;width:20%}div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-error{display:block;font-weight:700}code.phpdebugbar-widgets-sql{word-wrap:break-word;overflow-wrap:break-word;white-space:pre-wrap}div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-sql-duplicate{background-color:#edeff0}div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-sql-duplicate:hover{background-color:#ffc}div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-toolbar{background:#fff;bottom:0;display:none;position:fixed;width:100%;z-index:1}div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter{background:#7cacd5;border-radius:4px;color:#fff;float:right;font-size:12px;margin:0 2px;padding:2px 4px;text-decoration:none}div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter.phpdebugbar-widgets-excluded{background:#eee;color:#888}

Binary file not shown.

View File

@ -0,0 +1 @@
!function(t){var e=PhpDebugBar.utils.makecsscls("phpdebugbar-widgets-");PhpDebugBar.Widgets.SQLQueriesWidget=PhpDebugBar.Widget.extend({className:e("sqlqueries"),onFilterClick:function(s){t(s).toggleClass(e("excluded"));var a=[];this.$toolbar.find(e(".filter")+e(".excluded")).each((function(){a.push(this.rel)})),this.$list.$el.find("li[connection="+t(s).attr("rel")+"]").toggle(),this.set("exclude",a)},onCopyToClipboard:function(e){var s=t(e).parent("li").find("code").get(0);!function(t){if(document.selection)(e=document.body.createTextRange()).moveToElementText(t),e.select();else if(window.getSelection){var e;(e=document.createRange()).selectNodeContents(t),window.getSelection().removeAllRanges(),window.getSelection().addRange(e)}!function(){try{document.execCommand("copy"),alert("Query copied to the clipboard")}catch(t){console.log("Oops, unable to copy")}}(),window.getSelection().removeAllRanges()}(s)},render:function(){this.$status=t("<div />").addClass(e("status")).appendTo(this.$el),this.$toolbar=t("<div></div>").addClass(e("toolbar")).appendTo(this.$el);var s=[],a=this;this.$list=new PhpDebugBar.Widgets.ListWidget({itemRenderer:function(n,o){if(t("<code />").addClass(e("sql")).html(PhpDebugBar.Widgets.highlight(o.sql,"sql")).appendTo(n),o.duration_str&&t('<span title="Duration" />').addClass(e("duration")).text(o.duration_str).appendTo(n),o.memory_str&&t('<span title="Memory usage" />').addClass(e("memory")).text(o.memory_str).appendTo(n),void 0!==o.row_count&&t('<span title="Row count" />').addClass(e("row-count")).text(o.row_count).appendTo(n),void 0!==o.stmt_id&&o.stmt_id&&t('<span title="Prepared statement ID" />').addClass(e("stmt-id")).text(o.stmt_id).appendTo(n),o.connection&&(t('<span title="Connection" />').addClass(e("database")).text(o.connection).appendTo(n),n.attr("connection",o.connection),-1==t.inArray(o.connection,s)&&(s.push(o.connection),t("<a />").addClass(e("filter")).text(o.connection).attr("rel",o.connection).on("click",(function(){a.onFilterClick(this)})).appendTo(a.$toolbar),s.length>1&&(a.$toolbar.show(),a.$list.$el.css("margin-bottom","20px")))),void 0===o.is_success||o.is_success||(n.addClass(e("error")),n.append(t("<span />").addClass(e("error")).text("["+o.error_code+"] "+o.error_message))),t('<span title="Copy to clipboard" />').addClass(e("copy-clipboard")).css("cursor","pointer").on("click",(function(t){a.onCopyToClipboard(this),t.stopPropagation()})).appendTo(n),o.params&&!t.isEmptyObject(o.params)){var i=t('<table><tr><th colspan="2">Params</th></tr></table>').addClass(e("params")).appendTo(n);for(var d in o.params)"function"!=typeof o.params[d]&&i.append('<tr><td class="'+e("name")+'">'+d+'</td><td class="'+e("value")+'">'+o.params[d]+"</td></tr>");n.css("cursor","pointer").click((function(){i.is(":visible")?i.hide():i.show()}))}}}),this.$list.$el.appendTo(this.$el),this.bindAttr("data",(function(s){if(s.length<=0)return!1;this.$list.set("data",s.statements),this.$status.empty();for(var a={},n=0,o=0,i=0;i<s.statements.length;i++){var d=s.statements[i].sql;s.statements[i].params&&!t.isEmptyObject(s.statements[i].params)&&(d+=" {"+t.param(s.statements[i].params,!1)+"}"),a[d]=a[d]||{keys:[]},a[d].keys.push(i)}for(var d in a)if(a[d].keys.length>1){o+=a[d].keys.length;for(i=0;i<a[d].keys.length;i++)this.$list.$el.find("."+e("list-item")).eq(a[d].keys[i]).addClass(e("sql-duplicate"))}else n++;var r=t("<span />").text(s.nb_statements+" statements were executed").appendTo(this.$status);s.nb_failed_statements&&r.append(", "+s.nb_failed_statements+" of which failed"),o&&(r.append(", "+o+" of which were duplicates"),r.append(", "+n+" unique")),s.accumulated_duration_str&&this.$status.append(t('<span title="Accumulated duration" />').addClass(e("duration")).text(s.accumulated_duration_str)),s.memory_usage_str&&this.$status.append(t('<span title="Memory usage" />').addClass(e("memory")).text(s.memory_usage_str))}))}})}(PhpDebugBar.$);

Binary file not shown.