Add ability to report filter issue from popup panel

Related issue:
- https://github.com/uBlockOrigin/uBlock-issues/issues/1541

A "chat" icon has been added to the popup panel to make
it easy to report filter issue on specific sites.

Reporting filter issues require a GitHub account, since
uBO does not have a home server through which reports could
be sent.

The report icon is available only for when uBO is enabled
on a given site.

On mobile devices, the logger icon is replaced by the "chat"
icon since it is more likely to be useful on small display
devices. The logger can always be opened from the Support
pane in the dashboard.
This commit is contained in:
Raymond Hill 2021-11-11 12:49:55 -05:00
parent 185816187d
commit eccf613edf
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
13 changed files with 310 additions and 73 deletions

View File

@ -127,6 +127,10 @@
"message": "Open the logger",
"description": "Tooltip used for the logger icon in the panel"
},
"popupTipReport": {
"message": "Report an issue on this website",
"description": "Tooltip used for the 'chat' icon in the panel"
},
"popupTipNoPopups": {
"message": "Toggle the blocking of all popups for this site",
"description": "Tooltip for the no-popups per-site switch"
@ -856,6 +860,14 @@
"message": "Open",
"description": "Text for button which open an external webpage in Support pane"
},
"supportReportSpecificButton": {
"message": "Create new report",
"description": "Text for button which open an external webpage in Support pane"
},
"supportFindSpecificButton": {
"message": "Find similar reports",
"description": "A clickable link in the filter issue reporter section"
},
"supportS1H": {
"message": "Documentation",
"description": "Header of 'Documentation' section in Support pane"
@ -908,6 +920,46 @@
"message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
"description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
},
"supportS6H": {
"message": "Report a filter issue",
"description": "Header of 'Report a filter issue' section in Support pane"
},
"supportS6P1S1": {
"message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
"description": "A paragraph in the filter issue reporter section"
},
"supportS6URL": {
"message": "Address of the web page:",
"description": "Label for the URL of the page"
},
"supportS6Select1": {
"message": "The web page...",
"description": "Label for widget to select type of issue"
},
"supportS6Select1Option0": {
"message": "-- Pick an entry --",
"description": "An entry in the widget used to select the type of issue"
},
"supportS6Select1Option1": {
"message": "Shows ads or ad leftovers",
"description": "An entry in the widget used to select the type of issue"
},
"supportS6Select1Option2": {
"message": "Has overlays or other nuisances",
"description": "An entry in the widget used to select the type of issue"
},
"supportS6Select1Option3": {
"message": "Detects uBlock Origin",
"description": "An entry in the widget used to select the type of issue"
},
"supportS6Select1Option4": {
"message": "Has privacy-related issues",
"description": "An entry in the widget used to select the type of issue"
},
"supportS6Select1Option5": {
"message": "Breaks when uBlock Origin is enabled",
"description": "An entry in the widget used to select the type of issue"
},
"supportRedact": {
"message": "Redact",
"description": "Text for 'Redact' button"

View File

@ -64,6 +64,7 @@
width: calc(1em * 1794 / 1792);
}
.fa-icon > .fa-icon_clipboard,
.fa-icon > .fa-icon_comment-alt,
.fa-icon > .fa-icon_external-link,
.fa-icon > .fa-icon_eye-dropper,
.fa-icon > .fa-icon_eye-open,

View File

@ -203,6 +203,10 @@ body.mobile.no-tooltips .toolRibbon .tool {
font-size: 1.6em;
}
#basicTools:not(.canPick) .needPick {
visibility: hidden;
}
#extraTools .fa-icon {
align-self: center;
position: relative;
@ -576,6 +580,9 @@ body.godMode #actionSelector > #dynaAllow {
:root body[data-ui~="+no-popups"] #no-popups {
display: flex;
}
:root.mobile [href="logger-ui.html#_"] {
display: none;
}
body:not([data-more~="a"]) [data-more="a"],
body:not([data-more~="b"]) [data-more="b"],
body:not([data-more~="c"]) [data-more="c"],

View File

@ -2,21 +2,52 @@ body {
margin-bottom: 6rem;
}
.body > div {
max-width: 800px;
}
.supportEntry {
display: flex;
margin-top: 1em;
}
:root.mobile .supportEntry {
flex-direction: column;
}
.supportEntry > div:first-of-type {
flex-grow: 1;
}
.supportEntry > div:last-of-type {
.supportEntry > div.hasButtons {
align-items: center;
display: flex;
justify-content: space-around;
}
.supportEntry h3 {
margin-top: 0;
}
.e > .supportEntry {
flex-direction: column;
}
.e > .supportEntry > div:not(:first-of-type) {
margin-top: 1em;
}
.e > .supportEntry *:is(input,select) {
padding: var(--default-gap-xxsmall);
}
.e > .supportEntry input[type="url"] {
width: 100%;
}
.e > .supportEntry *:is(input,select) {
max-width: calc(100% - 1em);
}
body:not(.filterIssue) .body > div.e {
display: none;
}
body.filterIssue .body > div:not(.e) {
display: none;
}
button {
margin-inline-end: 1em;
-webkit-margin-end: 1em;

View File

@ -38,6 +38,7 @@ License - https://github.com/FortAwesome/Font-Awesome/tree/a8386aae19e200ddb0f68
<symbol id="code" viewBox="0 0 1830 1373"><path d="m 572,1125.5 -50,50 q -10,10 -23,10 -13,0 -23,-10 l -466,-466 q -10,-10 -10,-23 0,-13 10,-23 l 466,-466 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 l -393,393 393,393 q 10,10 10,23 0,13 -10,23 z M 1163,58.476203 790,1349.4762 q -4,13 -15.5,19.5 -11.5,6.5 -23.5,2.5 l -62,-17 q -13,-4 -19.5,-15.5 -6.5,-11.5 -2.5,-24.5 L 1040,23.5 q 4,-13 15.5,-19.5 11.5,-6.5 23.5,-2.5 l 62,17 q 13,4 19.5,15.5 6.5,11.5 2.5,24.5 z m 657,651 -466,466 q -10,10 -23,10 -13,0 -23,-10 l -50,-50 q -10,-10 -10,-23 0,-13 10,-23 l 393,-393 -393,-393 q -10,-10 -10,-23 0,-13 10,-23 l 50,-50 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 0,13 -10,23 z"/></symbol>
<symbol id="cog" viewBox="0 0 1536 1536"><path d="m 1024,768 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 0,106 75,181 75,75 181,75 106,0 181,-75 75,-75 75,-181 z m 512,-109 0,222 q 0,12 -8,23 -8,11 -20,13 l -185,28 q -19,54 -39,91 35,50 107,138 10,12 10,25 0,13 -9,23 -27,37 -99,108 -72,71 -94,71 -12,0 -26,-9 l -138,-108 q -44,23 -91,38 -16,136 -29,186 -7,28 -36,28 l -222,0 q -14,0 -24.5,-8.5 Q 622,1519 621,1506 l -28,-184 q -49,-16 -90,-37 l -141,107 q -10,9 -25,9 -14,0 -25,-11 -126,-114 -165,-168 -7,-10 -7,-23 0,-12 8,-23 15,-21 51,-66.5 36,-45.5 54,-70.5 -27,-50 -41,-99 L 29,913 Q 16,911 8,900.5 0,890 0,877 L 0,655 q 0,-12 8,-23 8,-11 19,-13 l 186,-28 q 14,-46 39,-92 -40,-57 -107,-138 -10,-12 -10,-24 0,-10 9,-23 26,-36 98.5,-107.5 Q 315,135 337,135 q 13,0 26,10 L 501,252 Q 545,229 592,214 608,78 621,28 628,0 657,0 L 879,0 Q 893,0 903.5,8.5 914,17 915,30 l 28,184 q 49,16 90,37 l 142,-107 q 9,-9 24,-9 13,0 25,10 129,119 165,170 7,8 7,22 0,12 -8,23 -15,21 -51,66.5 -36,45.5 -54,70.5 26,50 41,98 l 183,28 q 13,2 21,12.5 8,10.5 8,23.5 z"/></symbol>
<symbol id="cogs" viewBox="0 0 1920 1761"><path d="m 896,880 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 0,106 75,181 75,75 181,75 106,0 181,-75 75,-75 75,-181 z m 768,512 q 0,-52 -38,-90 -38,-38 -90,-38 -52,0 -90,38 -38,38 -38,90 0,53 37.5,90.5 37.5,37.5 90.5,37.5 53,0 90.5,-37.5 37.5,-37.5 37.5,-90.5 z m 0,-1024 q 0,-52 -38,-90 -38,-38 -90,-38 -52,0 -90,38 -38,38 -38,90 0,53 37.5,90.5 37.5,37.5 90.5,37.5 53,0 90.5,-37.5 Q 1664,421 1664,368 Z m -384,421 v 185 q 0,10 -7,19.5 -7,9.5 -16,10.5 l -155,24 q -11,35 -32,76 34,48 90,115 7,11 7,20 0,12 -7,19 -23,30 -82.5,89.5 -59.5,59.5 -78.5,59.5 -11,0 -21,-7 l -115,-90 q -37,19 -77,31 -11,108 -23,155 -7,24 -30,24 H 547 q -11,0 -20,-7.5 -9,-7.5 -10,-17.5 l -23,-153 q -34,-10 -75,-31 l -118,89 q -7,7 -20,7 -11,0 -21,-8 -144,-133 -144,-160 0,-9 7,-19 10,-14 41,-53 31,-39 47,-61 -23,-44 -35,-82 L 24,1000 Q 14,999 7,990.5 0,982 0,971 V 786 Q 0,776 7,766.5 14,757 23,756 l 155,-24 q 11,-35 32,-76 -34,-48 -90,-115 -7,-11 -7,-20 0,-12 7,-20 22,-30 82,-89 60,-59 79,-59 11,0 21,7 l 115,90 q 34,-18 77,-32 11,-108 23,-154 7,-24 30,-24 h 186 q 11,0 20,7.5 9,7.5 10,17.5 l 23,153 q 34,10 75,31 l 118,-89 q 8,-7 20,-7 11,0 21,8 144,133 144,160 0,8 -7,19 -12,16 -42,54 -30,38 -45,60 23,48 34,82 l 152,23 q 10,2 17,10.5 7,8.5 7,19.5 z m 640,533 v 140 q 0,16 -149,31 -12,27 -30,52 51,113 51,138 0,4 -4,7 -122,71 -124,71 -8,0 -46,-47 -38,-47 -52,-68 -20,2 -30,2 -10,0 -30,-2 -14,21 -52,68 -38,47 -46,47 -2,0 -124,-71 -4,-3 -4,-7 0,-25 51,-138 -18,-25 -30,-52 -149,-15 -149,-31 v -140 q 0,-16 149,-31 13,-29 30,-52 -51,-113 -51,-138 0,-4 4,-7 4,-2 35,-20 31,-18 59,-34 28,-16 30,-16 8,0 46,46.5 38,46.5 52,67.5 20,-2 30,-2 10,0 30,2 51,-71 92,-112 l 6,-2 q 4,0 124,70 4,3 4,7 0,25 -51,138 17,23 30,52 149,15 149,31 z m 0,-1024 v 140 q 0,16 -149,31 -12,27 -30,52 51,113 51,138 0,4 -4,7 -122,71 -124,71 -8,0 -46,-47 -38,-47 -52,-68 -20,2 -30,2 -10,0 -30,-2 -14,21 -52,68 -38,47 -46,47 -2,0 -124,-71 -4,-3 -4,-7 0,-25 51,-138 -18,-25 -30,-52 -149,-15 -149,-31 V 298 q 0,-16 149,-31 13,-29 30,-52 -51,-113 -51,-138 0,-4 4,-7 4,-2 35,-20 31,-18 59,-34 28,-16 30,-16 8,0 46,46.5 38,46.5 52,67.5 20,-2 30,-2 10,0 30,2 51,-71 92,-112 l 6,-2 q 4,0 124,70 4,3 4,7 0,25 -51,138 17,23 30,52 149,15 149,31 z"/></symbol>
<symbol id="comment-alt" viewBox="0 0 1792 1536"><path d="M 896,128 Q 692,128 514.5,197.5 337,267 232.5,385 128,503 128,640 128,752 199.5,853.5 271,955 401,1029 l 87,50 -27,96 q -24,91 -70,172 152,-63 275,-171 l 43,-38 57,6 q 69,8 130,8 204,0 381.5,-69.5 Q 1455,1013 1559.5,895 1664,777 1664,640 1664,503 1559.5,385 1455,267 1277.5,197.5 1100,128 896,128 Z m 896,512 q 0,174 -120,321.5 -120,147.5 -326,233 -206,85.5 -450,85.5 -70,0 -145,-8 -198,175 -460,242 -49,14 -114,22 h -5 q -15,0 -27,-10.5 -12,-10.5 -16,-27.5 v -1 q -3,-4 -0.5,-12 2.5,-8 2,-10 -0.5,-2 4.5,-9.5 l 6,-9 q 0,0 7,-8.5 7,-8.5 8,-9 7,-8 31,-34.5 24,-26.5 34.5,-38 10.5,-11.5 31,-39.5 20.5,-28 32.5,-51 12,-23 27,-59 15,-36 26,-76 Q 181,1052 90.5,921 0,790 0,640 0,466 120,318.5 240,171 446,85.5 652,0 896,0 q 244,0 450,85.5 206,85.5 326,233 120,147.5 120,321.5 z"/></symbol>
<symbol id="double-angle-left" viewBox="0 0 966 998"><path d="m 582,915 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 L 179,499 572,892 q 10,10 10,23 z m 384,0 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 394,522 q -10,-10 -10,-23 0,-13 10,-23 L 860,10 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 L 563,499 956,892 q 10,10 10,23 z"/></symbol>
<symbol id="double-angle-up" viewBox="0 0 998 966"><path d="m 998,883 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,563 106,956 Q 96,966 83,966 70,966 60,956 L 10,906 Q 0,896 0,883 0,870 10,860 L 476,394 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z m 0,-384 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,179 106,572 Q 96,582 83,582 70,582 60,572 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z"/></symbol>
<symbol id="download_alt" viewBox="0 0 1664 1536"><path d="m 1280,1344 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 256,0 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 128,-224 v 320 q 0,40 -28,68 -28,28 -68,28 H 96 q -40,0 -68,-28 -28,-28 -28,-68 v -320 q 0,-40 28,-68 28,-28 68,-28 h 465 l 135,136 q 58,56 136,56 78,0 136,-56 l 136,-136 h 464 q 40,0 68,28 28,28 28,68 z M 1339,551 q 17,41 -14,70 l -448,448 q -18,19 -45,19 -27,0 -45,-19 L 339,621 q -31,-29 -14,-70 17,-39 59,-39 H 640 V 64 Q 640,38 659,19 678,0 704,0 h 256 q 26,0 45,19 19,19 19,45 v 448 h 256 q 42,0 59,39 z"/></symbol>

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -40,6 +40,7 @@ const faIconsInit = (( ) => {
[ 'code', { viewBox: '0 0 1830 1373', path: 'm 572,1125.5 -50,50 q -10,10 -23,10 -13,0 -23,-10 l -466,-466 q -10,-10 -10,-23 0,-13 10,-23 l 466,-466 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 l -393,393 393,393 q 10,10 10,23 0,13 -10,23 z M 1163,58.476203 790,1349.4762 q -4,13 -15.5,19.5 -11.5,6.5 -23.5,2.5 l -62,-17 q -13,-4 -19.5,-15.5 -6.5,-11.5 -2.5,-24.5 L 1040,23.5 q 4,-13 15.5,-19.5 11.5,-6.5 23.5,-2.5 l 62,17 q 13,4 19.5,15.5 6.5,11.5 2.5,24.5 z m 657,651 -466,466 q -10,10 -23,10 -13,0 -23,-10 l -50,-50 q -10,-10 -10,-23 0,-13 10,-23 l 393,-393 -393,-393 q -10,-10 -10,-23 0,-13 10,-23 l 50,-50 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 0,13 -10,23 z' } ],
[ 'cog', { viewBox: '0 0 1536 1536', path: 'm 1024,768 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 0,106 75,181 75,75 181,75 106,0 181,-75 75,-75 75,-181 z m 512,-109 0,222 q 0,12 -8,23 -8,11 -20,13 l -185,28 q -19,54 -39,91 35,50 107,138 10,12 10,25 0,13 -9,23 -27,37 -99,108 -72,71 -94,71 -12,0 -26,-9 l -138,-108 q -44,23 -91,38 -16,136 -29,186 -7,28 -36,28 l -222,0 q -14,0 -24.5,-8.5 Q 622,1519 621,1506 l -28,-184 q -49,-16 -90,-37 l -141,107 q -10,9 -25,9 -14,0 -25,-11 -126,-114 -165,-168 -7,-10 -7,-23 0,-12 8,-23 15,-21 51,-66.5 36,-45.5 54,-70.5 -27,-50 -41,-99 L 29,913 Q 16,911 8,900.5 0,890 0,877 L 0,655 q 0,-12 8,-23 8,-11 19,-13 l 186,-28 q 14,-46 39,-92 -40,-57 -107,-138 -10,-12 -10,-24 0,-10 9,-23 26,-36 98.5,-107.5 Q 315,135 337,135 q 13,0 26,10 L 501,252 Q 545,229 592,214 608,78 621,28 628,0 657,0 L 879,0 Q 893,0 903.5,8.5 914,17 915,30 l 28,184 q 49,16 90,37 l 142,-107 q 9,-9 24,-9 13,0 25,10 129,119 165,170 7,8 7,22 0,12 -8,23 -15,21 -51,66.5 -36,45.5 -54,70.5 26,50 41,98 l 183,28 q 13,2 21,12.5 8,10.5 8,23.5 z' } ],
[ 'cogs', { viewBox: '0 0 1920 1761', path: 'm 896,880 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 0,106 75,181 75,75 181,75 106,0 181,-75 75,-75 75,-181 z m 768,512 q 0,-52 -38,-90 -38,-38 -90,-38 -52,0 -90,38 -38,38 -38,90 0,53 37.5,90.5 37.5,37.5 90.5,37.5 53,0 90.5,-37.5 37.5,-37.5 37.5,-90.5 z m 0,-1024 q 0,-52 -38,-90 -38,-38 -90,-38 -52,0 -90,38 -38,38 -38,90 0,53 37.5,90.5 37.5,37.5 90.5,37.5 53,0 90.5,-37.5 Q 1664,421 1664,368 Z m -384,421 v 185 q 0,10 -7,19.5 -7,9.5 -16,10.5 l -155,24 q -11,35 -32,76 34,48 90,115 7,11 7,20 0,12 -7,19 -23,30 -82.5,89.5 -59.5,59.5 -78.5,59.5 -11,0 -21,-7 l -115,-90 q -37,19 -77,31 -11,108 -23,155 -7,24 -30,24 H 547 q -11,0 -20,-7.5 -9,-7.5 -10,-17.5 l -23,-153 q -34,-10 -75,-31 l -118,89 q -7,7 -20,7 -11,0 -21,-8 -144,-133 -144,-160 0,-9 7,-19 10,-14 41,-53 31,-39 47,-61 -23,-44 -35,-82 L 24,1000 Q 14,999 7,990.5 0,982 0,971 V 786 Q 0,776 7,766.5 14,757 23,756 l 155,-24 q 11,-35 32,-76 -34,-48 -90,-115 -7,-11 -7,-20 0,-12 7,-20 22,-30 82,-89 60,-59 79,-59 11,0 21,7 l 115,90 q 34,-18 77,-32 11,-108 23,-154 7,-24 30,-24 h 186 q 11,0 20,7.5 9,7.5 10,17.5 l 23,153 q 34,10 75,31 l 118,-89 q 8,-7 20,-7 11,0 21,8 144,133 144,160 0,8 -7,19 -12,16 -42,54 -30,38 -45,60 23,48 34,82 l 152,23 q 10,2 17,10.5 7,8.5 7,19.5 z m 640,533 v 140 q 0,16 -149,31 -12,27 -30,52 51,113 51,138 0,4 -4,7 -122,71 -124,71 -8,0 -46,-47 -38,-47 -52,-68 -20,2 -30,2 -10,0 -30,-2 -14,21 -52,68 -38,47 -46,47 -2,0 -124,-71 -4,-3 -4,-7 0,-25 51,-138 -18,-25 -30,-52 -149,-15 -149,-31 v -140 q 0,-16 149,-31 13,-29 30,-52 -51,-113 -51,-138 0,-4 4,-7 4,-2 35,-20 31,-18 59,-34 28,-16 30,-16 8,0 46,46.5 38,46.5 52,67.5 20,-2 30,-2 10,0 30,2 51,-71 92,-112 l 6,-2 q 4,0 124,70 4,3 4,7 0,25 -51,138 17,23 30,52 149,15 149,31 z m 0,-1024 v 140 q 0,16 -149,31 -12,27 -30,52 51,113 51,138 0,4 -4,7 -122,71 -124,71 -8,0 -46,-47 -38,-47 -52,-68 -20,2 -30,2 -10,0 -30,-2 -14,21 -52,68 -38,47 -46,47 -2,0 -124,-71 -4,-3 -4,-7 0,-25 51,-138 -18,-25 -30,-52 -149,-15 -149,-31 V 298 q 0,-16 149,-31 13,-29 30,-52 -51,-113 -51,-138 0,-4 4,-7 4,-2 35,-20 31,-18 59,-34 28,-16 30,-16 8,0 46,46.5 38,46.5 52,67.5 20,-2 30,-2 10,0 30,2 51,-71 92,-112 l 6,-2 q 4,0 124,70 4,3 4,7 0,25 -51,138 17,23 30,52 149,15 149,31 z' } ],
[ 'comment-alt', { viewBox: '0 0 1792 1536', path: 'M 896,128 Q 692,128 514.5,197.5 337,267 232.5,385 128,503 128,640 128,752 199.5,853.5 271,955 401,1029 l 87,50 -27,96 q -24,91 -70,172 152,-63 275,-171 l 43,-38 57,6 q 69,8 130,8 204,0 381.5,-69.5 Q 1455,1013 1559.5,895 1664,777 1664,640 1664,503 1559.5,385 1455,267 1277.5,197.5 1100,128 896,128 Z m 896,512 q 0,174 -120,321.5 -120,147.5 -326,233 -206,85.5 -450,85.5 -70,0 -145,-8 -198,175 -460,242 -49,14 -114,22 h -5 q -15,0 -27,-10.5 -12,-10.5 -16,-27.5 v -1 q -3,-4 -0.5,-12 2.5,-8 2,-10 -0.5,-2 4.5,-9.5 l 6,-9 q 0,0 7,-8.5 7,-8.5 8,-9 7,-8 31,-34.5 24,-26.5 34.5,-38 10.5,-11.5 31,-39.5 20.5,-28 32.5,-51 12,-23 27,-59 15,-36 26,-76 Q 181,1052 90.5,921 0,790 0,640 0,466 120,318.5 240,171 446,85.5 652,0 896,0 q 244,0 450,85.5 206,85.5 326,233 120,147.5 120,321.5 z' } ],
[ 'double-angle-left', { viewBox: '0 0 966 998', path: 'm 582,915 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 L 179,499 572,892 q 10,10 10,23 z m 384,0 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 394,522 q -10,-10 -10,-23 0,-13 10,-23 L 860,10 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 L 563,499 956,892 q 10,10 10,23 z' } ],
[ 'double-angle-up', { viewBox: '0 0 998 966', path: 'm 998,883 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,563 106,956 Q 96,966 83,966 70,966 60,956 L 10,906 Q 0,896 0,883 0,870 10,860 L 476,394 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z m 0,-384 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,179 106,572 Q 96,582 83,582 70,582 60,572 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z' } ],
[ 'download-alt', { viewBox: '0 0 1664 1536', path: 'm 1280,1344 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 256,0 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 128,-224 v 320 q 0,40 -28,68 -28,28 -68,28 H 96 q -40,0 -68,-28 -28,-28 -28,-68 v -320 q 0,-40 28,-68 28,-28 68,-28 h 465 l 135,136 q 58,56 136,56 78,0 136,-56 l 136,-136 h 464 q 40,0 68,28 28,28 28,68 z M 1339,551 q 17,41 -14,70 l -448,448 q -18,19 -45,19 -27,0 -45,-19 L 339,621 q -31,-29 -14,-70 17,-39 59,-39 H 640 V 64 Q 640,38 659,19 678,0 704,0 h 256 q 26,0 45,19 19,19 19,45 v 448 h 256 q 42,0 59,39 z' } ],

View File

@ -50,7 +50,10 @@ const htmlFilteringEngine = {
},
get discardedCount() {
return discardedCount;
}
},
getFilterCount() {
return filterDB.size;
},
};
const PSelectorHasTextTask = class {

View File

@ -28,6 +28,7 @@ import punycode from '../lib/punycode.js';
import cacheStorage from './cachestorage.js';
import cosmeticFilteringEngine from './cosmetic-filtering.js';
import htmlFilteringEngine from './html-filtering.js';
import logger from './logger.js';
import lz4Codec from './lz4.js';
import io from './assets.js';
@ -477,15 +478,22 @@ const onMessage = function(request, sender, callback) {
// Sync
let response;
let pageStore;
switch ( request.what ) {
case 'hasPopupContentChanged':
pageStore = µb.pageStoreFromTabId(request.tabId);
var lastModified = pageStore ? pageStore.contentLastModified : 0;
case 'hasPopupContentChanged': {
const pageStore = µb.pageStoreFromTabId(request.tabId);
const lastModified = pageStore ? pageStore.contentLastModified : 0;
response = lastModified !== request.contentLastModified;
break;
}
case 'launchReporter': {
const pageStore = µb.pageStoreFromTabId(request.tabId);
if ( pageStore === null ) { break; }
const supportURL = new URL(vAPI.getURL('support.html'));
supportURL.searchParams.set('reportURL', pageStore.rawURL);
µb.openNewTab({ url: supportURL.href, select: true, index: -1 });
break;
}
case 'revertFirewallRules':
// TODO: use Set() to message around sets of hostnames
sessionFirewall.copyRules(
@ -537,8 +545,8 @@ const onMessage = function(request, sender, callback) {
response = popupDataFromTabId(request.tabId);
break;
case 'toggleNetFiltering':
pageStore = µb.pageStoreFromTabId(request.tabId);
case 'toggleNetFiltering': {
const pageStore = µb.pageStoreFromTabId(request.tabId);
if ( pageStore ) {
pageStore.toggleNetFilteringSwitch(
request.url,
@ -548,7 +556,7 @@ const onMessage = function(request, sender, callback) {
µb.updateToolbarIcon(request.tabId, 0b111);
}
break;
}
default:
return vAPI.messaging.UNHANDLED;
}
@ -1304,16 +1312,22 @@ const getSupportData = async function() {
extensionVersion: vAPI.app.version,
modifiedUserSettings,
modifiedHiddenSettings,
'filterset (summary)': {
network: staticNetFilteringEngine.getFilterCount(),
cosmetic: cosmeticFilteringEngine.getFilterCount(),
scriptlet: scriptletFilteringEngine.getFilterCount(),
html: htmlFilteringEngine.getFilterCount(),
},
'listset (total-discarded, last updated)': {
removed: removedListset,
added: addedListset,
default: defaultListset,
},
'filterset (user)': filterset,
trustedset: diffArrays(
µb.arrayFromWhitelist(µb.netWhitelist),
µb.netWhitelistDefault
),
filterset,
switchRuleset: diffArrays(
sessionSwitches.toArray(),
µb.hostnameSwitchesDefault

View File

@ -570,9 +570,10 @@ const renderPopup = function() {
}
}
const canElementPicker = popupData.canElementPicker === true && isFiltering;
uDom.nodeFromId('gotoPick').classList.toggle('enabled', canElementPicker);
uDom.nodeFromId('gotoZap').classList.toggle('enabled', canElementPicker);
uDom.nodeFromId('basicTools').classList.toggle(
'canPick',
popupData.canElementPicker === true && isFiltering
);
let blocked, total;
if ( popupData.pageCounts !== undefined ) {
@ -844,6 +845,15 @@ const gotoPick = function() {
/******************************************************************************/
const gotoReport = function() {
messaging.send('popupPanel', {
what: 'launchReporter',
tabId: popupData.tabId,
});
};
/******************************************************************************/
const gotoURL = function(ev) {
if ( this.hasAttribute('href') === false ) { return; }
@ -1382,6 +1392,7 @@ const getPopupData = async function(tabId, first = false) {
uDom('#switch').on('click', toggleNetFilteringSwitch);
uDom('#gotoZap').on('click', gotoZap);
uDom('#gotoPick').on('click', gotoPick);
uDom('#gotoReport').on('click', gotoReport);
uDom('.hnSwitch').on('click', ev => { toggleHostnameSwitch(ev); });
uDom('#saveRules').on('click', saveFirewallRules);
uDom('#revertRules').on('click', ( ) => { revertFirewallRules(); });

View File

@ -57,7 +57,10 @@ const scriptletFilteringEngine = {
},
get discardedCount() {
return discardedCount;
}
},
getFilterCount() {
return scriptletDB.size;
},
};
// Purpose of `contentscriptCode` below is too programmatically inject

View File

@ -28,6 +28,7 @@
let supportData;
const uselessKeys = [
'modifiedHiddenSettings.benchmarkDatasetURL',
'modifiedUserSettings.popupPanelSections',
'modifiedUserSettings.externalLists',
'modifiedUserSettings.importedLists',
@ -113,21 +114,25 @@ function patchEmptiness(data, prop) {
}
}
function addDetailsToReportURL(id) {
function configToMarkdown(collapse = false) {
const text = cmEditor.getValue().replace(/^ /gm, '');
return collapse
? '<details>\n\n```yaml\n' + text + '\n```\n</details>'
: '```yaml\n' + text + '\n```\n';
}
function addDetailsToReportURL(id, collapse = false) {
const elem = uDom.nodeFromId(id);
const url = new URL(elem.getAttribute('data-url'));
url.searchParams.set(
'configuration',
'<details>\n\n```yaml\n' + text + '\n```\n</details>'
);
url.searchParams.set('configuration', configToMarkdown(collapse));
elem.setAttribute('data-url', url);
}
function showData() {
const shownData = JSON.parse(JSON.stringify(supportData));
uselessKeys.forEach(prop => { removeKey(shownData, prop); });
if ( document.body.classList.contains('redacted') ) {
const redacted = document.body.classList.contains('redacted');
if ( redacted ) {
sensitiveValues.forEach(prop => { redactValue(shownData, prop); });
sensitiveKeys.forEach(prop => { redactKeys(shownData, prop); });
}
@ -139,8 +144,8 @@ function showData() {
.slice(1, -1)
.map(v => {
return v
.replace( /^( *)"/, ' $1')
.replace( /^( +.*[^\\])(?:": "|": \{$|": \[$|": )/, '$1: ')
.replace( /^( *?) "/, '$1')
.replace( /^( *.*[^\\])(?:": "|": \{$|": \[$|": )/, '$1: ')
.replace( /(?:",?|\},?|\],?|,)$/, '');
})
.filter(v => v.trim() !== '')
@ -149,15 +154,77 @@ function showData() {
cmEditor.setValue(text);
cmEditor.clearHistory();
addDetailsToReportURL('filterReport');
addDetailsToReportURL('bugReport');
addDetailsToReportURL('filterReport', redacted === false);
addDetailsToReportURL('bugReport', redacted === false);
}
/******************************************************************************/
const reportURL = (( ) => {
const url = new URL(window.location.href);
try {
const reportURL = url.searchParams.get('reportURL');
if ( reportURL !== null ) {
document.body.classList.add('filterIssue');
}
document.querySelector('[data-i18n="supportS6URL"] ~ input').value = reportURL;
return new URL(reportURL);
} catch(ex) {
}
return null;
})();
function reportSpecificFilterHostname() {
return reportURL.hostname.replace(/^www\./, '');
}
function reportSpecificFilterType() {
return document.querySelector('[data-i18n="supportS6Select1"] ~ select').value;
}
function reportSpecificFilterIssue(ev) {
const bodyTemplate = [
'### Address of the web page',
'',
'`{{url}}`',
'',
'### Type of issue',
'',
'{{type}}',
'',
'### Description (when issue is not obvious)',
'',
'[none]',
'',
'### Screenshot (when description is difficult)',
'',
'[none]',
'',
'### Configuration',
'',
'{{configuration}}',
].join('\n');
const githubURL = new URL('https://github.com/uBlockOrigin/uAssets/issues/new');
const issueType = document.querySelector('[data-i18n="supportS6Select1"] ~ select').value;
const title = `${reportSpecificFilterHostname()}: ${reportSpecificFilterType()}`;
const body = bodyTemplate
.replace('{{url}}', reportURL.href)
.replace('{{type}}', issueType)
.replace('{{configuration}}', configToMarkdown(false));
githubURL.searchParams.set('title', title);
githubURL.searchParams.set('body', body);
vAPI.messaging.send('default', {
what: 'gotoURL',
details: { url: githubURL.href, select: true, index: -1 },
});
ev.preventDefault();
}
/******************************************************************************/
const cmEditor = new CodeMirror(document.getElementById('supportData'), {
autofocus: true,
lineWrapping: true,
readOnly: true,
styleActiveLine: true,
});
@ -170,12 +237,6 @@ uBlockDashboard.patchCodeMirrorEditor(cmEditor);
what: 'getSupportData',
});
// Remove unnecessary information
if ( supportData.modifiedHiddenSettings instanceof Object ) {
const o = supportData.modifiedHiddenSettings;
o.benchmarkDatasetURL = undefined;
}
showData();
uDom('[data-url]').on('click', ev => {
@ -189,6 +250,20 @@ uBlockDashboard.patchCodeMirrorEditor(cmEditor);
ev.preventDefault();
});
uDom('[data-i18n="supportReportSpecificButton"]').on('click', ev => {
reportSpecificFilterIssue(ev);
});
uDom('[data-i18n="supportFindSpecificButton"]').on('click', ev => {
const url = new URL('https://github.com/uBlockOrigin/uAssets/issues');
url.searchParams.set('q', `is:issue "${reportSpecificFilterHostname()}" in:title`);
vAPI.messaging.send('default', {
what: 'gotoURL',
details: { url: url.href, select: true, index: -1 },
});
ev.preventDefault();
});
uDom('#redactButton').on('click', ( ) => {
document.body.classList.add('redacted');
showData();

View File

@ -57,8 +57,9 @@
</div>
<hr data-more="c">
<div id="basicTools" class="toolRibbon" data-more="c">
<span id="gotoZap" class="fa-icon tool" data-i18n-title="popupTipZapper">bolt<span class="caption" data-i18n="popupTipZapper"></span></span>
<span id="gotoPick" class="fa-icon tool" data-i18n-title="popupTipPicker">eye-dropper<span class="caption" data-i18n="popupTipPicker"></span></span>
<span id="gotoZap" class="fa-icon tool enabled needPick" data-i18n-title="popupTipZapper">bolt<span class="caption" data-i18n="popupTipZapper"></span></span>
<span id="gotoPick" class="fa-icon tool enabled needPick" data-i18n-title="popupTipPicker">eye-dropper<span class="caption" data-i18n="popupTipPicker"></span></span>
<span id="gotoReport" class="fa-icon tool enabled needPick" data-i18n-title="popupTipReport">comment-alt<span class="caption" data-i18n="popupTipReport"></span></span>
<a href="logger-ui.html#_" class="fa-icon tool enabled" target="uBOLogger" tabindex="0" data-i18n-title="popupTipLog">list-alt<span class="caption" data-i18n="popupTipLog"></span></a>
<a href="dashboard.html" class="fa-icon tool enabled" target="uBODashboard" tabindex="0" data-i18n-title="popupTipDashboard">cogs<span class="caption" data-i18n="popupTipDashboard"></span></a>
</div>

View File

@ -17,53 +17,90 @@
<body class="redacted">
<div class="body">
<div class="supportEntry">
<div>
<h3 data-i18n="supportS1H"></h3>
<p data-i18n="supportS1P1">
</div>
<div>
<button type="button" data-url="https://github.com/gorhill/uBlock/wiki" data-i18n="supportOpenButton"></button>
<div class="a">
<div class="supportEntry">
<div>
<h3 data-i18n="supportS1H"></h3>
<p data-i18n="supportS1P1">
</div>
<div>
<button type="button" data-url="https://github.com/gorhill/uBlock/wiki" data-i18n="supportOpenButton"></button>
</div>
</div>
<hr>
</div>
<hr>
<div class="supportEntry">
<div>
<h3 data-i18n="supportS2H"></h3>
<p data-i18n="supportS2P1">
</div>
<div>
<button type="button" data-url="https://old.reddit.com/r/uBlockOrigin/" data-i18n="supportOpenButton"></button>
<div class="b">
<div class="supportEntry">
<div>
<h3 data-i18n="supportS2H"></h3>
<p data-i18n="supportS2P1">
</div>
<div>
<button type="button" data-url="https://old.reddit.com/r/uBlockOrigin/" data-i18n="supportOpenButton"></button>
</div>
</div>
<hr>
</div>
<hr>
<div class="supportEntry">
<div>
<h3 data-i18n="supportS3H"></h3>
<p data-i18n="supportS3P1">
<p data-i18n="supportS3P2">
<p data-i18n="supportS3P3">
</div>
<div>
<button id="filterReport" type="button" data-url="https://github.com/uBlockOrigin/uAssets/issues/new?template=bug_report_from_ubo.yml" data-i18n="supportOpenButton"></button>
<div class="c">
<div class="supportEntry">
<div>
<h3 data-i18n="supportS3H"></h3>
<p data-i18n="supportS3P1">
<p data-i18n="supportS3P2">
<p data-i18n="supportS3P3">
</div>
<div>
<button id="filterReport" type="button" data-url="https://github.com/uBlockOrigin/uAssets/issues/new?template=bug_report_from_ubo.yml" data-i18n="supportOpenButton"></button>
</div>
</div>
<hr>
</div>
<hr>
<div class="supportEntry">
<div>
<h3 data-i18n="supportS4H"></h3>
<p data-i18n="supportS4P1">
</div>
<div>
<button id="bugReport" type="button" data-url="https://github.com/uBlockOrigin/uBlock-issues/issues/new?template=bug_report_from_ubo.yml" data-i18n="supportOpenButton"></button>
<div class="d">
<div class="supportEntry">
<div>
<h3 data-i18n="supportS4H"></h3>
<p data-i18n="supportS4P1">
</div>
<div>
<button id="bugReport" type="button" data-url="https://github.com/uBlockOrigin/uBlock-issues/issues/new?template=bug_report_from_ubo.yml" data-i18n="supportOpenButton"></button>
</div>
</div>
<hr>
</div>
<div class="e">
<div class="supportEntry">
<div>
<h3 data-i18n="supportS6H"></h3>
<p data-i18n="supportS3P1">
<p data-i18n="supportS6P1S1">
<p>
<label data-i18n="supportS6URL"></label><br>
<input type="url" spellcheck="false" required>
<p>
<label data-i18n="supportS6Select1"></label><br>
<select>
<option value="[unknown]" data-i18n="supportS6Select1Option0" selected disabled></option>
<option value="ads" data-i18n="supportS6Select1Option1"></option>
<option value="nuisance" data-i18n="supportS6Select1Option2"></option>
<option value="detection" data-i18n="supportS6Select1Option3"></option>
<option value="privacy" data-i18n="supportS6Select1Option4"></option>
<option value="breakage" data-i18n="supportS6Select1Option5"></option>
</select>
</div>
<div class="hasButtons">
<button type="button" data-i18n="supportFindSpecificButton"></button>
<button type="button" data-i18n="supportReportSpecificButton"></button>
</div>
</div>
<hr>
</div>
<div class="a b c d">
<h3 data-i18n="supportS5H"></h3>
<p data-i18n="supportS5P1">
<p data-i18n="supportS5P2">
<p><button id="redactButton" type="button" data-i18n="supportRedact"></button><button id="unredactButton" type="button" data-i18n="supportUnredact"></button><button id="selectAllButton" type="button" data-i18n="genericSelectAll"></button>
<div id="supportData" class="codeMirrorContainer"></div>
</div>
<hr>
<h3 data-i18n="supportS5H"></h3>
<p data-i18n="supportS5P1">
<p data-i18n="supportS5P2">
<p><button id="redactButton" type="button" data-i18n="supportRedact"></button><button id="unredactButton" type="button" data-i18n="supportUnredact"></button><button id="selectAllButton" type="button" data-i18n="genericSelectAll"></button>
<div id="supportData" class="codeMirrorContainer"></div>
</div>
<script src="lib/codemirror/lib/codemirror.js"></script>