2 lines
6.0 KiB
JavaScript
2 lines
6.0 KiB
JavaScript
(function(t){var a=PhpDebugBar.utils.makecsscls("phpdebugbar-widgets-"),c=PhpDebugBar.Widgets.SQLQueriesWidget=PhpDebugBar.Widget.extend({className:a("sqlqueries"),onFilterClick:function(d){t(d).toggleClass(a("excluded")),this.$list.$el.find("li[connection="+t(d).attr("rel")+"]").toggle()},onCopyToClipboard:function(d){var o=t(d).parent("li").find("code").get(0),n=function(){try{document.execCommand("copy"),t(d).addClass(a("copy-clipboard-check")),setTimeout(function(){t(d).removeClass(a("copy-clipboard-check"))},2e3)}catch{console.log("Oops, unable to copy")}},e=function(p){if(document.selection){var s=document.body.createTextRange();s.moveToElementText(p),s.select()}else if(window.getSelection){var s=document.createRange();s.selectNodeContents(p),window.getSelection().removeAllRanges(),window.getSelection().addRange(s)}n(),window.getSelection().removeAllRanges()};e(o)},renderList:function(d,o,n){var e=t("<ul />").addClass(a("table-list")),p,s=t("<li />").addClass(a("table-list-item")),i=t("<span />").addClass("phpdebugbar-text-muted");for(var l in n){var r=typeof n[l]=="function"?n[l].name+" {}":n[l];s.clone().append(typeof r=="object"&&r!==null?[i.clone().text(r.index||l).append(".")," "].concat(r.namespace?[r.namespace+"::"]:[]).concat([r.name||r.file]).concat(r.line?[i.clone().text(":"+r.line)]:[]):[i.clone().text(l+":")," ",r]).appendTo(e)}return d+=o?' <i class="phpdebugbar-fa phpdebugbar-fa-'+o+' phpdebugbar-text-muted"></i>':"",t("<tr />").append(t("<td />").addClass(a("name")).html(d),t("<td />").addClass(a("value")).append(e))},render:function(){this.$status=t("<div />").addClass(a("status")).appendTo(this.$el),this.$toolbar=t("<div />").addClass(a("toolbar")).appendTo(this.$el);var d=[],o=this;this.$list=new PhpDebugBar.Widgets.ListWidget({itemRenderer:function(n,e){if(e.type==="transaction"?t("<strong />").addClass(a("sql")).addClass(a("name")).text(e.sql).appendTo(n):t("<code />").addClass(a("sql")).html(PhpDebugBar.Widgets.highlight(e.sql,"sql")).appendTo(n),e.width_percent&&t("<div />").addClass(a("bg-measure")).append(t("<div />").addClass(a("value")).css({left:e.start_percent+"%",width:Math.max(e.width_percent,.01)+"%"})).appendTo(n),e.duration_str&&t('<span title="Duration" />').addClass(a("duration")).text(e.duration_str).appendTo(n),e.memory_str&&t('<span title="Memory usage" />').addClass(a("memory")).text(e.memory_str).appendTo(n),typeof e.row_count<"u"&&t('<span title="Row count" />').addClass(a("row-count")).text(e.row_count).appendTo(n),typeof e.stmt_id<"u"&&e.stmt_id&&t('<span title="Prepared statement ID" />').addClass(a("stmt-id")).text(e.stmt_id).appendTo(n),e.connection&&(t('<span title="Connection" />').addClass(a("database")).text(e.connection).appendTo(n),n.attr("connection",e.connection),t.inArray(e.connection,d)==-1&&(d.push(e.connection),t("<a />").addClass(a("filter")).text(e.connection).attr("rel",e.connection).on("click",function(){o.onFilterClick(this)}).appendTo(o.$toolbar),d.length>1&&(o.$toolbar.show(),o.$list.$el.css("margin-bottom","20px")))),typeof e.is_success<"u"&&!e.is_success&&(n.addClass(a("error")),n.append(t("<span />").addClass(a("error")).text("["+e.error_code+"] "+e.error_message))),(!e.type||e.type==="query")&&t('<span title="Copy to clipboard" />').addClass(a("copy-clipboard")).css("cursor","pointer").html("​").on("click",function(i){o.onCopyToClipboard(this),i.stopPropagation()}).appendTo(n),typeof e.xdebug_link<"u"&&e.xdebug_link){var p=t('<span title="Filename" />').addClass(a("filename")).text(e.xdebug_link.filename+(e.xdebug_link.line?"#"+e.xdebug_link.line:""));t('<a href="'+e.xdebug_link.url+'"></a>').on("click",function(){event.stopPropagation(),e.xdebug_link.ajax&&(fetch(e.xdebug_link.url),event.preventDefault())}).addClass(a("editor-link")).appendTo(p),p.appendTo(n)}var s=t("<table></table>").addClass(a("params"));e.params&&!t.isEmptyObject(e.params)&&o.renderList("Params","thumb-tack",e.params).appendTo(s),e.bindings&&!t.isEmptyObject(e.bindings)&&o.renderList("Bindings","thumb-tack",e.bindings).appendTo(s),e.hints&&!t.isEmptyObject(e.hints)&&o.renderList("Hints","question-circle",e.hints).appendTo(s),e.backtrace&&!t.isEmptyObject(e.backtrace)&&o.renderList("Backtrace","list-ul",e.backtrace).appendTo(s),s.find("tr").length&&(s.appendTo(n),n.css("cursor","pointer").click(function(){if(window.getSelection().type=="Range")return"";s.is(":visible")?s.hide():s.show()}))}}),this.$list.$el.appendTo(this.$el),this.bindAttr("data",function(n){if(n.length<=0||!n.statements)return!1;d=[],this.$toolbar.hide().find(a(".filter")).remove(),this.$list.set("data",n.statements),this.$status.empty();for(var e={},p=0,s=0;s<n.statements.length;s++)if(!(n.statements[s].type&&n.statements[s].type!=="query")){var i=n.statements[s].sql;n.statements[s].params&&!t.isEmptyObject(n.statements[s].params)&&(i+=JSON.stringify(n.statements[s].params)),n.statements[s].bindings&&!t.isEmptyObject(n.statements[s].bindings)&&(i+=JSON.stringify(n.statements[s].bindings)),n.statements[s].connection&&(i+="@"+n.statements[s].connection),e[i]=e[i]||{keys:[]},e[i].keys.push(s)}for(var i in e)if(e[i].keys.length>1){p+=e[i].keys.length;for(var s=0;s<e[i].keys.length;s++)this.$list.$el.find("."+a("list-item")).eq(e[i].keys[s]).addClass(a("sql-duplicate"))}var l=t("<span />").text(n.nb_statements+" statements were executed").appendTo(this.$status);if(n.nb_failed_statements&&l.append(", "+n.nb_failed_statements+" of which failed"),p){l.append(", "+p+" of which were duplicates"),l.append(", "+(n.nb_statements-p)+" unique. ");var r="Show only duplicated";t("<a />").addClass(a("duplicates")).click(function(){t(this).toggleClass("shown-duplicated").text(t(this).hasClass("shown-duplicated")?"Show All":r),t("."+o.className+" ."+a("list-item")).not("."+a("sql-duplicate")).toggle()}).text(r).appendTo(l)}n.accumulated_duration_str&&this.$status.append(t('<span title="Accumulated duration" />').addClass(a("duration")).text(n.accumulated_duration_str)),n.memory_usage_str&&this.$status.append(t('<span title="Memory usage" />').addClass(a("memory")).text(n.memory_usage_str))})}})})(PhpDebugBar.$);
|