mirror of
https://github.com/gorhill/uBlock.git
synced 2024-10-06 09:37:12 +02:00
Grand refactoring of the logger
Performance-related work: the logger data has been decoupled from the DOM -- inspired from CodeMirror's way of efficiently handling large amout of text data. This decoupling now makes the logger highly efficient CPU- and memory-wise, and open the way to more possibilities. Ability to configure some aspect of the logger behavior and visuals: - The hard-coded limit of 5000 entries has been removed and is now replaced with a variety of user-configurable settings to enforce the discarding of logger entries. - Some columns in the logger output can now be hidden. The filter list look-up feature has been merged into the existing overlay dialog used to create URL rules or static filters, as an entry in a new "Details" pane. Other issues addressed during refactoring: - https://github.com/uBlockOrigin/uBlock-issues/issues/280 - https://github.com/gorhill/uBlock/issues/1999 The minimum version supported on Firefox has been bumped up to 55.0.
This commit is contained in:
parent
941182d6f2
commit
ed5d63df69
@ -2,7 +2,7 @@
|
|||||||
"applications": {
|
"applications": {
|
||||||
"gecko": {
|
"gecko": {
|
||||||
"id": "uBlock0@raymondhill.net",
|
"id": "uBlock0@raymondhill.net",
|
||||||
"strict_min_version": "52.0"
|
"strict_min_version": "55.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"author": "All uBlock Origin contributors",
|
"author": "All uBlock Origin contributors",
|
||||||
|
@ -300,7 +300,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"settingsNoLargeMediaPrompt":{
|
"settingsNoLargeMediaPrompt":{
|
||||||
"message":"Block media elements larger than {{input:number}} kB",
|
"message":"Block media elements larger than {{input}} kB",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"settingsNoRemoteFontsPrompt":{
|
"settingsNoRemoteFontsPrompt":{
|
||||||
@ -607,9 +607,45 @@
|
|||||||
"message":"3rd-party",
|
"message":"3rd-party",
|
||||||
"description":"A keyword in the built-in row filtering expression"
|
"description":"A keyword in the built-in row filtering expression"
|
||||||
},
|
},
|
||||||
"logMaxEntriesTip":{
|
"loggerEntryDetailsHeader":{
|
||||||
"message":"Maximum number of logger entries",
|
"message":"Details",
|
||||||
"description":"Tooltip informaing that the input field is to set the maximum number of entries in the log"
|
"description":"Small header to identify the 'Details' pane for a specific logger entry"
|
||||||
|
},
|
||||||
|
"loggerEntryDetailsFilter":{
|
||||||
|
"message":"Filter",
|
||||||
|
"description":"Label to identify a filter field"
|
||||||
|
},
|
||||||
|
"loggerEntryDetailsFilterList":{
|
||||||
|
"message":"Filter list",
|
||||||
|
"description":"Label to identify a filter list field"
|
||||||
|
},
|
||||||
|
"loggerEntryDetailsRule":{
|
||||||
|
"message":"Rule",
|
||||||
|
"description":"Label to identify a rule field"
|
||||||
|
},
|
||||||
|
"loggerEntryDetailsContext":{
|
||||||
|
"message":"Context",
|
||||||
|
"description":"Label to identify a context field (typically a hostname)"
|
||||||
|
},
|
||||||
|
"loggerEntryDetailsRootContext":{
|
||||||
|
"message":"Root context",
|
||||||
|
"description":"Label to identify a root context field (typically a hostname)"
|
||||||
|
},
|
||||||
|
"loggerEntryDetailsPartyness":{
|
||||||
|
"message":"Partyness",
|
||||||
|
"description":"Label to identify a field providing partyness information"
|
||||||
|
},
|
||||||
|
"loggerEntryDetailsType":{
|
||||||
|
"message":"Type",
|
||||||
|
"description":"Label to identify the type of an entry"
|
||||||
|
},
|
||||||
|
"loggerEntryDetailsURL":{
|
||||||
|
"message":"URL",
|
||||||
|
"description":"Label to identify the URL of an entry"
|
||||||
|
},
|
||||||
|
"loggerURLFilteringHeader":{
|
||||||
|
"message":"URL rule",
|
||||||
|
"description":"Small header to identify the dynamic URL filtering section"
|
||||||
},
|
},
|
||||||
"loggerURLFilteringContextLabel":{
|
"loggerURLFilteringContextLabel":{
|
||||||
"message":"Context:",
|
"message":"Context:",
|
||||||
@ -619,12 +655,8 @@
|
|||||||
"message":"Type:",
|
"message":"Type:",
|
||||||
"description":"Label for the type selector"
|
"description":"Label for the type selector"
|
||||||
},
|
},
|
||||||
"loggerURLFilteringHeader":{
|
|
||||||
"message":"Dynamic URL filtering",
|
|
||||||
"description":"Small header to identify the dynamic URL filtering section"
|
|
||||||
},
|
|
||||||
"loggerStaticFilteringHeader":{
|
"loggerStaticFilteringHeader":{
|
||||||
"message":"Static filtering",
|
"message":"Filter",
|
||||||
"description":"Small header to identify the static filtering section"
|
"description":"Small header to identify the static filtering section"
|
||||||
},
|
},
|
||||||
"loggerStaticFilteringSentence":{
|
"loggerStaticFilteringSentence":{
|
||||||
@ -671,6 +703,46 @@
|
|||||||
"message":"Static filter <code>{{filter}}</code> could not be found in any of the currently enabled filter lists",
|
"message":"Static filter <code>{{filter}}</code> could not be found in any of the currently enabled filter lists",
|
||||||
"description":"Message to show when a filter cannot be found in any filter lists"
|
"description":"Message to show when a filter cannot be found in any filter lists"
|
||||||
},
|
},
|
||||||
|
"loggerSettingDiscardPrompt":{
|
||||||
|
"message":"Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||||
|
"description":"Logger setting: A sentence to describe the purpose of the settings below"
|
||||||
|
},
|
||||||
|
"loggerSettingPerEntryMaxAge":{
|
||||||
|
"message":"Preserve entries from the last {{input}} minutes",
|
||||||
|
"description":"A logger setting"
|
||||||
|
},
|
||||||
|
"loggerSettingPerTabMaxLoads":{
|
||||||
|
"message":"Preserve at most {{input}} page loads per tab",
|
||||||
|
"description":"A logger setting"
|
||||||
|
},
|
||||||
|
"loggerSettingPerTabMaxEntries":{
|
||||||
|
"message":"Preserve at most {{input}} entries per tab",
|
||||||
|
"description":"A logger setting"
|
||||||
|
},
|
||||||
|
"loggerSettingPerEntryLineCount":{
|
||||||
|
"message":"Use {{input}} lines per entry in vertically expanded mode",
|
||||||
|
"description":"A logger setting"
|
||||||
|
},
|
||||||
|
"loggerSettingHideColumnsPrompt":{
|
||||||
|
"message":"Hide columns:",
|
||||||
|
"description":"Logger settings: a sentence to describe the purpose of the checkboxes below"
|
||||||
|
},
|
||||||
|
"loggerSettingHideColumnTime":{
|
||||||
|
"message":"{{input}} Time",
|
||||||
|
"description":"A label for the time column"
|
||||||
|
},
|
||||||
|
"loggerSettingHideColumnFilter":{
|
||||||
|
"message":"{{input}} Filter/rule",
|
||||||
|
"description":"A label for the filter or rule column"
|
||||||
|
},
|
||||||
|
"loggerSettingHideColumnContext":{
|
||||||
|
"message":"{{input}} Context",
|
||||||
|
"description":"A label for the context column"
|
||||||
|
},
|
||||||
|
"loggerSettingHideColumnPartyness":{
|
||||||
|
"message":"{{input}} Partyness",
|
||||||
|
"description":"A label for the partyness column"
|
||||||
|
},
|
||||||
"aboutChangelog":{
|
"aboutChangelog":{
|
||||||
"message":"Changelog",
|
"message":"Changelog",
|
||||||
"description":""
|
"description":""
|
||||||
|
@ -63,6 +63,7 @@
|
|||||||
.fa-icon > .fa-icon_home {
|
.fa-icon > .fa-icon_home {
|
||||||
width: calc(1em * 1612 / 1792);
|
width: calc(1em * 1612 / 1792);
|
||||||
}
|
}
|
||||||
|
.fa-icon > .fa-icon_cog,
|
||||||
.fa-icon > .fa-icon_floppy-o,
|
.fa-icon > .fa-icon_floppy-o,
|
||||||
.fa-icon > .fa-icon_info-circle,
|
.fa-icon > .fa-icon_info-circle,
|
||||||
.fa-icon > .fa-icon_pause-circle-o,
|
.fa-icon > .fa-icon_pause-circle-o,
|
||||||
|
@ -85,13 +85,13 @@
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#domInspector.vCompact li:not(.hasCosmeticHide):not(.isCosmeticHide) {
|
#domInspector:not(.vExpanded) li:not(.hasCosmeticHide):not(.isCosmeticHide) {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
#domInspector #domTree > li {
|
#domInspector #domTree > li {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
#domInspector.vCompact ul {
|
#domInspector:not(.vExpanded) ul {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
#domInspector li > ul > li:not(.hasCosmeticHide):not(.isCosmeticHide) {
|
#domInspector li > ul > li:not(.hasCosmeticHide):not(.isCosmeticHide) {
|
||||||
|
@ -38,10 +38,16 @@ textarea {
|
|||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
}
|
}
|
||||||
#pageSelector {
|
#pageSelector {
|
||||||
margin-right: 1em;
|
|
||||||
padding: 0.25em 0;
|
padding: 0.25em 0;
|
||||||
width: 28em;
|
width: 28em;
|
||||||
}
|
}
|
||||||
|
body[dir="ltr"] #pageSelector {
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
|
body[dir="rtl"] #pageSelector {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
#showpopup {
|
#showpopup {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -56,11 +62,16 @@ textarea {
|
|||||||
padding-left: 0.5em;
|
padding-left: 0.5em;
|
||||||
padding-right: 0.5em;
|
padding-right: 0.5em;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
|
||||||
}
|
}
|
||||||
#info:hover {
|
#info:hover {
|
||||||
fill: #000;
|
fill: #000;
|
||||||
}
|
}
|
||||||
|
body[dir="ltr"] #info {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
body[dir="rtl"] #info {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
@media (max-width: 600px) {
|
@media (max-width: 600px) {
|
||||||
#info {
|
#info {
|
||||||
display: none;
|
display: none;
|
||||||
@ -81,13 +92,14 @@ textarea {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
.vscrollable {
|
.vscrollable {
|
||||||
|
direction: ltr;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
font-size: small;
|
font-size: small;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vCompact .vCompactToggler.button {
|
.inspector:not(.vExpanded) .vCompactToggler.button {
|
||||||
transform: scaleY(-1)
|
transform: scaleY(-1)
|
||||||
}
|
}
|
||||||
.hCompact .hCompactToggler.button {
|
.hCompact .hCompactToggler.button {
|
||||||
@ -125,14 +137,16 @@ textarea {
|
|||||||
#netInspector #filterInput > input {
|
#netInspector #filterInput > input {
|
||||||
min-width: 18em;
|
min-width: 18em;
|
||||||
}
|
}
|
||||||
#netInspector #maxEntries {
|
|
||||||
margin: 0 2em;
|
|
||||||
}
|
|
||||||
#netInspector #filterExprButton {
|
#netInspector #filterExprButton {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
|
||||||
transform: scaleY(-1);
|
transform: scaleY(-1);
|
||||||
}
|
}
|
||||||
|
body[dir="ltr"] #netInspector #filterExprButton {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
body[dir="rtl"] #netInspector #filterExprButton {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
#netInspector #filterExprButton:hover {
|
#netInspector #filterExprButton:hover {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
@ -146,10 +160,16 @@ textarea {
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
font-size: small;
|
font-size: small;
|
||||||
right: 0;
|
|
||||||
top: 100%;
|
top: 100%;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
}
|
}
|
||||||
|
body[dir="ltr"] #netInspector #filterExprPicker {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
body[dir="rtl"] #netInspector #filterExprPicker {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
#netInspector #filterExprGroup:hover #filterExprButton.expanded ~ #filterExprPicker {
|
#netInspector #filterExprGroup:hover #filterExprButton.expanded ~ #filterExprPicker {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
@ -184,145 +204,169 @@ textarea {
|
|||||||
background-color: lightblue;
|
background-color: lightblue;
|
||||||
border: 1px solid lightblue;
|
border: 1px solid lightblue;
|
||||||
}
|
}
|
||||||
|
#netInspector #settings {
|
||||||
|
padding-left: 0.5em;
|
||||||
|
padding-right: 0.5em;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
body[dir="ltr"] #netInspector #settings {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
body[dir="rtl"] #netInspector #settings {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
#netInspector table {
|
#netInspector .vscrollable {
|
||||||
border: 0;
|
overflow: hidden;
|
||||||
border-collapse: collapse;
|
}
|
||||||
direction: ltr;
|
#vwRenderer {
|
||||||
table-layout: fixed;
|
box-sizing: border-box;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
#netInspector table > colgroup > col:nth-of-type(1) {
|
#vwRenderer #vwScroller {
|
||||||
width: 4.6em;
|
height: 100%;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
#netInspector table > colgroup > col:nth-of-type(2) {
|
#vwRenderer #vwScroller #vwVirtualContent {
|
||||||
width: 16%;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
#netInspector table > colgroup > col:nth-of-type(3) {
|
#vwRenderer #vwContent {
|
||||||
width: 2.1em;
|
left: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
#netInspector table > colgroup > col:nth-of-type(4) {
|
#vwRenderer .logEntry {
|
||||||
width: 20%;
|
display: block;
|
||||||
|
left: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
#netInspector table > colgroup > col:nth-of-type(5) {
|
#vwRenderer .logEntry:empty {
|
||||||
width: 2.4em;
|
|
||||||
}
|
|
||||||
#netInspector table > colgroup > col:nth-of-type(6) {
|
|
||||||
width: 6em;
|
|
||||||
}
|
|
||||||
#netInspector table > colgroup > col:nth-of-type(7) {
|
|
||||||
width: calc(100% - 4.6em - 16% - 2.1em - 20% - 2.4em - 6em);
|
|
||||||
}
|
|
||||||
#netInspector.f table tr.f {
|
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
#vwRenderer .logEntry > div {
|
||||||
#netInspector tr.cat_info {
|
height: 100%;
|
||||||
color: #00f;
|
|
||||||
}
|
|
||||||
#netInspector tr.blocked {
|
|
||||||
background-color: rgba(192, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
body.colorBlind #netInspector tr.blocked {
|
|
||||||
background-color: rgba(0, 19, 110, 0.1);
|
|
||||||
}
|
|
||||||
#netInspector tr.nooped {
|
|
||||||
background-color: rgba(108, 108, 108, 0.1);
|
|
||||||
}
|
|
||||||
body.colorBlind #netInspector tr.nooped {
|
|
||||||
background-color: rgba(96, 96, 96, 0.1);
|
|
||||||
}
|
|
||||||
#netInspector tr.allowed {
|
|
||||||
background-color: rgba(0, 160, 0, 0.1);
|
|
||||||
}
|
|
||||||
body.colorBlind #netInspector tr.allowed {
|
|
||||||
background-color: rgba(255, 194, 57, 0.1)
|
|
||||||
}
|
|
||||||
#netInspector tr.cosmetic,
|
|
||||||
#netInspector tr.redirect {
|
|
||||||
background-color: rgba(255, 255, 0, 0.1);
|
|
||||||
}
|
|
||||||
body.colorBlind #netInspector tr.cosmetic,
|
|
||||||
body.colorBlind #netInspector tr.redirect {
|
|
||||||
background-color: rgba(0, 19, 110, 0.1);
|
|
||||||
}
|
|
||||||
#netInspector tr.maindoc {
|
|
||||||
background-color: #666;
|
|
||||||
color: white;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
body #netInspector td {
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-top: none;
|
|
||||||
min-width: 0.5em;
|
|
||||||
padding: 3px;
|
|
||||||
vertical-align: top;
|
|
||||||
white-space: normal;
|
|
||||||
word-break: break-all;
|
|
||||||
word-wrap: break-word;
|
|
||||||
}
|
|
||||||
#netInspector tr td {
|
|
||||||
border-top: 1px solid #ccc;
|
|
||||||
}
|
|
||||||
#netInspector tr td:first-of-type {
|
|
||||||
border-left: none;
|
|
||||||
}
|
|
||||||
#netInspector tr td:last-of-type {
|
|
||||||
border-right: none;
|
|
||||||
}
|
|
||||||
#netInspector.vCompact tr:not(.vExpanded) td {
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
#netInspector tr[data-tabid].void {
|
#vwRenderer .logEntry > div.blocked {
|
||||||
|
background-color: rgba(192, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
body.colorBlind #vwRenderer .logEntry > div.blocked {
|
||||||
|
background-color: rgba(0, 19, 110, 0.1);
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div.nooped {
|
||||||
|
background-color: rgba(108, 108, 108, 0.1);
|
||||||
|
}
|
||||||
|
body.colorBlind #vwRenderer .logEntry > div.nooped {
|
||||||
|
background-color: rgba(96, 96, 96, 0.1);
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div.allowed {
|
||||||
|
background-color: rgba(0, 160, 0, 0.1);
|
||||||
|
}
|
||||||
|
body.colorBlind #vwRenderer .logEntry > div.allowed {
|
||||||
|
background-color: rgba(255, 194, 57, 0.1)
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div.cosmetic,
|
||||||
|
#vwRenderer .logEntry > div.redirect {
|
||||||
|
background-color: rgba(255, 255, 0, 0.1);
|
||||||
|
}
|
||||||
|
body.colorBlind #vwRenderer .logEntry > div.cosmetic,
|
||||||
|
body.colorBlind #vwRenderer .logEntry > div.redirect {
|
||||||
|
background-color: rgba(0, 19, 110, 0.1);
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div[data-type="tabLoad"] {
|
||||||
|
background-color: #666;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div[data-type="error"] {
|
||||||
|
color: #800;
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div[data-type="info"] {
|
||||||
|
color: #008;
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div.voided {
|
||||||
opacity: 0.3;
|
opacity: 0.3;
|
||||||
}
|
}
|
||||||
#netInspector tr[data-tabid].void:hover {
|
#vwRenderer .logEntry > div.voided:hover {
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
}
|
}
|
||||||
|
|
||||||
#netInspector tr td:nth-of-type(1) {
|
#vwRenderer .logEntry > div > span {
|
||||||
cursor: default;
|
border: 1px solid #ccc;
|
||||||
text-align: right;
|
border-top: 0;
|
||||||
|
border-right: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: inline-block;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0.2em;
|
||||||
|
vertical-align: middle;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
#netInspector tr td:nth-of-type(2) {
|
#vwRenderer .logEntry > div.canDetails:hover > span {
|
||||||
|
background-color: rgba(0,0,0,0.04);
|
||||||
}
|
}
|
||||||
#netInspector tr.canLookup td:nth-of-type(2) {
|
body[dir="ltr"] #vwRenderer .logEntry > div > span:first-child {
|
||||||
|
border-left: 0;
|
||||||
|
}
|
||||||
|
body[dir="rtl"] #vwRenderer .logEntry > div > span:first-child {
|
||||||
|
border-right: 0;
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div > span:nth-of-type(1) {
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div > span:nth-of-type(2) {
|
||||||
|
}
|
||||||
|
#vwRenderer #vwContent .logEntry > div > span:nth-of-type(2) {
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(2) {
|
||||||
|
overflow-y: auto;
|
||||||
|
white-space: pre-line;
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div.messageRealm[data-type="tabLoad"] > span:nth-of-type(2) {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div > span:nth-of-type(3) {
|
||||||
|
font: 12px monospace;
|
||||||
|
padding-left: 0.3em;
|
||||||
|
padding-right: 0.3em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div.canDetails:hover > span:nth-of-type(2),
|
||||||
|
#vwRenderer .logEntry > div.canDetails:hover > span:nth-of-type(3),
|
||||||
|
#vwRenderer .logEntry > div.canDetails:hover > span:nth-of-type(5) {
|
||||||
|
background: rgba(0, 0, 0, 0.08);
|
||||||
cursor: zoom-in;
|
cursor: zoom-in;
|
||||||
}
|
}
|
||||||
#netInspector tr.cat_net td:nth-of-type(3),
|
#netInspector:not(.vExpanded) #vwRenderer .logEntry > div > span:nth-of-type(4) {
|
||||||
#netInspector tr.cat_cosmetic td:nth-of-type(3),
|
|
||||||
#netInspector tr.cat_redirect td:nth-of-type(3) {
|
|
||||||
font: 12px monospace;
|
|
||||||
text-align: center;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
#netInspector tr.cat_net td:nth-of-type(3) {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
#netInspector tr.cat_net td:nth-of-type(3):hover {
|
|
||||||
background: #ccc;
|
|
||||||
}
|
|
||||||
#netInspector tr td:nth-of-type(4) {
|
|
||||||
}
|
|
||||||
#netInspector tr[data-dochn] td:nth-of-type(4) {
|
|
||||||
direction: rtl;
|
direction: rtl;
|
||||||
}
|
}
|
||||||
#netInspector tr td:nth-of-type(5) {
|
#vwRenderer #vwContent .logEntry > div > span:nth-of-type(4) {
|
||||||
cursor: default;
|
text-overflow: ellipsis;
|
||||||
overflow: visible !important;
|
}
|
||||||
position: relative;
|
.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(4) {
|
||||||
|
overflow-y: auto;
|
||||||
|
text-overflow: clip;
|
||||||
|
white-space: pre-line;
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div > span:nth-of-type(5) {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
#netInspector tr td[data-parties]:nth-of-type(5) {
|
|
||||||
cursor: zoom-in;
|
|
||||||
}
|
|
||||||
/* visual for tabless network requests */
|
/* visual for tabless network requests */
|
||||||
#netInspector tr.tab_bts td:nth-of-type(5)::before {
|
#vwRenderer .logEntry > div > span:nth-of-type(5) {
|
||||||
border: 5px solid #bbb;
|
position: relative;
|
||||||
|
}
|
||||||
|
#vwRenderer .logEntry > div[data-tabid="-1"] > span:nth-of-type(5)::before {
|
||||||
|
border: 5px solid #ccc;
|
||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
border-top: 0;
|
border-top: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
@ -334,49 +378,61 @@ body #netInspector td {
|
|||||||
width: calc(100% - 10px);
|
width: calc(100% - 10px);
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
}
|
}
|
||||||
/* visual for quick tooltip */
|
#vwRenderer .logEntry > div > span:nth-of-type(6) {
|
||||||
#netInspector tr td[data-parties]:nth-of-type(5):active::after {
|
}
|
||||||
background-color: #feb;
|
#vwRenderer #vwContent .logEntry > div > span:nth-of-type(6) {
|
||||||
border: 1px outset #feb;
|
}
|
||||||
border-left: 5px solid gray;
|
#vwRenderer .logEntry > div > span:nth-of-type(7) {
|
||||||
color: black;
|
}
|
||||||
content: attr(data-parties);
|
#vwRenderer #vwContent .logEntry > div > span:nth-of-type(7) {
|
||||||
left: 100%;
|
text-overflow: ellipsis;
|
||||||
padding: 0.4em 0.6em;
|
}
|
||||||
position: absolute;
|
.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(7) {
|
||||||
text-align: left;
|
overflow-y: auto;
|
||||||
top: -50%;
|
white-space: pre-line;
|
||||||
white-space: pre;
|
}
|
||||||
}
|
#vwRenderer .logEntry > div > span:nth-of-type(7) > span > b {
|
||||||
#netInspector tr.cat_net td:nth-of-type(7) > span > b {
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
#netInspector tr td:nth-of-type(7) b {
|
#vwRenderer .logEntry > div > span:nth-of-type(7) b {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
#netInspector tr.blocked td:nth-of-type(7) b {
|
#vwRenderer .logEntry > div.blocked > span:nth-of-type(7) b {
|
||||||
background-color: rgba(192, 0, 0, 0.2);
|
background-color: rgba(192, 0, 0, 0.2);
|
||||||
}
|
}
|
||||||
body.colorBlind #netInspector tr.blocked td:nth-of-type(7) b {
|
body.colorBlind #vwRenderer .logEntry > div.blocked > span:nth-of-type(7) b {
|
||||||
background-color: rgba(0, 19, 110, 0.2);
|
background-color: rgba(0, 19, 110, 0.2);
|
||||||
}
|
}
|
||||||
#netInspector tr.nooped td:nth-of-type(7) b {
|
#vwRenderer .logEntry > div.nooped > span:nth-of-type(7) b {
|
||||||
background-color: rgba(108, 108, 108, 0.2);
|
background-color: rgba(108, 108, 108, 0.2);
|
||||||
}
|
}
|
||||||
body.colorBlind #netInspector tr.nooped td:nth-of-type(7) b {
|
body.colorBlind #vwRenderer .logEntry > div.nooped > span:nth-of-type(7) b {
|
||||||
background-color: rgba(96, 96, 96, 0.2);
|
background-color: rgba(96, 96, 96, 0.2);
|
||||||
}
|
}
|
||||||
#netInspector tr.allowed td:nth-of-type(7) b {
|
#vwRenderer .logEntry > div.allowed > span:nth-of-type(7) b {
|
||||||
background-color: rgba(0, 160, 0, 0.2);
|
background-color: rgba(0, 160, 0, 0.2);
|
||||||
}
|
}
|
||||||
body.colorBlind #netInspector tr.allowed td:nth-of-type(7) b {
|
body.colorBlind #vwRenderer .logEntry > div.allowed > span:nth-of-type(7) b {
|
||||||
background-color: rgba(255, 194, 57, 0.2);
|
background-color: rgba(255, 194, 57, 0.2);
|
||||||
}
|
}
|
||||||
|
#vwRenderer #vwBottom {
|
||||||
|
background-color: #00F;
|
||||||
|
height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
#vwRenderer #vwLineSizer {
|
||||||
|
left: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
#popupContainer {
|
#popupContainer {
|
||||||
background: white;
|
background: white;
|
||||||
border: 1px solid gray;
|
border: 1px solid gray;
|
||||||
border-radius: 3px;
|
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
display: none;
|
display: none;
|
||||||
@ -389,16 +445,13 @@ body.colorBlind #netInspector tr.allowed td:nth-of-type(7) b {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.modalDialog {
|
#modalOverlay {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
-webkit-align-items: center;
|
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
border: 0;
|
border: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
display: flex;
|
display: none;
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
-webkit-justify-content: center;
|
|
||||||
left: 0;
|
left: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@ -406,27 +459,56 @@ body.colorBlind #netInspector tr.allowed td:nth-of-type(7) b {
|
|||||||
top: 0;
|
top: 0;
|
||||||
z-index: 400;
|
z-index: 400;
|
||||||
}
|
}
|
||||||
|
#modalOverlay.on {
|
||||||
.modalDialog .dialog {
|
display: flex;
|
||||||
|
}
|
||||||
|
#modalOverlay > div {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
#modalOverlay > div > div:nth-of-type(1) {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
border: 2px solid white;
|
border: 0;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 90vw;
|
padding: 1em;
|
||||||
max-height: 90vh;
|
max-height: 90vh;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
width: 90vw;
|
||||||
|
}
|
||||||
|
#modalOverlay > div > div:nth-of-type(2) {
|
||||||
|
stroke: #000;
|
||||||
|
stroke-width: 3px;
|
||||||
|
position: absolute;
|
||||||
|
width: 1.6em;
|
||||||
|
height: 1.6em;
|
||||||
|
bottom: calc(100% + 2px);
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
body[dir="ltr"] #modalOverlay > div > div:nth-of-type(2) {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
body[dir="rtl"] #modalOverlay > div > div:nth-of-type(2) {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
#modalOverlay > div > div:nth-of-type(2):hover {
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
#modalOverlay > div > div:nth-of-type(2) > * {
|
||||||
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#netFilteringDialog .dialog p {
|
#netFilteringDialog {
|
||||||
line-height: 2em;
|
font-size: 90%;
|
||||||
}
|
}
|
||||||
|
#netFilteringDialog a {
|
||||||
#netFilteringDialog .dialog select {
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
#netFilteringDialog select {
|
||||||
max-width: 75%;
|
max-width: 75%;
|
||||||
outline: none;
|
outline: none;
|
||||||
padding: 0.2em;
|
padding: 0.2em;
|
||||||
}
|
}
|
||||||
|
#netFilteringDialog > .preview {
|
||||||
#netFilteringDialog .dialog > div.preview {
|
align-items: center;
|
||||||
/* http://lea.verou.me/css3patterns/ */
|
/* http://lea.verou.me/css3patterns/ */
|
||||||
background-color: #aaa;
|
background-color: #aaa;
|
||||||
background-image:
|
background-image:
|
||||||
@ -448,35 +530,28 @@ body.colorBlind #netInspector tr.allowed td:nth-of-type(7) b {
|
|||||||
);
|
);
|
||||||
background-position:0 0, 9px 9px;
|
background-position:0 0, 9px 9px;
|
||||||
background-size: 18px 18px;
|
background-size: 18px 18px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
padding: 0.5em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.preview > * {
|
#netFilteringDialog > .preview > * {
|
||||||
|
background-color: white;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
max-height: 40vh;
|
max-height: 20vh;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > .preview > span {
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#netFilteringDialog .dialog table {
|
#netFilteringDialog > .headers {
|
||||||
border: 0;
|
|
||||||
border-collapse: collapse;
|
|
||||||
table-layout: fixed;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
#netFilteringDialog .dialog table > colgroup > col:nth-of-type(1) {
|
|
||||||
width: 3.8em;
|
|
||||||
}
|
|
||||||
#netFilteringDialog .dialog table > colgroup > col:nth-of-type(2) {
|
|
||||||
}
|
|
||||||
|
|
||||||
#netFilteringDialog .dialog td {
|
|
||||||
border: 0;
|
|
||||||
padding: 0;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
#netFilteringDialog .dialog > div.headers {
|
|
||||||
border-bottom: 1px solid #888;
|
border-bottom: 1px solid #888;
|
||||||
|
line-height: 2;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.headers > span.header {
|
#netFilteringDialog > .headers > .header {
|
||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
border: 1px solid #aaa;
|
border: 1px solid #aaa;
|
||||||
border-bottom: 1px solid #888;
|
border-bottom: 1px solid #888;
|
||||||
@ -485,98 +560,164 @@ body.colorBlind #netInspector tr.allowed td:nth-of-type(7) b {
|
|||||||
color: #888;
|
color: #888;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
font-size: small;
|
|
||||||
line-height: 2em;
|
|
||||||
margin-left: 0.5em;
|
|
||||||
padding: 0 1em;
|
padding: 0 1em;
|
||||||
position: relative;
|
position: relative;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
top: 1px;
|
top: 1px;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.headers > span.header.selected {
|
#netFilteringDialog[data-pane="details"] > .headers > [data-pane="details"],
|
||||||
|
#netFilteringDialog[data-pane="dynamic"] > .headers > [data-pane="dynamic"],
|
||||||
|
#netFilteringDialog[data-pane="static"] > .headers > [data-pane="static"] {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
border-color: #888;
|
border-color: #888;
|
||||||
border-bottom: 1px solid white;
|
border-bottom: 1px solid white;
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.headers > span.tools {
|
#netFilteringDialog > .headers > .tools {
|
||||||
display: inline-block;
|
bottom: 0;
|
||||||
|
display: flex;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
|
||||||
transform: translate(0, -50%);
|
|
||||||
}
|
}
|
||||||
body[dir="ltr"] #netFilteringDialog .dialog > div.headers > span.tools {
|
body[dir="ltr"] #netFilteringDialog > .headers > .tools {
|
||||||
right: 0.1em;
|
right: 0;
|
||||||
}
|
}
|
||||||
body[dir="rtl"] #netFilteringDialog .dialog > div.headers > span.tools {
|
body[dir="rtl"] #netFilteringDialog > .headers > .tools {
|
||||||
left: 0.1em;
|
left: 0;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.headers > span.tools > span {
|
#netFilteringDialog > .headers > .tools > span {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size: 1.2em;
|
font-size: 1.5em;
|
||||||
padding: 0.2em 0.4em;
|
padding: 0 0.25em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.headers > span.tools > span:hover {
|
#netFilteringDialog > .headers > .tools > span:hover {
|
||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers {
|
#netFilteringDialog.cosmeticRealm > .headers > .dynamic,
|
||||||
height: 40vh;
|
#netFilteringDialog.cosmeticRealm > .panes > .dynamic {
|
||||||
overflow: hidden;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
#netFilteringDialog .dialog > div.containers > div {
|
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.selected {
|
#netFilteringDialog.cosmeticRealm > .headers > .static,
|
||||||
display: block;
|
#netFilteringDialog.cosmeticRealm > .panes > .static {
|
||||||
|
display: none;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic > table.toolbar select {
|
#netFilteringDialog > div.panes {
|
||||||
font: 14px;
|
min-height: 40vh;
|
||||||
height: 2.5em;
|
overflow: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
padding-top: 1em;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic > table.toolbar #saveRules {
|
#netFilteringDialog > div.panes > div {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#netFilteringDialog[data-pane="details"] > .panes > [data-pane="details"],
|
||||||
|
#netFilteringDialog[data-pane="dynamic"] > .panes > [data-pane="dynamic"],
|
||||||
|
#netFilteringDialog[data-pane="static"] > .panes > [data-pane="static"] {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > .panes > .details > div {
|
||||||
|
align-items: stretch;
|
||||||
|
background-color: #e6e6e6;
|
||||||
|
border: 0;
|
||||||
|
border-bottom: 1px solid white;
|
||||||
|
display: flex;
|
||||||
|
min-height: 2.2em;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > .panes > .details > div > span {
|
||||||
|
align-items: center;
|
||||||
|
display: inline-flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 0.25em 0.5em;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > .panes > .details > div > span:nth-of-type(1) {
|
||||||
|
border: 0;
|
||||||
|
flex-grow: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
justify-content: flex-end;
|
||||||
|
width: 8em;
|
||||||
|
}
|
||||||
|
body[dir="ltr"] #netFilteringDialog > .panes > .details > div > span:nth-of-type(1) {
|
||||||
|
border-right: 1px solid white;
|
||||||
|
}
|
||||||
|
body[dir="rtl"] #netFilteringDialog > .panes > .details > div > span:nth-of-type(1) {
|
||||||
|
border-left: 1px solid white;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > .panes > .details > div > span:nth-of-type(2) {
|
||||||
|
max-height: 20vh;
|
||||||
|
overflow: hidden auto;
|
||||||
|
white-space: pre-line
|
||||||
|
}
|
||||||
|
#netFilteringDialog > .panes > .details > div > span:nth-of-type(2):not(.prose) {
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .fa-icon {
|
||||||
|
font-size: 110%;
|
||||||
|
opacity: 0.5;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .fa-icon:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > div.panes > .dynamic > .toolbar {
|
||||||
|
padding-bottom: 1em;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > div.panes > .dynamic .row {
|
||||||
|
display: flex;
|
||||||
|
min-height: 2.2em;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) {
|
||||||
|
align-self: stretch;
|
||||||
|
border: 0;
|
||||||
|
display: inline-flex;
|
||||||
|
flex-grow: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
text-align: center;
|
||||||
|
width: 4.5em;
|
||||||
|
}
|
||||||
|
body[dir="ltr"] #netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) {
|
||||||
|
border-right: 1px solid white;
|
||||||
|
}
|
||||||
|
body[dir="rtl"] #netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) {
|
||||||
|
border-left: 1px solid white;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(2) {
|
||||||
|
align-self: center;
|
||||||
|
padding: 0 0.5em;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules {
|
||||||
background-color: #ffe;
|
background-color: #ffe;
|
||||||
border: 1px solid #ddc;
|
border: 1px solid #ddc;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
fill: #888;
|
fill: #888;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size: 1.6em;
|
font-size: 2em;
|
||||||
margin: 0.1em;
|
|
||||||
padding: 0.25em 0.5em;
|
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
body.dirty #netFilteringDialog .dialog > div.containers > div.dynamic > table.toolbar #saveRules {
|
body.dirty #netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic > table.toolbar #saveRules:hover {
|
#netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules:hover {
|
||||||
fill: black;
|
fill: black;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic > table.toolbar tr.entry {
|
#netFilteringDialog > div.panes > .dynamic > .toolbar .entry {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry {
|
#netFilteringDialog > div.panes > .dynamic .entry {
|
||||||
background-color: #e6e6e6;
|
background-color: #e6e6e6;
|
||||||
border: 0;
|
border: 0;
|
||||||
border-bottom: 1px solid white;
|
border-bottom: 1px solid white;
|
||||||
font-size: 13px;
|
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry:hover {
|
#netFilteringDialog > div.panes > .dynamic .entry:hover {
|
||||||
background-color: #f0f0f0;
|
background-color: #f0f0f0;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td:first-of-type {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action {
|
||||||
border: 0;
|
|
||||||
border-right: 1px solid white;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action {
|
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border: 0;
|
border: 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
height: 2em;
|
|
||||||
width: 100%;
|
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action > span {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border: 0;
|
border: 0;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@ -585,90 +726,94 @@ body.dirty #netFilteringDialog .dialog > div.containers > div.dynamic > table.to
|
|||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
width: 33.33%;
|
width: 33.33%;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.allow {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action.allow {
|
||||||
background-color: rgba(0, 160, 0, 0.3);
|
background-color: rgba(0, 160, 0, 0.3);
|
||||||
}
|
}
|
||||||
body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.allow {
|
body.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.allow {
|
||||||
background-color: rgba(255, 194, 57, 0.4);
|
background-color: rgba(255, 194, 57, 0.4);
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.noop {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action.noop {
|
||||||
background-color: rgba(108, 108, 108, 0.3);
|
background-color: rgba(108, 108, 108, 0.3);
|
||||||
}
|
}
|
||||||
body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.noop {
|
body.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.noop {
|
||||||
background-color: rgba(96, 96, 96, 0.4);
|
background-color: rgba(96, 96, 96, 0.4);
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.block {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action.block {
|
||||||
background-color: rgba(192, 0, 0, 0.3);
|
background-color: rgba(192, 0, 0, 0.3);
|
||||||
}
|
}
|
||||||
body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.block {
|
body.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.block {
|
||||||
background-color: rgba(0, 19, 110, 0.4);
|
background-color: rgba(0, 19, 110, 0.4);
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.allow {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action.own.allow {
|
||||||
background-color: rgba(0, 160, 0, 1);
|
background-color: rgba(0, 160, 0, 1);
|
||||||
}
|
}
|
||||||
body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.allow {
|
body.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.own.allow {
|
||||||
background-color: rgba(255, 194, 57, 1);
|
background-color: rgba(255, 194, 57, 1);
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.noop,
|
#netFilteringDialog > div.panes > .dynamic .entry > .action.own.noop,
|
||||||
body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.noop {
|
body.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.own.noop {
|
||||||
background-color: rgba(108, 108, 108, 1);
|
background-color: rgba(108, 108, 108, 1);
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.block {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action.own.block {
|
||||||
background-color: rgba(192, 0, 0, 1);
|
background-color: rgba(192, 0, 0, 1);
|
||||||
}
|
}
|
||||||
body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.block {
|
body.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.own.block {
|
||||||
background-color: rgba(0, 19, 110, 1);
|
background-color: rgba(0, 19, 110, 1);
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action:not(.own):hover > span {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action:not(.own):hover > span {
|
||||||
opacity: 0.2;
|
opacity: 0.2;
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action:not(.own):hover > span:hover {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action:not(.own):hover > span:hover {
|
||||||
opacity: 0.75;
|
opacity: 0.75;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span.allow {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action > .allow {
|
||||||
background-color: rgb(0, 160, 0);
|
background-color: rgb(0, 160, 0);
|
||||||
}
|
}
|
||||||
body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span.allow {
|
body.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action > .allow {
|
||||||
background-color: rgb(255, 194, 57);
|
background-color: rgb(255, 194, 57);
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span.noop {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action > .noop {
|
||||||
background-color: rgb(108, 108, 108);
|
background-color: rgb(108, 108, 108);
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span.block {
|
#netFilteringDialog > div.panes > .dynamic .entry > .action > .block {
|
||||||
background-color: rgb(192, 0, 0);
|
background-color: rgb(192, 0, 0);
|
||||||
}
|
}
|
||||||
body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span.block {
|
body.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action > .block {
|
||||||
background-color: rgb(0, 19, 110);
|
background-color: rgb(0, 19, 110);
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td.url {
|
#netFilteringDialog > div.panes > .dynamic .entry > .url {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding-left: 4px;
|
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.static > p {
|
#netFilteringDialog > div.panes > div.static > div {
|
||||||
margin: 0.75em 0;
|
line-height: 2;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.static textarea {
|
#netFilteringDialog > div.panes > div.static > div {
|
||||||
|
padding-bottom: 1em;
|
||||||
|
}
|
||||||
|
#netFilteringDialog > div.panes > div.static textarea {
|
||||||
height: 6em;
|
height: 6em;
|
||||||
|
max-height: 20vh;
|
||||||
|
min-height: 10vh;
|
||||||
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
#netFilteringDialog .dialog > div.containers > div.static > p:nth-of-type(2) {
|
#netFilteringDialog > div.panes > div.static > div:nth-of-type(2) {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#filterFinderDialog .dialog {
|
#filterFinderDialog {
|
||||||
padding: 1em;
|
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
#filterFinderDialog .dialog code {
|
#filterFinderDialog code {
|
||||||
background: #eee;
|
background: #eee;
|
||||||
font-size: 85%;
|
font-size: 85%;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
unicode-bidi: plaintext;
|
unicode-bidi: plaintext;
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
}
|
}
|
||||||
#filterFinderDialog .dialog ul {
|
#filterFinderDialog ul {
|
||||||
font-size: larger;
|
font-size: larger;
|
||||||
}
|
}
|
||||||
#filterFinderDialog .filterFinderListEntry {
|
#filterFinderDialog .filterFinderListEntry {
|
||||||
@ -688,13 +833,40 @@ body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.e
|
|||||||
#filterFinderDialog .filterFinderListEntry a.fa-icon[href=""] {
|
#filterFinderDialog .filterFinderListEntry a.fa-icon[href=""] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
#filterFinderDialog .dialog > *:first-child {
|
#filterFinderDialog > *:first-child {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
#filterFinderDialog .dialog > *:last-child {
|
#filterFinderDialog > *:last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hide {
|
#loggerSettingsDialog {
|
||||||
display: none;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
#loggerSettingsDialog > div {
|
||||||
|
padding-bottom: 1em;
|
||||||
|
}
|
||||||
|
#loggerSettingsDialog > div:last-of-type {
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
#loggerSettingsDialog ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
body[dir="ltr"] #loggerSettingsDialog ul {
|
||||||
|
padding-left: 2em;
|
||||||
|
}
|
||||||
|
body[dir="rtl"] #loggerSettingsDialog ul {
|
||||||
|
padding-right: 2em;
|
||||||
|
}
|
||||||
|
#loggerSettingsDialog li {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0.5em 0 0 0;
|
||||||
|
}
|
||||||
|
#loggerSettingsDialog input {
|
||||||
|
max-width: 6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide {
|
||||||
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ License - https://github.com/FortAwesome/Font-Awesome/tree/a8386aae19e200ddb0f68
|
|||||||
<symbol id="angle-up" viewBox="0 0 998 582"><path d="m 998,499 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="angle-up" viewBox="0 0 998 582"><path d="m 998,499 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="bolt" viewBox="0 0 896 1664"><path d="m 885.08696,438 q 18,20 7,44 l -540,1157 q -13,25 -42,25 -4,0 -14,-2 -17,-5 -25.5,-19 -8.5,-14 -4.5,-30 l 197,-808 -406,101 q -4,1 -12,1 -18,0 -31,-11 Q -3.9130435,881 1.0869565,857 L 202.08696,32 q 4,-14 16,-23 12,-9 28,-9 l 328,0 q 19,0 32,12.5 13,12.5 13,29.5 0,8 -5,18 l -171,463 396,-98 q 8,-2 12,-2 19,0 34,15 z"/></symbol>
|
<symbol id="bolt" viewBox="0 0 896 1664"><path d="m 885.08696,438 q 18,20 7,44 l -540,1157 q -13,25 -42,25 -4,0 -14,-2 -17,-5 -25.5,-19 -8.5,-14 -4.5,-30 l 197,-808 -406,101 q -4,1 -12,1 -18,0 -31,-11 Q -3.9130435,881 1.0869565,857 L 202.08696,32 q 4,-14 16,-23 12,-9 28,-9 l 328,0 q 19,0 32,12.5 13,12.5 13,29.5 0,8 -5,18 l -171,463 396,-98 q 8,-2 12,-2 19,0 34,15 z"/></symbol>
|
||||||
<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="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="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-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="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="eraser" viewBox="0 0 1920 1280"><path d="M 896,1152 1232,768 l -768,0 -336,384 768,0 z M 1909,75 q 15,34 9.5,71.5 Q 1913,184 1888,212 L 992,1236 q -38,44 -96,44 l -768,0 q -38,0 -69.5,-20.5 -31.5,-20.5 -47.5,-54.5 -15,-34 -9.5,-71.5 5.5,-37.5 30.5,-65.5 L 928,44 Q 966,0 1024,0 l 768,0 q 38,0 69.5,20.5 Q 1893,41 1909,75 Z"/></symbol>
|
<symbol id="eraser" viewBox="0 0 1920 1280"><path d="M 896,1152 1232,768 l -768,0 -336,384 768,0 z M 1909,75 q 15,34 9.5,71.5 Q 1913,184 1888,212 L 992,1236 q -38,44 -96,44 l -768,0 q -38,0 -69.5,-20.5 -31.5,-20.5 -47.5,-54.5 -15,-34 -9.5,-71.5 5.5,-37.5 30.5,-65.5 L 928,44 Q 966,0 1024,0 l 768,0 q 38,0 69.5,20.5 Q 1893,41 1909,75 Z"/></symbol>
|
||||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 19 KiB |
@ -49,7 +49,7 @@
|
|||||||
lineNumbers: true,
|
lineNumbers: true,
|
||||||
lineWrapping: true,
|
lineWrapping: true,
|
||||||
readOnly: true,
|
readOnly: true,
|
||||||
styleActiveLine: true
|
styleActiveLine: true,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -130,7 +130,9 @@ api.fetchText = function(url, onLoad, onError) {
|
|||||||
const onErrorEvent = function() {
|
const onErrorEvent = function() {
|
||||||
cleanup();
|
cleanup();
|
||||||
µBlock.logger.writeOne({
|
µBlock.logger.writeOne({
|
||||||
error: errorCantConnectTo.replace('{{msg}}', actualUrl)
|
realm: 'message',
|
||||||
|
type: 'error',
|
||||||
|
text: errorCantConnectTo.replace('{{msg}}', actualUrl)
|
||||||
});
|
});
|
||||||
onError({ url, content: '' });
|
onError({ url, content: '' });
|
||||||
};
|
};
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
vAPI.tabs.get(null, function(tab) {
|
vAPI.tabs.get(null, function(tab) {
|
||||||
let hash = tab.url.startsWith(vAPI.getURL('')) ?
|
let hash = tab.url.startsWith(vAPI.getURL('')) ?
|
||||||
'' :
|
'' :
|
||||||
'#tab_active+' + tab.id;
|
'#_+' + tab.id;
|
||||||
µb.openNewTab({
|
µb.openNewTab({
|
||||||
url: 'logger-ui.html' + hash,
|
url: 'logger-ui.html' + hash,
|
||||||
select: true,
|
select: true,
|
||||||
|
@ -599,7 +599,9 @@ FilterContainer.prototype.compileGenericHideSelector = function(
|
|||||||
if ( compiled === undefined || compiled !== selector ) {
|
if ( compiled === undefined || compiled !== selector ) {
|
||||||
const who = writer.properties.get('assetKey') || '?';
|
const who = writer.properties.get('assetKey') || '?';
|
||||||
µb.logger.writeOne({
|
µb.logger.writeOne({
|
||||||
error: `Invalid generic cosmetic filter in ${who}: ##${selector}`
|
realm: 'message',
|
||||||
|
type: 'error',
|
||||||
|
text: `Invalid generic cosmetic filter in ${who}: ##${selector}`
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -658,7 +660,9 @@ FilterContainer.prototype.compileGenericUnhideSelector = function(
|
|||||||
if ( compiled === undefined ) {
|
if ( compiled === undefined ) {
|
||||||
const who = writer.properties.get('assetKey') || '?';
|
const who = writer.properties.get('assetKey') || '?';
|
||||||
µb.logger.writeOne({
|
µb.logger.writeOne({
|
||||||
error: `Invalid cosmetic filter in ${who} : #@#${parsed.suffix}`
|
realm: 'message',
|
||||||
|
type: 'error',
|
||||||
|
text: `Invalid cosmetic filter in ${who}: #@#${parsed.suffix}`
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -687,7 +691,9 @@ FilterContainer.prototype.compileSpecificSelector = function(
|
|||||||
if ( compiled === undefined ) {
|
if ( compiled === undefined ) {
|
||||||
const who = writer.properties.get('assetKey') || '?';
|
const who = writer.properties.get('assetKey') || '?';
|
||||||
µb.logger.writeOne({
|
µb.logger.writeOne({
|
||||||
error: `Invalid cosmetic filter in ${who} : ##${parsed.suffix}`
|
realm: 'message',
|
||||||
|
type: 'error',
|
||||||
|
text: `Invalid cosmetic filter in ${who}: ##${parsed.suffix}`
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -404,24 +404,18 @@ Matrix.prototype.lookupRuleData = function(src, des, type) {
|
|||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
Matrix.prototype.toLogData = function() {
|
Matrix.prototype.toLogData = function() {
|
||||||
if ( this.r === 0 || this.type === '' ) {
|
if ( this.r === 0 || this.type === '' ) { return; }
|
||||||
return;
|
return {
|
||||||
}
|
|
||||||
var logData = {
|
|
||||||
source: 'dynamicHost',
|
source: 'dynamicHost',
|
||||||
result: this.r,
|
result: this.r,
|
||||||
raw: this.z + ' ' +
|
raw: `${this.z} ${this.y} ${this.type} ${this.intToActionMap.get(this.r)}`
|
||||||
this.y + ' ' +
|
|
||||||
this.type + ' ' +
|
|
||||||
this.intToActionMap.get(this.r)
|
|
||||||
};
|
};
|
||||||
return logData;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Matrix.prototype.intToActionMap = new Map([
|
Matrix.prototype.intToActionMap = new Map([
|
||||||
[ 1, ' block' ],
|
[ 1, 'block' ],
|
||||||
[ 2, ' allow' ],
|
[ 2, 'allow' ],
|
||||||
[ 3, ' noop' ]
|
[ 3, 'noop' ]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
@ -26,10 +26,7 @@
|
|||||||
let faIconsInit = function(root) {
|
let faIconsInit = function(root) {
|
||||||
const icons = (root || document).querySelectorAll('.fa-icon');
|
const icons = (root || document).querySelectorAll('.fa-icon');
|
||||||
for ( const icon of icons ) {
|
for ( const icon of icons ) {
|
||||||
if (
|
if ( icon.firstChild === null || icon.firstChild.nodeType !== 3 ) {
|
||||||
icon.firstChild === null ||
|
|
||||||
icon.firstChild.nodeType !== 3
|
|
||||||
) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const name = icon.firstChild.nodeValue;
|
const name = icon.firstChild.nodeValue;
|
||||||
|
@ -244,7 +244,9 @@
|
|||||||
if ( compiled === undefined ) {
|
if ( compiled === undefined ) {
|
||||||
const who = writer.properties.get('assetKey') || '?';
|
const who = writer.properties.get('assetKey') || '?';
|
||||||
µb.logger.writeOne({
|
µb.logger.writeOne({
|
||||||
error: `Invalid HTML filter in ${who} : ##${selector}`
|
realm: 'message',
|
||||||
|
type: 'error',
|
||||||
|
text: `Invalid HTML filter in ${who}: ##${selector}`
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
129
src/js/i18n.js
129
src/js/i18n.js
@ -31,36 +31,25 @@
|
|||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
// https://github.com/gorhill/uBlock/issues/2084
|
// https://github.com/gorhill/uBlock/issues/2084
|
||||||
// Anything else than <a>, <b>, <code>, <em>, <i>, <input>, and <span> will
|
// Anything else than <a>, <b>, <code>, <em>, <i>, and <span> will
|
||||||
// be rendered as plain text.
|
// be rendered as plain text.
|
||||||
// For <input>, only the type attribute is allowed.
|
|
||||||
// For <a>, only href attribute must be present, and it MUST starts with
|
// For <a>, only href attribute must be present, and it MUST starts with
|
||||||
// `https://`, and includes no single- or double-quotes.
|
// `https://`, and includes no single- or double-quotes.
|
||||||
// No HTML entities are allowed, there is code to handle existing HTML
|
// No HTML entities are allowed, there is code to handle existing HTML
|
||||||
// entities already present in translation files until they are all gone.
|
// entities already present in translation files until they are all gone.
|
||||||
|
|
||||||
var reSafeTags = /^([\s\S]*?)<(b|code|em|i|span)>(.+?)<\/\2>([\s\S]*)$/,
|
const reSafeTags = /^([\s\S]*?)<(b|code|em|i|span)>(.+?)<\/\2>([\s\S]*)$/;
|
||||||
reSafeInput = /^([\s\S]*?)<(input type="[^"]+")>(.*?)([\s\S]*)$/,
|
const reSafeLink = /^([\s\S]*?)<(a href=['"]https:\/\/[^'" <>]+['"])>(.+?)<\/a>([\s\S]*)$/;
|
||||||
reInput = /^input type=(['"])([a-z]+)\1$/,
|
const reLink = /^a href=(['"])(https:\/\/[^'"]+)\1$/;
|
||||||
reSafeLink = /^([\s\S]*?)<(a href=['"]https:\/\/[^'" <>]+['"])>(.+?)<\/a>([\s\S]*)$/,
|
|
||||||
reLink = /^a href=(['"])(https:\/\/[^'"]+)\1$/;
|
|
||||||
|
|
||||||
var safeTextToTagNode = function(text) {
|
const safeTextToTagNode = function(text) {
|
||||||
var matches, node;
|
|
||||||
if ( text.lastIndexOf('a ', 0) === 0 ) {
|
if ( text.lastIndexOf('a ', 0) === 0 ) {
|
||||||
matches = reLink.exec(text);
|
const matches = reLink.exec(text);
|
||||||
if ( matches === null ) { return null; }
|
if ( matches === null ) { return null; }
|
||||||
node = document.createElement('a');
|
const node = document.createElement('a');
|
||||||
node.setAttribute('href', matches[2]);
|
node.setAttribute('href', matches[2]);
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
if ( text.lastIndexOf('input ', 0) === 0 ) {
|
|
||||||
matches = reInput.exec(text);
|
|
||||||
if ( matches === null ) { return null; }
|
|
||||||
node = document.createElement('input');
|
|
||||||
node.setAttribute('type', matches[2]);
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
// Firefox extension validator warns if using a variable as argument for
|
// Firefox extension validator warns if using a variable as argument for
|
||||||
// document.createElement().
|
// document.createElement().
|
||||||
switch ( text ) {
|
switch ( text ) {
|
||||||
@ -79,8 +68,8 @@ var safeTextToTagNode = function(text) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var safeTextToTextNode = (function() {
|
const safeTextToTextNode = (function() {
|
||||||
let entities = new Map([
|
const entities = new Map([
|
||||||
// TODO: Remove quote entities once no longer present in translation
|
// TODO: Remove quote entities once no longer present in translation
|
||||||
// files. Other entities must stay.
|
// files. Other entities must stay.
|
||||||
[ '“', '“' ],
|
[ '“', '“' ],
|
||||||
@ -90,7 +79,7 @@ var safeTextToTextNode = (function() {
|
|||||||
[ '<', '<' ],
|
[ '<', '<' ],
|
||||||
[ '>', '>' ],
|
[ '>', '>' ],
|
||||||
]);
|
]);
|
||||||
let decodeEntities = match => {
|
const decodeEntities = match => {
|
||||||
return entities.get(match) || match;
|
return entities.get(match) || match;
|
||||||
};
|
};
|
||||||
return function(text) {
|
return function(text) {
|
||||||
@ -101,15 +90,16 @@ var safeTextToTextNode = (function() {
|
|||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
var safeTextToDOM = function(text, parent) {
|
const safeTextToDOM = function(text, parent) {
|
||||||
if ( text === '' ) { return; }
|
if ( text === '' ) { return; }
|
||||||
|
|
||||||
// Fast path (most common).
|
// Fast path (most common).
|
||||||
if ( text.indexOf('<') === -1 ) {
|
if ( text.indexOf('<') === -1 ) {
|
||||||
parent.appendChild(safeTextToTextNode(text));
|
parent.appendChild(safeTextToTextNode(text));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Slow path.
|
// Slow path.
|
||||||
// `<p>` no longer allowed. Code below can be remove once all <p>'s are
|
// `<p>` no longer allowed. Code below can be removed once all <p>'s are
|
||||||
// gone from translation files.
|
// gone from translation files.
|
||||||
text = text.replace(/^<p>|<\/p>/g, '')
|
text = text.replace(/^<p>|<\/p>/g, '')
|
||||||
.replace(/<p>/g, '\n\n');
|
.replace(/<p>/g, '\n\n');
|
||||||
@ -118,18 +108,17 @@ var safeTextToDOM = function(text, parent) {
|
|||||||
if ( matches === null ) {
|
if ( matches === null ) {
|
||||||
matches = reSafeLink.exec(text);
|
matches = reSafeLink.exec(text);
|
||||||
if ( matches === null ) {
|
if ( matches === null ) {
|
||||||
matches = reSafeInput.exec(text);
|
parent.appendChild(safeTextToTextNode(text));
|
||||||
if ( matches === null ) {
|
return;
|
||||||
parent.appendChild(safeTextToTextNode(text));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
safeTextToDOM(matches[1], parent);
|
const fragment = document.createDocumentFragment();
|
||||||
let node = safeTextToTagNode(matches[2]) || parent;
|
safeTextToDOM(matches[1], fragment);
|
||||||
|
let node = safeTextToTagNode(matches[2]);
|
||||||
safeTextToDOM(matches[3], node);
|
safeTextToDOM(matches[3], node);
|
||||||
parent.appendChild(node);
|
fragment.appendChild(node);
|
||||||
safeTextToDOM(matches[4], parent);
|
safeTextToDOM(matches[4], fragment);
|
||||||
|
parent.appendChild(fragment);
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
@ -146,7 +135,7 @@ vAPI.i18n.safeTemplateToDOM = function(id, dict, parent) {
|
|||||||
safeTextToDOM(textin, parent);
|
safeTextToDOM(textin, parent);
|
||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
let re = /\{\{\w+\}\}/g;
|
const re = /\{\{\w+\}\}/g;
|
||||||
let textout = '';
|
let textout = '';
|
||||||
for (;;) {
|
for (;;) {
|
||||||
let match = re.exec(textin);
|
let match = re.exec(textin);
|
||||||
@ -172,44 +161,62 @@ vAPI.i18n.safeTemplateToDOM = function(id, dict, parent) {
|
|||||||
|
|
||||||
// Helper to deal with the i18n'ing of HTML files.
|
// Helper to deal with the i18n'ing of HTML files.
|
||||||
vAPI.i18n.render = function(context) {
|
vAPI.i18n.render = function(context) {
|
||||||
var docu = document;
|
const docu = document;
|
||||||
var root = context || docu;
|
const root = context || docu;
|
||||||
var elems, n, i, elem, text;
|
|
||||||
|
|
||||||
elems = root.querySelectorAll('[data-i18n]');
|
for ( const elem of root.querySelectorAll('[data-i18n]') ) {
|
||||||
n = elems.length;
|
let text = vAPI.i18n(elem.getAttribute('data-i18n'));
|
||||||
for ( i = 0; i < n; i++ ) {
|
|
||||||
elem = elems[i];
|
|
||||||
text = vAPI.i18n(elem.getAttribute('data-i18n'));
|
|
||||||
if ( !text ) { continue; }
|
if ( !text ) { continue; }
|
||||||
// TODO: remove once it's all replaced with <input type="...">
|
if ( text.indexOf('{{') === -1 ) {
|
||||||
if ( text.indexOf('{') !== -1 ) {
|
safeTextToDOM(text, elem);
|
||||||
text = text.replace(/\{\{input:([^}]+)\}\}/g, '<input type="$1">');
|
continue;
|
||||||
}
|
}
|
||||||
safeTextToDOM(text, elem);
|
// Handle selector-based placeholders: these placeholders tell where
|
||||||
|
// existing child DOM element are to be positioned relative to the
|
||||||
|
// localized text nodes.
|
||||||
|
const parts = text.split(/(\{\{[^}]+\}\})/);
|
||||||
|
const fragment = document.createDocumentFragment();
|
||||||
|
let textBefore = '';
|
||||||
|
for ( let part of parts ) {
|
||||||
|
if ( part === '' ) { continue; }
|
||||||
|
if ( part.startsWith('{{') && part.endsWith('}}') ) {
|
||||||
|
// TODO: remove detection of ':' once it no longer appears
|
||||||
|
// in translation files.
|
||||||
|
const pos = part.indexOf(':');
|
||||||
|
if ( pos !== -1 ) {
|
||||||
|
part = part.slice(0, pos) + part.slice(-2);
|
||||||
|
}
|
||||||
|
const node = elem.querySelector(part.slice(2, -2));
|
||||||
|
if ( node !== null ) {
|
||||||
|
safeTextToDOM(textBefore, fragment);
|
||||||
|
fragment.appendChild(node);
|
||||||
|
textBefore = '';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
textBefore += part;
|
||||||
|
}
|
||||||
|
if ( textBefore !== '' ) {
|
||||||
|
safeTextToDOM(textBefore, fragment);
|
||||||
|
}
|
||||||
|
elem.appendChild(fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
elems = root.querySelectorAll('[data-i18n-title]');
|
for ( const elem of root.querySelectorAll('[data-i18n-title]') ) {
|
||||||
n = elems.length;
|
const text = vAPI.i18n(elem.getAttribute('data-i18n-title'));
|
||||||
for ( i = 0; i < n; i++ ) {
|
|
||||||
elem = elems[i];
|
|
||||||
text = vAPI.i18n(elem.getAttribute('data-i18n-title'));
|
|
||||||
if ( !text ) { continue; }
|
if ( !text ) { continue; }
|
||||||
elem.setAttribute('title', text);
|
elem.setAttribute('title', text);
|
||||||
}
|
}
|
||||||
|
|
||||||
elems = root.querySelectorAll('[placeholder]');
|
for ( const elem of root.querySelectorAll('[placeholder]') ) {
|
||||||
n = elems.length;
|
elem.setAttribute(
|
||||||
for ( i = 0; i < n; i++ ) {
|
'placeholder',
|
||||||
elem = elems[i];
|
vAPI.i18n(elem.getAttribute('placeholder'))
|
||||||
elem.setAttribute('placeholder', vAPI.i18n(elem.getAttribute('placeholder')));
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
elems = root.querySelectorAll('[data-i18n-tip]');
|
for ( const elem of root.querySelectorAll('[data-i18n-tip]') ) {
|
||||||
n = elems.length;
|
const text = vAPI.i18n(elem.getAttribute('data-i18n-tip'))
|
||||||
for ( i = 0; i < n; i++ ) {
|
|
||||||
elem = elems[i];
|
|
||||||
text = vAPI.i18n(elem.getAttribute('data-i18n-tip'))
|
|
||||||
.replace(/<br>/g, '\n')
|
.replace(/<br>/g, '\n')
|
||||||
.replace(/\n{3,}/g, '\n\n');
|
.replace(/\n{3,}/g, '\n\n');
|
||||||
elem.setAttribute('data-tip', text);
|
elem.setAttribute('data-tip', text);
|
||||||
@ -224,7 +231,7 @@ vAPI.i18n.render();
|
|||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
vAPI.i18n.renderElapsedTimeToString = function(tstamp) {
|
vAPI.i18n.renderElapsedTimeToString = function(tstamp) {
|
||||||
var value = (Date.now() - tstamp) / 60000;
|
let value = (Date.now() - tstamp) / 60000;
|
||||||
if ( value < 2 ) {
|
if ( value < 2 ) {
|
||||||
return vAPI.i18n('elapsedOneMinuteAgo');
|
return vAPI.i18n('elapsedOneMinuteAgo');
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
var showdomButton = uDom.nodeFromId('showdom');
|
const showdomButton = uDom.nodeFromId('showdom');
|
||||||
|
|
||||||
// Don't bother if the browser is not modern enough.
|
// Don't bother if the browser is not modern enough.
|
||||||
if (
|
if (
|
||||||
@ -340,31 +340,25 @@ var nidFromNode = function(node) {
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
var startDialog = (function() {
|
const startDialog = (function() {
|
||||||
var dialog = uDom.nodeFromId('cosmeticFilteringDialog');
|
let dialog;
|
||||||
var textarea = dialog.querySelector('textarea');
|
let textarea;
|
||||||
var hideSelectors = [];
|
let hideSelectors = [];
|
||||||
var unhideSelectors = [];
|
let unhideSelectors = [];
|
||||||
var inputTimer = null;
|
let inputTimer;
|
||||||
|
|
||||||
var onInputChanged = (function() {
|
const onInputChanged = (function() {
|
||||||
var parse = function() {
|
const parse = function() {
|
||||||
inputTimer = null;
|
inputTimer = undefined;
|
||||||
hideSelectors = [];
|
hideSelectors = [];
|
||||||
unhideSelectors = [];
|
unhideSelectors = [];
|
||||||
|
|
||||||
var line, matches;
|
const re = /^([^#]*)(#@?#)(.+)$/;
|
||||||
var re = /^([^#]*)(#@?#)(.+)$/;
|
for ( let line of textarea.value.split(/\s*\n\s*/) ) {
|
||||||
var lines = textarea.value.split(/\s*\n\s*/);
|
line = line.trim();
|
||||||
for ( var i = 0; i < lines.length; i++ ) {
|
if ( line === '' || line.charAt(0) === '!' ) { continue; }
|
||||||
line = lines[i].trim();
|
const matches = re.exec(line);
|
||||||
if ( line === '' || line.charAt(0) === '!' ) {
|
if ( matches === null || matches.length !== 4 ) { continue; }
|
||||||
continue;
|
|
||||||
}
|
|
||||||
matches = re.exec(line);
|
|
||||||
if ( matches === null || matches.length !== 4 ) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ( inspectedHostname.lastIndexOf(matches[1]) === -1 ) {
|
if ( inspectedHostname.lastIndexOf(matches[1]) === -1 ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -379,19 +373,15 @@ var startDialog = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return function parseAsync() {
|
return function parseAsync() {
|
||||||
if ( inputTimer === null ) {
|
if ( inputTimer === undefined ) {
|
||||||
inputTimer = vAPI.setTimeout(parse, 743);
|
inputTimer = vAPI.setTimeout(parse, 743);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
var onClicked = function(ev) {
|
const onClicked = function(ev) {
|
||||||
var target = ev.target;
|
var target = ev.target;
|
||||||
|
|
||||||
// click outside the dialog proper
|
|
||||||
if ( target.classList.contains('modalDialog') ) {
|
|
||||||
return stop();
|
|
||||||
}
|
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
|
|
||||||
if ( target.id === 'createCosmeticFilters' ) {
|
if ( target.id === 'createCosmeticFilters' ) {
|
||||||
@ -402,7 +392,7 @@ var startDialog = (function() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var showCommitted = function() {
|
const showCommitted = function() {
|
||||||
messaging.sendTo(inspectorConnectionId, {
|
messaging.sendTo(inspectorConnectionId, {
|
||||||
what: 'showCommitted',
|
what: 'showCommitted',
|
||||||
hide: hideSelectors.join(',\n'),
|
hide: hideSelectors.join(',\n'),
|
||||||
@ -410,7 +400,7 @@ var startDialog = (function() {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
var showInteractive = function() {
|
const showInteractive = function() {
|
||||||
messaging.sendTo(inspectorConnectionId, {
|
messaging.sendTo(inspectorConnectionId, {
|
||||||
what: 'showInteractive',
|
what: 'showInteractive',
|
||||||
hide: hideSelectors.join(',\n'),
|
hide: hideSelectors.join(',\n'),
|
||||||
@ -418,46 +408,45 @@ var startDialog = (function() {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
var start = function() {
|
const start = function() {
|
||||||
|
dialog = logger.modalDialog.create('#cosmeticFilteringDialog', stop);
|
||||||
|
textarea = dialog.querySelector('textarea');
|
||||||
hideSelectors = [];
|
hideSelectors = [];
|
||||||
textarea.addEventListener('input', onInputChanged);
|
for ( const node of domTree.querySelectorAll('code.off') ) {
|
||||||
var node;
|
if ( node.classList.contains('filter') ) { continue; }
|
||||||
for ( node of domTree.querySelectorAll('code.off') ) {
|
hideSelectors.push(selectorFromNode(node));
|
||||||
if ( node.classList.contains('filter') === false ) {
|
|
||||||
hideSelectors.push(selectorFromNode(node));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
var taValue = [];
|
const taValue = [];
|
||||||
var d = new Date();
|
for ( const selector of hideSelectors ) {
|
||||||
taValue.push('! ' + d.toLocaleString() + ' ' + inspectedURL);
|
|
||||||
for ( var selector of hideSelectors ) {
|
|
||||||
taValue.push(inspectedHostname + '##' + selector);
|
taValue.push(inspectedHostname + '##' + selector);
|
||||||
}
|
}
|
||||||
var ids = new Set(), id;
|
const ids = new Set();
|
||||||
for ( node of domTree.querySelectorAll('code.filter.off') ) {
|
for ( const node of domTree.querySelectorAll('code.filter.off') ) {
|
||||||
id = node.getAttribute('data-filter-id');
|
const id = node.getAttribute('data-filter-id');
|
||||||
if ( ids.has(id) ) { continue; }
|
if ( ids.has(id) ) { continue; }
|
||||||
ids.add(id);
|
ids.add(id);
|
||||||
unhideSelectors.push(node.textContent);
|
unhideSelectors.push(node.textContent);
|
||||||
taValue.push(inspectedHostname + '#@#' + node.textContent);
|
taValue.push(inspectedHostname + '#@#' + node.textContent);
|
||||||
}
|
}
|
||||||
textarea.value = taValue.join('\n');
|
textarea.value = taValue.join('\n');
|
||||||
document.body.appendChild(dialog);
|
textarea.addEventListener('input', onInputChanged);
|
||||||
dialog.addEventListener('click', onClicked, true);
|
dialog.addEventListener('click', onClicked, true);
|
||||||
showCommitted();
|
showCommitted();
|
||||||
|
logger.modalDialog.show();
|
||||||
};
|
};
|
||||||
|
|
||||||
var stop = function() {
|
const stop = function() {
|
||||||
if ( inputTimer !== null ) {
|
if ( inputTimer !== undefined ) {
|
||||||
clearTimeout(inputTimer);
|
clearTimeout(inputTimer);
|
||||||
inputTimer = null;
|
inputTimer = undefined;
|
||||||
}
|
}
|
||||||
showInteractive();
|
showInteractive();
|
||||||
hideSelectors = [];
|
|
||||||
unhideSelectors = [];
|
|
||||||
textarea.removeEventListener('input', onInputChanged);
|
textarea.removeEventListener('input', onInputChanged);
|
||||||
dialog.removeEventListener('click', onClicked, true);
|
dialog.removeEventListener('click', onClicked, true);
|
||||||
document.body.removeChild(dialog);
|
dialog = undefined;
|
||||||
|
textarea = undefined;
|
||||||
|
hideSelectors = [];
|
||||||
|
unhideSelectors = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
return start;
|
return start;
|
||||||
@ -585,7 +574,7 @@ var shutdownInspector = function() {
|
|||||||
inspectorConnectionId = undefined;
|
inspectorConnectionId = undefined;
|
||||||
}
|
}
|
||||||
logger.removeAllChildren(domTree);
|
logger.removeAllChildren(domTree);
|
||||||
inspector.classList.add('vCompact');
|
inspector.classList.remove('vExpanded');
|
||||||
inspectedTabId = 0;
|
inspectedTabId = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -605,7 +594,7 @@ var onTabIdChanged = function() {
|
|||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
var toggleVCompactView = function() {
|
var toggleVCompactView = function() {
|
||||||
var state = !inspector.classList.toggle('vCompact');
|
var state = inspector.classList.toggle('vExpanded');
|
||||||
var branches = document.querySelectorAll('#domInspector li.branch');
|
var branches = document.querySelectorAll('#domInspector li.branch');
|
||||||
for ( var branch of branches ) {
|
for ( var branch of branches ) {
|
||||||
branch.classList.toggle('show', state);
|
branch.classList.toggle('show', state);
|
||||||
|
2251
src/js/logger-ui.js
2251
src/js/logger-ui.js
File diff suppressed because it is too large
Load Diff
@ -26,17 +26,6 @@
|
|||||||
|
|
||||||
µBlock.logger = (function() {
|
µBlock.logger = (function() {
|
||||||
|
|
||||||
const LogEntry = function(details) {
|
|
||||||
this.init(details);
|
|
||||||
};
|
|
||||||
|
|
||||||
LogEntry.prototype.init = function(details) {
|
|
||||||
if ( details.tstamp === undefined ) {
|
|
||||||
details.tstamp = Date.now();
|
|
||||||
}
|
|
||||||
this.details = JSON.stringify(details);
|
|
||||||
};
|
|
||||||
|
|
||||||
let buffer = null;
|
let buffer = null;
|
||||||
let lastReadTime = 0;
|
let lastReadTime = 0;
|
||||||
let writePtr = 0;
|
let writePtr = 0;
|
||||||
@ -61,15 +50,22 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const boxEntry = function(details) {
|
||||||
|
if ( details.tstamp === undefined ) {
|
||||||
|
details.tstamp = Date.now();
|
||||||
|
}
|
||||||
|
return JSON.stringify(details);
|
||||||
|
};
|
||||||
|
|
||||||
const api = {
|
const api = {
|
||||||
enabled: false,
|
enabled: false,
|
||||||
ownerId: undefined,
|
ownerId: undefined,
|
||||||
writeOne: function(details) {
|
writeOne: function(details) {
|
||||||
if ( buffer === null ) { return; }
|
if ( buffer === null ) { return; }
|
||||||
if ( writePtr === buffer.length ) {
|
if ( writePtr === buffer.length ) {
|
||||||
buffer.push(new LogEntry(details));
|
buffer.push(boxEntry(details));
|
||||||
} else {
|
} else {
|
||||||
buffer[writePtr].init(details);
|
buffer[writePtr] = boxEntry(details);
|
||||||
}
|
}
|
||||||
writePtr += 1;
|
writePtr += 1;
|
||||||
},
|
},
|
||||||
|
@ -1398,7 +1398,7 @@ var onMessage = function(request, sender, callback) {
|
|||||||
.setURL(request.docURL)
|
.setURL(request.docURL)
|
||||||
.setDocOriginFromURL(request.docURL);
|
.setDocOriginFromURL(request.docURL);
|
||||||
if ( pageStore.filterRequest(fctxt) === 0 ) {
|
if ( pageStore.filterRequest(fctxt) === 0 ) {
|
||||||
fctxt.setRealm('net').toLogger();
|
fctxt.setRealm('network').toLogger();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -322,7 +322,7 @@ PageStore.prototype.init = function(tabId, context) {
|
|||||||
µb.logger.enabled &&
|
µb.logger.enabled &&
|
||||||
context === 'tabCommitted'
|
context === 'tabCommitted'
|
||||||
) {
|
) {
|
||||||
fctxt.setRealm('net')
|
fctxt.setRealm('network')
|
||||||
.setType('generichide')
|
.setType('generichide')
|
||||||
.setFilter(µb.staticNetFilteringEngine.toLogData())
|
.setFilter(µb.staticNetFilteringEngine.toLogData())
|
||||||
.toLogger();
|
.toLogger();
|
||||||
|
@ -753,7 +753,7 @@ const gotoURL = function(ev) {
|
|||||||
|
|
||||||
let url = this.getAttribute('href');
|
let url = this.getAttribute('href');
|
||||||
if (
|
if (
|
||||||
url === 'logger-ui.html#tab_active' &&
|
url === 'logger-ui.html#_' &&
|
||||||
typeof popupData.tabId === 'number'
|
typeof popupData.tabId === 'number'
|
||||||
) {
|
) {
|
||||||
url += '+' + popupData.tabId;
|
url += '+' + popupData.tabId;
|
||||||
|
@ -2192,7 +2192,9 @@ FilterContainer.prototype.compile = function(raw, writer) {
|
|||||||
if ( parsed.unsupported ) {
|
if ( parsed.unsupported ) {
|
||||||
const who = writer.properties.get('assetKey') || '?';
|
const who = writer.properties.get('assetKey') || '?';
|
||||||
µb.logger.writeOne({
|
µb.logger.writeOne({
|
||||||
error: `Invalid network filter in ${who}: ${raw}`
|
realm: 'message',
|
||||||
|
type: 'error',
|
||||||
|
text: `Invalid network filter in ${who}: ${raw}`
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -789,7 +789,7 @@ vAPI.tabs.onPopupUpdated = (function() {
|
|||||||
// Log only for when there was a hit against an actual filter (allow or block).
|
// Log only for when there was a hit against an actual filter (allow or block).
|
||||||
// https://github.com/gorhill/uBlock/issues/2776
|
// https://github.com/gorhill/uBlock/issues/2776
|
||||||
if ( µb.logger.enabled ) {
|
if ( µb.logger.enabled ) {
|
||||||
fctxt.setRealm('net').setType(popupType);
|
fctxt.setRealm('network').setType(popupType);
|
||||||
if ( popupType === 'popup' ) {
|
if ( popupType === 'popup' ) {
|
||||||
fctxt.setURL(targetURL)
|
fctxt.setURL(targetURL)
|
||||||
.setTabId(openerTabId)
|
.setTabId(openerTabId)
|
||||||
|
@ -91,7 +91,7 @@ const onBeforeRequest = function(details) {
|
|||||||
pageStore.journalAddRequest(fctxt.getHostname(), result);
|
pageStore.journalAddRequest(fctxt.getHostname(), result);
|
||||||
|
|
||||||
if ( µb.logger.enabled ) {
|
if ( µb.logger.enabled ) {
|
||||||
fctxt.setRealm('net').toLogger();
|
fctxt.setRealm('network').toLogger();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not blocked
|
// Not blocked
|
||||||
@ -203,7 +203,7 @@ const onBeforeRootFrameRequest = function(fctxt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( logEnabled ) {
|
if ( logEnabled ) {
|
||||||
fctxt.setRealm('net').setFilter(logData).toLogger();
|
fctxt.setRealm('network').setFilter(logData).toLogger();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not blocked
|
// Not blocked
|
||||||
@ -311,7 +311,7 @@ const onBeforeBehindTheSceneRequest = function(fctxt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( µb.logger.enabled ) {
|
if ( µb.logger.enabled ) {
|
||||||
fctxt.setRealm('net').toLogger();
|
fctxt.setRealm('network').toLogger();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Blocked?
|
// Blocked?
|
||||||
@ -396,7 +396,7 @@ const onBeforeMaybeSpuriousCSPReport = (function() {
|
|||||||
// At this point, we have a potentially spurious CSP report.
|
// At this point, we have a potentially spurious CSP report.
|
||||||
|
|
||||||
if ( µBlock.logger.enabled ) {
|
if ( µBlock.logger.enabled ) {
|
||||||
fctxt.setRealm('net')
|
fctxt.setRealm('network')
|
||||||
.setType('csp_report')
|
.setType('csp_report')
|
||||||
.setFilter({ result: 1, source: 'global', raw: 'no-spurious-csp-report' })
|
.setFilter({ result: 1, source: 'global', raw: 'no-spurious-csp-report' })
|
||||||
.toLogger();
|
.toLogger();
|
||||||
@ -775,7 +775,7 @@ const injectCSP = function(fctxt, pageStore, responseHeaders) {
|
|||||||
if ( pageStore.filterScripting(fctxt, true) === 1 ) {
|
if ( pageStore.filterScripting(fctxt, true) === 1 ) {
|
||||||
builtinDirectives.push("script-src http: https:");
|
builtinDirectives.push("script-src http: https:");
|
||||||
if ( loggerEnabled ) {
|
if ( loggerEnabled ) {
|
||||||
fctxt.setRealm('net').setType('scripting').toLogger();
|
fctxt.setRealm('network').setType('scripting').toLogger();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fctxt.type = 'inline-script';
|
fctxt.type = 'inline-script';
|
||||||
@ -784,7 +784,7 @@ const injectCSP = function(fctxt, pageStore, responseHeaders) {
|
|||||||
builtinDirectives.push("script-src 'unsafe-eval' * blob: data:");
|
builtinDirectives.push("script-src 'unsafe-eval' * blob: data:");
|
||||||
}
|
}
|
||||||
if ( result !== 0 && loggerEnabled ) {
|
if ( result !== 0 && loggerEnabled ) {
|
||||||
fctxt.setRealm('net').toLogger();
|
fctxt.setRealm('network').toLogger();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -794,7 +794,7 @@ const injectCSP = function(fctxt, pageStore, responseHeaders) {
|
|||||||
if ( pageStore.filterRequest(fctxt) === 1 ) {
|
if ( pageStore.filterRequest(fctxt) === 1 ) {
|
||||||
builtinDirectives.push('font-src *');
|
builtinDirectives.push('font-src *');
|
||||||
if ( loggerEnabled ) {
|
if ( loggerEnabled ) {
|
||||||
fctxt.setRealm('net').toLogger();
|
fctxt.setRealm('network').toLogger();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -825,7 +825,7 @@ const injectCSP = function(fctxt, pageStore, responseHeaders) {
|
|||||||
) === 2
|
) === 2
|
||||||
) {
|
) {
|
||||||
if ( loggerEnabled ) {
|
if ( loggerEnabled ) {
|
||||||
fctxt.setRealm('net')
|
fctxt.setRealm('network')
|
||||||
.setType('csp')
|
.setType('csp')
|
||||||
.setFilter(µb.sessionURLFiltering.toLogData())
|
.setFilter(µb.sessionURLFiltering.toLogData())
|
||||||
.toLogger();
|
.toLogger();
|
||||||
@ -844,7 +844,7 @@ const injectCSP = function(fctxt, pageStore, responseHeaders) {
|
|||||||
) === 2
|
) === 2
|
||||||
) {
|
) {
|
||||||
if ( loggerEnabled ) {
|
if ( loggerEnabled ) {
|
||||||
fctxt.setRealm('net')
|
fctxt.setRealm('network')
|
||||||
.setType('csp')
|
.setType('csp')
|
||||||
.setFilter(µb.sessionFirewall.toLogData())
|
.setFilter(µb.sessionFirewall.toLogData())
|
||||||
.toLogger();
|
.toLogger();
|
||||||
@ -856,7 +856,7 @@ const injectCSP = function(fctxt, pageStore, responseHeaders) {
|
|||||||
|
|
||||||
// Static CSP policies will be applied.
|
// Static CSP policies will be applied.
|
||||||
if ( logDataEntries !== undefined ) {
|
if ( logDataEntries !== undefined ) {
|
||||||
fctxt.setRealm('net').setType('csp');
|
fctxt.setRealm('network').setType('csp');
|
||||||
for ( const entry of logDataEntries ) {
|
for ( const entry of logDataEntries ) {
|
||||||
fctxt.setFilter(entry).toLogger();
|
fctxt.setFilter(entry).toLogger();
|
||||||
}
|
}
|
||||||
@ -908,7 +908,7 @@ const foilLargeMediaElement = function(fctxt, pageStore, responseHeaders) {
|
|||||||
if ( result === 0 ) { return; }
|
if ( result === 0 ) { return; }
|
||||||
|
|
||||||
if ( µBlock.logger.enabled ) {
|
if ( µBlock.logger.enabled ) {
|
||||||
fctxt.setRealm('net').toLogger();
|
fctxt.setRealm('network').toLogger();
|
||||||
}
|
}
|
||||||
|
|
||||||
return { cancel: true };
|
return { cancel: true };
|
||||||
|
@ -132,12 +132,9 @@ var addSelectorToList = function(list, selector, context) {
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
var nodeInNodeList = function(node, nodeList) {
|
const nodeInNodeList = function(node, nodeList) {
|
||||||
var i = nodeList.length;
|
for ( const other of nodeList ) {
|
||||||
while ( i-- ) {
|
if ( other === node ) { return true; }
|
||||||
if ( nodeList[i] === node ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
@ -603,9 +600,9 @@ DOMList.prototype.toggleClasses = function(classNames, targetState) {
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
var listenerEntries = [];
|
const listenerEntries = [];
|
||||||
|
|
||||||
var ListenerEntry = function(target, type, capture, callback) {
|
const ListenerEntry = function(target, type, capture, callback) {
|
||||||
this.target = target;
|
this.target = target;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.capture = capture;
|
this.capture = capture;
|
||||||
@ -621,13 +618,16 @@ ListenerEntry.prototype.dispose = function() {
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
var makeEventHandler = function(selector, callback) {
|
const makeEventHandler = function(selector, callback) {
|
||||||
return function(event) {
|
return function(event) {
|
||||||
var dispatcher = event.currentTarget;
|
const dispatcher = event.currentTarget;
|
||||||
if ( !dispatcher || typeof dispatcher.querySelectorAll !== 'function' ) {
|
if (
|
||||||
|
dispatcher instanceof HTMLElement === false ||
|
||||||
|
typeof dispatcher.querySelectorAll !== 'function'
|
||||||
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var receiver = event.target;
|
const receiver = event.target;
|
||||||
if ( nodeInNodeList(receiver, dispatcher.querySelectorAll(selector)) ) {
|
if ( nodeInNodeList(receiver, dispatcher.querySelectorAll(selector)) ) {
|
||||||
callback.call(receiver, event);
|
callback.call(receiver, event);
|
||||||
}
|
}
|
||||||
@ -642,9 +642,10 @@ DOMList.prototype.on = function(etype, selector, callback) {
|
|||||||
callback = makeEventHandler(selector, callback);
|
callback = makeEventHandler(selector, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
var i = this.nodes.length;
|
for ( const node of this.nodes ) {
|
||||||
while ( i-- ) {
|
listenerEntries.push(
|
||||||
listenerEntries.push(new ListenerEntry(this.nodes[i], etype, selector !== undefined, callback));
|
new ListenerEntry(node, etype, selector !== undefined, callback)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
@ -10,14 +10,15 @@
|
|||||||
<link rel="stylesheet" type="text/css" href="css/logger-ui-inspector.css">
|
<link rel="stylesheet" type="text/css" href="css/logger-ui-inspector.css">
|
||||||
<link rel="shortcut icon" type="image/png" href="img/icon_16.png">
|
<link rel="shortcut icon" type="image/png" href="img/icon_16.png">
|
||||||
<title data-i18n="statsPageName"></title>
|
<title data-i18n="statsPageName"></title>
|
||||||
|
<style id="vwRendererRuntimeStyles"></style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="permatoolbar">
|
<div class="permatoolbar">
|
||||||
<select id="pageSelector">
|
<select id="pageSelector">
|
||||||
<option value="" data-i18n="logAll">
|
<option value="0" data-i18n="logAll">
|
||||||
<option value="tab_bts" data-i18n="logBehindTheScene">
|
<option value="-1" data-i18n="logBehindTheScene">
|
||||||
<option value="tab_active" data-i18n="loggerCurrentTab">
|
<option value="_" data-i18n="loggerCurrentTab">
|
||||||
</select>
|
</select>
|
||||||
<span id="refresh" class="button fa-icon disabled needdom" data-i18n-title="loggerReloadTip">refresh</span>
|
<span id="refresh" class="button fa-icon disabled needdom" data-i18n-title="loggerReloadTip">refresh</span>
|
||||||
<span id="showdom" class="button fa-icon disabled needdom" data-i18n-title="loggerDomInspectorTip">code</span>
|
<span id="showdom" class="button fa-icon disabled needdom" data-i18n-title="loggerDomInspectorTip">code</span>
|
||||||
@ -26,7 +27,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="inspectors">
|
<div id="inspectors">
|
||||||
<div id="domInspector" class="inspector vCompact hCompact">
|
<div id="domInspector" class="inspector hCompact">
|
||||||
<div class="permatoolbar">
|
<div class="permatoolbar">
|
||||||
<div>
|
<div>
|
||||||
<span class="button fa-icon vCompactToggler">double-angle-up</span>
|
<span class="button fa-icon vCompactToggler">double-angle-up</span>
|
||||||
@ -40,7 +41,7 @@
|
|||||||
<ul id="domTree"></ul>
|
<ul id="domTree"></ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="netInspector" class="inspector vCompact f">
|
<div id="netInspector" class="inspector f">
|
||||||
<div class="permatoolbar">
|
<div class="permatoolbar">
|
||||||
<span class="button fa-icon vCompactToggler">double-angle-up</span>
|
<span class="button fa-icon vCompactToggler">double-angle-up</span>
|
||||||
<span id="clean" class="button fa-icon disabled">times</span>
|
<span id="clean" class="button fa-icon disabled">times</span>
|
||||||
@ -52,79 +53,117 @@
|
|||||||
<input type="text" placeholder="logFilterPrompt">
|
<input type="text" placeholder="logFilterPrompt">
|
||||||
<span id="filterExprButton" class="button fa-icon expanded" data-i18n-title="loggerRowFiltererBuiltinTip">angle-up</span>
|
<span id="filterExprButton" class="button fa-icon expanded" data-i18n-title="loggerRowFiltererBuiltinTip">angle-up</span>
|
||||||
<div id="filterExprPicker">
|
<div id="filterExprPicker">
|
||||||
<div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span><span data-filtex="^--$|^<<$|^##" data-i18n="loggerRowFiltererBuiltinBlocked"></span><span data-filtex="^\+\+$|^\*\*$|^#@#" data-i18n="loggerRowFiltererBuiltinAllowed"></span></div>
|
<div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span><span data-filtex="\t--\t|\t<<\t|\t##" data-i18n="loggerRowFiltererBuiltinBlocked"></span><span data-filtex="\t\+\+\t|\t\*\*\t|\t#@#" data-i18n="loggerRowFiltererBuiltinAllowed"></span></div>
|
||||||
<div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span><span data-filtex="^(?:css|font)$">css/font</span><span data-filtex="^image$">image</span><span data-filtex="^(?:inline-)?script(?:ing)?$">script</span><span data-filtex="^(?:websocket|xhr)$">xhr</span><span data-filtex="^frame$">frame</span><span data-filtex="^dom$">dom</span></div>
|
<div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span><span data-filtex="\t(?:css|font)\t">css/font</span><span data-filtex="\timage\t">image</span><span data-filtex="\t(?:inline-)?script(?:ing)?\t">script</span><span data-filtex="\t(?:websocket|xhr)\t">xhr</span><span data-filtex="\tframe\t">frame</span><span data-filtex="\tdom\t">dom</span></div>
|
||||||
<div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span><span data-filtex="^1$" data-i18n="loggerRowFiltererBuiltin1p"></span><span data-filtex="^3(?:,\d)?$" data-i18n="loggerRowFiltererBuiltin3p"></span></div>
|
<div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span><span data-filtex="\t1\t" data-i18n="loggerRowFiltererBuiltin1p"></span><span data-filtex="\t3(?:,\d)?\t" data-i18n="loggerRowFiltererBuiltin3p"></span></div>
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
<input id="maxEntries" type="text" size="5" data-i18n-title="logMaxEntriesTip">
|
<span id="settings" class="button fa-icon">cog</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="vscrollable">
|
<div class="vscrollable">
|
||||||
<style id="tabFilterer"></style>
|
<div id="vwRenderer">
|
||||||
<table>
|
<div id="vwScroller">
|
||||||
<colgroup><col><col><col><col><col><col></colgroup>
|
<div id="vwVirtualContent">
|
||||||
<tbody></tbody>
|
<div id="vwContent"></div>
|
||||||
</table>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="vwLineSizer">
|
||||||
|
<div class="logEntry oneLine"><div><span>00:00:00</span><span> </span><span>**</span><span> </span><span>3,3</span><span>inline-script</span><span> </span></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<iframe id="popupContainer" class="hide"></iframe>
|
<iframe id="popupContainer"></iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="modalOverlay">
|
||||||
|
<div>
|
||||||
|
<div id="modalOverlayContainer"></div>
|
||||||
|
<div id="modalOverlayClose"><svg viewBox="0 0 64 64"><path d="M 16 16 L 48 48 M 16 48 L 48 16" /></svg></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="templates" style="display: none;">
|
<div id="templates" style="display: none;">
|
||||||
|
<div id="logEntryTemplate"><div><span></span>​<span></span>​<span></span>​<span></span>​<span></span>​<span></span>​<span></span></div></div>
|
||||||
<div id="renderedURLTemplate"><span><span></span><b></b><span></span></span></div>
|
<div id="renderedURLTemplate"><span><span></span><b></b><span></span></span></div>
|
||||||
<div id="netFilteringDialog" class="modalDialog">
|
|
||||||
<div class="dialog">
|
<div id="netFilteringDialog" data-pane="details">
|
||||||
<div class="hide preview"></div>
|
<div class="hide preview"><span>click to preview</span></div>
|
||||||
<div class="headers">
|
<div class="headers">
|
||||||
<span class="header dynamic selected" data-container="dynamic" data-i18n="loggerURLFilteringHeader"></span>
|
 
|
||||||
<span class="header static" data-container="static" data-i18n="loggerStaticFilteringHeader"></span>
|
<span class="header details" data-pane="details" data-i18n="loggerEntryDetailsHeader"></span>
|
||||||
<span class="tools"><span class="fa-icon reload">refresh</span> <span class="fa-icon picker">eye-dropper</span></span>
|
<span class="header dynamic" data-pane="dynamic" data-i18n="loggerURLFilteringHeader"></span>
|
||||||
|
<span class="header static" data-pane="static" data-i18n="loggerStaticFilteringHeader"></span>
|
||||||
|
<span class="tools"><span class="fa-icon reload">refresh</span> <span class="fa-icon picker">eye-dropper</span></span>
|
||||||
|
</div>
|
||||||
|
<div class="panes">
|
||||||
|
<div class="pane details" data-pane="details">
|
||||||
|
<div><span data-i18n="loggerEntryDetailsFilter"></span><span></span></div>
|
||||||
|
<div><span data-i18n="loggerEntryDetailsFilterList"></span><span class="prose"></span></div>
|
||||||
|
<div><span data-i18n="loggerEntryDetailsRule"></span><span></span></div>
|
||||||
|
<div><span data-i18n="loggerEntryDetailsRootContext"></span><span></span></div>
|
||||||
|
<div><span data-i18n="loggerEntryDetailsContext"></span><span></span></div>
|
||||||
|
<div><span data-i18n="loggerEntryDetailsPartyness"></span><span class="prose"></span></div>
|
||||||
|
<div><span data-i18n="loggerEntryDetailsType"></span><span></span></div>
|
||||||
|
<div><span data-i18n="loggerEntryDetailsURL"></span><span></span></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="containers">
|
<div class="pane dynamic" data-pane="dynamic">
|
||||||
<div class="container dynamic selected">
|
<div class="toolbar row">
|
||||||
<table class="toolbar">
|
<span><span id="saveRules" class="fa-icon">lock</span></span>
|
||||||
<colgroup><col><col></colgroup>
|
<span>
|
||||||
<tbody>
|
<label><span data-i18n="loggerURLFilteringContextLabel"></span> <select class="dynamic origin"></select></label> 
|
||||||
<tr>
|
<label><span data-i18n="loggerURLFilteringTypeLabel"></span> <select class="dynamic type"><option><option value="*">*</select></label>
|
||||||
<td><span id="saveRules" class="fa-icon">lock</span>
|
</span>
|
||||||
<td><p>
|
<div class="entry row">
|
||||||
<label><span data-i18n="loggerURLFilteringContextLabel"></span> <select class="dynamic origin"></select></label> 
|
<span class="action"><span class="allow"> </span><span class="noop"> </span><span class="block"> </span></span>
|
||||||
<label><span data-i18n="loggerURLFilteringTypeLabel"></span> <select class="dynamic type"><option><option value="*">*</select></label>
|
<span class="url"></span>
|
||||||
</p>
|
</div>
|
||||||
<tr class="entry">
|
|
||||||
<td><div class="action"><span class="allow"> </span><span class="noop"> </span><span class="block"> </span></div>
|
|
||||||
<td class="url">
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<table class="entries">
|
|
||||||
<colgroup><col><col></colgroup>
|
|
||||||
<tbody></tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="container static">
|
|
||||||
<p></p>
|
|
||||||
<p><textarea class="staticFilter" spellcheck="false" value=""></textarea>
|
|
||||||
<button id="createStaticFilter" class="custom important" type="button" data-i18n="pickerCreate"></button>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="entries"></div>
|
||||||
|
</div>
|
||||||
|
<div class="pane static" data-pane="static">
|
||||||
|
<div></div>
|
||||||
|
<div><textarea class="staticFilter" spellcheck="false" value=""></textarea>
|
||||||
|
<button id="createStaticFilter" class="custom important" type="button" data-i18n="pickerCreate"></button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="filterFinderDialog" class="modalDialog">
|
|
||||||
<div class="dialog"></div>
|
<div id="filterFinderDialog">
|
||||||
</div>
|
</div>
|
||||||
<ul id="filterFinderListEntry">
|
|
||||||
<li class="filterFinderListEntry">
|
<div id="filterFinderListEntry">
|
||||||
<a href="asset-viewer.html?url=" target="_blank"></a>
|
<span><!--
|
||||||
<a href="" class="fa-icon" target="_blank">home</a></li>
|
--><a href="asset-viewer.html?url=" target="_blank"></a> <!--
|
||||||
</ul>
|
--><a href="" class="fa-icon" target="_blank">home</a><!--
|
||||||
|
--></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="cosmeticFilteringDialog" class="modalDialog">
|
<div id="cosmeticFilteringDialog" class="modalDialog">
|
||||||
<div class="dialog">
|
<textarea class="cosmeticFilters" value=""></textarea>
|
||||||
<textarea class="cosmeticFilters" value=""></textarea>
|
<button id="createCosmeticFilters" class="custom important" type="button" data-i18n="pickerCreate"></button>
|
||||||
<button id="createCosmeticFilters" class="custom important" type="button" data-i18n="pickerCreate"></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="loggerSettingsDialog">
|
||||||
|
<div><span data-i18n="loggerSettingDiscardPrompt"></span>
|
||||||
|
<ul>
|
||||||
|
<li><label data-i18n="loggerSettingPerEntryMaxAge"><input type="number" min="0" max="50000" /></label>
|
||||||
|
<li><label data-i18n="loggerSettingPerTabMaxLoads"><input type="number" min="0" max="1000000" /></label>
|
||||||
|
<li><label data-i18n="loggerSettingPerTabMaxEntries"><input type="number" min="0" max="1000000" /></label>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div><span data-i18n="loggerSettingHideColumnsPrompt"></span>
|
||||||
|
<ul>
|
||||||
|
<li><label data-i18n="loggerSettingHideColumnTime"><input type="checkbox" data-column="0" /></label>
|
||||||
|
<li><label data-i18n="loggerSettingHideColumnFilter"><input type="checkbox" data-column="1" /></label>
|
||||||
|
<li><label data-i18n="loggerSettingHideColumnContext"><input type="checkbox" data-column="3" /></label>
|
||||||
|
<li><label data-i18n="loggerSettingHideColumnPartyness"><input type="checkbox" data-column="4" /></label>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div><label data-i18n="loggerSettingPerEntryLineCount"><input type="number" min="2" max="6"></label></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/fa-icons.js"></script>
|
<script src="js/fa-icons.js"></script>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<p id="basicTools">
|
<p id="basicTools">
|
||||||
<span id="gotoZap" class="fa-icon tool" data-i18n-tip="popupTipZapper" data-tip-position="under">bolt</span>
|
<span id="gotoZap" class="fa-icon tool" data-i18n-tip="popupTipZapper" data-tip-position="under">bolt</span>
|
||||||
<span id="gotoPick" class="fa-icon tool" data-i18n-tip="popupTipPicker" data-tip-position="under">eye-dropper</span>
|
<span id="gotoPick" class="fa-icon tool" data-i18n-tip="popupTipPicker" data-tip-position="under">eye-dropper</span>
|
||||||
<a href="logger-ui.html#tab_active" class="fa-icon tool enabled" aria-label="data-tip" data-i18n-tip="popupTipLog" data-tip-position="under" target="uBOLogger" tabindex="0">list-alt</a>
|
<a href="logger-ui.html#_" class="fa-icon tool enabled" aria-label="data-tip" data-i18n-tip="popupTipLog" data-tip-position="under" target="uBOLogger" tabindex="0">list-alt</a>
|
||||||
<a href="dashboard.html" class="fa-icon tool enabled" aria-label="data-tip" data-i18n-tip="popupTipDashboard" data-tip-position="under" target="uBODashboard" tabindex="0">sliders</a>
|
<a href="dashboard.html" class="fa-icon tool enabled" aria-label="data-tip" data-i18n-tip="popupTipDashboard" data-tip-position="under" target="uBODashboard" tabindex="0">sliders</a>
|
||||||
</p>
|
</p>
|
||||||
<h2 id="dfToggler" data-i18n="popupBlockedRequestPrompt"> </h2>
|
<h2 id="dfToggler" data-i18n="popupBlockedRequestPrompt"> </h2>
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
<li class="subgroup"><span data-i18n="settingPerSiteSwitchGroup"></span><ul>
|
<li class="subgroup"><span data-i18n="settingPerSiteSwitchGroup"></span><ul>
|
||||||
<li><label class="synopsis"><span data-i18n="settingPerSiteSwitchGroupSynopsis"></span> <a class="fa info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches" target="_blank"></a></label>
|
<li><label class="synopsis"><span data-i18n="settingPerSiteSwitchGroupSynopsis"></span> <a class="fa info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches" target="_blank"></a></label>
|
||||||
<li><input id="no-cosmetic-filtering" type="checkbox" data-setting-name="noCosmeticFiltering" data-setting-type="bool"><label data-i18n="settingsNoCosmeticFilteringPrompt" for="no-cosmetic-filtering"></label> <a class="fa info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-cosmetic-filtering" target="_blank"></a>
|
<li><input id="no-cosmetic-filtering" type="checkbox" data-setting-name="noCosmeticFiltering" data-setting-type="bool"><label data-i18n="settingsNoCosmeticFilteringPrompt" for="no-cosmetic-filtering"></label> <a class="fa info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-cosmetic-filtering" target="_blank"></a>
|
||||||
<li><input id="no-large-media" type="checkbox" data-setting-name="noLargeMedia" data-setting-type="bool"><label data-i18n="settingsNoLargeMediaPrompt" for="no-large-media"></label> <a class="fa info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-large-media-elements" target="_blank"></a>
|
<li><input id="no-large-media" type="checkbox" data-setting-name="noLargeMedia" data-setting-type="bool"><label data-i18n="settingsNoLargeMediaPrompt" for="no-large-media"><input type="number" min="0"></label> <a class="fa info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-large-media-elements" target="_blank"></a>
|
||||||
<li><input id="no-remote-fonts" type="checkbox" data-setting-name="noRemoteFonts" data-setting-type="bool"><label data-i18n="settingsNoRemoteFontsPrompt" for="no-remote-fonts"></label> <a class="fa info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-remote-fonts" target="_blank"></a>
|
<li><input id="no-remote-fonts" type="checkbox" data-setting-name="noRemoteFonts" data-setting-type="bool"><label data-i18n="settingsNoRemoteFontsPrompt" for="no-remote-fonts"></label> <a class="fa info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-remote-fonts" target="_blank"></a>
|
||||||
<li><input id="no-scripting" type="checkbox" data-setting-name="noScripting" data-setting-type="bool"><label data-i18n="settingsNoScriptingPrompt" for="no-scripting"></label> <a class="fa info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-scripting" target="_blank"></a>
|
<li><input id="no-scripting" type="checkbox" data-setting-name="noScripting" data-setting-type="bool"><label data-i18n="settingsNoScriptingPrompt" for="no-scripting"></label> <a class="fa info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-scripting" target="_blank"></a>
|
||||||
</ul>
|
</ul>
|
||||||
|
Loading…
Reference in New Issue
Block a user