Skip to content

Commit e23a98f

Browse files
webmailcontatosbarryvdh
authored andcommitted
Create feature copy query to clipboard (php-debugbar#352)
* Bugfix getSqlWithParams ReplacementParamsQuery * backward compatibility * Copy query to clipboard feature * remove space
1 parent 65ad97c commit e23a98f

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

src/DebugBar/Resources/widgets/sqlqueries/widget.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database,
1515
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration,
1616
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory,
1717
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count,
18+
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard,
1819
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id {
1920
float: right;
2021
margin-left: 8px;
@@ -24,13 +25,15 @@ div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugb
2425
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-duration,
2526
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-memory,
2627
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-row-count,
28+
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-copy-clipboard,
2729
div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-stmt-id {
2830
color: #555;
2931
}
3032
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database:before,
3133
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration:before,
3234
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory:before,
3335
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count:before,
36+
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard:before,
3437
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id:before {
3538
font-family: PhpDebugbarFontAwesome;
3639
margin-right: 4px;
@@ -51,6 +54,9 @@ div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count:before {
5154
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id:before {
5255
content: "\f08d";
5356
}
57+
div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard:before {
58+
content: "\f0c5";
59+
}
5460
div.phpdebugbar-widgets-sqlqueries table.phpdebugbar-widgets-params {
5561
display: none;
5662
width: 70%;

src/DebugBar/Resources/widgets/sqlqueries/widget.js

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,32 @@
2424

2525
this.set('exclude', excludedLabels);
2626
},
27-
27+
onCopyToClipboard: function (el) {
28+
var code = $(el).parent('li').find('code').get(0);
29+
var copy = function () {
30+
try {
31+
document.execCommand('copy');
32+
alert('Query copied to the clipboard');
33+
} catch (err) {
34+
console.log('Oops, unable to copy');
35+
}
36+
};
37+
var select = function (node) {
38+
if (document.selection) {
39+
var range = document.body.createTextRange();
40+
range.moveToElementText(node);
41+
range.select();
42+
} else if (window.getSelection) {
43+
var range = document.createRange();
44+
range.selectNodeContents(node);
45+
window.getSelection().removeAllRanges();
46+
window.getSelection().addRange(range);
47+
}
48+
copy();
49+
window.getSelection().removeAllRanges();
50+
};
51+
select(code);
52+
},
2853
render: function() {
2954
this.$status = $('<div />').addClass(csscls('status')).appendTo(this.$el);
3055

@@ -67,6 +92,14 @@
6792
li.addClass(csscls('error'));
6893
li.append($('<span />').addClass(csscls('error')).text("[" + stmt.error_code + "] " + stmt.error_message));
6994
}
95+
$('<span title="Copy to clipboard" />')
96+
.addClass(csscls('copy-clipboard'))
97+
.css('cursor', 'pointer')
98+
.on('click', function (event) {
99+
self.onCopyToClipboard(this);
100+
event.stopPropagation();
101+
})
102+
.appendTo(li);
70103
if (stmt.params && !$.isEmptyObject(stmt.params)) {
71104
var table = $('<table><tr><th colspan="2">Params</th></tr></table>').addClass(csscls('params')).appendTo(li);
72105
for (var key in stmt.params) {

0 commit comments

Comments
 (0)