mirror of
https://gitlab.com/KevinRoebert/ClearUrls
synced 2025-12-16 14:15:36 +07:00
Compare commits
332 Commits
react-test
...
ts-port
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96a0a6e8cb | ||
|
|
d5fe894414 | ||
|
|
307b487f64 | ||
|
|
606c51733f | ||
|
|
d82fca2972 | ||
|
|
7ea819d26a | ||
|
|
68f10ac9ac | ||
|
|
1df39c76f4 | ||
|
|
2ac158ca88 | ||
|
|
73d330655a | ||
|
|
fedc0c4230 | ||
|
|
e2b638eafb | ||
|
|
0c694d86ad | ||
|
|
6430bcc124 | ||
|
|
e8264eefe8 | ||
|
|
79e54f8b5f | ||
|
|
6b8e515d9a | ||
|
|
b0c20ac780 | ||
|
|
c6e92a7f29 | ||
|
|
ad64f98a28 | ||
|
|
2ffdf4d77b | ||
|
|
951d1c9f7b | ||
|
|
3a20e97354 | ||
|
|
c138e3387b | ||
|
|
4432fb46bf | ||
|
|
4d4a418a95 | ||
|
|
843aeed109 | ||
|
|
b7e209bf15 | ||
|
|
0469156237 | ||
|
|
7ac9fe7d4d | ||
|
|
de876c0ff2 | ||
|
|
3ea3f347ba | ||
|
|
329c78ff88 | ||
|
|
a4d15ece2f | ||
|
|
c6ed12808b | ||
|
|
db5bd659f0 | ||
|
|
6c775b9bba | ||
|
|
47dfe256eb | ||
|
|
3bac289758 | ||
|
|
53035f6bb2 | ||
|
|
86fb5c469a | ||
|
|
f1086f8889 | ||
|
|
bf27040864 | ||
|
|
ca7df33fa3 | ||
|
|
e017a8838e | ||
|
|
1987634095 | ||
|
|
6e2d082eea | ||
|
|
fa3a33962b | ||
|
|
abaa5fe2c6 | ||
|
|
992cd351af | ||
|
|
6992302e23 | ||
|
|
bc2e2510e8 | ||
|
|
1ec5838a98 | ||
|
|
c7b1f85672 | ||
|
|
ac2d5da41c | ||
|
|
27af2c8c49 | ||
|
|
01a911557b | ||
|
|
54210b71c5 | ||
|
|
da5fb0b3c0 | ||
|
|
08b62c0d94 | ||
|
|
879fcdae03 | ||
|
|
762d83e46c | ||
|
|
ae30c0eb53 | ||
|
|
0acd24d716 | ||
|
|
22e58ba0e6 | ||
|
|
3ade08f344 | ||
|
|
ea256a8081 | ||
|
|
90ab42a510 | ||
|
|
c60e33d327 | ||
|
|
9f47a35318 | ||
|
|
e931674dfe | ||
|
|
ed87f72c75 | ||
|
|
ee2e544223 | ||
|
|
9aaf4718f3 | ||
|
|
bdca5d8659 | ||
|
|
caca49b712 | ||
|
|
4a1fad9a90 | ||
|
|
9fbf5a839a | ||
|
|
8b815c5f50 | ||
|
|
4370912baa | ||
|
|
201f3a9edb | ||
|
|
349c0a79ce | ||
|
|
d74d53c40d | ||
|
|
4030d9325b | ||
|
|
fbac0bd1a9 | ||
|
|
85ca03fdc0 | ||
|
|
0fc822a302 | ||
|
|
6cc57eae1a | ||
|
|
694cc4613a | ||
|
|
c81dbee1c7 | ||
|
|
3f707bfd3a | ||
|
|
9d62ddf1b0 | ||
|
|
1344fd8636 | ||
|
|
54915cf0de | ||
|
|
ab325759cd | ||
|
|
12f63e7f71 | ||
|
|
7bc3891072 | ||
|
|
9ff50c965d | ||
|
|
4014195da8 | ||
|
|
50aa5e5a73 | ||
|
|
4a571794dc | ||
|
|
23d13b0710 | ||
|
|
d060acae08 | ||
|
|
28dfe00ff7 | ||
|
|
5ee667eb92 | ||
|
|
fda7da7f13 | ||
|
|
578d4bc48d | ||
|
|
c7a1c40f9d | ||
|
|
57e6ed704f | ||
|
|
9ee55e6536 | ||
|
|
755db29738 | ||
|
|
66671aec68 | ||
|
|
c2f500e060 | ||
|
|
cfad3d2b23 | ||
|
|
6d27c8a906 | ||
|
|
ab19cfd714 | ||
|
|
c64cfbfe86 | ||
|
|
b70e0d4912 | ||
|
|
badc78a954 | ||
|
|
c0b7ad9b06 | ||
|
|
d984b512c0 | ||
|
|
d4ca4b0362 | ||
|
|
2878af17b6 | ||
|
|
86ef50ce91 | ||
|
|
9afb4fa167 | ||
|
|
6ee6591019 | ||
|
|
eb45b51bcb | ||
|
|
0298792aa1 | ||
|
|
b1a5b5fcb0 | ||
|
|
6ae8dd7d22 | ||
|
|
afdf172716 | ||
|
|
31d63fa777 | ||
|
|
59707d7918 | ||
|
|
f0bfe4c8dd | ||
|
|
975ce2fea5 | ||
|
|
0d5fd4b452 | ||
|
|
02a26d3231 | ||
|
|
88890b853a | ||
|
|
53fb25f43d | ||
|
|
3370985ee2 | ||
|
|
95fe7eb17d | ||
|
|
f7949e89f6 | ||
|
|
a44e13645c | ||
|
|
21cf8ec613 | ||
|
|
a8d50a102c | ||
|
|
e79039d210 | ||
|
|
019c2e64a3 | ||
|
|
aaa46b5e6a | ||
|
|
dd116ece8f | ||
|
|
b66b22f3e4 | ||
|
|
24bf821b59 | ||
|
|
6012329278 | ||
|
|
be3909f5c0 | ||
|
|
f1c6599638 | ||
|
|
9aaf7eeb2e | ||
|
|
4b2b528248 | ||
|
|
d28b81e97b | ||
|
|
6c7c5b18ac | ||
|
|
3f325201df | ||
|
|
5789640b75 | ||
|
|
f8b7a1740a | ||
|
|
2f45e18a89 | ||
|
|
081890759d | ||
|
|
7d655baab4 | ||
|
|
7972e24f4c | ||
|
|
b3ed752f02 | ||
|
|
93f81983f0 | ||
|
|
9cce46590a | ||
|
|
a554391183 | ||
|
|
e8ca631829 | ||
|
|
0447f9aa25 | ||
|
|
b605e3aa62 | ||
|
|
2fb7ddab10 | ||
|
|
523b52d34a | ||
|
|
6954ad2eef | ||
|
|
8d51e54237 | ||
|
|
f94f1a2064 | ||
|
|
e6370cc5fa | ||
|
|
193caa3ae0 | ||
|
|
e797c232f1 | ||
|
|
7043119985 | ||
|
|
27ad8953c6 | ||
|
|
51f7cf9464 | ||
|
|
ac9fc780f7 | ||
|
|
c37cae510f | ||
|
|
58b692ed39 | ||
|
|
ab948eab11 | ||
|
|
9b29d5e907 | ||
|
|
755af24b3e | ||
|
|
cb9b2dbdea | ||
|
|
04a3f745b2 | ||
|
|
5930376eb5 | ||
|
|
f06609d3e1 | ||
|
|
38ea5ed802 | ||
|
|
55cb9e8b39 | ||
|
|
73954b2d82 | ||
|
|
861cf554f5 | ||
|
|
c3ddf2a8d4 | ||
|
|
cf6fe59fbd | ||
|
|
cbdc108358 | ||
|
|
e4fdb6bca1 | ||
|
|
44a4334843 | ||
|
|
b472913c67 | ||
|
|
62fbf626ed | ||
|
|
ccdca3b595 | ||
|
|
0417469a26 | ||
|
|
50542fa6a3 | ||
|
|
08fe25dc0d | ||
|
|
ae32bcf21e | ||
|
|
b2ffb3293f | ||
|
|
d41ab7ff9d | ||
|
|
969385bc21 | ||
|
|
b8a1b4dadd | ||
|
|
5cfe99b753 | ||
|
|
392f3bc70a | ||
|
|
d10e041125 | ||
|
|
6eb8636149 | ||
|
|
fcb9f16b7a | ||
|
|
22426dfc24 | ||
|
|
f8fb9bf5ef | ||
|
|
c5e00dc5ef | ||
|
|
e5d226e374 | ||
|
|
3395a17c60 | ||
|
|
f7ed9fa1d8 | ||
|
|
66d6672178 | ||
|
|
80c29e7004 | ||
|
|
74aad21218 | ||
|
|
8115655a30 | ||
|
|
073b55ad74 | ||
|
|
51fe1bcac3 | ||
|
|
7c5f4c31d5 | ||
|
|
84c069331f | ||
|
|
deb7648d61 | ||
|
|
46cd3f21d0 | ||
|
|
26a5b0648f | ||
|
|
120239aa0d | ||
|
|
a96684b93a | ||
|
|
ecd5f82b77 | ||
|
|
a645b52db0 | ||
|
|
b016226750 | ||
|
|
80ebc5bffa | ||
|
|
468c2ac4ea | ||
|
|
82ce2d4d4f | ||
|
|
f752e8aaff | ||
|
|
bb4d543fc2 | ||
|
|
6eaf8726ee | ||
|
|
0668562306 | ||
|
|
722df04af0 | ||
|
|
aa728302a8 | ||
|
|
4a77447992 | ||
|
|
61712e77a2 | ||
|
|
61b911921e | ||
|
|
13c1bd774c | ||
|
|
0384a1a6cc | ||
|
|
cd6d7f2d09 | ||
|
|
b241428752 | ||
|
|
7b457e7e5e | ||
|
|
927f2d8d69 | ||
|
|
0c1fc0646e | ||
|
|
ef1b7fbd0e | ||
|
|
8342851d4e | ||
|
|
d52d8d75e2 | ||
|
|
dee6c21ad2 | ||
|
|
92d582b8d2 | ||
|
|
902605f8ee | ||
|
|
4d9b86178e | ||
|
|
d064537c07 | ||
|
|
9df322a49a | ||
|
|
99b86e7735 | ||
|
|
145e11deac | ||
|
|
4b5ad86c50 | ||
|
|
d7b0094052 | ||
|
|
ba7541c22e | ||
|
|
d689a7ce35 | ||
|
|
fd561a1490 | ||
|
|
8cffd42108 | ||
|
|
94bb289bfa | ||
|
|
a1b8f8eaaf | ||
|
|
600a4767d9 | ||
|
|
191fcfce23 | ||
|
|
1367284767 | ||
|
|
89f6e7ea2d | ||
|
|
ad3ab8df07 | ||
|
|
7ccd78ad39 | ||
|
|
1d061c4353 | ||
|
|
0b79d469ed | ||
|
|
abd61783d2 | ||
|
|
2b14d4f321 | ||
|
|
8f1bdbfc7a | ||
|
|
bfa5cb1f2f | ||
|
|
f6b5627eaf | ||
|
|
62d53b6f85 | ||
|
|
c4612b099b | ||
|
|
d5d6f58482 | ||
|
|
b26b6f9aec | ||
|
|
fe82c9ee1b | ||
|
|
7db112687e | ||
|
|
5341f27a16 | ||
|
|
589153f210 | ||
|
|
e159041600 | ||
|
|
7e78bed8cb | ||
|
|
a4a62b0d1e | ||
|
|
c2577c834f | ||
|
|
e0122600c3 | ||
|
|
b951cf1172 | ||
|
|
b0f1c85cd8 | ||
|
|
891723b7b9 | ||
|
|
6cdcfd099f | ||
|
|
afc7aa8740 | ||
|
|
e6cc434757 | ||
|
|
d7b2878428 | ||
|
|
fad7010f10 | ||
|
|
6ed708b94d | ||
|
|
d2ec7ce49e | ||
|
|
9029781974 | ||
|
|
5af81a7d49 | ||
|
|
5ae149509e | ||
|
|
9543d0f56f | ||
|
|
deaceaed24 | ||
|
|
246a916fb7 | ||
|
|
5622861cf3 | ||
|
|
cb7ccae737 | ||
|
|
2e9e6ac21f | ||
|
|
c2a092367a | ||
|
|
05f1442d96 | ||
|
|
4c43cf8149 | ||
|
|
962d484712 | ||
|
|
9289e6a276 | ||
|
|
8f64e8310c | ||
|
|
35ed991651 | ||
|
|
5d08bbbbad | ||
|
|
bea5543997 |
13
.editorconfig
Normal file
13
.editorconfig
Normal file
@@ -0,0 +1,13 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
max_line_length = 100
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
custom: ['https://www.paypal.me/KevinRoebert', 'https://liberapay.com/kroeb', 'https://www.buymeacoffee.com/KevinRoebert']# Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
39
.github/lockdown.yml
vendored
Normal file
39
.github/lockdown.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
# Configuration for Repo Lockdown - https://github.com/dessant/repo-lockdown
|
||||
|
||||
# Skip issues and pull requests created before a given timestamp. Timestamp must
|
||||
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
|
||||
#skipCreatedBefore: false
|
||||
|
||||
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
|
||||
#exemptLabels: []
|
||||
|
||||
# Comment to post before closing or locking. Set to `false` to disable
|
||||
#comment: true
|
||||
|
||||
# Label to add before closing or locking. Set to `false` to disable
|
||||
#label: true
|
||||
|
||||
# Close issues and pull requests
|
||||
#close: true
|
||||
|
||||
# Lock issues and pull requests
|
||||
#lock: true
|
||||
|
||||
# Limit to only `issues` or `pulls`
|
||||
#only: pulls
|
||||
|
||||
# Optionally, specify configuration settings just for `issues` or `pulls`
|
||||
issues:
|
||||
comment: >
|
||||
This repository is only a mirror of https://gitlab.com/KevinRoebert/ClearUrls. Issues are read here, but it can take longer until they are addressed. If possible, please use the GitLab repo or this support mail address: support (at) clearurls.xyz.
|
||||
lock: false
|
||||
close: false
|
||||
|
||||
pulls:
|
||||
comment: >
|
||||
This repository is just a mirror of https://gitlab.com/KevinRoebert/ClearUrls. Only there pull requests accepted.
|
||||
lock: false
|
||||
close: true
|
||||
|
||||
# Repository to extend settings from
|
||||
# _extends: repo
|
||||
27
.gitignore
vendored
Normal file
27
.gitignore
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# WebStorm
|
||||
.idea/
|
||||
|
||||
node_modules
|
||||
yarn.lock
|
||||
distribution
|
||||
coverage
|
||||
size-plugin.json
|
||||
junit.xml
|
||||
117
.gitlab-ci.yml
117
.gitlab-ci.yml
@@ -3,40 +3,113 @@ image: debian:latest
|
||||
before_script:
|
||||
- export DEBIAN_FRONTEND= noninteractive
|
||||
- apt-get update -y
|
||||
- apt-get install -y zip unzip jq
|
||||
- apt-get install -y zip unzip nodejs jsonlint
|
||||
|
||||
# This folder is cached between builds
|
||||
# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
|
||||
cache:
|
||||
paths:
|
||||
- node_modules/
|
||||
stages:
|
||||
- install
|
||||
- test
|
||||
- build
|
||||
# - deploy
|
||||
|
||||
hash rules:
|
||||
stage: build
|
||||
# test rules:
|
||||
# stage: test
|
||||
# script:
|
||||
# - jsonlint-php data/data.min.json
|
||||
# only:
|
||||
# changes:
|
||||
# - data/data.min.json
|
||||
#
|
||||
# hash rules:
|
||||
# stage: build
|
||||
# script:
|
||||
# - sha256sum data/data.min.json | awk '{print $1}' > rules.min.hash
|
||||
# - node build_tools/minifyDataJSON.js "data/data.min.json" "data.minify.json"
|
||||
# - sha256sum data.minify.json | awk '{print $1}' > rules.minify.hash
|
||||
# artifacts:
|
||||
# paths:
|
||||
# - rules.min.hash
|
||||
# - data.minify.json
|
||||
# - rules.minify.hash
|
||||
# only:
|
||||
# refs:
|
||||
# - merge_requests
|
||||
# - master
|
||||
# changes:
|
||||
# - data/data.min.json
|
||||
|
||||
install dependencies:
|
||||
image: node:latest
|
||||
stage: install
|
||||
script:
|
||||
- sha256sum data/data.min.json | awk '{print $1}' > rules.min.hash
|
||||
- npm install
|
||||
|
||||
test:lint:
|
||||
image: node:latest
|
||||
stage: test
|
||||
dependencies:
|
||||
- install dependencies
|
||||
script:
|
||||
- npm run lint
|
||||
|
||||
test:vulnerabilities:
|
||||
image: node:latest
|
||||
stage: test
|
||||
dependencies:
|
||||
- install dependencies
|
||||
script:
|
||||
- npm audit
|
||||
|
||||
test:addon:
|
||||
image: node:latest
|
||||
stage: test
|
||||
dependencies:
|
||||
- install dependencies
|
||||
script:
|
||||
- npm run test:ci
|
||||
coverage: /All files[^|]*\|[^|]*\s+([\d\.]+)/
|
||||
artifacts:
|
||||
when: always
|
||||
paths:
|
||||
- rules.min.hash
|
||||
- coverage
|
||||
reports:
|
||||
junit: junit.xml
|
||||
expire_in: 30 days
|
||||
|
||||
build firefox:
|
||||
bundle addon:
|
||||
stage: build
|
||||
script:
|
||||
- zip ClearUrls_firefox -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
|
||||
|
||||
- zip ClearURLs -r -FS distribution/*
|
||||
only:
|
||||
- master
|
||||
|
||||
artifacts:
|
||||
paths:
|
||||
- ClearUrls_firefox.zip
|
||||
- ClearURLs.zip
|
||||
|
||||
build chrome:
|
||||
stage: build
|
||||
script:
|
||||
- jq 'del(.applications) | .description=""' manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
||||
- zip ClearUrls_chrome -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
|
||||
|
||||
only:
|
||||
- master
|
||||
|
||||
artifacts:
|
||||
paths:
|
||||
- ClearUrls_chrome.zip
|
||||
# pages:
|
||||
# stage: deploy
|
||||
# script:
|
||||
# - mkdir public
|
||||
# - mkdir public/data
|
||||
# - mv GitLabPages/* public/
|
||||
# - cp img/clearurls.svg public/clearurls.svg
|
||||
# - cp data/data.min.json public/data/data.min.json
|
||||
# - sha256sum public/data/data.min.json | awk '{print $1}' > public/data/rules.min.hash
|
||||
# - node build_tools/minifyDataJSON.js "public/data/data.min.json" "public/data/data.minify.json"
|
||||
# - sha256sum public/data/data.minify.json | awk '{print $1}' > public/data/rules.minify.hash
|
||||
# artifacts:
|
||||
# paths:
|
||||
# - public
|
||||
# only:
|
||||
# refs:
|
||||
# - merge_requests
|
||||
# - master
|
||||
# changes:
|
||||
# - GitLabPages/*
|
||||
# - img/clearurls.svg
|
||||
# - data/data.min.json
|
||||
# - build_tools/minifyDataJSON.js
|
||||
|
||||
@@ -36,21 +36,8 @@ You do not have to reinstall Firefox or disable all addons. You can just create
|
||||
* **Version**: [compulsory. you must provide your version]
|
||||
* **Platform**: [either `uname -a` output, or if Windows, version and 32-bit or
|
||||
64-bit]
|
||||
* **Country**: [The country from which you called the page. You can found your country here: http://ip-api.com/json/?fields=country]
|
||||
* **Country**: [The country from which you called the page. You can found your country here: https://ipapi.co//country_capital]
|
||||
|
||||
### Log
|
||||
<!-- Please enable the log functionality of ClearURLs and copy your log into this table. -->
|
||||
<!-- Or if the log is to long, save the html file (press ctrl+s) and attach to this issue the `Log from ClearURLs.html` file -->
|
||||
|
||||
| Before processing | After processing | Rule | Time |
|
||||
|-------------------|------------------|------|------|
|
||||
| | | | |
|
||||
|
||||
<!-- If you attach the html file, please copy into the ``` area -->
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```
|
||||
<!-- Please enable the log functionality of ClearURLs and attach the exported log to this bug report. -->
|
||||
<!-- Here you can find a step by step tutorial "How to enable logging in ClearURLs": https://www.youtube-nocookie.com/embed/Rm1YkwXQDSM -->
|
||||
|
||||
6
.prettierrc
Normal file
6
.prettierrc
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"trailingComma": "all",
|
||||
"tabWidth": 2,
|
||||
"semi": false,
|
||||
"singleQuote": true
|
||||
}
|
||||
368
CHANGELOG.md
368
CHANGELOG.md
@@ -4,6 +4,374 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## Ongoing
|
||||
|
||||
### Changed
|
||||
- Performance optimizations for rules by [@thexeos](https://gitlab.com/thexeos)
|
||||
|
||||
## [1.19.0] - 2020-07-22
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 37
|
||||
|
||||
### Changed
|
||||
- Changed url decoding to prevent endless loop
|
||||
|
||||
## [1.18.1] - 2020-06-07
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 37
|
||||
|
||||
### Changed
|
||||
- Hotfix for the endless loop on new log limit ([#545](https://gitlab.com/KevinRoebert/ClearUrls/issues/545), [#541](https://gitlab.com/KevinRoebert/ClearUrls/issues/541), [#539](https://gitlab.com/KevinRoebert/ClearUrls/issues/539))
|
||||
|
||||
## [1.18.0] - 2020-06-06
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 37
|
||||
|
||||
### Removed
|
||||
- sha256.jquery.plugin
|
||||
- Popper.js v1.16.0
|
||||
- Bootstrap Colorpicker v3.2.0
|
||||
- Removed `xbl` type from request types, because it throws since 78.0b3 exceptions (no longer supported)
|
||||
|
||||
### Added
|
||||
- Pickr v1.7.0
|
||||
|
||||
### Changed
|
||||
- Replaced sha256.jquery.plugin with native hashing
|
||||
- Replaced jQuery dependencies with native JavaScript in all core files (jQuery is only required for the log page)
|
||||
- Hopefully this fixes the performance problems that some users experience when using this addon in conjunction with other addons
|
||||
- [#256](https://gitlab.com/KevinRoebert/ClearUrls/issues/256)
|
||||
- [#535](https://gitlab.com/KevinRoebert/ClearUrls/issues/535)
|
||||
- Restricted the log limit to max. 5000 entries
|
||||
- Default value is now 100
|
||||
- Too many log entries have resulted in performance losses for users who have forgotten that they have turned on the log. This step should prevent this.
|
||||
|
||||
|
||||
## [1.17.0] - 2020-04-14
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Updated some strings of Spanish translation
|
||||
- Updated some strings of French translation
|
||||
- Updated some strings of Italian translation
|
||||
- Updated some strings of Russian translation
|
||||
- Updated some strings of Swedish translation
|
||||
- Updated some strings of Turkish translation
|
||||
- Updated some strings of Ukrainian translation
|
||||
- Updated some strings of Chinese Simple translation
|
||||
|
||||
### Fixed
|
||||
- Fixed a typo in the path to the Datatables JavaScript file
|
||||
- Fixed [#445](https://gitlab.com/KevinRoebert/ClearUrls/issues/445)
|
||||
- Fixed [#462](https://gitlab.com/KevinRoebert/ClearUrls/issues/462)
|
||||
|
||||
### Added
|
||||
- Added check for setBadgeTextColor function (only supported in Firefox)
|
||||
|
||||
### Removed
|
||||
- Removed browser-polyfill content script import (seems no longer needed)
|
||||
- Removed old `applications` value
|
||||
|
||||
## [1.16.0] - 2020-03-20
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added ETag header filtering [#362](https://gitlab.com/KevinRoebert/ClearUrls/issues/362), [#440](https://gitlab.com/KevinRoebert/ClearUrls/issues/440). Hint: Cache must be cleared before first use, to delete the already existing ETags.
|
||||
|
||||
### Fixed
|
||||
- Fixed spontaneous disappearance of the badged
|
||||
- Fixed wrong counting of blocked elements (too little was ;D)
|
||||
|
||||
### Changed
|
||||
- Updated all translation
|
||||
- Changed badged font color to #FFFFFF
|
||||
- Changed watchdog behavior as follows [#428](https://gitlab.com/KevinRoebert/ClearUrls/issues/428), [#431](https://gitlab.com/KevinRoebert/ClearUrls/issues/431), [#429](https://gitlab.com/KevinRoebert/ClearUrls/issues/429):
|
||||
- Increased watchdog interval to 60 seconds
|
||||
- Executed watchdog only if ClearURLs is also active
|
||||
- Watchdog restarts ClearURLs at most 3 times and only if ClearURLs has rules
|
||||
- Changed behavior of downloading rules [#428](https://gitlab.com/KevinRoebert/ClearUrls/issues/428), [#431](https://gitlab.com/KevinRoebert/ClearUrls/issues/431), [#429](https://gitlab.com/KevinRoebert/ClearUrls/issues/429):
|
||||
- If download of hash file fails and no local rules are available, then ClearURLs displays `hash_status_code_5` and deactivates itself
|
||||
- If download of rules file fails and no local rules are available, then ClearURLs displays `hash_status_code_5` and deactivates itself
|
||||
|
||||
## [1.15.0] - 2020-02-16
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Updated Italian translation by [@gioxx](https://gitlab.com/gioxx)
|
||||
|
||||
## [1.14.0] - 2020-02-01
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Changed icon
|
||||
|
||||
## [1.13.0] - 2020-02-01
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Updated some strings of French translation by lucifer
|
||||
|
||||
## [1.12.0] - 2020-01-29
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Updated Russian translation by elfriob
|
||||
- Updated Spanish translation by [@socram](https://gitlab.com/socram)
|
||||
|
||||
## [1.11.0] - 2020-01-06
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added hyperlink auditing blocking [#184](https://gitlab.com/KevinRoebert/ClearUrls/issues/184)
|
||||
- Added yandex link fix script, to avoid URL tracking [#305](https://gitlab.com/KevinRoebert/ClearUrls/issues/305)
|
||||
|
||||
## [1.10.0] - 2020-01-03
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Updated to Bootstrap 4.3.1
|
||||
- Updated to jQuery 3.4.1
|
||||
- Updated to DataTables 1.10.20
|
||||
- Deleted unnecessary Bootstrap Dialog lib
|
||||
- Replaced [pick-a-color](https://github.com/lauren/pick-a-color) with [bootstrap-colorpicker 3.2.0](https://github.com/itsjavi/bootstrap-colorpicker)
|
||||
- Minor corrections on english translation by [@Sopor](https://gitlab.com/Sopor)
|
||||
- Replaced glyphicons with [fontawesome 5.12.0](https://github.com/FortAwesome/Font-Awesome/tree/5.12.0)
|
||||
|
||||
### Added
|
||||
- Added [popper.js 1.16.0](https://github.com/popperjs/popper.js/tree/v1.16.0)
|
||||
- Added Swedish translation by [@Sopor](https://gitlab.com/Sopor)
|
||||
|
||||
### Fixed
|
||||
- Fixed [#338](https://gitlab.com/KevinRoebert/ClearUrls/issues/338)
|
||||
- Fixed [#333](https://gitlab.com/KevinRoebert/ClearUrls/issues/333)
|
||||
- Fixed [#332](https://gitlab.com/KevinRoebert/ClearUrls/issues/332)
|
||||
- Fixed [#307](https://gitlab.com/KevinRoebert/ClearUrls/issues/307)
|
||||
- Maybe [#315](https://gitlab.com/KevinRoebert/ClearUrls/issues/315) fixed
|
||||
|
||||
## [1.9.5] - 2019-12-17
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added Turkish translation by Ulaş Çakmak
|
||||
|
||||
### Changed
|
||||
- Updated some strings of French translation by lucifer
|
||||
|
||||
### Fixed
|
||||
- Fixed problem with default RegExp
|
||||
|
||||
## [1.9.4] - 2019-11-24
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- Fixed toolbar icon on startup [#102](https://gitlab.com/KevinRoebert/ClearUrls/issues/102)
|
||||
|
||||
### Added
|
||||
- Added option to disable/allow domain blocking [#294](https://gitlab.com/KevinRoebert/ClearUrls/issues/294)
|
||||
|
||||
### Changed
|
||||
- Some refactoring
|
||||
|
||||
## [1.9.3.1] - 2019-11-15
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Changed data and hash URL to GitLab Pages, to prevent hitting the GitLab infrastructure directly [#295](https://gitlab.com/KevinRoebert/ClearUrls/issues/295#note_245456134).
|
||||
|
||||
## [1.9.3] - 2019-11-15
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- Fixed wrong initial rules URL
|
||||
|
||||
## [1.9.2] - 2019-11-09
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- Fixed [#290](https://gitlab.com/KevinRoebert/ClearUrls/issues/290)
|
||||
|
||||
### Changed
|
||||
- Updated some strings of Italian translation by [@gioxx](https://gitlab.com/gioxx)
|
||||
|
||||
### Added
|
||||
- Added a minimal version of the data.min.json file where all line breaks and spaces, as well as default values and empty lists are removed.
|
||||
|
||||
## [1.9.1] - 2019-10-24
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- Fixed badged in quiet mode
|
||||
|
||||
### Added
|
||||
- Added Italian translation by [@gioxx](https://gitlab.com/gioxx)
|
||||
|
||||
## [1.9.0] - 2019-10-22
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- Fixed bug in "history tracking injection protection". This option was not disabled, when the global filter switch are on off
|
||||
- Fixed [#241](https://gitlab.com/KevinRoebert/ClearUrls/issues/241)
|
||||
- Possible fix for [#203](https://gitlab.com/KevinRoebert/ClearUrls/issues/203)
|
||||
|
||||
### Changed
|
||||
- Refactoring
|
||||
- Changed background script loading sequence to prevent that required functions are not yet loaded.
|
||||
|
||||
### Added
|
||||
- Added an option to im-/export the log (requires the `downloads` permission)
|
||||
- Added an option to im-/export the settings (requires the `downloads` permission)
|
||||
- Added information page for blocked sites, when they are called in the `main_frame`
|
||||
- Added option to allow referral marketing ([#284](https://gitlab.com/KevinRoebert/ClearUrls/issues/284))
|
||||
- Added "multiple times URL encodes" recognition
|
||||
- Added an option to limit the log entries ([#56](https://gitlab.com/KevinRoebert/ClearUrls/issues/56))
|
||||
|
||||
## [1.8.5] - 2019-09-29
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- Fixed [#264](https://gitlab.com/KevinRoebert/ClearUrls/issues/264)
|
||||
- Fixed [#262](https://gitlab.com/KevinRoebert/ClearUrls/issues/262)
|
||||
- Fixed [#267](https://gitlab.com/KevinRoebert/ClearUrls/issues/267)
|
||||
|
||||
## [1.8.4] - 2019-09-26
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Force redirects only on main frames
|
||||
- Added google link fix script, to avoid the sub frame permission for force redirection on google
|
||||
|
||||
## [1.8.3] - 2019-09-23
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- Fixed OR case
|
||||
|
||||
## [1.8.2] - 2019-09-23
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Only redirects, if request is of type main or sub frame to prevent security issues on automatically loaded ressource like images
|
||||
|
||||
### Fixed
|
||||
- Fixed [#253](https://gitlab.com/KevinRoebert/ClearUrls/issues/253)
|
||||
- Fixed [#254](https://gitlab.com/KevinRoebert/ClearUrls/issues/254)
|
||||
|
||||
## [1.8.1] - 2019-09-12
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Improvements on check for android systems ([#206](https://gitlab.com/KevinRoebert/ClearUrls/issues/206))
|
||||
- Improvements on storage. Away with periodic save of in-memory data to storage. Instead save when there are actual changes by [@tartpvule](https://gitlab.com/tartpvule) in ([!47](https://gitlab.com/KevinRoebert/ClearUrls/merge_requests/47))
|
||||
|
||||
## [1.8.0] - 2019-09-11
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added default option to skip URLs with a host in a local range
|
||||
|
||||
### Fixed
|
||||
- Fixed [#238](https://gitlab.com/KevinRoebert/ClearUrls/issues/238)
|
||||
- Fixed wrong count on cleaning tool (forgot to count also the total amount of elements at cleaning tool)
|
||||
|
||||
### Changed
|
||||
- Improvements on check for android systems ([#206](https://gitlab.com/KevinRoebert/ClearUrls/issues/206))
|
||||
|
||||
## [1.7.4] - 2019-09-06
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added Hungarian translations by [@ztoldy2](https://gitlab.com/ztoldy2)
|
||||
|
||||
## [1.7.3] - 2019-08-07
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Updated Brazilian Portuguese translation by Ramon S.
|
||||
|
||||
## [1.7.2] - 2019-08-07
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Updated japanese translation by [@Shitennouji](https://gitlab.com/Shitennouji)
|
||||
|
||||
## [1.7.1] - 2019-08-04
|
||||
|
||||
### Compatibility note
|
||||
|
||||
6
PRIVACY.md
Normal file
6
PRIVACY.md
Normal file
@@ -0,0 +1,6 @@
|
||||
ClearURLs protects and respects your privacy.
|
||||
We do not collect any of your usage data. Furthermore ClearURLs has no home server nor embed any kind of analytic hooks in its code.
|
||||
|
||||
The only time ClearURLs connects to a remote server (gitlab.io) is to update the rules file and the associated hash file. You can replace the default update address with your own address at any time in the settings.
|
||||
|
||||
The project and the rule file is currently hosted on gitlab.com, which is owned by GitLab Inc. and thus is unrelated to ClearURLs.
|
||||
97
README.md
97
README.md
@@ -1,43 +1,88 @@
|
||||
# ClearURLs
|
||||
<a href="https://www.paypal.me/KevinRoebert" target="_blank"><img src="https://raw.githubusercontent.com/KevinRoebert/DonateButtons/master/Paypal.png" alt="Buy Me A Coffee" height="55"></a>
|
||||
<a href="https://liberapay.com/kroeb" target="_blank"><img src="https://raw.githubusercontent.com/KevinRoebert/DonateButtons/master/LiberaPay.png" alt="Buy Me A Coffee" height="55"></a>
|
||||
<a href="https://www.buymeacoffee.com/KevinRoebert" target="_blank"><img src="https://raw.githubusercontent.com/KevinRoebert/DonateButtons/master/BuyMeACoffee.png" alt="Buy Me A Coffee" height="55"></a>
|
||||
|
||||
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and now also available for *Chrome* based browsers.
|
||||
[<img src="https://blog.mozilla.org/addons/files/2020/04/get-the-addon-fx-apr-2020.svg" alt="for Firefox" height="60px">](https://addons.mozilla.org/firefox/addon/clearurls/) [<img src="https://gitlab.com/KevinRoebert/ClearUrls/-/raw/master/promotion/MEA-button.png" alt="for Edge" height="60px">](https://microsoftedge.microsoft.com/addons/detail/mdkdmaickkfdekbjdoojfalpbkgaddei) [<img src="https://developer.chrome.com/webstore/images/ChromeWebStore_BadgeWBorder_v2_206x58.png" alt="for Chrome" height="60px">](https://chrome.google.com/webstore/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk)
|
||||
|
||||
This add-on will remove the tracking fields from all URLs which are visited by the browser and use a rule file, namely `data.min.json`.
|
||||
# <sub><img src="https://gitlab.com/KevinRoebert/ClearUrls/raw/master/img/clearurls.svg" width="64px" height="64px"></sub> ClearURLs [](https://gitter.im/ClearURLs/community)
|
||||
|
||||
This add-on protects your privacy and block the request from advertising services like *doubleclick.net*.
|
||||
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and *Chrome* based browsers.
|
||||
|
||||
This extension will automatically remove tracking elements from URLs to help protect your privacy when browse through the Internet,
|
||||
which is regularly updated by us and can be found [here](https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json).
|
||||
|
||||
## Application
|
||||
Large (and small) webpages use elements in the URL, e.g.: https://example.com?source=thisIstheSiteIvisitedBefore to track your online activities. In this example, the source field tells the provider which page you visited before. The add-on will remove these tracking fields from the URL.
|
||||
Many websites use tracking elements in the URL (e.g. `https://example.com?utm_source=newsletter1&utm_medium=email&utm_campaign=sale`) to mark your online activity.
|
||||
All that tracking code is not necessary for a website to be displayed or work correctly and can therefore be removed—that is exactly what ClearURLs does.
|
||||
|
||||
Another common example are Amazon URLs. If you search for a product on Amazon you will see a very long URL, such as:
|
||||
```
|
||||
https://www.amazon.com/dp/exampleProduct/ref=sxin_0_pb?__mk_de_DE=ÅMÅŽÕÑ&keywords=tea&pd_rd_i=exampleProduct&pd_rd_r=8d39e4cd-1e4f-43db-b6e7-72e969a84aa5&pd_rd_w=1pcKM&pd_rd_wg=hYrNl&pf_rd_p=50bbfd25-5ef7-41a2-68d6-74d854b30e30&pf_rd_r=0GMWD0YYKA7XFGX55ADP&qid=1517757263&rnid=2914120011
|
||||
```
|
||||
|
||||
Indeed most of the above URL is tracking code. Once ClearURLs has cleaned the address, it will look like this:
|
||||
`https://www.amazon.com/dp/exampleProduct`
|
||||
|
||||
## Features
|
||||
|
||||
* Removes tracking from URLs automatically in the background
|
||||
* Blocks some common ad domains (optional)
|
||||
* Has a built-in tool to clean up multiple URLs at once
|
||||
* Supports redirection to the destination, without tracking services as middleman
|
||||
* Adds an entry to the context menu so that links can be copied quickly and cleanly
|
||||
* Blocks hyperlink auditing, also known as *ping tracking* (see also [this article](https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing))
|
||||
* Prevents ETag tracking
|
||||
* Prevents tracking injection over history API (see also: [The replaceState() method](https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method))
|
||||
* Prevents Google from rewriting the search results (to include tracking elements)
|
||||
* Prevents Yandex from rewriting the search results (to include tracking elements)
|
||||
|
||||
## Permissons
|
||||
Reasoning for needed permissions can be found under [here](https://gitlab.com/KevinRoebert/ClearUrls/issues/159).
|
||||
|
||||
## Screenshot
|
||||

|
||||

|
||||
|
||||
## Offical installation
|
||||
Firefox Add-on: [Download](https://addons.mozilla.org/en-US/firefox/addon/clearurls/)
|
||||
|
||||
Chrome Add-on: [Download](https://chrome.google.com/webstore/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk)
|
||||
|
||||
|
||||
### Download (for Firefox- and Chrome-Dev only)
|
||||
## CI/CD Artifacts Download (for Firefox- and Chrome-Dev only)
|
||||
Here you can download the packed files for the Firefox- and Chrome-Dev:
|
||||
|
||||
[Firefox](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearUrls_firefox.zip?job=build%20firefox)
|
||||
[<img src="promotion/download-128.png"/>](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs.zip?job=bundle%20addon)
|
||||
|
||||
[Chrome](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearUrls_chrome.zip?job=build%20chrome)
|
||||
## Test
|
||||
If you want to test whether ClearURLs works correctly on your system, you can go to this test page: [https://test.clearurls.xyz/](https://test.clearurls.xyz/)
|
||||
|
||||
## Contribute
|
||||
If you have any suggestions or complaints, please [create an issue.](https://gitlab.com/KevinRoebert/ClearUrls/issues/new)
|
||||
|
||||
**Note: If you have any suggestions or complaints regarding the rules, please [create an issue in this repo](https://gitlab.com/anti-tracking/ClearURLs/rules/-/issues/new) or email us rules.support (at) clearurls.xyz (this mail will automatically create a new issue in this repo).**
|
||||
|
||||
### Translate ClearURLs
|
||||
You want to help translating ClearURLs into many languages? – Nice
|
||||
|
||||
You can choose between two options to contribute. You can create a merge request, or you can use the POEditor to translate ClearURLs.
|
||||
|
||||
*Hint: The description field in the translation files are only an information for what the translation is used.
|
||||
It is not necessary to translate the description field; in the most cases it is empty.*
|
||||
|
||||
#### Merge request
|
||||
If you want to create a merge request, you must open the path [`source/_locales/en/messages.json`](https://github.com/KevinRoebert/ClearUrls/blob/master/source/_locales/en/messages.json) in the ClearURLs repo
|
||||
and translate the english terms into terms of your language. Once you have translated all the terms, you make a pull request of your translation.
|
||||
Please push your translation into the folder `_locales/{country code}/messages.json`.
|
||||
|
||||
#### POEditor
|
||||
[<img src="https://poeditor.com/public/images/logo/logo.svg" alt="https://poeditor.com/join/project/vKTpQWWvk2" width="150">](https://poeditor.com/join/project/vKTpQWWvk2)
|
||||
|
||||
## Projects that use parts of ClearURLs
|
||||
|
||||
* [Uroute](https://github.com/walterl/uroute) used ClearURLs to filter/clean URL before launching browser
|
||||
* [Scrub](https://gitlab.com/CrunchBangDev/cbd-cogs/-/tree/master/Scrub) used ClearURLs to filter/clean URLs as cog for the Red Discord bot
|
||||
|
||||
## Recommended by...
|
||||
* [ghacks-user.js](https://github.com/ghacksuserjs/ghacks-user.js/wiki/4.1-Extensions)
|
||||
* [Awesome Humane Tech List](https://github.com/humanetech-community/awesome-humane-tech#tracking)
|
||||
|
||||
## Permissions
|
||||
* [PrivacyTools](https://www.privacytools.io/browsers/#addons)
|
||||
* ClearURLs is part of Mozilla's recommended extensions program
|
||||
|
||||
## Permissions
|
||||
Reasoning for needed permissions you can find under [this discussion](https://gitlab.com/KevinRoebert/ClearUrls/issues/159).
|
||||
|
||||
## Copyright
|
||||
@@ -45,16 +90,14 @@ We use some third-party scripts in our add-on. The authors and licenses are list
|
||||
- [WebExtension browser API Polyfill](https://github.com/mozilla/webextension-polyfill) |
|
||||
Copyright by Mozilla |
|
||||
[MPL-2.0](https://github.com/mozilla/webextension-polyfill/blob/master/LICENSE)
|
||||
- [Bootstrap v3.3.7 ](http://getbootstrap.com) |
|
||||
- [Bootstrap v4.3.1](https://github.com/twbs/bootstrap/tree/v4.3.1) |
|
||||
Copyright 2011-2016 Twitter, Inc. |
|
||||
[MIT](https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
- [jQuery v3.2.1](https://jquery.com/) |
|
||||
Copyright 2017 The jQuery Foundation |
|
||||
- [jQuery v3.4.1](https://github.com/jquery/jquery/tree/3.4.1) |
|
||||
Copyright JS Foundation and other contributors |
|
||||
[MIT](https://jquery.org/license/)
|
||||
- [sha256.jquery.plugin](https://github.com/orsozed/sha256.jquery.plugin) |
|
||||
Copyright 2003, Christoph Bichlmeier |
|
||||
[MIT](https://raw.github.com/orsozed/JQuery-Plugins/master/license/MIT-LICENSE.txt) |
|
||||
[GPLv2](https://raw.github.com/orsozed/JQuery-Plugins/master/license/GPL-LICENSE.txt)
|
||||
- [DataTables](https://datatables.net/) | Copyright 2011-2015 SpryMedia Ltd | [MIT](https://datatables.net/license/)
|
||||
- [Pick-a-Color v1.2.3](https://github.com/lauren/pick-a-color) | Copyright (c) 2013 Lauren Sperber and Broadstreet Ads |
|
||||
[MIT](https://github.com/lauren/pick-a-color/blob/master/LICENSE)
|
||||
- [DataTables v1.10.20](https://github.com/DataTables/DataTables/tree/master) | Copyright (c) 2008-2015 SpryMedia Limited | [MIT](https://datatables.net/license/)
|
||||
- [Pickr v1.7.0](https://github.com/Simonwep/pickr/tree/1.7.0) | Copyright (c) 2018 - 2020 Simon Reinisch |
|
||||
[MIT](https://github.com/Simonwep/pickr/blob/master/LICENSE)
|
||||
- [Font Awesome v5.12.0](https://github.com/FortAwesome/Font-Awesome/tree/5.12.0) | Copyright (c) @fontawesome |
|
||||
[Font Awesome Free License](https://github.com/FortAwesome/Font-Awesome/blob/master/LICENSE.txt)
|
||||
|
||||
46
__tests__/rules/rule.ts
Normal file
46
__tests__/rules/rule.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import Rule from '../../source/rules/rule';
|
||||
import SimpleRule from '../../source/rules/simpleRule';
|
||||
|
||||
describe('RuleTest', () => {
|
||||
let rule: Rule
|
||||
|
||||
it('should create correct RegExp', () => {
|
||||
rule = new SimpleRule('test')
|
||||
|
||||
expect(rule.value.toString()).toBe(new RegExp('([\/?#]|(&|&))+(test=[^&]*)', 'gi').toString())
|
||||
})
|
||||
|
||||
it('should return correct value on toString', () => {
|
||||
rule = new SimpleRule('test')
|
||||
|
||||
expect(rule.toString()).toBe('([\/?#]|(&|&))+(test=[^&]*)')
|
||||
})
|
||||
|
||||
it('should be set active value correctly', () => {
|
||||
rule = new SimpleRule('test')
|
||||
|
||||
expect(rule.isActive).toBe(true)
|
||||
rule.deactivate()
|
||||
expect(rule.isActive).toBe(false)
|
||||
rule.activate()
|
||||
expect(rule.isActive).toBe(true)
|
||||
})
|
||||
})
|
||||
44
__tests__/utils/circularBuffer.ts
Normal file
44
__tests__/utils/circularBuffer.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import CircularBuffer from '../../source/utils/circularBuffer'
|
||||
|
||||
describe('CircularBuffer', () => {
|
||||
let capacity: number
|
||||
let buffer: CircularBuffer<string>
|
||||
|
||||
beforeEach(() => {
|
||||
capacity = 10
|
||||
buffer = new CircularBuffer<string>(capacity)
|
||||
})
|
||||
|
||||
it('should creates a buffer with the specified capacity', () => {
|
||||
expect(buffer.capacity).toBe(capacity)
|
||||
})
|
||||
|
||||
it('should add item to the buffer', () => {
|
||||
expect(buffer.size).toBe(0)
|
||||
buffer.enqueue('foo')
|
||||
expect(buffer.size).toBe(1)
|
||||
})
|
||||
|
||||
it('should remove oldest item if the buffer is full on adding new items', () => {
|
||||
buffer = new CircularBuffer<string>(2)
|
||||
buffer.enqueue('foo1')
|
||||
buffer.enqueue('foo2')
|
||||
buffer.enqueue('foo3')
|
||||
buffer.enqueue('foo4')
|
||||
expect(buffer.toArray()).toEqual(['foo3', 'foo4'])
|
||||
})
|
||||
|
||||
|
||||
it('should return the current size via the size() getter', () => {
|
||||
buffer.enqueue('foo')
|
||||
expect(buffer.size).toBe(1)
|
||||
})
|
||||
|
||||
it('should return true if buffer is empty', () => {
|
||||
expect(buffer.isEmpty()).toBe(true)
|
||||
})
|
||||
|
||||
it('should throw exception on illegal argument', () => {
|
||||
expect(() => new CircularBuffer<any>(0)).toThrow('The capacity must be > 0')
|
||||
})
|
||||
})
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "atualizado",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "atualizado",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "atualização disponivel",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "erro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Oops, algo deu errado!",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "Esta url foi redirecionada",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "Este domínio foi bloqueado",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: Examinador de registro foi adicionado",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Registro do ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Antes de processar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "Depois de processar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "Regra",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "Tempo",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Resetar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Resetar o registro global",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "Configurações",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Filtrar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "O botão filtrar ativa a funcionalidade de limpeza do ClearURLs. Se você desativar essa opção toda a extensão é desativada",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Registro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "O registro é salvo localmente apenas. Aconselhamos contra este recurso se você não precisa dele",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Contador",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Mostrar número de urls limpas",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Estatísticas",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Elementos",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Bloqueado",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Porcentagem",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Resetar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Resetar as estatísticas globais",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Estado das regras",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Registro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Abrir o registro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Salvar no disco.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: A extensão não pode ser inicializada.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "Estatísticas",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Ativar ou desativar função de estatísticas",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "Configurações do ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "Cor do contador",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "Resetar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Resetar tudo",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "Url do arquivo data.json (regras)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Salvar e recarregar extensão",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Salvar configurações",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "Url do arquivo rules.hash (hash)",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
@@ -1,283 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "à jour",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "mis à jour",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "mise à jour disponible",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "erreur",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Quelque chose a dysfonctionné",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "Cette URL a été redirigée",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "Ce domaine est bloqué",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: Une base de données pour les URL a été ajoutée",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Journaux de ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Avant traitement",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "Après traitement. ",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "Règle",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "Temps",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Remise à zéro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Réinitialiser les journaux globaux",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "Paramétrages",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Filtre",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "Le commutateur de l'extension active ou désactive la fonction de nettoyage de ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Journalisation",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "Les journaux sont enregistrés localement. Si vous n’avez pas besoin de les consulter, nous déconseillons de les activer",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Compteur",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Afficher le nombre d'URL nettoyées",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Statistiques",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Éléments",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Nb. de bloqués",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Pourcentage",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Remettre à zéro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Remettre à zéro les statistiques globales",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Règles de la base de données",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Journaux",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Ouvrir les journaux",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"message": "Signaler cette URL",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "Signaler un dysfonctionnement sur cette URL",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Sauvegarder sur le disque.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: L’extension n’a pu être démarrée.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "Statistiques",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Activer ou désactiver les statistiques",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "Paramétrages de ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "Couleur du compteur",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "Remettre à l’état initial",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Réinitialisation de tous les paramètres",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "L'URL du fichier data.json (règles)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Sauvegarder et redémarrer l’extension",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Sauvegarde les paramétrages",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "L'URL du fichier rules.hash (signature de contrôle)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_types_label": {
|
||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Types de requête (webRequest)</a> (niveau expert)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "Serveur pour signaler des URL",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "Nous avons reçu votre signalement. Nous allons vérifier cette URL.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "Il semble que cette URL a déjà été signalée.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"donate_button": {
|
||||
"message": "Subventionner le créateur de ClearURLs.",
|
||||
"description": ""
|
||||
},
|
||||
"clipboard_copy_link": {
|
||||
"message": "Copier l’URL sans le traqueur",
|
||||
"description": ""
|
||||
},
|
||||
"context_menu_enabled": {
|
||||
"message": "Activer ClearUrls dans le menu contextuel",
|
||||
"description": ""
|
||||
},
|
||||
"history_listener_enabled": {
|
||||
"message": "Empêcher le suivi par l’API d'historique (<a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>La méthode replaceState()</a>)",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_page_title": {
|
||||
"message": "Outil de nettoyage pour ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_description": {
|
||||
"message": "Ici, vous pouvez déposer des URL et ClearURLs les nettoiera par un clic sur le bouton vert. Vous pouvez mettre plusieurs URL mais chaque URL devra être mise sur une ligne séparée.",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_btn": {
|
||||
"message": "Nettoyer les URL",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_dirty_urls_label": {
|
||||
"message": "Coller ici les URL à nettoyer :",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_clean_urls_label": {
|
||||
"message": "Vous trouverez ici les URL nettoyées :",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
@@ -1,246 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"description": "up to date",
|
||||
"message": "最新の"
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"description": "updated",
|
||||
"message": "更新する"
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"description": "update available",
|
||||
"message": "利用可能な更新"
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"description": "error",
|
||||
"message": "エラー"
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"description": "Oops something went wrong!",
|
||||
"message": "おっと!何かが間違っていた!"
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"description": "This url is redirected",
|
||||
"message": "この URL はリダイレクトされます"
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"description": "This domain is blocked",
|
||||
"message": "このドメインはブロックされています"
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"description": "[ClearURLs]: Log listener is added.",
|
||||
"message": "[ClearURLs]:ログリスナーが追加されました。"
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"description": "Log from ClearURLs",
|
||||
"message": "ClearURLs からのログ"
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"description": "Before processing",
|
||||
"message": "処理する前に"
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"description": "After processing",
|
||||
"message": "処理後"
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"description": "Rule",
|
||||
"message": "規則"
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"description": "Time",
|
||||
"message": "時間"
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"description": "Reset",
|
||||
"message": "リセットする"
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"description": "Reset the global log",
|
||||
"message": "グローバルログをリセットする"
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"description": "Configs",
|
||||
"message": "設定"
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"description": "Filter",
|
||||
"message": "フィルター"
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"description": "The filters switch activates the cleaning functionality of ClearURLs. If you disable this option, the whole addon is disabled",
|
||||
"message": "フィルタースイッチは、ClearURL のクリーニング機能を有効にします。 このオプションを無効にすると、アドオン全体が無効になります。"
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"description": "Logging",
|
||||
"message": "追跡記録"
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"description": "The log is saved only locally. We advise against this feature if you do not need it",
|
||||
"message": "ログはローカルにのみ保存されます。この機能が必要ない場合は、この機能を無効にすることをおすすめします。"
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"description": "Badges",
|
||||
"message": "バッジ"
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"description": "Show number of cleaned urls",
|
||||
"message": "消去された URL の数を表示する"
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"description": "Statistics",
|
||||
"message": "統計"
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"description": "Elements",
|
||||
"message": "要素"
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"description": "Blocked",
|
||||
"message": "ブロックされた"
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"description": "Percentage",
|
||||
"message": "パーセンテージ"
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"description": "Reset",
|
||||
"message": "リセットする"
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"description": "Reset the global statistics",
|
||||
"message": "グローバル統計をリセットする"
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"description": "Rules-Status",
|
||||
"message": "ルール・ステータス"
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"description": "Log",
|
||||
"message": "記録を取る"
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"description": "Open the log",
|
||||
"message": "記録を開く"
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"description": "Report current URL",
|
||||
"message": "現在の URL を報告する"
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"description": "Report the current URL from this tab.",
|
||||
"message": "このタブから現在の URL を報告してください。"
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"description": "[ClearURLs]: Save on disk.",
|
||||
"message": "[ClearURLs]:ディスクに保存します。"
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"description": "[ClearURLs]: The addon could not started.",
|
||||
"message": "[ClearURLs]:アドオンを開始できませんでした。"
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"description": "Statistics",
|
||||
"message": "統計"
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"description": "Activate or deactivate the statistics function",
|
||||
"message": "統計機能を有効または無効にする"
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"description": "Settings from ClearURLs",
|
||||
"message": "ClearURL からの設定"
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"description": "Badged color",
|
||||
"message": "バッジの色"
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"description": "Reset",
|
||||
"message": "リセットする"
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"description": "Reset everything",
|
||||
"message": "すべてをリセットする"
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"description": "The url to the data.json file (rules)",
|
||||
"message": "data.json ファイルへの URL(ルール)"
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"description": "Save & reload addon",
|
||||
"message": "アドオンの保存と再読み込み"
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"description": "Saves the settings",
|
||||
"message": "設定を保存します。"
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"description": "The url to the rules.hash file (hash)",
|
||||
"message": "rules.hash ファイル(ハッシュ)への URL"
|
||||
},
|
||||
|
||||
"setting_types_label": {
|
||||
"description": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (expert level)",
|
||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'> リクエストタイプ</a> (エキスパートレベル)"
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"description": "Report server for URLs",
|
||||
"message": "URL のサーバーを報告する"
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"description": "The URL was successfully reported. We will check this URL soon.",
|
||||
"message": "URL は正常に報告されました。 我々はすぐに、この URL をチェックします。"
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"description": "It seems like this URL has already been reported.",
|
||||
"message": "この URL は既に報告されているようです。"
|
||||
}
|
||||
}
|
||||
@@ -1,206 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "atualizado",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "atualizado",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "atualização disponivel",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "erro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Oops, algo deu errado!",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "Esta url foi redirecionada",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "Este domínio foi bloqueado",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: Examinador de registro foi adicionado",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Registro do ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Antes de processar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "Depois de processar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "Regra",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "Tempo",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Resetar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Resetar o registro global",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "Configurações",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Filtrar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Registro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "O registro é salvo localmente apenas. Aconselhamos contra este recurso se você não precisa dele",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Contador",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Estatísticas",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Elementos",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Bloqueado",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Porcentagem",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Resetar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Resetar as estatísticas globais",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Estado das regras",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Registro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Abrir o registro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Salvar no disco.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: A extensão não pode ser inicializada.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "Estatísticas",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Ativar ou desativar função de estatísticas",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "Configurações do ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "Cor do contador",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "Resetar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Resetar tudo",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "Url do arquivo data.json (regras)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Salvar e recarregar extensão",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Salvar configurações",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "Url do arquivo rules.hash (hash)",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "не требует обновления",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "обновлено",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "есть обновление",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "ошибка",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Ой, что-то не так!",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "Этот URL перенаправляется",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "Этот домен заблокирован",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: Лог listener добавлен.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Лог ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "До обработки",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "После обработки",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "Правило",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "Время",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Сброс",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Сброс глобального лога",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "Настройки",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Фильтр",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "Активирует функцию очистки URL. Если выключить - аддон не будет работать",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Логирование",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "Лог сохраняется только локально. Не используйте эту функцию, если она вам не нужна.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Значки",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Показать количество очищенных URL",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Статистика",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Элементы",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Заблокировано",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Процент",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Сброс",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Сброс глобальной статистики",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Актуальность правил",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Лог",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Открыть лог",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Сохранить на диск.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: Не удалось запустить аддон.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "Статистика",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Вкл. или выкл. статистику",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "Настройки ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "Цвет значка",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "Сброс",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Сбросить всё",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "Ссылка на файл data.json (правила)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Сохранить и перезагрузить аддон",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Сохранение настроек",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "Ссылка на файл rules.hash (хэш)",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
@@ -1,202 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "не потребує оновлення",
|
||||
"description": ""
|
||||
},
|
||||
"hash_status_code_2": {
|
||||
"message": "оновлено",
|
||||
"description": ""
|
||||
},
|
||||
"hash_status_code_3": {
|
||||
"message": "наявне оновлення",
|
||||
"description": ""
|
||||
},
|
||||
"hash_status_code_4": {
|
||||
"message": "помилка",
|
||||
"description": ""
|
||||
},
|
||||
"hash_status_code_5": {
|
||||
"message": "Ой, щось не так!",
|
||||
"description": ""
|
||||
},
|
||||
"log_redirect": {
|
||||
"message": "Ця URL-адреса перенаправляється",
|
||||
"description": ""
|
||||
},
|
||||
"log_domain_blocked": {
|
||||
"message": "Цей домен заблоковано",
|
||||
"description": ""
|
||||
},
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: listener журналу додано.",
|
||||
"description": ""
|
||||
},
|
||||
"log_html_page_title": {
|
||||
"message": "Журнал ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
"log_html_table_head_1": {
|
||||
"message": "Перед обробкою",
|
||||
"description": ""
|
||||
},
|
||||
"log_html_table_head_2": {
|
||||
"message": "Після обробки",
|
||||
"description": ""
|
||||
},
|
||||
"log_html_table_head_3": {
|
||||
"message": "Правило",
|
||||
"description": ""
|
||||
},
|
||||
"log_html_table_head_4": {
|
||||
"message": "Час",
|
||||
"description": ""
|
||||
},
|
||||
"log_html_reset_button": {
|
||||
"message": "Скинути",
|
||||
"description": ""
|
||||
},
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Скидання глобального журналу",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_configs_head": {
|
||||
"message": "Налаштування",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Фільтр",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "Активує функцію очищення ClearURLs. Якщо вимкнути - додаток не працюватиме",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Журнал",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "Журнал зберігається лише локально. Не активуйте цю функцію, якщо вона вам не потрібна",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Позначки",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Показати кількість очищених URL",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Статистика",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Елементи",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Заблоковано",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Відсоток",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Скинути",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Скидання глобальної статистики",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Актуальність правил",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_log_head": {
|
||||
"message": "Журнал",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Відкрити журнал",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_report_button": {
|
||||
"message": "Повідомити про URL",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_report_button_title": {
|
||||
"message": "Повідомити про URL з цієї вкладки.",
|
||||
"description": ""
|
||||
},
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Зберегти на диск.",
|
||||
"description": ""
|
||||
},
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: Не вдалося запустити додаток.",
|
||||
"description": ""
|
||||
},
|
||||
"configs_switch_statistics": {
|
||||
"message": "Статистика",
|
||||
"description": ""
|
||||
},
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Увімкнення чи вимкнення статистики",
|
||||
"description": ""
|
||||
},
|
||||
"settings_html_page_title": {
|
||||
"message": "Налаштування ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
"badged_color_label": {
|
||||
"message": "Колір піктограми",
|
||||
"description": ""
|
||||
},
|
||||
"setting_html_reset_button": {
|
||||
"message": "Скинути",
|
||||
"description": ""
|
||||
},
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Скинути все",
|
||||
"description": ""
|
||||
},
|
||||
"setting_rule_url_label": {
|
||||
"message": "Посилання на файл data.json (правила)",
|
||||
"description": ""
|
||||
},
|
||||
"settings_html_save_button": {
|
||||
"message": "Зберегти і перезавантажити додаток",
|
||||
"description": ""
|
||||
},
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Збереження налаштувань",
|
||||
"description": ""
|
||||
},
|
||||
"setting_hash_url_label": {
|
||||
"message": "Посилання на файл rules.hash (хеш)",
|
||||
"description": ""
|
||||
},
|
||||
"setting_types_label": {
|
||||
"message": "<a href='https:\/\/developer.mozilla.org\/en-US\/docs\/Mozilla\/Add-ons\/WebExtensions\/API\/webRequest\/ResourceType' target='_blank'>Типи запитів<\/a> (експертний рівень)",
|
||||
"description": ""
|
||||
},
|
||||
"setting_report_server_label": {
|
||||
"message": "Звіт про сервер URL",
|
||||
"description": ""
|
||||
},
|
||||
"success_report_url": {
|
||||
"message": "Успішно повідомлено про URL-адресу. Ми невдовзі це перевіримо.",
|
||||
"description": ""
|
||||
},
|
||||
"error_report_url": {
|
||||
"message": "Схоже, про цю URL-адресу вже повідомлено.",
|
||||
"description": ""
|
||||
},
|
||||
"donate_button": {
|
||||
"message": "Внесок для розробників ClearURLs.",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
@@ -1,291 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "已是最新的",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "已更新",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "有可用的更新",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "错误",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "发生错误",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "此网址已被转址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "此网域已被封锁",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: 已新增日志聆听者",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "ClearURLs日志",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "处理前",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "处理后",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "规则",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "时间",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "重置全局日志",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "设定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "过滤器",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "此为ClearURLs的主开关. 若关闭则此插件失效.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "日志",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "日志会被储存于本地. 若不需要此功能建议关闭.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "徽章",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "显示已清理数量",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "统计",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "元件",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "已阻挡",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "比例",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "重置全局统计",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "规则-状态",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "日志",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "开启日志",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"message": "回报目前网址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "回报该分页目前网址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: 储存于本地",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: 插件无法启动",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "统计",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "开启或关闭统计功能",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "ClearURLs设定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "徽章颜色",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "重置所有设定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "data.json档的网址 (规则)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "储存并重启插件",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "储存设定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "rules.hash档的网址 (校验)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_types_label": {
|
||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>请求类型</a> (进阶设定)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "回报网址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "该网址已成功回报",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "该网址已被回报过",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"donate_button": {
|
||||
"message": "给ClearURLs的作者一点贊助",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"clipboard_copy_link": {
|
||||
"message": "複製清理过的网址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"context_menu_enabled": {
|
||||
"message": "显示右键选单条目",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"history_listener_enabled": {
|
||||
"message": "Prevent tracking injection over history API (详见: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_page_title": {
|
||||
"message": "ClearURLs的网址清理工具",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_description": {
|
||||
"message": "此工具提供手动清理网址的功能. 在下方贴上网址并按下绿色按钮, ClearURLs将会输出清理后的网址. 若要同时清理多个网址, 请将每个置于不同行.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_btn": {
|
||||
"message": "网址清理工具",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_dirty_urls_label": {
|
||||
"message": "清理前的网址:",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_clean_urls_label": {
|
||||
"message": "清理后的网址:",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
@@ -1,291 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "已是最新的",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "已更新",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "有可用的更新",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "錯誤",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "發生錯誤",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "此網址已被轉址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "此網域已被封鎖",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: 已新增記錄監聽器",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "ClearURLs歷史記錄",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "處理前",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "處理後",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "規則",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "時間",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "重置全域記錄檔",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "設定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "過濾器",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "此為ClearURLs的主開關. 若關閉則此附件元件失效.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "歷史記錄",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "記錄檔會被儲存於本機. 若不需要此功能建議關閉.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "徽章",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "顯示已清理數量",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "統計",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "元件",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "已阻擋",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "比例",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "重置全域統計",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "規則-狀態",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "記錄",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "開啟記錄",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"message": "回報目前網址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "回報該分頁目前網址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: 儲存於本機",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: 附加元件無法啟動",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "統計",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "開啟或關閉統計功能",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "ClearURLs設定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "徽章顏色",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "重置所有設定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "data.json檔的網址 (規則)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "儲存並重啟附件元件",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "儲存設定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "rules.hash檔的網址 (校驗)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_types_label": {
|
||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>請求類型</a> (進階設定)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "回報網址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "該網址已成功回報",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "該網址已被回報過",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"donate_button": {
|
||||
"message": "給ClearURLs的作者一點贊助",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"clipboard_copy_link": {
|
||||
"message": "複製清理過的網址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"context_menu_enabled": {
|
||||
"message": "顯示右鍵選單項目",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"history_listener_enabled": {
|
||||
"message": "Prevent tracking injection over history API (詳見: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_page_title": {
|
||||
"message": "ClearURLs的網址清理工具",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_description": {
|
||||
"message": "此工具提供手動清理網址的功能. 在下方貼上網址並按下綠色按鈕, ClearURLs將會輸出清理後的網址. 若要同時清理多個網址, 請將每個置於不同行.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_btn": {
|
||||
"message": "網址清理工具",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_dirty_urls_label": {
|
||||
"message": "清理前的網址:",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_clean_urls_label": {
|
||||
"message": "清理後的網址:",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1186
browser-polyfill.js
1186
browser-polyfill.js
File diff suppressed because it is too large
Load Diff
767
clearurls.js
767
clearurls.js
@@ -1,767 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for the core functionalities.
|
||||
*/
|
||||
var providers = [];
|
||||
var prvKeys = [];
|
||||
var badges = [];
|
||||
var tabid = 0;
|
||||
var siteBlockedAlert = 'javascript:void(0)';
|
||||
var dataHash;
|
||||
var localDataHash;
|
||||
var os;
|
||||
var currentURL;
|
||||
|
||||
/**
|
||||
* Helper function which remove the tracking fields
|
||||
* for each provider given as parameter.
|
||||
*
|
||||
* @param {Provider} provider Provider-Object
|
||||
* @return {Array} Array with changes and url fields
|
||||
*/
|
||||
function removeFieldsFormURL(provider, pureUrl)
|
||||
{
|
||||
var url = pureUrl;
|
||||
var domain = "";
|
||||
var fragments = "";
|
||||
var fields = "";
|
||||
var rules = provider.getRules();
|
||||
var changes = false;
|
||||
var cancel = false;
|
||||
var rawRules = provider.getRawRules();
|
||||
|
||||
/*
|
||||
* Apply raw rules to the URL.
|
||||
*/
|
||||
rawRules.forEach(function(rawRule) {
|
||||
var beforReplace = url;
|
||||
url = url.replace(new RegExp(rawRule, "gi"), "");
|
||||
|
||||
if(beforReplace !== url) {
|
||||
//Log the action
|
||||
if(storage.loggingStatus)
|
||||
{
|
||||
pushToLog(beforReplace, url, rawRule);
|
||||
}
|
||||
|
||||
if(badges[tabid] == null) badges[tabid] = 0;
|
||||
|
||||
increaseURLCounter();
|
||||
|
||||
if(!checkOSAndroid())
|
||||
{
|
||||
if(storage.badgedStatus) {
|
||||
browser.browserAction.setBadgeText({text: (++badges[tabid]).toString(), tabId: tabid});
|
||||
}
|
||||
else
|
||||
{
|
||||
browser.browserAction.setBadgeText({text: "", tabId: tabid});
|
||||
}
|
||||
}
|
||||
|
||||
changes = true;
|
||||
}
|
||||
});
|
||||
|
||||
if(existsFragments(url)) {
|
||||
domain = url.replace(new RegExp("#.*", "i"), "");
|
||||
}
|
||||
if(existsFields(url)) {
|
||||
domain = url.replace(new RegExp("\\?.*", "i"), "");
|
||||
}
|
||||
|
||||
/*
|
||||
* Expand the url by provider redirections. So no tracking on
|
||||
* url redirections form sites to sites.
|
||||
*/
|
||||
var re = provider.getRedirection(url);
|
||||
if(re !== null)
|
||||
{
|
||||
url = decodeURIComponent(re);
|
||||
//Log the action
|
||||
pushToLog(pureUrl, url, translate('log_redirect'));
|
||||
|
||||
return {
|
||||
"redirect": true,
|
||||
"url": url
|
||||
};
|
||||
}
|
||||
|
||||
if(existsFields(url)) {
|
||||
fields = "?"+extractFileds(url).rmEmpty().join("&");
|
||||
}
|
||||
|
||||
if(existsFragments(url)) {
|
||||
fragments = "#"+extractFragments(url).rmEmpty().join("&");
|
||||
}
|
||||
|
||||
/**
|
||||
* Only test for matches, if there are fields or fragments that can be cleaned.
|
||||
*/
|
||||
if(fields !== "" || fragments !== "")
|
||||
{
|
||||
rules.forEach(function(rule) {
|
||||
var beforReplace = fields;
|
||||
var beforReplaceFragments = fragments;
|
||||
fields = fields.replace(new RegExp(rule, "gi"), "");
|
||||
fragments = fragments.replace(new RegExp(rule, "gi"), "");
|
||||
|
||||
if(beforReplace !== fields || beforReplaceFragments !== fragments)
|
||||
{
|
||||
//Log the action
|
||||
if(storage.loggingStatus)
|
||||
{
|
||||
var tempURL = domain;
|
||||
var tempBeforeURL = domain;
|
||||
|
||||
if(fields !== "") tempURL += "?"+fields.replace("?&", "?").replace("?", "");
|
||||
if(fragments !== "") tempURL += "#"+fragments.replace("#&","#").replace("#", "");
|
||||
if(beforReplace !== "") tempBeforeURL += "?"+beforReplace.replace("?&", "?").replace("?", "");
|
||||
if(beforReplaceFragments !== "") tempBeforeURL += "#"+beforReplaceFragments.replace("#&","#").replace("#", "");
|
||||
|
||||
pushToLog(tempBeforeURL, tempURL, rule);
|
||||
}
|
||||
|
||||
if(badges[tabid] == null) badges[tabid] = 0;
|
||||
|
||||
increaseURLCounter();
|
||||
|
||||
if(!checkOSAndroid())
|
||||
{
|
||||
if(storage.badgedStatus) {
|
||||
browser.browserAction.setBadgeText({text: (++badges[tabid]).toString(), tabId: tabid});
|
||||
}
|
||||
else
|
||||
{
|
||||
browser.browserAction.setBadgeText({text: "", tabId: tabid});
|
||||
}
|
||||
}
|
||||
changes = true;
|
||||
}
|
||||
});
|
||||
|
||||
var finalURL = domain;
|
||||
|
||||
if(fields !== "") finalURL += "?"+fields.replace("?", "");
|
||||
if(fragments !== "") finalURL += "#"+fragments.replace("#", "");
|
||||
|
||||
url = finalURL.replace(new RegExp("\\?&"), "?").replace(new RegExp("#&"), "#");
|
||||
}
|
||||
|
||||
if(provider.isCaneling()){
|
||||
pushToLog(pureUrl, pureUrl, translate('log_domain_blocked'));
|
||||
if(badges[tabid] == null)
|
||||
{
|
||||
badges[tabid] = 0;
|
||||
}
|
||||
|
||||
increaseURLCounter();
|
||||
|
||||
if(!checkOSAndroid())
|
||||
{
|
||||
if(storage.badgedStatus) {
|
||||
browser.browserAction.setBadgeText({text: (++badges[tabid]).toString(), tabId: tabid});
|
||||
}
|
||||
else
|
||||
{
|
||||
browser.browserAction.setBadgeText({text: "", tabId: tabid});
|
||||
}
|
||||
}
|
||||
|
||||
cancel = true;
|
||||
}
|
||||
|
||||
return {
|
||||
"changes": changes,
|
||||
"url": url,
|
||||
"cancel": cancel
|
||||
};
|
||||
}
|
||||
|
||||
function start()
|
||||
{
|
||||
/**
|
||||
* Save OS Version
|
||||
*/
|
||||
chrome.runtime.getPlatformInfo(function(info) {
|
||||
os = info.os;
|
||||
changeIcon();
|
||||
|
||||
|
||||
/**
|
||||
* Initialize the JSON provider object keys.
|
||||
*
|
||||
* @param {JSON Object} obj
|
||||
*/
|
||||
function getKeys(obj){
|
||||
for(var key in obj){
|
||||
prvKeys.push(key);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the providers form the JSON object.
|
||||
*
|
||||
*/
|
||||
function createProviders()
|
||||
{
|
||||
data = storage.ClearURLsData;
|
||||
|
||||
for(var p = 0; p < prvKeys.length; p++)
|
||||
{
|
||||
//Create new provider
|
||||
providers.push(new Provider(prvKeys[p], data.providers[prvKeys[p]].completeProvider,
|
||||
data.providers[prvKeys[p]].forceRedirection));
|
||||
|
||||
//Add URL Pattern
|
||||
providers[p].setURLPattern(data.providers[prvKeys[p]].urlPattern);
|
||||
|
||||
//Add rules to provider
|
||||
for(var r = 0; r < data.providers[prvKeys[p]].rules.length; r++)
|
||||
{
|
||||
providers[p].addRule(data.providers[prvKeys[p]].rules[r]);
|
||||
}
|
||||
|
||||
//Add raw rules to provider
|
||||
for(var raw = 0; raw < data.providers[prvKeys[p]].rawRules.length; raw++)
|
||||
{
|
||||
providers[p].addRawRule(data.providers[prvKeys[p]].rawRules[raw]);
|
||||
}
|
||||
|
||||
//Add exceptions to provider
|
||||
for(var e = 0; e < data.providers[prvKeys[p]].exceptions.length; e++)
|
||||
{
|
||||
providers[p].addException(data.providers[prvKeys[p]].exceptions[e]);
|
||||
}
|
||||
|
||||
//Add redirections to provider
|
||||
for(var re = 0; re < data.providers[prvKeys[p]].redirections.length; re++)
|
||||
{
|
||||
providers[p].addRedirection(data.providers[prvKeys[p]].redirections[re]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the external data to Objects and
|
||||
* call the create provider function.
|
||||
*
|
||||
* @param {String} retrievedText - pure data form github
|
||||
*/
|
||||
function toObject(retrievedText) {
|
||||
getKeys(storage.ClearURLsData.providers);
|
||||
createProviders();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the hash for the rule file on github.
|
||||
* Check the hash with the hash form the local file.
|
||||
* If the hash has changed, then download the new rule file.
|
||||
* Else do nothing.
|
||||
*/
|
||||
function getHash()
|
||||
{
|
||||
//Get the target hash from github
|
||||
fetch(storage.hashURL)
|
||||
.then(function(response){
|
||||
var responseTextHash = response.clone().text().then(function(responseTextHash){
|
||||
if(response.ok && $.trim(responseTextHash))
|
||||
{
|
||||
dataHash = responseTextHash;
|
||||
|
||||
if($.trim(dataHash) !== $.trim(localDataHash))
|
||||
{
|
||||
fetchFromURL();
|
||||
}
|
||||
else {
|
||||
toObject(storage.ClearURLsData);
|
||||
storeHashStatus(1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
dataHash = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
* ##################################################################
|
||||
* # Fetch Rules & Exception from URL #
|
||||
* ##################################################################
|
||||
*/
|
||||
function fetchFromURL()
|
||||
{
|
||||
fetch(storage.ruleURL)
|
||||
.then(checkResponse);
|
||||
|
||||
function checkResponse(response)
|
||||
{
|
||||
var responseText = response.clone().text().then(function(responseText){
|
||||
if(response.ok && $.trim(responseText))
|
||||
{
|
||||
var downloadedFileHash = $.sha256(responseText);
|
||||
|
||||
if($.trim(downloadedFileHash) === $.trim(dataHash))
|
||||
{
|
||||
storage.ClearURLsData = responseText;
|
||||
storage.dataHash = downloadedFileHash;
|
||||
storeHashStatus(2);
|
||||
}
|
||||
else {
|
||||
storeHashStatus(3);
|
||||
}
|
||||
storage.ClearURLsData = JSON.parse(storage.ClearURLsData);
|
||||
toObject(storage.ClearURLsData);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// ##################################################################
|
||||
|
||||
/*
|
||||
* ##################################################################
|
||||
* # Supertyp Provider #
|
||||
* ##################################################################
|
||||
*/
|
||||
/**
|
||||
* Declare constructor
|
||||
*
|
||||
* @param {String} _name Provider name
|
||||
* @param {boolean} _completeProvider Set URL Pattern as rule
|
||||
* @param {boolean} _forceRedirection Whether redirects should be enforced via a "tabs.update"
|
||||
* @param {boolean} _isActive Is the provider active?
|
||||
*/
|
||||
function Provider(_name, _completeProvider = false, _forceRedirection = false, _isActive = true){
|
||||
var name = _name;
|
||||
var urlPattern;
|
||||
var enabled_rules = {};
|
||||
var disabled_rules = {};
|
||||
var enabled_exceptions = {};
|
||||
var disabled_exceptions = {};
|
||||
var canceling = _completeProvider;
|
||||
var enabled_redirections = {};
|
||||
var disabled_redirections = {};
|
||||
var active = _isActive;
|
||||
var enabled_rawRules = {};
|
||||
var disabled_rawRules = {};
|
||||
|
||||
if(_completeProvider){
|
||||
enabled_rules[".*"] = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether redirects should be enforced via a "tabs.update"
|
||||
* @return {boolean} whether redirects should be enforced
|
||||
*/
|
||||
this.shouldForceRedirect = function() {
|
||||
return _forceRedirection;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the provider name.
|
||||
* @return {String}
|
||||
*/
|
||||
this.getName = function() {
|
||||
return name;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add URL pattern.
|
||||
*
|
||||
* @require urlPatterns as RegExp
|
||||
*/
|
||||
this.setURLPattern = function(urlPatterns) {
|
||||
urlPattern = new RegExp(urlPatterns, "i");
|
||||
};
|
||||
|
||||
/**
|
||||
* Return if the Provider Request is canceled
|
||||
* @return {Boolean} isCanceled
|
||||
*/
|
||||
this.isCaneling = function() {
|
||||
return canceling;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check the url is matching the ProviderURL.
|
||||
*
|
||||
* @return {boolean} ProviderURL as RegExp
|
||||
*/
|
||||
this.matchURL = function(url) {
|
||||
return urlPattern.test(url) && !(this.matchException(url));
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a rule to the rule array
|
||||
* and replace old rule with new rule.
|
||||
*
|
||||
* @param {String} rule RegExp as string
|
||||
* @param {boolean} isActive Is this rule active?
|
||||
*/
|
||||
this.addRule = function(rule, isActive = true) {
|
||||
rule = "([\\/|\\?|#]|(&|&))+("+rule+"=[^\\/|\\?|&]*)";
|
||||
|
||||
if(isActive)
|
||||
{
|
||||
enabled_rules[rule] = true;
|
||||
|
||||
if(disabled_rules[rule] !== undefined)
|
||||
{
|
||||
delete disabled_rules[rule];
|
||||
}
|
||||
}
|
||||
else {
|
||||
disabled_rules[rule] = true;
|
||||
|
||||
if(enabled_rules[rule] !== undefined)
|
||||
{
|
||||
delete enabled_rules[rule];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Return all active rules as an array.
|
||||
*
|
||||
* @return Array RegExp strings
|
||||
*/
|
||||
this.getRules = function() {
|
||||
return Object.keys(enabled_rules);
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a raw rule to the raw rule array
|
||||
* and replace old raw rule with new raw rule.
|
||||
*
|
||||
* @param {String} rule RegExp as string
|
||||
* @param {boolean} isActive Is this rule active?
|
||||
*/
|
||||
this.addRawRule = function(rule, isActive = true) {
|
||||
if(isActive)
|
||||
{
|
||||
enabled_rawRules[rule] = true;
|
||||
|
||||
if(disabled_rawRules[rule] !== undefined)
|
||||
{
|
||||
delete disabled_rawRules[rule];
|
||||
}
|
||||
}
|
||||
else {
|
||||
disabled_rawRules[rule] = true;
|
||||
|
||||
if(enabled_rawRules[rule] !== undefined)
|
||||
{
|
||||
delete enabled_rawRules[rule];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Return all active raw rules as an array.
|
||||
*
|
||||
* @return Array RegExp strings
|
||||
*/
|
||||
this.getRawRules = function() {
|
||||
return Object.keys(enabled_rawRules);
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a exception to the exceptions array
|
||||
* and replace old with new exception.
|
||||
*
|
||||
* @param {String} exception RegExp as string
|
||||
* @param {Boolean} isActive Is this exception acitve?
|
||||
*/
|
||||
this.addException = function(exception, isActive = true) {
|
||||
if(isActive)
|
||||
{
|
||||
enabled_exceptions[exception] = true;
|
||||
|
||||
if(disabled_exceptions[exception] !== undefined)
|
||||
{
|
||||
delete disabled_exceptions[exception];
|
||||
}
|
||||
}
|
||||
else {
|
||||
disabled_exceptions[exception] = true;
|
||||
|
||||
if(enabled_exceptions[exception] !== undefined)
|
||||
{
|
||||
delete enabled_exceptions[exception];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Private helper method to check if the url
|
||||
* an exception.
|
||||
*
|
||||
* @param {String} url RegExp as string
|
||||
* @return {boolean} if matching? true: false
|
||||
*/
|
||||
this.matchException = function(url) {
|
||||
var result = false;
|
||||
|
||||
//Add the site blocked alert to every exception
|
||||
if(url == siteBlockedAlert) return true;
|
||||
|
||||
for(var exception in enabled_exceptions) {
|
||||
if(result) break;
|
||||
|
||||
exception_regex = new RegExp(exception, "i");
|
||||
result = exception_regex.test(url);
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a redirection to the redirections array
|
||||
* and replace old with new redirection.
|
||||
*
|
||||
* @param {String} redirection RegExp as string
|
||||
* @param {Boolean} isActive Is this redirection active?
|
||||
*/
|
||||
this.addRedirection = function(redirection, isActive = true) {
|
||||
if(isActive)
|
||||
{
|
||||
enabled_redirections[redirection] = true;
|
||||
|
||||
if(disabled_redirections[redirection] !== undefined)
|
||||
{
|
||||
delete disabled_redirections[redirection];
|
||||
}
|
||||
}
|
||||
else {
|
||||
disabled_redirections[redirection] = true;
|
||||
|
||||
if(enabled_redirections[redirection] !== undefined)
|
||||
{
|
||||
delete enabled_redirections[redirection];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Return all redirection.
|
||||
*
|
||||
* @return url
|
||||
*/
|
||||
this.getRedirection = function(url) {
|
||||
var re = null;
|
||||
|
||||
for(var redirection in enabled_redirections) {
|
||||
result = (url.match(new RegExp(redirection, "i")));
|
||||
|
||||
if (result && result.length > 0 && redirection)
|
||||
{
|
||||
re = (new RegExp(redirection, "i")).exec(url)[1];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return re;
|
||||
};
|
||||
}
|
||||
// ##################################################################
|
||||
|
||||
/**
|
||||
* Function which called from the webRequest to
|
||||
* remove the tracking fields from the url.
|
||||
*
|
||||
* @param {webRequest} request webRequest-Object
|
||||
* @return {Array} redirectUrl or none
|
||||
*/
|
||||
function clearUrl(request)
|
||||
{
|
||||
var URLbeforeReplaceCount = countFields(request.url);
|
||||
|
||||
//Add Fields form Request to global url counter
|
||||
increaseGlobalURLCounter(URLbeforeReplaceCount);
|
||||
|
||||
if(storage.globalStatus){
|
||||
var result = {
|
||||
"changes": false,
|
||||
"url": "",
|
||||
"redirect": false,
|
||||
"cancel": false
|
||||
};
|
||||
|
||||
/*
|
||||
* Call for every provider the removeFieldsFormURL method.
|
||||
*/
|
||||
for (var i = 0; i < providers.length; i++) {
|
||||
|
||||
if(providers[i].matchURL(request.url))
|
||||
{
|
||||
result = removeFieldsFormURL(providers[i], request.url);
|
||||
}
|
||||
|
||||
/*
|
||||
* Expand urls and bypass tracking.
|
||||
* Cancel the active request.
|
||||
*/
|
||||
if(result.redirect)
|
||||
{
|
||||
if(providers[i].shouldForceRedirect()) {
|
||||
browser.tabs.update(request.tabId, {url: result.url});
|
||||
return {cancel: true};
|
||||
}
|
||||
|
||||
return {
|
||||
redirectUrl: result.url
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* Cancel the Request and redirect to the site blocked alert page,
|
||||
* to inform the user about the full url blocking.
|
||||
*/
|
||||
if(result.cancel){
|
||||
return {
|
||||
redirectUrl: siteBlockedAlert
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure that the function go not into
|
||||
* a loop.
|
||||
*/
|
||||
if(result.changes){
|
||||
return {
|
||||
redirectUrl: result.url
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Default case
|
||||
return {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Call loadOldDataFromStore, getHash, counter, status and log functions
|
||||
*/
|
||||
|
||||
loadOldDataFromStore();
|
||||
getHash();
|
||||
setBadgedStatus();
|
||||
|
||||
/**
|
||||
* Call by each tab is updated.
|
||||
* And if url has changed.
|
||||
*/
|
||||
function handleUpdated(tabId, changeInfo, tabInfo) {
|
||||
if(changeInfo.url)
|
||||
{
|
||||
delete badges[tabId];
|
||||
}
|
||||
currentURL = tabInfo.url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call by each tab is updated.
|
||||
*/
|
||||
browser.tabs.onUpdated.addListener(handleUpdated);
|
||||
|
||||
/**
|
||||
* Call by each tab change to set the actual tab id
|
||||
*/
|
||||
function handleActivated(activeInfo) {
|
||||
tabid = activeInfo.tabId;
|
||||
browser.tabs.get(tabid).then(function (tab) {
|
||||
currentURL = tab.url;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Call by each tab change.
|
||||
*/
|
||||
browser.tabs.onActivated.addListener(handleActivated);
|
||||
|
||||
/**
|
||||
* Check the request.
|
||||
*/
|
||||
function promise(requestDetails)
|
||||
{
|
||||
if(isDataURL(requestDetails))
|
||||
{
|
||||
return {};
|
||||
}
|
||||
else {
|
||||
var ret = clearUrl(requestDetails);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* To prevent long loading on data urls
|
||||
* we will check here for data urls.
|
||||
*
|
||||
* @type {requestDetails}
|
||||
* @return {boolean}
|
||||
*/
|
||||
function isDataURL(requestDetails) {
|
||||
var s = requestDetails.url;
|
||||
|
||||
return s.substring(0,4) == "data";
|
||||
}
|
||||
|
||||
/**
|
||||
* Call by each Request and checking the url.
|
||||
*
|
||||
* @type {Array}
|
||||
*/
|
||||
browser.webRequest.onBeforeRequest.addListener(
|
||||
promise,
|
||||
{urls: ["<all_urls>"], types: getData("types")},
|
||||
["blocking"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to log all activities from ClearUrls.
|
||||
* Only logging when activated.
|
||||
* The log is only temporary saved in the cache and will
|
||||
* permanently saved with the saveLogOnClose function.
|
||||
*
|
||||
* @param beforeProcessing the url before the clear process
|
||||
* @param afterProcessing the url after the clear process
|
||||
* @param rule the rule that triggered the process
|
||||
*/
|
||||
function pushToLog(beforeProcessing, afterProcessing, rule)
|
||||
{
|
||||
if(storage.loggingStatus)
|
||||
{
|
||||
storage.log.log.push(
|
||||
{
|
||||
"before": beforeProcessing,
|
||||
"after": afterProcessing,
|
||||
"rule": rule,
|
||||
"timestamp": Date.now()
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
var cleanedURLs = [];
|
||||
var i = 0;
|
||||
var length = 0;
|
||||
|
||||
/**
|
||||
* Load only when document is ready
|
||||
*/
|
||||
$(document).ready(function(){
|
||||
setText();
|
||||
$('#cleaning_tool_btn').on("click", cleanURLs);
|
||||
});
|
||||
|
||||
/**
|
||||
* This function cleans all URLs line by line in the textarea.
|
||||
*/
|
||||
function cleanURLs() {
|
||||
var cleanTArea = $('#cleanURLs');
|
||||
var dirtyTArea = $('#dirtyURLs');
|
||||
var urls = dirtyTArea.val().split('\n');
|
||||
cleanedURLs = [];
|
||||
length = urls.length;
|
||||
|
||||
for(i=0; i < length; i++) {
|
||||
browser.runtime.sendMessage({
|
||||
function: "pureCleaning",
|
||||
params: [urls[i]]
|
||||
}).then((data) => {
|
||||
cleanedURLs.push(data.response);
|
||||
if(i >= length-1) {
|
||||
cleanTArea.val(cleanedURLs.join('\n'));
|
||||
}
|
||||
}, handleError);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a string with the i18n API.
|
||||
*
|
||||
* @param {string} string Name of the attribute used for localization
|
||||
*/
|
||||
function translate(string)
|
||||
{
|
||||
return browser.i18n.getMessage(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the text for the UI.
|
||||
*/
|
||||
function setText()
|
||||
{
|
||||
document.title = translate('cleaning_tool_page_title');
|
||||
$('#page_title').text(translate('cleaning_tool_page_title'));
|
||||
$('#cleaning_tool_description').text(translate('cleaning_tool_description'));
|
||||
$('#cleaning_tool_btn').text(translate('cleaning_tool_btn'));
|
||||
$('#cleaning_tool_dirty_urls_label').text(translate('cleaning_tool_dirty_urls_label'));
|
||||
$('#cleaning_tool_clean_urls_label').text(translate('cleaning_tool_clean_urls_label'));
|
||||
}
|
||||
|
||||
function handleError(error) {
|
||||
console.log(`Error: ${error}`);
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for context menu cleaning functions
|
||||
* and based on: https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types
|
||||
*/
|
||||
|
||||
function contextMenuStart() {
|
||||
if(storage.contextMenuEnabled) {
|
||||
browser.contextMenus.create({
|
||||
id: "copy-link-to-clipboard",
|
||||
title: translate("clipboard_copy_link"),
|
||||
contexts: ["link"]
|
||||
});
|
||||
|
||||
browser.contextMenus.onClicked.addListener((info, tab) => {
|
||||
if (info.menuItemId === "copy-link-to-clipboard") {
|
||||
const url = pureCleaning(info.linkUrl);
|
||||
const code = "copyToClipboard(" +
|
||||
JSON.stringify(url)+");";
|
||||
|
||||
browser.tabs.executeScript({
|
||||
code: "typeof copyToClipboard === 'function';",
|
||||
}).then((results) => {
|
||||
if (!results || results[0] !== true) {
|
||||
return browser.tabs.executeScript(tab.id, {
|
||||
file: "/external_js/clipboard-helper.js",
|
||||
});
|
||||
}
|
||||
}).then(() => {
|
||||
return browser.tabs.executeScript(tab.id, {
|
||||
code,
|
||||
});
|
||||
}).catch((error) => {
|
||||
console.error("Failed to copy text: " + error);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for listen on history changes.
|
||||
* This technique is often used to inject tracking code into the location bar,
|
||||
* because all feature events will use the updated URL.
|
||||
*/
|
||||
|
||||
function historyListenerStart() {
|
||||
if(storage.historyListenerEnabled) {
|
||||
browser.webNavigation.onHistoryStateUpdated.addListener(historyCleaner);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function that is triggered on history changes. Injects script into page
|
||||
* to clean links that were pushed to the history stack with the
|
||||
* history.replaceState method.
|
||||
* @param {state object} details The state object is a JavaScript object
|
||||
* which is associated with the new history entry created by replaceState()
|
||||
*/
|
||||
function historyCleaner(details) {
|
||||
var urlBefore = details.url;
|
||||
var urlAfter = pureCleaning(details.url);
|
||||
|
||||
if(urlBefore != urlAfter) {
|
||||
browser.tabs.executeScript(details.tabId, {
|
||||
frameId: details.frameId,
|
||||
code: 'history.replaceState({state: "cleaned_history"},"",'+JSON.stringify(urlAfter)+');'
|
||||
}).then(() => {}, onError);
|
||||
}
|
||||
}
|
||||
|
||||
function onError(error) {
|
||||
console.log(`[ClearURLs] Error: ${error}`);
|
||||
}
|
||||
135
core_js/log.js
135
core_js/log.js
@@ -1,135 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/**
|
||||
* Get the log and display the data as table.
|
||||
*/
|
||||
var log = {};
|
||||
|
||||
/**
|
||||
* Reset the global log
|
||||
*/
|
||||
function resetGlobalLog(){
|
||||
obj = {"log": []};
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ['log', JSON.stringify(obj)]
|
||||
});
|
||||
|
||||
getLog();
|
||||
location.reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the log and display to the user
|
||||
*/
|
||||
function getLog()
|
||||
{
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ['log']
|
||||
}).then((data) => {
|
||||
log = data.response;
|
||||
|
||||
// Sort the log | issue #70
|
||||
log.log.sort(function(a,b) {
|
||||
return b.timestamp - a.timestamp;
|
||||
});
|
||||
|
||||
var length = Object.keys(log.log).length;
|
||||
var row;
|
||||
if(length != 0)
|
||||
{
|
||||
for(var i=0; i<length;i++)
|
||||
{
|
||||
row = "<tr>" +
|
||||
"<td>"+log.log[i].before+"</td>" +
|
||||
"<td>"+log.log[i].after+"</td>" +
|
||||
"<td>"+log.log[i].rule+"</td>" +
|
||||
"<td>"+toDate(log.log[i].timestamp)+"</td>";
|
||||
$('#tbody').append(row);
|
||||
}
|
||||
}
|
||||
$('#logTable').DataTable({
|
||||
"pageLength": 10,
|
||||
"language": {
|
||||
"url": getDataTableTranslation()
|
||||
}
|
||||
} ).order([3, 'desc']).draw();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the translation file for the DataTable
|
||||
*/
|
||||
function getDataTableTranslation()
|
||||
{
|
||||
var lang = browser.i18n.getUILanguage();
|
||||
lang = lang.substring(0,2);
|
||||
var file = browser.extension.getURL('./external_js/dataTables/i18n/'+lang+'.lang');
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert timestamp to date
|
||||
*/
|
||||
function toDate(time)
|
||||
{
|
||||
return new Date(time).toLocaleString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load only when document is ready
|
||||
*/
|
||||
$(document).ready(function(){
|
||||
setText();
|
||||
getLog();
|
||||
$('#reset_log_btn').on("click", resetGlobalLog);
|
||||
});
|
||||
|
||||
/**
|
||||
* Translate a string with the i18n API.
|
||||
*
|
||||
* @param {string} string Name of the attribute used for localization
|
||||
*/
|
||||
function translate(string)
|
||||
{
|
||||
return browser.i18n.getMessage(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the text for the UI.
|
||||
*/
|
||||
function setText()
|
||||
{
|
||||
document.title = translate('log_html_page_title');
|
||||
$('#page_title').text(translate('log_html_page_title'));
|
||||
$('#reset_log_btn').text(translate('log_html_reset_button'));
|
||||
$('#log_html_reset_button').prop('title', translate('log_html_reset_button_title'));
|
||||
$('#head_1').text(translate('log_html_table_head_1'));
|
||||
$('#head_2').text(translate('log_html_table_head_2'));
|
||||
$('#head_3').text(translate('log_html_table_head_3'));
|
||||
$('#head_4').text(translate('log_html_table_head_4'));
|
||||
}
|
||||
|
||||
function handleError(error) {
|
||||
console.log(`Error: ${error}`);
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for the communication between background and content_scripts.
|
||||
*/
|
||||
|
||||
/**
|
||||
* [handleMessage description]
|
||||
* @param request The message itself. This is a JSON-ifiable object.
|
||||
* @param sender A runtime.MessageSender object representing the sender of the message.
|
||||
* @param sendResponse A function to call, at most once, to send a response to the message. The function takes a single argument, which may be any JSON-ifiable object. This argument is passed back to the message sender.
|
||||
*/
|
||||
function handleMessage(request, sender, sendResponse)
|
||||
{
|
||||
var fn = window[request.function];
|
||||
|
||||
if(typeof fn === "function")
|
||||
{
|
||||
var response = fn.apply(null, request.params);
|
||||
|
||||
return Promise.resolve({response});
|
||||
}
|
||||
}
|
||||
|
||||
browser.runtime.onMessage.addListener(handleMessage);
|
||||
315
core_js/popup.js
315
core_js/popup.js
@@ -1,315 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
var element = $("#statistics_value");
|
||||
var elGlobalPercentage = $("#statistics_value_global_percentage");
|
||||
var elProgressbar_blocked = $('#progress_blocked');
|
||||
var elProgressbar_non_blocked = $('#progress_non_blocked');
|
||||
var elTotal = $('#statistics_total_elements');
|
||||
var globalPercentage = 0;
|
||||
var globalCounter;
|
||||
var globalurlcounter;
|
||||
var globalStatus;
|
||||
var badgedStatus;
|
||||
var hashStatus;
|
||||
var loggingStatus;
|
||||
var statisticsStatus;
|
||||
var currentURL;
|
||||
|
||||
async function getData()
|
||||
{
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["globalCounter"]
|
||||
}).then((data) => {
|
||||
globalCounter = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["globalurlcounter"]
|
||||
}).then((data) => {
|
||||
globalurlcounter = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["globalStatus"]
|
||||
}).then((data) => {
|
||||
globalStatus = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["badgedStatus"]
|
||||
}).then((data) => {
|
||||
badgedStatus = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["hashStatus"]
|
||||
}).then((data) => {
|
||||
hashStatus = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["loggingStatus"]
|
||||
}).then((data) => {
|
||||
loggingStatus = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["statisticsStatus"]
|
||||
}).then((data) => {
|
||||
statisticsStatus = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getCurrentURL",
|
||||
params: []
|
||||
}).then((data) => {
|
||||
currentURL = data.response;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the UI.
|
||||
*
|
||||
*/
|
||||
function init()
|
||||
{
|
||||
setSwitchButton("globalStatus", "globalStatus");
|
||||
setSwitchButton("tabcounter", "badgedStatus");
|
||||
setSwitchButton("logging", "loggingStatus");
|
||||
setSwitchButton("statistics", "statisticsStatus");
|
||||
setHashStatus();
|
||||
changeStatistics();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the globalCounter and globalurlcounter value from the storage
|
||||
* @param {(data){} Return value form storage
|
||||
*/
|
||||
function changeStatistics()
|
||||
{
|
||||
globalPercentage = ((globalCounter/globalurlcounter)*100).toFixed(3);
|
||||
|
||||
if(isNaN(Number(globalPercentage))) globalPercentage = 0;
|
||||
|
||||
element.text(globalCounter.toLocaleString());
|
||||
elGlobalPercentage.text(globalPercentage+"%");
|
||||
elProgressbar_blocked.css('width', globalPercentage+'%');
|
||||
elProgressbar_non_blocked.css('width', (100-globalPercentage)+'%');
|
||||
elTotal.text(globalurlcounter.toLocaleString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value for the hashStatus on startUp.
|
||||
*/
|
||||
function setHashStatus()
|
||||
{
|
||||
var element = $('#hashStatus');
|
||||
|
||||
if(hashStatus)
|
||||
{
|
||||
element.text(translate(hashStatus));
|
||||
}
|
||||
else {
|
||||
element.text(translate('hash_status_code_5'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the value of a switch button.
|
||||
* @param {string} id HTML id
|
||||
* @param {string} storageID storage internal id
|
||||
*/
|
||||
function changeSwitchButton(id, storageID)
|
||||
{
|
||||
var element = $('#'+id);
|
||||
|
||||
changeVisibility(id, storageID);
|
||||
|
||||
element.on('change', function(){
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: [storageID, element.is(':checked')]
|
||||
}).then((data) => {
|
||||
if(storageID == "globalStatus"){
|
||||
browser.runtime.sendMessage({
|
||||
function: "changeIcon",
|
||||
params: []
|
||||
});
|
||||
}
|
||||
changeVisibility(id, storageID);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the visibility of sections.
|
||||
*/
|
||||
function changeVisibility(id, storageID)
|
||||
{
|
||||
var element;
|
||||
|
||||
switch(storageID)
|
||||
{
|
||||
case "loggingStatus":
|
||||
element = $('#log_section');
|
||||
break;
|
||||
case "statisticsStatus":
|
||||
element = $('#statistic_section');
|
||||
break;
|
||||
default:
|
||||
element = "undefine";
|
||||
}
|
||||
|
||||
if(element != "undefine")
|
||||
{
|
||||
if($('#'+id).is(':checked'))
|
||||
{
|
||||
element.css('display', '');
|
||||
element.css('display', '');
|
||||
}
|
||||
else {
|
||||
element.css('display', 'none');
|
||||
element.css('display', 'none');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of a switch button.
|
||||
* @param {string} id HTML id
|
||||
* @param {string} varname js internal variable name
|
||||
*/
|
||||
function setSwitchButton(id, varname)
|
||||
{
|
||||
var element = $('#'+id);
|
||||
element.prop('checked', this[varname]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the global statistic
|
||||
*/
|
||||
function resetGlobalCounter(){
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ['globalCounter', 0]
|
||||
});
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ['globalurlcounter', 0]
|
||||
});
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
});
|
||||
|
||||
globalCounter = 0;
|
||||
globalurlcounter = 0;
|
||||
|
||||
changeStatistics();
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
getData().then(() => {
|
||||
init();
|
||||
$('#reset_counter_btn').on("click", resetGlobalCounter);
|
||||
changeSwitchButton("globalStatus", "globalStatus");
|
||||
changeSwitchButton("tabcounter", "badgedStatus");
|
||||
changeSwitchButton("logging", "loggingStatus");
|
||||
changeSwitchButton("statistics", "statisticsStatus");
|
||||
$('#loggingPage').attr('href', browser.extension.getURL('./html/log.html'));
|
||||
$('#settings').attr('href', browser.extension.getURL('./html/settings.html'));
|
||||
$('#cleaning_tools').attr('href', browser.extension.getURL('./html/cleaningTool.html'));
|
||||
setText();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* Set the text for the UI.
|
||||
*/
|
||||
function setText()
|
||||
{
|
||||
injectText('loggingPage','popup_html_log_head');
|
||||
injectText('reset_counter_btn','popup_html_statistics_reset_button');
|
||||
injectText('rules_status_head','popup_html_rules_status_head');
|
||||
injectText('statistics_percentage','popup_html_statistics_percentage');
|
||||
injectText('statistics_blocked','popup_html_statistics_blocked');
|
||||
injectText('statistics_elements','popup_html_statistics_elements');
|
||||
injectText('statistics_head','popup_html_statistics_head');
|
||||
injectText('configs_switch_badges','popup_html_configs_switch_badges');
|
||||
injectText('configs_switch_log','popup_html_configs_switch_log');
|
||||
injectText('configs_switch_filter','popup_html_configs_switch_filter');
|
||||
injectText('configs_head','popup_html_configs_head');
|
||||
injectText('configs_switch_statistics','configs_switch_statistics');
|
||||
$('#donate').prop('title', translate('donate_button'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to inject the translated text and tooltip.
|
||||
*
|
||||
* @param {string} id ID of the HTML element
|
||||
* @param {string} attribute Name of the attribute used for localization
|
||||
* @param {boolean} tooltip
|
||||
*/
|
||||
function injectText(id, attribute, tooltip)
|
||||
{
|
||||
object = $('#'+id);
|
||||
object.text(translate(attribute));
|
||||
|
||||
/*
|
||||
This function will throw an error if no translation
|
||||
is found for the tooltip. This is a planned error.
|
||||
*/
|
||||
tooltip = translate(attribute+"_title");
|
||||
|
||||
if(tooltip != "")
|
||||
{
|
||||
object.prop('title', tooltip);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a string with the i18n API.
|
||||
*
|
||||
* @param {string} string Name of the attribute used for localization
|
||||
*/
|
||||
function translate(string)
|
||||
{
|
||||
return browser.i18n.getMessage(string);
|
||||
}
|
||||
|
||||
function handleError(error) {
|
||||
console.log(`Error: ${error}`);
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
|
||||
/**
|
||||
* Cleans given links. Also do automatic redirection.
|
||||
*
|
||||
* @param {[type]} url url as string
|
||||
* @return {Array} redirectUrl or none
|
||||
*/
|
||||
function pureCleaning(url) {
|
||||
var cleanURL = url;
|
||||
|
||||
for (var i = 0; i < providers.length; i++) {
|
||||
var result = {
|
||||
"changes": false,
|
||||
"url": "",
|
||||
"redirect": false,
|
||||
"cancel": false
|
||||
};
|
||||
|
||||
if(providers[i].matchURL(cleanURL))
|
||||
{
|
||||
result = removeFieldsFormURL(providers[i], cleanURL);
|
||||
cleanURL = result.url;
|
||||
}
|
||||
|
||||
if(result.redirect)
|
||||
{
|
||||
return result.url;
|
||||
}
|
||||
}
|
||||
|
||||
return cleanURL;
|
||||
}
|
||||
@@ -1,270 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
var settings = [];
|
||||
|
||||
getData();
|
||||
|
||||
/**
|
||||
* Load only when document is ready
|
||||
*/
|
||||
$(document).ready(function(){
|
||||
setText();
|
||||
$(".pick-a-color").pickAColor();
|
||||
$('#reset_settings_btn').on("click", reset);
|
||||
$('#save_settings_btn').on("click", save);
|
||||
|
||||
$("#badged_color input").on("change", function () {
|
||||
settings.badged_color = $(this).val();
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ["badged_color", settings.badged_color]
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setBadgedStatus",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Reset everything.
|
||||
* Set everthing to the default values.
|
||||
*/
|
||||
function reset()
|
||||
{
|
||||
browser.runtime.sendMessage({
|
||||
function: "initSettings",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "reload",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the settings.
|
||||
*/
|
||||
function save()
|
||||
{
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ["badged_color", $('input[name=badged_color]').val()]
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setBadgedStatus",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ["ruleURL", $('input[name=rule_url]').val()]
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ["hashURL", $('input[name=hash_url]').val()]
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ["types", $('input[name=types]').val()]
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "reload",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
//location.reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a string with the i18n API.
|
||||
*
|
||||
* @param {string} string Name of the attribute used for localization
|
||||
*/
|
||||
function translate(string)
|
||||
{
|
||||
return browser.i18n.getMessage(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data.
|
||||
*/
|
||||
function getData()
|
||||
{
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["badged_color"]
|
||||
}).then((data) => handleResponseData(data, "badged_color", "badged_color"), handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["ruleURL"]
|
||||
}).then((data) => handleResponseData(data, "rule_url", "rule_url"), handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["hashURL"]
|
||||
}).then((data) => handleResponseData(data, "hash_url", "hash_url"), handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["types"]
|
||||
}).then((data) => handleResponseData(data, "types", "types"), handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["contextMenuEnabled"]
|
||||
}).then((data) => {
|
||||
handleResponseData(data, "contextMenuEnabled", "contextMenuEnabled");
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["historyListenerEnabled"]
|
||||
}).then((data) => {
|
||||
handleResponseData(data, "historyListenerEnabled", "historyListenerEnabled");
|
||||
changeSwitchButton("contextMenuEnabled", "contextMenuEnabled");
|
||||
changeSwitchButton("historyListenerEnabled", "historyListenerEnabled");
|
||||
}, handleError);
|
||||
}, handleError);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the text for the UI.
|
||||
*/
|
||||
function setText()
|
||||
{
|
||||
document.title = translate('settings_html_page_title');
|
||||
$('#page_title').text(translate('settings_html_page_title'));
|
||||
$('#badged_color_label').text(translate('badged_color_label'));
|
||||
$('#reset_settings_btn').text(translate('setting_html_reset_button'));
|
||||
$('#reset_settings_btn').prop('title', translate('setting_html_reset_button_title'));
|
||||
$('#rule_url_label').text(translate('setting_rule_url_label'));
|
||||
$('#hash_url_label').text(translate('setting_hash_url_label'));
|
||||
$('#types_label').html(translate('setting_types_label'));
|
||||
$('#save_settings_btn').text(translate('settings_html_save_button'));
|
||||
$('#save_settings_btn').prop('title', translate('settings_html_save_button_title'));
|
||||
injectText("context_menu_enabled", "context_menu_enabled");
|
||||
$('#history_listener_enabled').html(translate('history_listener_enabled'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the response from the storage and saves the data.
|
||||
* @param {JSON-Object} data Data JSON-Object
|
||||
*/
|
||||
function handleResponseData(data, varName, inputID)
|
||||
{
|
||||
settings[varName] = data.response;
|
||||
$('input[name='+inputID+']').val(data.response);
|
||||
}
|
||||
|
||||
function handleResponse(message) {
|
||||
console.log(`Message from the background script: ${message.response}`);
|
||||
}
|
||||
|
||||
function handleError(error) {
|
||||
console.log(`Error: ${error}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the value of a switch button.
|
||||
* @param {string} id HTML id
|
||||
* @param {string} storageID storage internal id
|
||||
*/
|
||||
function changeSwitchButton(id, storageID)
|
||||
{
|
||||
var element = $('#'+id);
|
||||
|
||||
element.on('change', function(){
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: [storageID, element.is(':checked')]
|
||||
}).then((data) => {
|
||||
if(storageID == "globalStatus"){
|
||||
browser.runtime.sendMessage({
|
||||
function: "changeIcon",
|
||||
params: []
|
||||
});
|
||||
}
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
});
|
||||
});
|
||||
});
|
||||
setSwitchButton(id, storageID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to inject the translated text and tooltip.
|
||||
*
|
||||
* @param {string} id ID of the HTML element
|
||||
* @param {string} attribute Name of the attribute used for localization
|
||||
* @param {boolean} tooltip
|
||||
*/
|
||||
function injectText(id, attribute, tooltip)
|
||||
{
|
||||
object = $('#'+id);
|
||||
object.text(translate(attribute));
|
||||
|
||||
/*
|
||||
This function will throw an error if no translation
|
||||
is found for the tooltip. This is a planned error.
|
||||
*/
|
||||
tooltip = translate(attribute+"_title");
|
||||
|
||||
if(tooltip != "")
|
||||
{
|
||||
object.prop('title', tooltip);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of a switch button.
|
||||
* @param {string} id HTML id
|
||||
* @param {string} varname js internal variable name
|
||||
*/
|
||||
function setSwitchButton(id, varname)
|
||||
{
|
||||
var element = $('#'+id);
|
||||
element.prop('checked', settings[varname]);
|
||||
}
|
||||
@@ -1,230 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for the storage.
|
||||
*/
|
||||
var storage = [];
|
||||
|
||||
/**
|
||||
* Writes the storage variable to the disk.
|
||||
*/
|
||||
function saveOnExit()
|
||||
{
|
||||
var json = {};
|
||||
|
||||
Object.entries(storage).forEach(([key, value]) => {
|
||||
switch (key) {
|
||||
case "ClearURLsData":
|
||||
case "log":
|
||||
json[key] = JSON.stringify(value);
|
||||
break;
|
||||
case "types":
|
||||
json[key] = value.toString();
|
||||
break;
|
||||
default:
|
||||
json[key] = value;
|
||||
}
|
||||
});
|
||||
console.log(translate('core_save_on_disk'));
|
||||
browser.storage.local.set(json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the value under the key on the disk.
|
||||
* @param {String} key
|
||||
* @param {Object} value
|
||||
*/
|
||||
function saveOnDisk(key, value)
|
||||
{
|
||||
browser.storage.local.set({key: value});
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve everything and save on the RAM.
|
||||
*/
|
||||
function getDataFromDisk()
|
||||
{
|
||||
browser.storage.local.get(null).then(initStorage, error);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value under the key.
|
||||
* @param {String} key
|
||||
* @return {Object}
|
||||
*/
|
||||
function getData(key)
|
||||
{
|
||||
return storage[key];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the entire storage object.
|
||||
* @return {Object}
|
||||
*/
|
||||
function getEntireData()
|
||||
{
|
||||
return storage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the value under the key on the RAM.
|
||||
* @param {String} key
|
||||
* @param {Object} value
|
||||
*/
|
||||
function setData(key, value)
|
||||
{
|
||||
switch (key) {
|
||||
case "ClearURLsData":
|
||||
case "log":
|
||||
storage[key] = JSON.parse(value);
|
||||
break;
|
||||
case "hashURL":
|
||||
case "ruleURL":
|
||||
storage[key] = replaceOldURLs(value);
|
||||
break;
|
||||
case "types":
|
||||
storage[key] = value.split(',');
|
||||
break;
|
||||
default:
|
||||
storage[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write error on console.
|
||||
*/
|
||||
function error(e)
|
||||
{
|
||||
console.log(translate('core_error'));
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default values, if the storage is empty.
|
||||
* @param {Object} items
|
||||
*/
|
||||
function initStorage(items)
|
||||
{
|
||||
initSettings();
|
||||
|
||||
if(!isEmpty(items)) {
|
||||
Object.entries(items).forEach(([key, value]) => {
|
||||
setData(key, value);
|
||||
});
|
||||
}
|
||||
|
||||
// Start the clearurls.js
|
||||
start();
|
||||
|
||||
// Start the context_menu
|
||||
contextMenuStart();
|
||||
|
||||
// Start history listener
|
||||
historyListenerStart();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default values for the settings.
|
||||
*/
|
||||
function initSettings()
|
||||
{
|
||||
storage.ClearURLsData = [];
|
||||
storage.dataHash = "";
|
||||
storage.badgedStatus = true;
|
||||
storage.globalStatus = true;
|
||||
storage.globalurlcounter = 0;
|
||||
storage.globalCounter = 0;
|
||||
storage.hashStatus = "error";
|
||||
storage.loggingStatus = false;
|
||||
storage.log = {"log": []};
|
||||
storage.statisticsStatus = true;
|
||||
storage.badged_color = "ffa500";
|
||||
storage.hashURL = "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules";
|
||||
storage.ruleURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
|
||||
storage.contextMenuEnabled = true;
|
||||
storage.historyListenerEnabled = true;
|
||||
|
||||
if(getBrowser() === "Firefox") {
|
||||
storage.types = ["font", "image", "imageset", "main_frame", "media", "object", "object_subrequest", "other", "script", "stylesheet", "sub_frame", "websocket", "xbl", "xml_dtd", "xmlhttprequest", "xslt"];
|
||||
} else if (getBrowser() === "Chrome") {
|
||||
storage.types = ["main_frame", "sub_frame", "stylesheet", "script", "image", "font", "object", "xmlhttprequest", "ping", "csp_report", "media", "websocket", "other"];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the old URLs with the
|
||||
* new GitLab URLs.
|
||||
*/
|
||||
function replaceOldURLs(url)
|
||||
{
|
||||
switch (url) {
|
||||
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/rules.hash?flush_cache=true":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules";
|
||||
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/data.json?flush_cache=true":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
|
||||
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/rules.hash":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules";
|
||||
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
|
||||
default:
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load local saved data, if the browser is offline or
|
||||
* some other network trouble.
|
||||
*/
|
||||
function loadOldDataFromStore()
|
||||
{
|
||||
localDataHash = storage.dataHash;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the hash status to the local storage.
|
||||
* The status can have the following values:
|
||||
* 1 "up to date"
|
||||
* 2 "updated"
|
||||
* 3 "update available"
|
||||
* @param status_code the number for the status
|
||||
*/
|
||||
function storeHashStatus(status_code)
|
||||
{
|
||||
switch(status_code)
|
||||
{
|
||||
case 1: status_code = "hash_status_code_1";
|
||||
break;
|
||||
case 2: status_code = "hash_status_code_2";
|
||||
break;
|
||||
case 3: status_code = "hash_status_code_3";
|
||||
break;
|
||||
default: status_code = "hash_status_code_4";
|
||||
}
|
||||
|
||||
storage.hashStatus = status_code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save every minute the temporary data to the disk.
|
||||
*/
|
||||
setInterval(saveOnExit, 60000);
|
||||
|
||||
// Start storage
|
||||
getDataFromDisk();
|
||||
269
core_js/tools.js
269
core_js/tools.js
@@ -1,269 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for some tools.
|
||||
*/
|
||||
|
||||
/*
|
||||
* To support Waterfox.
|
||||
*/
|
||||
Array.prototype.rmEmpty = function() {
|
||||
return this.filter(v => v);
|
||||
};
|
||||
|
||||
/*
|
||||
* To support Waterfox.
|
||||
*/
|
||||
Array.prototype.flatten = function() {
|
||||
return this.reduce((a, b) => a.concat(b), []);
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if an object is empty.
|
||||
* @param {Object} obj
|
||||
* @return {Boolean}
|
||||
*/
|
||||
function isEmpty(obj)
|
||||
{
|
||||
return (Object.getOwnPropertyNames(obj).length === 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a string with the i18n API.
|
||||
*
|
||||
* @param {string} string Name of the attribute used for localization
|
||||
*/
|
||||
function translate(string)
|
||||
{
|
||||
return browser.i18n.getMessage(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads the extension.
|
||||
*/
|
||||
function reload()
|
||||
{
|
||||
browser.runtime.reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if it is an android device.
|
||||
* @return bool
|
||||
*/
|
||||
function checkOSAndroid()
|
||||
{
|
||||
if(os === undefined || os === null || os === "") {
|
||||
chrome.runtime.getPlatformInfo(function(info) {
|
||||
os = info.os;
|
||||
});
|
||||
}
|
||||
|
||||
if(os == "android")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of parameters query strings.
|
||||
* @param {String} url URL as String
|
||||
* @return {int} Number of Parameters
|
||||
*/
|
||||
function countFields(url)
|
||||
{
|
||||
return extractFileds(url).length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if fields exists.
|
||||
* @param {String} url URL as String
|
||||
* @return {boolean}
|
||||
*/
|
||||
function existsFields(url)
|
||||
{
|
||||
var matches = (url.match(/\?.+/i) || []);
|
||||
var count = matches.length;
|
||||
|
||||
return (count > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract the fields from an url.
|
||||
* @param {String} url URL as String
|
||||
* @return {Array} Fields as array
|
||||
*/
|
||||
function extractFileds(url)
|
||||
{
|
||||
if(existsFields(url)) {
|
||||
var fields = url.replace(new RegExp(".*?\\?", "i"), "");
|
||||
if(existsFragments(url)) {
|
||||
fields = fields.replace(new RegExp("#.*", "i"), "");
|
||||
}
|
||||
|
||||
return (fields.match(/[^\/|\?|&]+=?[^&]*/gi) || []);
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of fragments query strings.
|
||||
* @param {String} url URL as String
|
||||
* @return {int} Number of fragments
|
||||
*/
|
||||
function countFragments(url)
|
||||
{
|
||||
return extractFragments(url).length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract the fragments from an url.
|
||||
* @param {String} url URL as String
|
||||
* @return {Array} fragments as array
|
||||
*/
|
||||
function extractFragments(url)
|
||||
{
|
||||
if(existsFragments(url)) {
|
||||
var fragments = url.replace(new RegExp(".*?#", "i"), "");
|
||||
return (fragments.match(/[^&]+=?[^&]*/gi) || []);
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if fragments exists.
|
||||
* @param {String} url URL as String
|
||||
* @return {boolean}
|
||||
*/
|
||||
function existsFragments(url)
|
||||
{
|
||||
var matches = (url.match(/\#.+/i) || []);
|
||||
var count = matches.length;
|
||||
|
||||
return (count > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load local saved data, if the browser is offline or
|
||||
* some other network trouble.
|
||||
*/
|
||||
function loadOldDataFromStore()
|
||||
{
|
||||
localDataHash = storage.dataHash;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the hash status to the local storage.
|
||||
* The status can have the following values:
|
||||
* 1 "up to date"
|
||||
* 2 "updated"
|
||||
* 3 "update available"
|
||||
* @param status_code the number for the status
|
||||
*/
|
||||
function storeHashStatus(status_code)
|
||||
{
|
||||
switch(status_code)
|
||||
{
|
||||
case 1: status_code = "hash_status_code_1";
|
||||
break;
|
||||
case 2: status_code = "hash_status_code_2";
|
||||
break;
|
||||
case 3: status_code = "hash_status_code_3";
|
||||
break;
|
||||
default: status_code = "hash_status_code_4";
|
||||
}
|
||||
|
||||
storage.hashStatus = status_code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Increase by {number} the GlobalURLCounter
|
||||
* @param {int} number
|
||||
*/
|
||||
function increaseGlobalURLCounter(number)
|
||||
{
|
||||
if(storage.statisticsStatus)
|
||||
{
|
||||
storage.globalurlcounter += number;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Increase by one the URLCounter
|
||||
*/
|
||||
function increaseURLCounter()
|
||||
{
|
||||
if(storage.statisticsStatus)
|
||||
{
|
||||
storage.globalCounter++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the icon.
|
||||
*/
|
||||
function changeIcon()
|
||||
{
|
||||
if(!checkOSAndroid()) {
|
||||
if(storage.globalStatus){
|
||||
browser.browserAction.setIcon({path: "img/clearurls_128x128.png"});
|
||||
} else{
|
||||
browser.browserAction.setIcon({path: "img/clearurls_gray_128x128.png"});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the badged status from the browser storage and put the value
|
||||
* into a local variable.
|
||||
*
|
||||
*/
|
||||
function setBadgedStatus()
|
||||
{
|
||||
if(!checkOSAndroid() && storage.badgedStatus){
|
||||
browser.browserAction.setBadgeBackgroundColor({
|
||||
'color': '#'+storage.badged_color
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current URL.
|
||||
* @return {String} [description]
|
||||
*/
|
||||
function getCurrentURL()
|
||||
{
|
||||
return currentURL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for browser.
|
||||
*/
|
||||
function getBrowser() {
|
||||
if(typeof InstallTrigger !== 'undefined') {
|
||||
return "Firefox";
|
||||
} else {
|
||||
return "Chrome";
|
||||
}
|
||||
}
|
||||
1
css/bootstrap-dialog.min.css
vendored
1
css/bootstrap-dialog.min.css
vendored
@@ -1 +0,0 @@
|
||||
.bootstrap-dialog .modal-header{border-top-left-radius:4px;border-top-right-radius:4px}.bootstrap-dialog .bootstrap-dialog-title{color:#fff;display:inline-block;font-size:16px}.bootstrap-dialog .bootstrap-dialog-message{font-size:14px}.bootstrap-dialog .bootstrap-dialog-button-icon{margin-right:3px}.bootstrap-dialog .bootstrap-dialog-close-button{font-size:20px;float:right;opacity:.9;filter:alpha(opacity=90)}.bootstrap-dialog .bootstrap-dialog-close-button:hover{cursor:pointer;opacity:1;filter:alpha(opacity=100)}.bootstrap-dialog.type-default .modal-header{background-color:#fff}.bootstrap-dialog.type-default .bootstrap-dialog-title{color:#333}.bootstrap-dialog.type-info .modal-header{background-color:#5bc0de}.bootstrap-dialog.type-primary .modal-header{background-color:#337ab7}.bootstrap-dialog.type-success .modal-header{background-color:#5cb85c}.bootstrap-dialog.type-warning .modal-header{background-color:#f0ad4e}.bootstrap-dialog.type-danger .modal-header{background-color:#d9534f}.bootstrap-dialog.size-large .bootstrap-dialog-title{font-size:24px}.bootstrap-dialog.size-large .bootstrap-dialog-close-button{font-size:30px}.bootstrap-dialog.size-large .bootstrap-dialog-message{font-size:18px}.bootstrap-dialog .icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}
|
||||
6
css/bootstrap.min.css
vendored
6
css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
1
css/dataTables.bootstrap.min.css
vendored
1
css/dataTables.bootstrap.min.css
vendored
@@ -1 +0,0 @@
|
||||
table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons Halflings';opacity:0.5}table.dataTable thead .sorting:after{opacity:0.2;content:"\e150"}table.dataTable thead .sorting_asc:after{content:"\e155"}table.dataTable thead .sorting_desc:after{content:"\e156"}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody>table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody>table>thead .sorting:after,div.dataTables_scrollBody>table>thead .sorting_asc:after,div.dataTables_scrollBody>table>thead .sorting_desc:after{display:none}div.dataTables_scrollBody>table>tbody>tr:first-child>th,div.dataTables_scrollBody>table>tbody>tr:first-child>td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
|
||||
86
css/pick-a-color-1.2.3.min.css
vendored
86
css/pick-a-color-1.2.3.min.css
vendored
@@ -1,86 +0,0 @@
|
||||
|
||||
.pick-a-color-markup *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
|
||||
.pick-a-color-markup .hex-pound{padding-left:8px;padding-right:8px}@media screen and (max-width:991px){.pick-a-color-markup .hex-pound{padding:3px 5px 0px 5px;min-height:30px}}
|
||||
.pick-a-color-markup .pick-a-color{padding:5px}@media screen and (max-width:991px){.pick-a-color-markup .pick-a-color{width:100%;font-size:18px;padding:9px;min-width:222px;height:47px}}
|
||||
.pick-a-color-markup .input-group-btn .color-dropdown{padding:6px 5px}.pick-a-color-markup .input-group-btn .color-dropdown.no-hex{border-bottom-left-radius:4px;border-top-left-radius:4px}
|
||||
.pick-a-color-markup .input-group-btn .color-dropdown:focus{background-color:#fff}
|
||||
@media screen and (max-width:991px){.pick-a-color-markup .input-group-btn .color-dropdown{height:47px}}
|
||||
.pick-a-color-markup .color-preview{border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 0 2px 2px rgba(0,0,0,0.075);box-shadow:inset 0 0 2px 2px rgba(0,0,0,0.075);height:1.429em;width:1.429em;display:inline-block;cursor:pointer;margin-right:5px}.pick-a-color-markup .color-preview.current-color{margin-bottom:-5px}
|
||||
@media screen and (max-width:991px){.pick-a-color-markup .color-preview{height:1.875em;width:1.875em}}
|
||||
.pick-a-color-markup .color-menu{text-align:left;padding:5px 0px;width:330px;font-size:14px;left:auto;}.pick-a-color-markup .color-menu.color-menu--inline{left:-285px}@media screen and (max-width:991px){.pick-a-color-markup .color-menu.color-menu--inline{left:-242px}}
|
||||
@media screen and (max-width:991px){.pick-a-color-markup .color-menu{left:-242px;width:293px}}.pick-a-color-markup .color-menu.small{width:100px}@media screen and (max-width:991px){.pick-a-color-markup .color-menu.small{left:-105px}}
|
||||
.pick-a-color-markup .color-menu.no-hex{left:0px}
|
||||
.pick-a-color-markup .color-menu ul{padding:0px;margin:0px}
|
||||
.pick-a-color-markup .color-menu li{list-style-type:none;padding:5px 0px;margin:0px}
|
||||
.pick-a-color-markup .color-menu .color-preview{vertical-align:middle;margin:0px}@media screen and (max-width:991px){.pick-a-color-markup .color-menu .color-preview{height:35px;width:35px}}.pick-a-color-markup .color-menu .color-preview.current-color,.pick-a-color-markup .color-menu .color-preview.white{background-color:#fff}
|
||||
.pick-a-color-markup .color-menu .color-preview.red{background-color:#f00}
|
||||
.pick-a-color-markup .color-menu .color-preview.orange{background-color:#f60}
|
||||
.pick-a-color-markup .color-menu .color-preview.yellow{background-color:#ff0}
|
||||
.pick-a-color-markup .color-menu .color-preview.green{background-color:#008000}
|
||||
.pick-a-color-markup .color-menu .color-preview.blue{background-color:#00f}
|
||||
.pick-a-color-markup .color-menu .color-preview.indigo{background-color:#4a0080}
|
||||
.pick-a-color-markup .color-menu .color-preview.violet{background-color:#ee81ee}
|
||||
.pick-a-color-markup .color-menu .color-preview.purple{background-color:#80007f}
|
||||
.pick-a-color-markup .color-menu .color-preview.black{background-color:#000}
|
||||
.pick-a-color-markup .color-menu .basicColors-content li>a,.pick-a-color-markup .color-menu .savedColors-content li>a{padding:5px 15px 3px 15px;cursor:default;min-height:25px;color:#333}.pick-a-color-markup .color-menu .basicColors-content li>a:hover,.pick-a-color-markup .color-menu .savedColors-content li>a:hover{background-color:#fff}
|
||||
@media screen and (max-width:991px){.pick-a-color-markup .color-menu .basicColors-content li>a,.pick-a-color-markup .color-menu .savedColors-content li>a{min-height:40px}}
|
||||
.pick-a-color-markup .color-menu .basicColors-content li:hover a,.pick-a-color-markup .color-menu .savedColors-content li:hover a{color:#333;background-image:none;filter:none;text-decoration:none;font-weight:bold}@media screen and (max-width:991px){.pick-a-color-markup .color-menu .basicColors-content li:hover a,.pick-a-color-markup .color-menu .savedColors-content li:hover a{background-color:#fff;font-weight:normal}}
|
||||
.pick-a-color-markup .color-menu .btn.color-select{margin:0px 5px;height:20px;padding:0px 5px;margin-top:0px;line-height:1.5px;border-radius:4px}@media screen and (max-width:991px){.pick-a-color-markup .color-menu .btn.color-select{height:35px}}
|
||||
.pick-a-color-markup .caret{margin-bottom:3px}
|
||||
.pick-a-color-markup .color-menu-instructions,.pick-a-color-markup .advanced-instructions{text-align:center;padding:0px 6px;margin:0px;font-size:14px;font-weight:normal}@media screen and (min-width:992px){.pick-a-color-markup .color-menu-instructions,.pick-a-color-markup .advanced-instructions{display:none}}
|
||||
.pick-a-color-markup .color-label{vertical-align:middle;margin:0px;margin-left:10px;cursor:pointer}@media screen and (max-width:991px){.pick-a-color-markup .color-label{margin-left:8px}}
|
||||
.pick-a-color-markup .color-box{height:20px;width:200px;position:absolute;left:115px;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 0 2px 2px rgba(0,0,0,0.075);box-shadow:inset 0 0 2px 2px rgba(0,0,0,0.075);cursor:pointer}@media screen and (max-width:991px){.pick-a-color-markup .color-box{width:160px;height:35px}}
|
||||
.pick-a-color-markup .black .highlight-band-stripe{background-color:#fff}
|
||||
.pick-a-color-markup .spectrum-white{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#fff), to(#808080));background-image:-webkit-linear-gradient(left, color-stop(#fff 0), color-stop(#808080 100%));background-image:-moz-linear-gradient(left, #fff 0, #808080 100%);background-image:linear-gradient(to right, #fff 0, #808080 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ff808080', GradientType=1)}.pick-a-color-markup .spectrum-white .highlight-band{left:0px}
|
||||
.pick-a-color-markup .spectrum-red{background-image:-webkit-gradient(linear, left top, right top, color-stop(0, #fff), color-stop(.5, #f00), color-stop(1, #000));background-image:-moz-linear-gradient(left center, #fff 0, #f00 50%, #000 100%);background-image:-webkit-linear-gradient(left, #fff 0, #f00 50%, #000 100%);background-image:-o-linear-gradient(left, #fff 0, #f00 50%, #000 100%);background-image:linear-gradient(to right, #fff 0, #f00 50%, #000 100%);background-repeat:repeat-x}
|
||||
.pick-a-color-markup .spectrum-orange{background-image:-webkit-gradient(linear, left top, right top, color-stop(0, #fff), color-stop(.5, #f60), color-stop(1, #000));background-image:-moz-linear-gradient(left center, #fff 0, #f60 50%, #000 100%);background-image:-webkit-linear-gradient(left, #fff 0, #f60 50%, #000 100%);background-image:-o-linear-gradient(left, #fff 0, #f60 50%, #000 100%);background-image:linear-gradient(to right, #fff 0, #f60 50%, #000 100%);background-repeat:repeat-x}
|
||||
.pick-a-color-markup .spectrum-yellow{background-image:-webkit-gradient(linear, left top, right top, color-stop(0, #fff), color-stop(.5, #ff0), color-stop(1, #000));background-image:-moz-linear-gradient(left center, #fff 0, #ff0 50%, #000 100%);background-image:-webkit-linear-gradient(left, #fff 0, #ff0 50%, #000 100%);background-image:-o-linear-gradient(left, #fff 0, #ff0 50%, #000 100%);background-image:linear-gradient(to right, #fff 0, #ff0 50%, #000 100%);background-repeat:repeat-x}
|
||||
.pick-a-color-markup .spectrum-green{background-image:-webkit-gradient(linear, left top, right top, color-stop(0, #80ff80), color-stop(.5, #008000), color-stop(1, #000));background-image:-moz-linear-gradient(left center, #80ff80 0, #008000 50%, #000 100%);background-image:-webkit-linear-gradient(left, #80ff80 0, #008000 50%, #000 100%);background-image:-o-linear-gradient(left, #80ff80 0, #008000 50%, #000 100%);background-image:linear-gradient(to right, #80ff80 0, #008000 50%, #000 100%);background-repeat:repeat-x}
|
||||
.pick-a-color-markup .spectrum-blue{background-image:-webkit-gradient(linear, left top, right top, color-stop(0, #fff), color-stop(.5, #00f), color-stop(1, #000));background-image:-moz-linear-gradient(left center, #fff 0, #00f 50%, #000 100%);background-image:-webkit-linear-gradient(left, #fff 0, #00f 50%, #000 100%);background-image:-o-linear-gradient(left, #fff 0, #00f 50%, #000 100%);background-image:linear-gradient(to right, #fff 0, #00f 50%, #000 100%);background-repeat:repeat-x}
|
||||
.pick-a-color-markup .spectrum-purple{background-image:-webkit-gradient(linear, left top, right top, color-stop(0, #ff80ff), color-stop(.5, #80007f), color-stop(1, #000));background-image:-moz-linear-gradient(left center, #ff80ff 0, #80007f 50%, #000 100%);background-image:-webkit-linear-gradient(left, #ff80ff 0, #80007f 50%, #000 100%);background-image:-o-linear-gradient(left, #ff80ff 0, #80007f 50%, #000 100%);background-image:linear-gradient(to right, #ff80ff 0, #80007f 50%, #000 100%);background-repeat:repeat-x}
|
||||
.pick-a-color-markup .spectrum-black{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#000), to(#808080));background-image:-webkit-linear-gradient(left, color-stop(#000 0), color-stop(#808080 100%));background-image:-moz-linear-gradient(left, #000 0, #808080 100%);background-image:linear-gradient(to right, #000 0, #808080 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff000000', endColorstr='#ff808080', GradientType=1)}.pick-a-color-markup .spectrum-black .highlight-band{left:0px;border:1px solid #808080}
|
||||
.pick-a-color-markup .ie-spectrum{height:20px;width:100px;display:inline-block;top:-1}.pick-a-color-markup .ie-spectrum.hue{width:50.5px}@media screen and (max-width:991px){.pick-a-color-markup .ie-spectrum.hue{width:45.5px}}
|
||||
@media screen and (max-width:991px){.pick-a-color-markup .ie-spectrum{width:80px;height:35px}}
|
||||
.pick-a-color-markup .red-spectrum-0,.pick-a-color-markup .lightness-spectrum-0{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#fff), to(#f00));background-image:-webkit-linear-gradient(left, color-stop(#fff 0), color-stop(#f00 100%));background-image:-moz-linear-gradient(left, #fff 0, #f00 100%);background-image:linear-gradient(to right, #fff 0, #f00 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffff0000', GradientType=1);border-bottom-left-radius:4px;border-top-left-radius:4px}
|
||||
.pick-a-color-markup .red-spectrum-1,.pick-a-color-markup .lightness-spectrum-1{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#f00), to(#000));background-image:-webkit-linear-gradient(left, color-stop(#f00 0), color-stop(#000 100%));background-image:-moz-linear-gradient(left, #f00 0, #000 100%);background-image:linear-gradient(to right, #f00 0, #000 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff0000', endColorstr='#ff000000', GradientType=1);border-bottom-right-radius:4px;border-top-right-radius:4px}
|
||||
.pick-a-color-markup .lightness-spectrum-0,.pick-a-color-markup .lightness-spectrum-1{width:150px}@media screen and (max-width:991px){.pick-a-color-markup .lightness-spectrum-0,.pick-a-color-markup .lightness-spectrum-1{width:135px}}
|
||||
.pick-a-color-markup .orange-spectrum-0{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#fff), to(#f60));background-image:-webkit-linear-gradient(left, color-stop(#fff 0), color-stop(#f60 100%));background-image:-moz-linear-gradient(left, #fff 0, #f60 100%);background-image:linear-gradient(to right, #fff 0, #f60 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffff6600', GradientType=1);border-bottom-left-radius:4px;border-top-left-radius:4px}
|
||||
.pick-a-color-markup .orange-spectrum-1{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#f60), to(#000));background-image:-webkit-linear-gradient(left, color-stop(#f60 0), color-stop(#000 100%));background-image:-moz-linear-gradient(left, #f60 0, #000 100%);background-image:linear-gradient(to right, #f60 0, #000 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff6600', endColorstr='#ff000000', GradientType=1);border-bottom-right-radius:4px;border-top-right-radius:4px}
|
||||
.pick-a-color-markup .yellow-spectrum-0{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#fff), to(#ff0));background-image:-webkit-linear-gradient(left, color-stop(#fff 0), color-stop(#ff0 100%));background-image:-moz-linear-gradient(left, #fff 0, #ff0 100%);background-image:linear-gradient(to right, #fff 0, #ff0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffffff00', GradientType=1);border-bottom-left-radius:4px;border-top-left-radius:4px}
|
||||
.pick-a-color-markup .yellow-spectrum-1{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#ff0), to(#000));background-image:-webkit-linear-gradient(left, color-stop(#ff0 0), color-stop(#000 100%));background-image:-moz-linear-gradient(left, #ff0 0, #000 100%);background-image:linear-gradient(to right, #ff0 0, #000 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff00', endColorstr='#ff000000', GradientType=1);border-bottom-right-radius:4px;border-top-right-radius:4px}
|
||||
.pick-a-color-markup .green-spectrum-0{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#80ff80), to(#008000));background-image:-webkit-linear-gradient(left, color-stop(#80ff80 0), color-stop(#008000 100%));background-image:-moz-linear-gradient(left, #80ff80 0, #008000 100%);background-image:linear-gradient(to right, #80ff80 0, #008000 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff80ff80', endColorstr='#ff008000', GradientType=1);border-bottom-left-radius:4px;border-top-left-radius:4px}
|
||||
.pick-a-color-markup .green-spectrum-1{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#008000), to(#000));background-image:-webkit-linear-gradient(left, color-stop(#008000 0), color-stop(#000 100%));background-image:-moz-linear-gradient(left, #008000 0, #000 100%);background-image:linear-gradient(to right, #008000 0, #000 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff008000', endColorstr='#ff000000', GradientType=1);border-bottom-right-radius:4px;border-top-right-radius:4px}
|
||||
.pick-a-color-markup .blue-spectrum-0{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#fff), to(#00f));background-image:-webkit-linear-gradient(left, color-stop(#fff 0), color-stop(#00f 100%));background-image:-moz-linear-gradient(left, #fff 0, #00f 100%);background-image:linear-gradient(to right, #fff 0, #00f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ff0000ff', GradientType=1);border-bottom-left-radius:4px;border-top-left-radius:4px}
|
||||
.pick-a-color-markup .blue-spectrum-1{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#00f), to(#000));background-image:-webkit-linear-gradient(left, color-stop(#00f 0), color-stop(#000 100%));background-image:-moz-linear-gradient(left, #00f 0, #000 100%);background-image:linear-gradient(to right, #00f 0, #000 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000ff', endColorstr='#ff000000', GradientType=1);border-bottom-right-radius:4px;border-top-right-radius:4px}
|
||||
.pick-a-color-markup .purple-spectrum-0{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#ff80ff), to(#80007f));background-image:-webkit-linear-gradient(left, color-stop(#ff80ff 0), color-stop(#80007f 100%));background-image:-moz-linear-gradient(left, #ff80ff 0, #80007f 100%);background-image:linear-gradient(to right, #ff80ff 0, #80007f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff80ff', endColorstr='#ff80007f', GradientType=1);border-bottom-left-radius:4px;border-top-left-radius:4px}
|
||||
.pick-a-color-markup .purple-spectrum-1{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#80007f), to(#000));background-image:-webkit-linear-gradient(left, color-stop(#80007f 0), color-stop(#000 100%));background-image:-moz-linear-gradient(left, #80007f 0, #000 100%);background-image:linear-gradient(to right, #80007f 0, #000 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff80007f', endColorstr='#ff000000', GradientType=1);border-bottom-right-radius:4px;border-top-right-radius:4px}
|
||||
.pick-a-color-markup .saturation-spectrum-0{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#808080), to(#bf4040));background-image:-webkit-linear-gradient(left, color-stop(#808080 0), color-stop(#bf4040 100%));background-image:-moz-linear-gradient(left, #808080 0, #bf4040 100%);background-image:linear-gradient(to right, #808080 0, #bf4040 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff808080', endColorstr='#ffbf4040', GradientType=1);border-bottom-left-radius:4px;border-top-left-radius:4px;width:150px}@media screen and (max-width:991px){.pick-a-color-markup .saturation-spectrum-0{width:135px}}
|
||||
.pick-a-color-markup .saturation-spectrum-1{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#bf4040), to(#f00));background-image:-webkit-linear-gradient(left, color-stop(#bf4040 0), color-stop(#f00 100%));background-image:-moz-linear-gradient(left, #bf4040 0, #f00 100%);background-image:linear-gradient(to right, #bf4040 0, #f00 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbf4040', endColorstr='#ffff0000', GradientType=1);border-bottom-right-radius:4px;border-top-right-radius:4px;width:150px}@media screen and (max-width:991px){.pick-a-color-markup .saturation-spectrum-1{width:135px}}
|
||||
.pick-a-color-markup .hue-spectrum-0{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#f00), to(#ff0));background-image:-webkit-linear-gradient(left, color-stop(#f00 0), color-stop(#ff0 100%));background-image:-moz-linear-gradient(left, #f00 0, #ff0 100%);background-image:linear-gradient(to right, #f00 0, #ff0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff0000', endColorstr='#ffffff00', GradientType=1)}
|
||||
.pick-a-color-markup .hue-spectrum-1{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#ff0), to(#0f0));background-image:-webkit-linear-gradient(left, color-stop(#ff0 0), color-stop(#0f0 100%));background-image:-moz-linear-gradient(left, #ff0 0, #0f0 100%);background-image:linear-gradient(to right, #ff0 0, #0f0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff00', endColorstr='#ff00ff00', GradientType=1)}
|
||||
.pick-a-color-markup .hue-spectrum-2{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#0f0), to(#0ff));background-image:-webkit-linear-gradient(left, color-stop(#0f0 0), color-stop(#0ff 100%));background-image:-moz-linear-gradient(left, #0f0 0, #0ff 100%);background-image:linear-gradient(to right, #0f0 0, #0ff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff00', endColorstr='#ff00ffff', GradientType=1);left:-1px;position:relative}
|
||||
.pick-a-color-markup .hue-spectrum-3{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#0ff), to(#00f));background-image:-webkit-linear-gradient(left, color-stop(#0ff 0), color-stop(#00f 100%));background-image:-moz-linear-gradient(left, #0ff 0, #00f 100%);background-image:linear-gradient(to right, #0ff 0, #00f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ffff', endColorstr='#ff0000ff', GradientType=1);left:-1px;position:relative}
|
||||
.pick-a-color-markup .hue-spectrum-4{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#00f), to(#f0f));background-image:-webkit-linear-gradient(left, color-stop(#00f 0), color-stop(#f0f 100%));background-image:-moz-linear-gradient(left, #00f 0, #f0f 100%);background-image:linear-gradient(to right, #00f 0, #f0f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000ff', endColorstr='#ffff00ff', GradientType=1);left:-1px;position:relative}
|
||||
.pick-a-color-markup .hue-spectrum-5{background-image:-webkit-gradient(linear, 0 top, 100% top, from(#f0f), to(#f00));background-image:-webkit-linear-gradient(left, color-stop(#f0f 0), color-stop(#f00 100%));background-image:-moz-linear-gradient(left, #f0f 0, #f00 100%);background-image:linear-gradient(to right, #f0f 0, #f00 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00ff', endColorstr='#ffff0000', GradientType=1);left:-2px;position:relative}
|
||||
.pick-a-color-markup .highlight-band{border:1px solid #222;border-radius:2px;-webkit-box-shadow:1px 1px 1px #333;box-shadow:1px 1px 1px #333;height:19px;width:11px;display:inline-block;cursor:pointer;cursor:-webkit-grab;cursor:-moz-grab;position:absolute;top:-1px;left:94.5px;text-align:center}@media screen and (max-width:991px){.pick-a-color-markup .highlight-band{width:21px;left:69.5px;height:34px}}
|
||||
.pick-a-color-markup .highlight-band-stripe{min-height:80%;min-width:1px;background-color:#000;opacity:0.40;margin:2px 1px;display:inline-block;-webkit-box-shadow:1px 0 2px 0 #fff;box-shadow:1px 0 2px 0 #fff}@media screen and (max-width:991px){.pick-a-color-markup .highlight-band-stripe{margin:4px 2px}}
|
||||
.pick-a-color-markup .color-menu-tabs{padding:5px 3px 3px 10px;font-size:12px;color:#333;border-bottom:1px solid #ccc;margin-bottom:5px}.pick-a-color-markup .color-menu-tabs .tab{padding:4px 5px;margin:5px;border-left:1px solid #fff;border-right:1px solid #fff;cursor:pointer;background-color:#fff}.pick-a-color-markup .color-menu-tabs .tab:hover{padding-bottom:6px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;border-top-right-radius:4px;border-top-left-radius:4px}
|
||||
.pick-a-color-markup .color-menu-tabs a{color:#333;text-decoration:none}
|
||||
.pick-a-color-markup .color-menu-tabs .tab-active{border-bottom:3px solid #fff;padding-bottom:5px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;border-top-right-radius:4px;border-top-left-radius:4px}
|
||||
.pick-a-color-markup .active-content{display:block}
|
||||
.pick-a-color-markup .inactive-content{display:none}
|
||||
.pick-a-color-markup .savedColors-content{padding:5px 15px;white-space:normal}.pick-a-color-markup .savedColors-content li.color-item>a{margin-left:7px;padding-left:8px;border-radius:4px}
|
||||
.pick-a-color-markup .saved-color-col{position:relative;left:-15px;float:left;width:149px}@media screen and (max-width:991px){.pick-a-color-markup .saved-color-col{width:130px}}
|
||||
.pick-a-color-markup .advanced-content ul{margin-top:10px}
|
||||
.pick-a-color-markup .advanced-content li{padding:5px 15px 3px 15px;cursor:default;min-height:25px;height:50px;position:relative}@media screen and (max-width:991px){.pick-a-color-markup .advanced-content li{min-height:70px}}
|
||||
.pick-a-color-markup .advanced-content .color-preview{height:50px;width:300px;float:left;margin:0px 0px 10px 0px;background-color:#f00;text-align:center}.pick-a-color-markup .advanced-content .color-preview .color-select.btn.advanced{margin-top:15px;display:none}@media screen and (max-width:991px){.pick-a-color-markup .advanced-content .color-preview .color-select.btn.advanced{display:inline;margin-top:7px}}
|
||||
.pick-a-color-markup .advanced-content .color-preview:hover .color-select.btn.advanced{display:inline}
|
||||
@media screen and (max-width:991px){.pick-a-color-markup .advanced-content .color-preview{width:270px;margin-left:-10px}}
|
||||
.pick-a-color-markup .advanced-content .spectrum-hue{background-image:-webkit-gradient(linear, left top, right top, color-stop(0, #f00), color-stop(17%, #ff0), color-stop(34%, #0f0), color-stop(51%, #0ff), color-stop(68%, #00f), color-stop(85%, #f0f), color-stop(100%, #f00));background-image:-moz-linear-gradient(left center, #f00 0, #ff0 17%, #0f0 24%, #0ff 51%, #00f 68%, #f0f 85%, #f00 100%);background-image:-webkit-linear-gradient(left, #f00 0, #ff0 17%, #0f0 24%, #0ff 51%, #00f 68%, #f0f 85%, #f00 100%);background-image:-o-linear-gradient(left, #f00 0, #ff0 17%, #0f0 24%, #0ff 51%, #00f 68%, #f0f 85%, #f00 100%);background-image:linear-gradient(to right, #f00 0, #ff0 17%, #0f0 24%, #0ff 51%, #00f 68%, #f0f 85%, #f00 100%);background-repeat:repeat-x}.pick-a-color-markup .advanced-content .spectrum-hue .highlight-band{left:0px}
|
||||
.pick-a-color-markup .advanced-content .spectrum-lightness{background-image:-webkit-gradient(linear, left top, right top, color-stop(0, #fff), color-stop(.5, #f00), color-stop(1, #000));background-image:-moz-linear-gradient(left center, #fff 0, #f00 50%, #000 100%);background-image:-webkit-linear-gradient(left, #fff 0, #f00 50%, #000 100%);background-image:-o-linear-gradient(left, #fff 0, #f00 50%, #000 100%);background-image:linear-gradient(to right, #fff 0, #f00 50%, #000 100%);background-repeat:repeat-x}
|
||||
.pick-a-color-markup .advanced-content .spectrum-saturation{background-image:-webkit-gradient(linear, left top, right top, color-stop(0, #808080), color-stop(.5, #f00), color-stop(1, #f00));background-image:-moz-linear-gradient(left center, #808080 0, #f00 50%, #f00 100%);background-image:-webkit-linear-gradient(left, #808080 0, #f00 50%, #f00 100%);background-image:-o-linear-gradient(left, #808080 0, #f00 50%, #f00 100%);background-image:linear-gradient(to right, #808080 0, #f00 50%, #f00 100%);background-repeat:repeat-x}.pick-a-color-markup .advanced-content .spectrum-saturation .highlight-band{left:287px}@media screen and (max-width:991px){.pick-a-color-markup .advanced-content .spectrum-saturation .highlight-band{left:247px}}
|
||||
.pick-a-color-markup .advanced-content .spectrum-lightness .highlight-band{left:143.5px}@media screen and (max-width:991px){.pick-a-color-markup .advanced-content .spectrum-lightness .highlight-band{left:123.5px}}
|
||||
.pick-a-color-markup .advanced-content .lightness-text,.pick-a-color-markup .advanced-content .hue-text,.pick-a-color-markup .advanced-content .saturation-text,.pick-a-color-markup .advanced-content .preview-text{vertical-align:middle;text-align:center;display:block}
|
||||
.pick-a-color-markup .advanced-content .color-box{left:15px;top:25px;width:300px}@media screen and (max-width:991px){.pick-a-color-markup .advanced-content .color-box{width:270px;left:10px}}
|
||||
.pick-a-color-markup .advanced-content .preview-item{height:80px}
|
||||
@-moz-document url-prefix(){@media screen and (max-width:991px){div.pick-a-color-markup .color-menu{left:0px}}}
|
||||
@@ -1,89 +0,0 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Stylesheet for the switch buttons.
|
||||
*/
|
||||
|
||||
/* Box around the slider */
|
||||
.switch {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 50px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.switch input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.slider {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: #FF7800;
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
}
|
||||
|
||||
.slider:before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
left: 4px;
|
||||
bottom: 4px;
|
||||
background-color: white;
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
}
|
||||
|
||||
input:checked + .slider {
|
||||
background-color: #B5E61D;
|
||||
}
|
||||
|
||||
input:focus + .slider {
|
||||
box-shadow: 0 0 1px #B5E61D;
|
||||
}
|
||||
|
||||
input:checked + .slider:before {
|
||||
-webkit-transform: translateX(26px);
|
||||
-ms-transform: translateX(26px);
|
||||
transform: translateX(26px);
|
||||
}
|
||||
|
||||
/* Rounded sliders */
|
||||
.slider.round {
|
||||
border-radius: 34px;
|
||||
}
|
||||
|
||||
.slider.round:before {
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.switch label {
|
||||
position: absolute;
|
||||
left: 60px;
|
||||
}
|
||||
|
||||
label {
|
||||
font-weight: normal;
|
||||
}
|
||||
461
data/data.json
461
data/data.json
@@ -1,461 +0,0 @@
|
||||
{
|
||||
"providers": {
|
||||
"amazon": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"pf_rd_[a-zA-Z]=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"qid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"srs=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(adsensecustomsearchads\\.com)\\/.*",
|
||||
"pd_rd_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"__mk_[a-zA-Z]{1,3}_[a-zA-Z]{1,3}=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"spIA=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ms3_c=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"[a-zA-Z%0-9]*ie=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"refRID=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"colid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"coliid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"[^a-zA-Z%0-9]adId=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"qualifier=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"_encoding=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"smid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"field-lbr_brands_browse-bin=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [
|
||||
".*(amazon\\.).*(\\/gp).*\\/redirector.html\\/.*"
|
||||
],
|
||||
"redirections": []
|
||||
},
|
||||
"fls-na.amazon": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(fls-na\\.amazon)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"google": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(google)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ved=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"bi[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"gfe_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ei=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"site=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"&\\.[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"oq=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"esrc=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"uact=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"cd=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"cad=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"gws_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"atyp=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"vet=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"_u=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"je=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"dcr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ie=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sei=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sa=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"dpr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"btn[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sa=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"usg=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"cd=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"cad=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"uact=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [
|
||||
".*(mail\\.google\\.).*(\\/mail\\/u\\/0).*",
|
||||
".*(google\\.).*(\\/upload)?(\\/drive)\\/.*",
|
||||
".*(docs\\.google\\.).*\\/.*",
|
||||
".*(accounts\\.google\\.).*",
|
||||
".*(google\\.).*\\/searchbyimage\\?image_url=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(hangouts\\.google\\.).*\\/webchat.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(client-channel\\.google\\.).*\\/client-channel.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/complete\\/search\\?.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/s\\?tbm=map.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(news\\.google\\.).*\\?hl=.*",
|
||||
".*(google\\.).*\\/setprefs\\?.*hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/appsactivity\\/.*",
|
||||
".*(google\\.).*\\/recaptcha\\/.*"
|
||||
],
|
||||
"redirections": [
|
||||
".*google\\..*\\/.*url\\?.*url=((https|http)[^&]*)",
|
||||
".*google\\..*\\/.*url\\?.*q=((https|http)[^&]*)"
|
||||
]
|
||||
},
|
||||
"googlesyndication": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(googlesyndication)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"doubleclick": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(doubleclick)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*doubleclick\\..*\\/.*tag_for_child_directed_treatment=;%3F(.*)"
|
||||
]
|
||||
},
|
||||
"globalRules": {
|
||||
"urlPattern": ".*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"utm_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ga_source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ga_medium=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ga_term=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ga_content=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ga_campaign=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ga_place=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"yclid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"_openstat=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"fb_action_ids=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"fb_action_types=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"fb_source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"fb_ref=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"fbclid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"action_object_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"action_type_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"action_ref_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"gs_l=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"mkt_tok=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"hmb_campaign=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"hmb_medium=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"hmb_source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"[\\?|&]ref[\\_]?=[^\\/|\\?|&]*",
|
||||
"\\?$",
|
||||
"\\&$"
|
||||
],
|
||||
"exceptions": [
|
||||
".*([\\.]?matrix\\.org)(\\/_matrix)\\/.*",
|
||||
".*([\\.]?prismic\\.io).*",
|
||||
".*([\\.]?gitlab\\.com).*",
|
||||
".*([\\.]?gcsip\\.com).*[\\?|&]ref[\\_]?=[^\\/|\\?|&]*.*",
|
||||
".*([\\.]?cloudflare\\.com).*",
|
||||
".*([\\.]?tv2\\.no)(\\/api)\\/.*"
|
||||
],
|
||||
"redirections": []
|
||||
},
|
||||
"adtech": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adtech)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"contentpass.net": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(contentpass\\.net).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"bf-ad": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bf-ad)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"amazon-adsystem": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon-adsystem)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"adsensecustomsearchads": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adsensecustomsearchads)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"youtube": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"feature=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"gclid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"kw=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"facebook": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(facebook)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"hc_[a-zA-Z_\\[\\]0-9]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"[a-zA-Z]*ref[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"__tn__=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"eid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"__xts__%5B[0-9]%5D=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [
|
||||
".*(facebook\\.)\\w{2,}.*(\\/plugins\\/).*"
|
||||
],
|
||||
"redirections": [
|
||||
".*l\\.facebook\\..*\\/.*l\\.php\\?.*u=((https%3A%2F%2F|http%3A%2F%2F)[^&]*)"
|
||||
]
|
||||
},
|
||||
"twitter": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitter)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"(ref_)?src=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"reddit": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(reddit)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
"out\\.reddit\\.\\w{2,}\\/.*url=([^&]*)"
|
||||
]
|
||||
}
|
||||
,
|
||||
"netflix": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(netflix)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"trackId=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"tctx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"jb[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"techcrunch": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?([\\.]?techcrunch\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ncid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sr_share=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"guccounter=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"guce_referrer_[a-z]+=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"bing": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bing)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"cvid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"form=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sk=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sp=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sc=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"qs=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"qp=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"tweakers": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tweakers\\.net)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"nb=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"u=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"twitch": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitch)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"tt_medium=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"tt_content=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"vivaldi": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(vivaldi\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"pk_campaign=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"pk_kwd=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"indeed": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(indeed\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"from=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"alid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"[a-zA-Z]*tk=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"hhdotru": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(hh\\.ru)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"vss=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"t=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"swnt=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"grpos=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ptl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"stl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"exp=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"plim=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"ebay": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(ebay)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"_trkparms=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"_trksid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"_from=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"cnet": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(cnet\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ftag=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"imdb.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(imdb\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ref_=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"pf_rd_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"govdelivery.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(govdelivery\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*links\\.govdelivery\\.com.*\\/track\\?.*(http:\\/\\/.*)",
|
||||
".*links\\.govdelivery\\.com.*\\/track\\?.*(https:\\/\\/.*)"
|
||||
]
|
||||
},
|
||||
"walmart.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(walmart\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"u1=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ath[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"net-parade.it": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(net\\-parade\\.it)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"pl=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"prvnizpravy.cz": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(prvnizpravy\\.cz)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"xid=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"youku.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youku\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"spm=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"tpa=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"nytimes.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(nytimes\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"smid=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"tchibo.de": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tchibo\\.de)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"wbdcd=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"steam": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steampowered\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"snr=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"disq.us": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(disq\\.us)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*disq\\.us.*\\/.*url\\?.*url=((https%3A%2F%2F|http%3A%2F%2F).*)%3A"
|
||||
]
|
||||
},
|
||||
"mozaws.net": {
|
||||
"urlPattern": "https?://outgoing\\.prod\\.mozaws\\.net/.*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
"https?://[^/]+/v1/[0-9a-f]{64}/(.*)"
|
||||
]
|
||||
},
|
||||
"shutterstock.com": {
|
||||
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(shutterstock\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"src=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,751 +0,0 @@
|
||||
{
|
||||
"providers": {
|
||||
"amazon": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"pf_rd_[a-zA-Z]",
|
||||
"qid",
|
||||
"sr",
|
||||
"srs",
|
||||
"pd_rd_[a-zA-Z]*",
|
||||
"__mk_[a-zA-Z]{1,3}_[a-zA-Z]{1,3}",
|
||||
"spIA",
|
||||
"ms3_c",
|
||||
"[a-zA-Z%0-9]*ie",
|
||||
"refRID",
|
||||
"colid",
|
||||
"coliid",
|
||||
"[^a-zA-Z%0-9]adId",
|
||||
"qualifier",
|
||||
"_encoding",
|
||||
"smid",
|
||||
"field-lbr_brands_browse-bin",
|
||||
"ref_?"
|
||||
],
|
||||
"exceptions": [
|
||||
".*(amazon\\.).*(\\/gp).*\\/redirector.html\\/.*"
|
||||
],
|
||||
"rawRules": [
|
||||
"\\/ref=[^\\/|\\?]*"
|
||||
],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"fls-na.amazon": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(fls-na\\.amazon)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"google": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(google)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ved",
|
||||
"bi[a-zA-Z]*",
|
||||
"gfe_[a-zA-Z]*",
|
||||
"ei",
|
||||
"source",
|
||||
"gs_[a-zA-Z]*",
|
||||
"site",
|
||||
"oq",
|
||||
"esrc",
|
||||
"uact",
|
||||
"cd",
|
||||
"cad",
|
||||
"gws_[a-zA-Z]*",
|
||||
"atyp",
|
||||
"vet",
|
||||
"zx",
|
||||
"_u",
|
||||
"je",
|
||||
"dcr",
|
||||
"ie",
|
||||
"sei",
|
||||
"sa",
|
||||
"dpr",
|
||||
"btn[a-zA-Z]*",
|
||||
"sa",
|
||||
"usg",
|
||||
"cd",
|
||||
"cad",
|
||||
"uact"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [
|
||||
".*(mail\\.google\\.).*(\\/mail\\/u\\/0).*",
|
||||
".*(google\\.).*(\\/upload)?(\\/drive)\\/.*",
|
||||
".*(docs\\.google\\.).*\\/.*",
|
||||
".*(accounts\\.google\\.).*",
|
||||
".*(google\\.).*\\/searchbyimage\\?image_url=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(hangouts\\.google\\.).*\\/webchat.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(client-channel\\.google\\.).*\\/client-channel.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/complete\\/search\\?.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/s\\?tbm=map.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(news\\.google\\.).*\\?hl=.*",
|
||||
".*(google\\.).*\\/setprefs\\?.*hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/appsactivity\\/.*"
|
||||
],
|
||||
"redirections": [
|
||||
".*google\\..*\\/.*url\\?.*url=((https|http)[^&]*)",
|
||||
".*google\\..*\\/.*url\\?.*q=((https|http)[^&]*)",
|
||||
".*google\\..*\\/.*adurl=([^&]*)"
|
||||
],
|
||||
"forceRedirection": true
|
||||
},
|
||||
"googlesyndication": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(googlesyndication)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"doubleclick": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(doubleclick)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*doubleclick\\..*\\/.*tag_for_child_directed_treatment=;%3F(.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"googleadservices": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(googleadservices)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*googleadservices\\..*\\/.*adurl=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"globalRules": {
|
||||
"urlPattern": ".*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"(%3F)?utm_[a-zA-Z]*",
|
||||
"(%3F)?ga_source",
|
||||
"(%3F)?ga_medium",
|
||||
"(%3F)?ga_term",
|
||||
"(%3F)?ga_content",
|
||||
"(%3F)?ga_campaign",
|
||||
"(%3F)?ga_place",
|
||||
"(%3F)?yclid",
|
||||
"(%3F)?_openstat",
|
||||
"(%3F)?fb_action_ids",
|
||||
"(%3F)?fb_action_types",
|
||||
"(%3F)?fb_source",
|
||||
"(%3F)?fb_ref",
|
||||
"(%3F)?fbclid",
|
||||
"(%3F)?action_object_map",
|
||||
"(%3F)?action_type_map",
|
||||
"(%3F)?action_ref_map",
|
||||
"(%3F)?gs_l",
|
||||
"(%3F)?mkt_tok",
|
||||
"(%3F)?hmb_campaign",
|
||||
"(%3F)?hmb_medium",
|
||||
"(%3F)?hmb_source",
|
||||
"(%3F)?[\\?|&]ref[\\_]?",
|
||||
"(%3F)?gclid"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [
|
||||
".*([\\.]?matrix\\.org)(\\/_matrix)\\/.*",
|
||||
".*([\\.]?prismic\\.io).*",
|
||||
".*([\\.]?gitlab\\.com).*",
|
||||
".*([\\.]?gcsip\\.com).*[\\?|&]ref[\\_]?=[^\\/|\\?|&]*.*",
|
||||
".*([\\.]?cloudflare\\.com).*",
|
||||
".*(myaccount.google\\.[a-zA-Z]{2,}).*",
|
||||
".*([\\.]?tangerine\\.ca).*"
|
||||
],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"adtech": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adtech)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"contentpass.net": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(contentpass\\.net).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"bf-ad": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bf-ad)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"amazon-adsystem": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon-adsystem)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"adsensecustomsearchads": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adsensecustomsearchads)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"youtube": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"feature",
|
||||
"gclid",
|
||||
"kw"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*youtube\\..*\\/redirect?.*q=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"youtube_pagead": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,})\\/pagead",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"youtube_apiads": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,})\\/api\\/stats\\/ads",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"facebook": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(facebook)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"hc_[a-zA-Z_%\\[\\]0-9]*",
|
||||
"[a-zA-Z]*ref[a-zA-Z]*",
|
||||
"__tn__",
|
||||
"eid",
|
||||
"__xts__%5B[0-9]%5D",
|
||||
"__xts__\\[[0-9]\\]",
|
||||
"comment_tracking",
|
||||
"dti",
|
||||
"app",
|
||||
"video_source",
|
||||
"ftentidentifier",
|
||||
"pageid",
|
||||
"padding",
|
||||
"ls_ref",
|
||||
"action_history"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [
|
||||
".*(facebook\\.)\\w{2,}.*(\\/plugins\\/).*",
|
||||
".*(facebook\\.)\\w{2,}.*(\\/dialog\\/share).*"
|
||||
],
|
||||
"redirections": [
|
||||
".*l[a-zA-Z]?\\.facebook\\..*\\/.*l\\.php\\?.*u=((https%3A%2F%2F|http%3A%2F%2F)[^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"twitter": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitter)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"(ref_?)?src",
|
||||
"s",
|
||||
"cn"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"reddit": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(reddit)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*out\\.reddit\\.\\w{2,}\\/.*url=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
}
|
||||
,
|
||||
"netflix": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(netflix)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"trackId",
|
||||
"tctx",
|
||||
"jb[a-zA-Z]*"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"techcrunch": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?([\\.]?techcrunch\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ncid",
|
||||
"sr",
|
||||
"sr_share"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"bing": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bing)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"cvid",
|
||||
"form",
|
||||
"sk",
|
||||
"sp",
|
||||
"sc",
|
||||
"qs",
|
||||
"qp"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"tweakers": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tweakers\\.net).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"nb",
|
||||
"u"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"twitch": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitch)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"tt_medium",
|
||||
"tt_content"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"vivaldi": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(vivaldi\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"pk_campaign",
|
||||
"pk_kwd"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"indeed": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(indeed\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"from",
|
||||
"alid",
|
||||
"[a-zA-Z]*tk"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"hhdotru": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(hh\\.ru).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"vss",
|
||||
"t",
|
||||
"swnt",
|
||||
"grpos",
|
||||
"ptl",
|
||||
"stl",
|
||||
"exp",
|
||||
"plim"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"ebay": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(ebay)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"_trkparms",
|
||||
"_trksid",
|
||||
"_from"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"cnet": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(cnet\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ftag"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"imdb.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(imdb\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ref_",
|
||||
"pf_rd_[a-zA-Z]*"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"govdelivery.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(govdelivery\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*links\\.govdelivery\\.com.*\\/track\\?.*(http:\\/\\/.*)",
|
||||
".*links\\.govdelivery\\.com.*\\/track\\?.*(https:\\/\\/.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"walmart.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(walmart\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"u1",
|
||||
"ath[a-zA-Z]*"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"net-parade.it": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(net\\-parade\\.it).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"pl"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"prvnizpravy.cz": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(prvnizpravy\\.cz).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"xid"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"youku.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youku\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"spm",
|
||||
"tpa"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"nytimes.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(nytimes\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"smid"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"tchibo.de": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tchibo\\.de).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"wbdcd"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"steampowered": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steampowered\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"snr"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"steamcommunity": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steamcommunity\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*steamcommunity\\.com.*\\/linkfilter\\/\\?url=(.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"disq.us": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(disq\\.us).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*disq\\.us.*\\/.*url\\?.*url=((https%3A%2F%2F|http%3A%2F%2F).*)%3A"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"mozaws.net": {
|
||||
"urlPattern": "https?:\\/\\/outgoing\\.prod\\.mozaws\\.net/.*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
"https?:\\/\\/[^/]+/v1/[0-9a-f]{64}/(.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"shutterstock.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(shutterstock\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"src"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"mozilla.org": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(mozilla\\.org).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"src",
|
||||
"platform"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"readdc.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(readdc\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ref"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"dailycodingproblem.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(dailycodingproblem\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"email"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"github.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(github\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"email_token",
|
||||
"email_source"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"deviantart.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(deviantart\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*deviantart\\.com.*outgoing\\?(.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"site2.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(site2\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*site2\\.com.*\\?.*=(.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"site.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(site\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*site\\.com.*\\?to=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"site3.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(site3\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*site3\\.com.*\\?r=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"aliexpress.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(aliexpress\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ws_ab_test",
|
||||
"btsid",
|
||||
"algo_expid",
|
||||
"algo_pvid",
|
||||
"spm",
|
||||
"gps-id",
|
||||
"scm[_a-zA-Z\\-]*",
|
||||
"pvid"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"mozillazine.org": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(mozillazine\\.org).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"sid"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"9gag.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(9gag\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ref"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"linksynergy.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(linksynergy\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*linksynergy\\.com.*\\/.*murl=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"giphy.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(giphy\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ref"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"gate.sc": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(gate\\.sc).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*gate\\.sc.*\\/.*url=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
b0e1fc948f5e391a53a57092b1c29e8cff474402d5411f4045cfb4a7db37d2bc
|
||||
1
external_js/bootstrap-dialog.min.js
vendored
1
external_js/bootstrap-dialog.min.js
vendored
File diff suppressed because one or more lines are too long
7
external_js/bootstrap.min.js
vendored
7
external_js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,16 +0,0 @@
|
||||
/*
|
||||
* Source: https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types
|
||||
*/
|
||||
function copyToClipboard(text) {
|
||||
function oncopy(event) {
|
||||
document.removeEventListener("copy", oncopy, true);
|
||||
|
||||
event.stopImmediatePropagation();
|
||||
|
||||
event.preventDefault();
|
||||
event.clipboardData.setData("text/plain", text);
|
||||
}
|
||||
document.addEventListener("copy", oncopy, true);
|
||||
|
||||
document.execCommand("copy");
|
||||
}
|
||||
8
external_js/dataTables.bootstrap.min.js
vendored
8
external_js/dataTables.bootstrap.min.js
vendored
@@ -1,8 +0,0 @@
|
||||
/*!
|
||||
DataTables Bootstrap 3 integration
|
||||
©2011-2015 SpryMedia Ltd - datatables.net/license
|
||||
*/
|
||||
(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d,m){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",renderer:"bootstrap"});b.extend(f.ext.classes,
|
||||
{sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,s,j,n){var o=new f.Api(a),t=a.oClasses,k=a.oLanguage.oPaginate,u=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")};
|
||||
l=0;for(h=f.length;l<h;l++)if(c=f[l],b.isArray(c))q(d,c);else{g=e="";switch(c){case "ellipsis":e="…";g="disabled";break;case "first":e=k.sFirst;g=c+(0<j?"":" disabled");break;case "previous":e=k.sPrevious;g=c+(0<j?"":" disabled");break;case "next":e=k.sNext;g=c+(j<n-1?"":" disabled");break;case "last":e=k.sLast;g=c+(j<n-1?"":" disabled");break;default:e=c+1,g=j===c?"active":""}e&&(i=b("<li>",{"class":t.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+"_"+c:null}).append(b("<a>",{href:"#",
|
||||
"aria-controls":a.sTableId,"aria-label":u[c],"data-dt-idx":p,tabindex:a.iTabIndex}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(v){}q(b(h).empty().html('<ul class="pagination"/>').children("ul"),s);i!==m&&b(h).find("[data-dt-idx="+i+"]").focus()};return f});
|
||||
@@ -1,426 +0,0 @@
|
||||
/**
|
||||
* Albanian translation
|
||||
* @name Albanian
|
||||
* @anchor Albanian
|
||||
* @author Besnik Belegu
|
||||
*/
|
||||
/**
|
||||
* Afrikaans translation
|
||||
* @name Afrikaans
|
||||
* @anchor Afrikaans
|
||||
* @author <a href="http://www.ajoft.com">Ajoft Software</a>
|
||||
*/
|
||||
/**
|
||||
* Welsh translation
|
||||
* @name Welsh
|
||||
* @anchor Welsh
|
||||
* @author <a href="https://eveoh.nl/">Marco Krikke</a>
|
||||
*/
|
||||
/**
|
||||
* Vietnamese translation
|
||||
* @name Vietnamese
|
||||
* @anchor Vietnamese
|
||||
* @author Trinh Phuoc Thai
|
||||
*/
|
||||
/**
|
||||
* Uzbek translation
|
||||
* @name Uzbek
|
||||
* @anchor Uzbek
|
||||
* @author <a href="http://davlat.info">Farkhod Dadajanov</a>
|
||||
*/
|
||||
/**
|
||||
* Urdu translation
|
||||
* @name Urdu
|
||||
* @anchor Urdu
|
||||
* @author Zafar Subzwari
|
||||
*/
|
||||
/**
|
||||
* Ukranian translation
|
||||
* @name Ukranian
|
||||
* @anchor Ukranian
|
||||
* @author <i>antyrat</i>
|
||||
*/
|
||||
/**
|
||||
* Turkish translation
|
||||
* @name Turkish
|
||||
* @anchor Turkish
|
||||
* @author Umit Gorkem & Erdal TAŞKESEN
|
||||
*/
|
||||
/**
|
||||
* Thai translation
|
||||
* @name Thai
|
||||
* @anchor Thai
|
||||
* @author Thanva Thonglor , <a href="http://auycro.github.io/about/">Gumpanat Keardkeawfa</a>
|
||||
*/
|
||||
/**
|
||||
* Telugu translation (te, te-IN)
|
||||
* @name Telugu
|
||||
* @anchor Telugu
|
||||
* @author <a href="https://in.linkedin.com/in/srinivas-rathikrindi-0405973a">Srinivas Rathikrindi</a>
|
||||
**/
|
||||
/**
|
||||
* Tamil translation
|
||||
* @name Tamil
|
||||
* @anchor Tamil
|
||||
* @author Sam Arul Raj
|
||||
*/
|
||||
/**
|
||||
* Swedish translation
|
||||
* @name Swedish
|
||||
* @anchor Swedish
|
||||
* @author <a href="http://www.kmmtiming.se/">Kristoffer Karlström</a>
|
||||
*/
|
||||
/**
|
||||
* Swahili translation
|
||||
* @name Swahili
|
||||
* @anchor Swahili
|
||||
* @author <a href="http://zoop.co.tz/schoolpesa/">Roy Owino</a>
|
||||
*/
|
||||
/**
|
||||
* Spanish translation
|
||||
* @name Spanish
|
||||
* @anchor Spanish
|
||||
* @author Giovanni Ariza, Aristobulo Gomez and Roberto Poo
|
||||
*/
|
||||
/**
|
||||
* Slovenian translation
|
||||
* @name Slovenian
|
||||
* @anchor Slovenian
|
||||
* @author Marko Kroflic, Blaž Brenčič and Andrej Florjančič
|
||||
*/
|
||||
/**
|
||||
* Slovak translation
|
||||
* @name Slovak
|
||||
* @anchor Slovak
|
||||
* @author <a href="https://github.com/dlugos">Ivan Dlugoš</a>
|
||||
* @author (original translation) <a href="http://miskerik.com/">Maroš Miškerik</a>
|
||||
*/
|
||||
/**
|
||||
* Sinhala translation
|
||||
* @name Sinhala
|
||||
* @anchor Sinhala
|
||||
* @author Isuru Sampath Ratnayake
|
||||
*/
|
||||
/**
|
||||
* Serbian translation (Latin alphabet)
|
||||
* @name Serbian (Latin)
|
||||
* @anchor Serbian (Latin)
|
||||
* @author <a href="http://mnovakovic.byteout.com">Marko Novakovic</a>
|
||||
*/
|
||||
/**
|
||||
* Russian translation
|
||||
* @name Russian
|
||||
* @anchor Russian
|
||||
* @author Tjoma
|
||||
* @autor aspyatkin
|
||||
*/
|
||||
/**
|
||||
* Romanian translation
|
||||
* @name Romanian
|
||||
* @anchor Romanian
|
||||
* @author <a href="http://www.jurubita.ro/">Alexandru Jurubita</a>
|
||||
*/
|
||||
/**
|
||||
* Portuguese Brasil translation
|
||||
* @name Portuguese Brasil
|
||||
* @anchor Portuguese Brasil
|
||||
* @author Julio Cesar Viana Palma
|
||||
*/
|
||||
/**
|
||||
* Portuguese translation
|
||||
* @name Portuguese
|
||||
* @anchor Portuguese
|
||||
* @author Nuno Felicio
|
||||
*/
|
||||
/**
|
||||
* Polish translation
|
||||
* @name Polish
|
||||
* @anchor Polish
|
||||
* @author Tomasz Kowalski
|
||||
* @author Michał Grzelak
|
||||
*/
|
||||
/**
|
||||
* Persian translation
|
||||
* @name Persian
|
||||
* @anchor Persian
|
||||
* @author <a href="http://www.chavoshi.com/">Ehsan Chavoshi</a>
|
||||
* @author <a href="http://www.robowiki.ir/">Mohammad Babazadeh</a>
|
||||
*/
|
||||
/**
|
||||
* Pashto translation
|
||||
* @name Pashto
|
||||
* @anchor Pashto
|
||||
* @author <a href="http://mbrig.com/">MBrig | Muhammad Nasir Rahimi</a>
|
||||
*/
|
||||
/**
|
||||
* Norwegian Nynorsk translation
|
||||
* @name Norwegian-Nynorsk
|
||||
* @anchor Norwegian-Nynorsk
|
||||
* @author Andreas-Johann Østerdal Ulvestad
|
||||
*/
|
||||
/**
|
||||
* Norwegian Bokmål translation
|
||||
* @name Norwegian-Bokmal
|
||||
* @anchor Norwegian-Bokmal
|
||||
* @author Petter Ekrann
|
||||
* @author Vegard Johannessen
|
||||
*/
|
||||
/**
|
||||
* Nepali
|
||||
* @name Nepali
|
||||
* @anchor Nepali
|
||||
* @author Bishwo Adhikari
|
||||
*/
|
||||
/**
|
||||
* Mongolian - Монгол хэлний орчуулга
|
||||
* @name Mongolian
|
||||
* @anchor Mongolian
|
||||
* @author <a href="http://www.Batmandakh.com/">Batmandakh Erdenebileg</a>
|
||||
*/
|
||||
/**
|
||||
* Malay translation
|
||||
* @name Malay
|
||||
* @anchor Malay
|
||||
* @author Mohamad Zharif
|
||||
*/
|
||||
/**
|
||||
* Macedonian translation
|
||||
* @name Macedonian
|
||||
* @anchor Macedonian
|
||||
* @author Bojan Petkovski
|
||||
*/
|
||||
/**
|
||||
* Lithuanian translation
|
||||
* @name Lithuanian
|
||||
* @anchor Lithuanian
|
||||
* @author <a href="http://www.kurdingopinigai.lt">Kęstutis Morkūnas</a>
|
||||
* @author Algirdas Brazas
|
||||
*/
|
||||
/**
|
||||
* Latvian translation
|
||||
* @name Latvian
|
||||
* @anchor Latvian
|
||||
* @author Oskars Podans, Ruslans Jermakovičs and Edgars
|
||||
*/
|
||||
/**
|
||||
* @name Kyrgyz
|
||||
* @anchor Kyrgyz
|
||||
* @author <a href="https://github.com/nursultan92/">Nursultan Turdaliev</a> and _tynar_
|
||||
*/
|
||||
/**
|
||||
* Korean translation
|
||||
* @name Korean
|
||||
* @anchor Korean
|
||||
* @author WonGoo Lee
|
||||
*/
|
||||
/**
|
||||
* Kazakh translation
|
||||
* @name Kazakh
|
||||
* @anchor Kazakh
|
||||
* @author <a href="https://github.com/talgautb">Talgat Uspanov</a>
|
||||
*/
|
||||
/**
|
||||
* Japanese translation
|
||||
* @name Japanese
|
||||
* @anchor Japanese
|
||||
* @author <i>yusuke</i> and <a href="https://github.com/wiraqutra">Seigo ISHINO</a>
|
||||
*/
|
||||
/**
|
||||
* Italian translation
|
||||
* @name Italian
|
||||
* @anchor Italian
|
||||
* @author Nicola Zecchin & Giulio Quaresima
|
||||
*/
|
||||
/**
|
||||
* Irish translation
|
||||
* @name Irish
|
||||
* @anchor Irish
|
||||
* @author <a href="http://letsbefamous.com">Lets Be Famous Journal</a>
|
||||
*/
|
||||
/**
|
||||
* Indonesian translation
|
||||
* @name Indonesian
|
||||
* @anchor Indonesian
|
||||
* @author Landung Wahana
|
||||
*/
|
||||
/**
|
||||
* Indonesian translation
|
||||
* @name Indonesian
|
||||
* @anchor Indonesian
|
||||
* @author Cipto Hadi
|
||||
*/
|
||||
/**
|
||||
* Icelandic translation
|
||||
* @name Icelandic
|
||||
* @anchor Icelandic
|
||||
* @author Finnur Kolbeinsson
|
||||
*/
|
||||
/**
|
||||
* Hungarian translation
|
||||
* @name Hungarian
|
||||
* @anchor Hungarian
|
||||
* @author <a href="http://www.maschek.hu">Adam Maschek</a> and Lajos Cseppentő
|
||||
*/
|
||||
/**
|
||||
* Hindi translation
|
||||
* @name Hindi
|
||||
* @anchor Hindi
|
||||
* @author <a href="http://outshinesolutions.com">Outshine Solutions</a>
|
||||
*/
|
||||
/**
|
||||
* Hebrew translation
|
||||
* @name Hebrew
|
||||
* @anchor Hebrew
|
||||
* @author <a href="http://ww3.co.il/">Neil Osman (WW3)</a>
|
||||
*/
|
||||
/**
|
||||
* Gujarati translation
|
||||
* @name Gujarati
|
||||
* @anchor Gujarati
|
||||
* @author <a href="http://www.apoto.com/">Apoto</a>
|
||||
*/
|
||||
/**
|
||||
* Greek translation
|
||||
* @name Greek
|
||||
* @anchor Greek
|
||||
* @author Abraam Ziogas
|
||||
* @author Leonidas Arvanitis
|
||||
*/
|
||||
/**
|
||||
* German translation
|
||||
* @name German
|
||||
* @anchor German
|
||||
* @author Joerg Holz
|
||||
* @author DJmRek - Markus Bergt
|
||||
* @author OSWorX https://osworx.net
|
||||
*/
|
||||
/**
|
||||
* Georgian translation
|
||||
* @name Georgian
|
||||
* @anchor Georgian
|
||||
* @author Mikheil Nadareishvili, updated by <a href="http://www.brunjadze.xyz/">Mirza Brunjadze</a>
|
||||
*/
|
||||
/**
|
||||
* Galician translation
|
||||
* @name Galician
|
||||
* @anchor Galician
|
||||
* @author <i>Emilio</i>
|
||||
* @author <i>Xosé Antonio Rubal López</i>
|
||||
*/
|
||||
/**
|
||||
* French translation
|
||||
* @name French
|
||||
* @anchor French
|
||||
* @author
|
||||
*/
|
||||
/**
|
||||
* Finnish translation
|
||||
* @name Finnish
|
||||
* @anchor Finnish
|
||||
* @author Seppo Äyräväinen
|
||||
* @author Viktors Cvetkovs
|
||||
* @author <a href="https://ironlions.fi">Niko Granö</a>
|
||||
*/
|
||||
/**
|
||||
* Filipino translation
|
||||
* @name Filipino
|
||||
* @anchor Filipino
|
||||
* @author <a href="http://citi360.com/">Citi360</a>
|
||||
*/
|
||||
/**
|
||||
* Estonian translation
|
||||
* @name Estonian
|
||||
* @anchor Estonian
|
||||
* @author <a href="http://www.arts9.com/">Janek Todoruk</a>
|
||||
*/
|
||||
/**
|
||||
* English - this is the default DataTables ships with
|
||||
* @name English
|
||||
* @anchor English
|
||||
* @author <a href="http://www.sprymedia.co.uk/">Allan Jardine</a>
|
||||
*/
|
||||
/**
|
||||
* Dutch translation
|
||||
* @name Dutch
|
||||
* @anchor Dutch
|
||||
* @author <a href="http://www.blikgooien.nl/">Erwin Kerk</a> and <i>ashwin</i>
|
||||
*/
|
||||
/**
|
||||
* Danish translation
|
||||
* @name Danish
|
||||
* @anchor Danish
|
||||
* @author <a href="http://www.kor.dk/">Werner Knudsen</a>
|
||||
*/
|
||||
/**
|
||||
* Czech translation
|
||||
* @name Czech
|
||||
* @anchor Czech
|
||||
* @author <a href="http://blog.magerio.cz/">Magerio</a>
|
||||
*/
|
||||
/**
|
||||
* Croatian translation
|
||||
* @name Croatian
|
||||
* @anchor Croatian
|
||||
* @author Predrag Mušić and _hrvoj3e_
|
||||
*/
|
||||
/**
|
||||
* Chinese (traditional) translation
|
||||
* @name Chinese (traditional)
|
||||
* @anchor Chinese (traditional)
|
||||
* @author <a href="https://gimmerank.com/">GimmeRank Affiliate</a>
|
||||
* @author <a href="https://github.com/PeterDaveHello">Peter Dave Hello</a>
|
||||
*/
|
||||
/**
|
||||
* Catalan translation
|
||||
* @name Catalan
|
||||
* @anchor Catalan
|
||||
* @author Sergi
|
||||
*/
|
||||
/**
|
||||
* Amharic translation
|
||||
* @name Amharic
|
||||
* @anchor Amharic
|
||||
* @author veduket
|
||||
*/
|
||||
/**
|
||||
* Arabic translation
|
||||
* @name Arabic
|
||||
* @anchor Arabic
|
||||
* @author Ossama Khayat
|
||||
*/
|
||||
/**
|
||||
* Armenian - translation
|
||||
* @name Armenian
|
||||
* @anchor Armenian
|
||||
* @author <a href="http://www.voznisoft.com/">Levon Levonyan</a>
|
||||
*/
|
||||
/**
|
||||
* Azerbaijan translation
|
||||
* @name Azerbaijan
|
||||
* @anchor Azerbaijan
|
||||
* @author H.Huseyn
|
||||
*/
|
||||
/**
|
||||
* Bangla translation
|
||||
* @name Bangla
|
||||
* @anchor Bangla
|
||||
* @author <a href="http://khaledcse06.wordpress.com">Md. Khaled Ben Islam</a>
|
||||
*/
|
||||
/**
|
||||
* Basque translation
|
||||
* @name Basque
|
||||
* @anchor Basque
|
||||
* @author <a href="https://github.com/xabikip/">Xabi Pico</a>
|
||||
*/
|
||||
/**
|
||||
* Belarusian translation
|
||||
* @name Belarusian
|
||||
* @anchor Belarusian
|
||||
* @author vkachurka
|
||||
*/
|
||||
/**
|
||||
* Bulgarian translation
|
||||
* @name Bulgarian
|
||||
* @anchor Bulgarian
|
||||
* @author Rostislav Stoyanov, Oliwier Thomas
|
||||
*/
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Geen data beskikbaar in tabel",
|
||||
"sInfo": "uitstalling _START_ to _END_ of _TOTAL_ inskrywings",
|
||||
"sInfoEmpty": "uitstalling 0 to 0 of 0 inskrywings",
|
||||
"sInfoFiltered": "(gefiltreer uit _MAX_ totaal inskrywings)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "uitstal _MENU_ inskrywings",
|
||||
"sLoadingRecords": "laai...",
|
||||
"sProcessing": "verwerking...",
|
||||
"sSearch": "soektog:",
|
||||
"sZeroRecords": "Geen treffers gevind",
|
||||
"oPaginate": {
|
||||
"sFirst": "eerste",
|
||||
"sLast": "laaste",
|
||||
"sNext": "volgende",
|
||||
"sPrevious": "vorige"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": aktiveer kolom stygende te sorteer",
|
||||
"sSortDescending": ": aktiveer kolom orde te sorteer"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "ባዶ ሰንጠረዥ",
|
||||
"sInfo": "ከጠቅላላው _TOTAL_ ዝርዝሮች ውስጥ ከ _START_ እስከ _END_ ያሉት ዝርዝር",
|
||||
"sInfoEmpty": "ከጠቅላላው 0 ዝርዝሮች ውስጥ ከ 0 እስከ 0 ያሉት ዝርዝር",
|
||||
"sInfoFiltered": "(ከጠቅላላው _MAX_ የተመረጡ ዝርዝሮች)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "የዝርዝሮች ብዛት _MENU_",
|
||||
"sLoadingRecords": "በማቅረብ ላይ...",
|
||||
"sProcessing": "በማቀናበር ላይ...",
|
||||
"sSearch": "ፈልግ:",
|
||||
"sZeroRecords": "ከሚፈለገው ጋር የሚሚሳሰል ዝርዝር አልተገኘም",
|
||||
"oPaginate": {
|
||||
"sFirst": "መጀመሪያ",
|
||||
"sLast": "መጨረሻ",
|
||||
"sNext": "ቀጣዩ",
|
||||
"sPrevious": "የበፊቱ"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": ከመጀመሪያ ወደ መጨረሻ(ወጪ) አደራደር",
|
||||
"sSortDescending": ": ከመጨረሻ ወደ መጀመሪያ(ወራጅ) አደራደር"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"sProcessing": "جارٍ التحميل...",
|
||||
"sLengthMenu": "أظهر _MENU_ مدخلات",
|
||||
"sZeroRecords": "لم يعثر على أية سجلات",
|
||||
"sInfo": "إظهار _START_ إلى _END_ من أصل _TOTAL_ مدخل",
|
||||
"sInfoEmpty": "يعرض 0 إلى 0 من أصل 0 سجل",
|
||||
"sInfoFiltered": "(منتقاة من مجموع _MAX_ مُدخل)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "ابحث:",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "الأول",
|
||||
"sPrevious": "السابق",
|
||||
"sNext": "التالي",
|
||||
"sLast": "الأخير"
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Пачакайце...",
|
||||
"sLengthMenu": "Паказваць _MENU_ запісаў",
|
||||
"sZeroRecords": "Запісы адсутнічаюць.",
|
||||
"sInfo": "Запісы з _START_ па _END_ з _TOTAL_ запісаў",
|
||||
"sInfoEmpty": "Запісы з 0 па 0 з 0 запісаў",
|
||||
"sInfoFiltered": "(адфільтравана з _MAX_ запісаў)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Пошук:",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "Першая",
|
||||
"sPrevious": "Папярэдняя",
|
||||
"sNext": "Наступная",
|
||||
"sLast": "Апошняя"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": актываваць для сартавання слупка па ўзрастанні",
|
||||
"sSortDescending": ": актываваць для сартавання слупка па змяншэнні"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Обработка на резултатите...",
|
||||
"sLengthMenu": "Показване на _MENU_ резултата",
|
||||
"sZeroRecords": "Няма намерени резултати",
|
||||
"sInfo": "Показване на резултати от _START_ до _END_ от общо _TOTAL_",
|
||||
"sInfoEmpty": "Показване на резултати от 0 до 0 от общо 0",
|
||||
"sInfoFiltered": "(филтрирани от общо _MAX_ резултата)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Търсене:",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "Първа",
|
||||
"sPrevious": "Предишна",
|
||||
"sNext": "Следваща",
|
||||
"sLast": "Последна"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Processant...",
|
||||
"sLengthMenu": "Mostra _MENU_ registres",
|
||||
"sZeroRecords": "No s'han trobat registres.",
|
||||
"sInfo": "Mostrant de _START_ a _END_ de _TOTAL_ registres",
|
||||
"sInfoEmpty": "Mostrant de 0 a 0 de 0 registres",
|
||||
"sInfoFiltered": "(filtrat de _MAX_ total registres)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Filtrar:",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "Primer",
|
||||
"sPrevious": "Anterior",
|
||||
"sNext": "Següent",
|
||||
"sLast": "Últim"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Tabulka neobsahuje žádná data",
|
||||
"sInfo": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů",
|
||||
"sInfoEmpty": "Zobrazuji 0 až 0 z 0 záznamů",
|
||||
"sInfoFiltered": "(filtrováno z celkem _MAX_ záznamů)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": " ",
|
||||
"sLengthMenu": "Zobraz záznamů _MENU_",
|
||||
"sLoadingRecords": "Načítám...",
|
||||
"sProcessing": "Provádím...",
|
||||
"sSearch": "Hledat:",
|
||||
"sZeroRecords": "Žádné záznamy nebyly nalezeny",
|
||||
"oPaginate": {
|
||||
"sFirst": "První",
|
||||
"sLast": "Poslední",
|
||||
"sNext": "Další",
|
||||
"sPrevious": "Předchozí"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": aktivujte pro řazení sloupce vzestupně",
|
||||
"sSortDescending": ": aktivujte pro řazení sloupce sestupně"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Dim data ar gael yn y tabl",
|
||||
"sInfo": "Dangos _START_ i _END_ o _TOTAL_ cofnod",
|
||||
"sInfoEmpty": "Dangos 0 i 0 o 0 cofnod",
|
||||
"sInfoFiltered": "(wedi hidlo o gyfanswm o _MAX_ cofnod)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "Dangos _MENU_ cofnod",
|
||||
"sLoadingRecords": "Wrthi'n llwytho...",
|
||||
"sProcessing": "Wrthi'n prosesu...",
|
||||
"sSearch": "Chwilio:",
|
||||
"sZeroRecords": "Heb ddod o hyd i gofnodion sy'n cyfateb",
|
||||
"oPaginate": {
|
||||
"sFirst": "Cyntaf",
|
||||
"sLast": "Olaf",
|
||||
"sNext": "Nesaf",
|
||||
"sPrevious": "Blaenorol"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": rhoi ar waith i drefnu colofnau o'r lleiaf i'r mwyaf",
|
||||
"sSortDescending": ": rhoi ar waith i drefnu colofnau o'r mwyaf i'r lleiaf"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Henter...",
|
||||
"sLengthMenu": "Vis _MENU_ linjer",
|
||||
"sZeroRecords": "Ingen linjer matcher søgningen",
|
||||
"sInfo": "Viser _START_ til _END_ af _TOTAL_ linjer",
|
||||
"sInfoEmpty": "Viser 0 til 0 af 0 linjer",
|
||||
"sInfoFiltered": "(filtreret fra _MAX_ linjer)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Søg:",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "Første",
|
||||
"sPrevious": "Forrige",
|
||||
"sNext": "Næste",
|
||||
"sLast": "Sidste"
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Keine Daten in der Tabelle vorhanden",
|
||||
"sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen",
|
||||
"sInfoEmpty": "Keine Daten vorhanden",
|
||||
"sInfoFiltered": "(gefiltert von _MAX_ Einträgen)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ".",
|
||||
"sLengthMenu": "_MENU_ Einträge anzeigen",
|
||||
"sLoadingRecords": "Wird geladen ..",
|
||||
"sProcessing": "Bitte warten ..",
|
||||
"sSearch": "Suchen",
|
||||
"sZeroRecords": "Keine Einträge vorhanden",
|
||||
"oPaginate": {
|
||||
"sFirst": "Erste",
|
||||
"sPrevious": "Zurück",
|
||||
"sNext": "Nächste",
|
||||
"sLast": "Letzte"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": aktivieren, um Spalte aufsteigend zu sortieren",
|
||||
"sSortDescending": ": aktivieren, um Spalte absteigend zu sortieren"
|
||||
},
|
||||
"select": {
|
||||
"rows": {
|
||||
"_": "%d Zeilen ausgewählt",
|
||||
"0": "",
|
||||
"1": "1 Zeile ausgewählt"
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"print": "Drucken",
|
||||
"colvis": "Spalten",
|
||||
"copy": "Kopieren",
|
||||
"copyTitle": "In Zwischenablage kopieren",
|
||||
"copyKeys": "Taste <i>ctrl</i> oder <i>\u2318</i> + <i>C</i> um Tabelle<br>in Zwischenspeicher zu kopieren.<br><br>Um abzubrechen die Nachricht anklicken oder Escape drücken.",
|
||||
"copySuccess": {
|
||||
"_": "%d Spalten kopiert",
|
||||
"1": "1 Spalte kopiert"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"sDecimal": ",",
|
||||
"sEmptyTable": "Δεν υπάρχουν δεδομένα στον πίνακα",
|
||||
"sInfo": "Εμφανίζονται _START_ έως _END_ από _TOTAL_ εγγραφές",
|
||||
"sInfoEmpty": "Εμφανίζονται 0 έως 0 από 0 εγγραφές",
|
||||
"sInfoFiltered": "(φιλτραρισμένες από _MAX_ συνολικά εγγραφές)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ".",
|
||||
"sLengthMenu": "Δείξε _MENU_ εγγραφές",
|
||||
"sLoadingRecords": "Φόρτωση...",
|
||||
"sProcessing": "Επεξεργασία...",
|
||||
"sSearch": "Αναζήτηση:",
|
||||
"sSearchPlaceholder": "Αναζήτηση",
|
||||
"sThousands": ".",
|
||||
"sUrl": "",
|
||||
"sZeroRecords": "Δεν βρέθηκαν εγγραφές που να ταιριάζουν",
|
||||
"oPaginate": {
|
||||
"sFirst": "Πρώτη",
|
||||
"sPrevious": "Προηγούμενη",
|
||||
"sNext": "Επόμενη",
|
||||
"sLast": "Τελευταία"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": ενεργοποιήστε για αύξουσα ταξινόμηση της στήλης",
|
||||
"sSortDescending": ": ενεργοποιήστε για φθίνουσα ταξινόμηση της στήλης"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "No data available in table",
|
||||
"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
|
||||
"sInfoEmpty": "Showing 0 to 0 of 0 entries",
|
||||
"sInfoFiltered": "(filtered from _MAX_ total entries)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "Show _MENU_ entries",
|
||||
"sLoadingRecords": "Loading...",
|
||||
"sProcessing": "Processing...",
|
||||
"sSearch": "Search:",
|
||||
"sZeroRecords": "No matching records found",
|
||||
"oPaginate": {
|
||||
"sFirst": "First",
|
||||
"sLast": "Last",
|
||||
"sNext": "Next",
|
||||
"sPrevious": "Previous"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": activate to sort column ascending",
|
||||
"sSortDescending": ": activate to sort column descending"
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Procesando...",
|
||||
"sLengthMenu": "Mostrar _MENU_ registros",
|
||||
"sZeroRecords": "No se encontraron resultados",
|
||||
"sEmptyTable": "Ningún dato disponible en esta tabla",
|
||||
"sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
|
||||
"sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros",
|
||||
"sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Buscar:",
|
||||
"sUrl": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLoadingRecords": "Cargando...",
|
||||
"oPaginate": {
|
||||
"sFirst": "Primero",
|
||||
"sLast": "Último",
|
||||
"sNext": "Siguiente",
|
||||
"sPrevious": "Anterior"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": Activar para ordenar la columna de manera ascendente",
|
||||
"sSortDescending": ": Activar para ordenar la columna de manera descendente"
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Palun oodake, koostan kuvamiseks nimekirja!",
|
||||
"sLengthMenu": "Näita kirjeid _MENU_ kaupa",
|
||||
"sZeroRecords": "Otsitavat vastet ei leitud.",
|
||||
"sInfo": "Kuvatud: _TOTAL_ kirjet (_START_-_END_)",
|
||||
"sInfoEmpty": "Otsinguvasteid ei leitud",
|
||||
"sInfoFiltered": " - filteeritud _MAX_ kirje seast.",
|
||||
"sInfoPostFix": "Kõik kuvatud kirjed põhinevad reaalsetel tulemustel.",
|
||||
"sSearch": "Otsi kõikide tulemuste seast:",
|
||||
"oPaginate": {
|
||||
"sFirst": "Algus",
|
||||
"sPrevious": "Eelmine",
|
||||
"sNext": "Järgmine",
|
||||
"sLast": "Viimane"
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Prozesatzen...",
|
||||
"sLengthMenu": "Erakutsi _MENU_ erregistro",
|
||||
"sZeroRecords": "Ez da emaitzarik aurkitu",
|
||||
"sEmptyTable": "Taula hontan ez dago inongo datu erabilgarririk",
|
||||
"sInfo": "_START_ -etik _END_ -erako erregistroak erakusten, guztira _TOTAL_ erregistro",
|
||||
"sInfoEmpty": "0tik 0rako erregistroak erakusten, guztira 0 erregistro",
|
||||
"sInfoFiltered": "(guztira _MAX_ erregistro iragazten)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Aurkitu:",
|
||||
"sUrl": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLoadingRecords": "Abiarazten...",
|
||||
"oPaginate": {
|
||||
"sFirst": "Lehena",
|
||||
"sLast": "Azkena",
|
||||
"sNext": "Hurrengoa",
|
||||
"sPrevious": "Aurrekoa"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": Zutabea goranzko eran ordenatzeko aktibatu ",
|
||||
"sSortDescending": ": Zutabea beheranzko eran ordenatzeko aktibatu"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "هیچ داده ای در جدول وجود ندارد",
|
||||
"sInfo": "نمایش _START_ تا _END_ از _TOTAL_ رکورد",
|
||||
"sInfoEmpty": "نمایش 0 تا 0 از 0 رکورد",
|
||||
"sInfoFiltered": "(فیلتر شده از _MAX_ رکورد)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "نمایش _MENU_ رکورد",
|
||||
"sLoadingRecords": "در حال بارگزاری...",
|
||||
"sProcessing": "در حال پردازش...",
|
||||
"sSearch": "جستجو:",
|
||||
"sZeroRecords": "رکوردی با این مشخصات پیدا نشد",
|
||||
"oPaginate": {
|
||||
"sFirst": "ابتدا",
|
||||
"sLast": "انتها",
|
||||
"sNext": "بعدی",
|
||||
"sPrevious": "قبلی"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": فعال سازی نمایش به صورت صعودی",
|
||||
"sSortDescending": ": فعال سازی نمایش به صورت نزولی"
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Ei näytettäviä tuloksia.",
|
||||
"sInfo": "Näytetään rivit _START_ - _END_ (yhteensä _TOTAL_ )",
|
||||
"sInfoEmpty": "Näytetään 0 - 0 (yhteensä 0)",
|
||||
"sInfoFiltered": "(suodatettu _MAX_ tuloksen joukosta)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "Näytä kerralla _MENU_ riviä",
|
||||
"sLoadingRecords": "Ladataan...",
|
||||
"sProcessing": "Hetkinen...",
|
||||
"sSearch": "Etsi:",
|
||||
"sZeroRecords": "Tietoja ei löytynyt",
|
||||
"oPaginate": {
|
||||
"sFirst": "Ensimmäinen",
|
||||
"sLast": "Viimeinen",
|
||||
"sNext": "Seuraava",
|
||||
"sPrevious": "Edellinen"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": lajittele sarake nousevasti",
|
||||
"sSortDescending": ": lajittele sarake laskevasti"
|
||||
},
|
||||
"select": {
|
||||
"rows": {
|
||||
"_": "Valittuna %d riviä",
|
||||
"0": "Klikkaa riviä valitaksesi sen",
|
||||
"1": "Valittuna vain yksi rivi"
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"copy": "Kopioi",
|
||||
"copySuccess": {
|
||||
"1": "Yksi rivi kopioitu leikepöydälle",
|
||||
"_": "%d riviä kopioitu leikepöydälle"
|
||||
},
|
||||
"copyTitle": "Kopioi leikepöydälle",
|
||||
"copyKeys": "Paina <i>ctrl</i> tai <i>\u2318</i> + <i>C</i> kopioidaksesi taulukon arvot<br> leikepöydälle. <br><br>Peruuttaaksesi klikkaa tähän tai Esc."
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Traitement en cours...",
|
||||
"sSearch": "Rechercher :",
|
||||
"sLengthMenu": "Afficher _MENU_ éléments",
|
||||
"sInfo": "Affichage de l'élément _START_ à _END_ sur _TOTAL_ éléments",
|
||||
"sInfoEmpty": "Affichage de l'élément 0 à 0 sur 0 élément",
|
||||
"sInfoFiltered": "(filtré de _MAX_ éléments au total)",
|
||||
"sInfoPostFix": "",
|
||||
"sLoadingRecords": "Chargement en cours...",
|
||||
"sZeroRecords": "Aucun élément à afficher",
|
||||
"sEmptyTable": "Aucune donnée disponible dans le tableau",
|
||||
"oPaginate": {
|
||||
"sFirst": "Premier",
|
||||
"sPrevious": "Précédent",
|
||||
"sNext": "Suivant",
|
||||
"sLast": "Dernier"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": activer pour trier la colonne par ordre croissant",
|
||||
"sSortDescending": ": activer pour trier la colonne par ordre décroissant"
|
||||
},
|
||||
"select": {
|
||||
"rows": {
|
||||
_: "%d lignes séléctionnées",
|
||||
0: "Aucune ligne séléctionnée",
|
||||
1: "1 ligne séléctionnée"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Procesando...",
|
||||
"sLengthMenu": "Mostrar _MENU_ rexistros",
|
||||
"sZeroRecords": "Non se atoparon resultados",
|
||||
"sEmptyTable": "Ningún dato dispoñible nesta táboa",
|
||||
"sInfo": "Mostrando rexistros do _START_ ao _END_ dun total de _TOTAL_ rexistros",
|
||||
"sInfoEmpty": "Mostrando rexistros do 0 ao 0 dun total de 0 rexistros",
|
||||
"sInfoFiltered": "(filtrado dun total de _MAX_ rexistros)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Buscar:",
|
||||
"sUrl": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLoadingRecords": "Cargando...",
|
||||
"oPaginate": {
|
||||
"sFirst": "Primeiro",
|
||||
"sLast": "Último",
|
||||
"sNext": "Seguinte",
|
||||
"sPrevious": "Anterior"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": Activar para ordenar a columna de maneira ascendente",
|
||||
"sSortDescending": ": Activar para ordenar a columna de maneira descendente"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "કોષ્ટકમાં કોઈ ડેટા ઉપલબ્ધ નથી",
|
||||
"sInfo": "કુલ_પ્રવેશો_અંત_પ્રારંભ_દર્શાવે_છે",
|
||||
"sInfoEmpty": "0 પ્રવેશો 0 0 બતાવી રહ્યું છે",
|
||||
"sInfoFiltered": "(_MAX_ કુલ પ્રવેશો માંથી ફિલ્ટર)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "બતાવો _MENU_ પ્રવેશો",
|
||||
"sLoadingRecords": "લોડ કરી રહ્યું છે ...",
|
||||
"sProcessing": "પ્રક્રિયા ...",
|
||||
"sSearch": "શોધો:",
|
||||
"sZeroRecords": "કોઈ મેળ ખાતા રેકોર્ડ મળી",
|
||||
"oPaginate": {
|
||||
"sFirst": "પ્રથમ",
|
||||
"sLast": "અંતિમ",
|
||||
"sNext": "આગામી",
|
||||
"sPrevious": "ગત"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": સ્તંભ ચડતા ક્રમમાં ગોઠવવા માટે સક્રિય",
|
||||
"sSortDescending": ": કૉલમ ઉતરતા ક્રમમાં ગોઠવવા માટે સક્રિય"
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"processing": "מעבד...",
|
||||
"lengthMenu": "הצג _MENU_ פריטים",
|
||||
"zeroRecords": "לא נמצאו רשומות מתאימות",
|
||||
"emptyTable": "לא נמצאו רשומות מתאימות",
|
||||
"info": "_START_ עד _END_ מתוך _TOTAL_ רשומות" ,
|
||||
"infoEmpty": "0 עד 0 מתוך 0 רשומות",
|
||||
"infoFiltered": "(מסונן מסך _MAX_ רשומות)",
|
||||
"infoPostFix": "",
|
||||
"search": "חפש:",
|
||||
"url": "",
|
||||
"paginate": {
|
||||
"first": "ראשון",
|
||||
"previous": "קודם",
|
||||
"next": "הבא",
|
||||
"last": "אחרון"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"sProcessing": "प्रगति पे हैं ...",
|
||||
"sLengthMenu": " _MENU_ प्रविष्टियां दिखाएं ",
|
||||
"sZeroRecords": "रिकॉर्ड्स का मेल नहीं मिला",
|
||||
"sInfo": "_START_ to _END_ of _TOTAL_ प्रविष्टियां दिखा रहे हैं",
|
||||
"sInfoEmpty": "0 में से 0 से 0 प्रविष्टियां दिखा रहे हैं",
|
||||
"sInfoFiltered": "(_MAX_ कुल प्रविष्टियों में से छठा हुआ)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "खोजें:",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "प्रथम",
|
||||
"sPrevious": "पिछला",
|
||||
"sNext": "अगला",
|
||||
"sLast": "अंतिम"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Nema podataka u tablici",
|
||||
"sInfo": "Prikazano _START_ do _END_ od _TOTAL_ rezultata",
|
||||
"sInfoEmpty": "Prikazano 0 do 0 od 0 rezultata",
|
||||
"sInfoFiltered": "(filtrirano iz _MAX_ ukupnih rezultata)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "Prikaži _MENU_ rezultata po stranici",
|
||||
"sLoadingRecords": "Dohvaćam...",
|
||||
"sProcessing": "Obrađujem...",
|
||||
"sSearch": "Pretraži:",
|
||||
"sZeroRecords": "Ništa nije pronađeno",
|
||||
"oPaginate": {
|
||||
"sFirst": "Prva",
|
||||
"sPrevious": "Nazad",
|
||||
"sNext": "Naprijed",
|
||||
"sLast": "Zadnja"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": aktiviraj za rastući poredak",
|
||||
"sSortDescending": ": aktiviraj za padajući poredak"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Nincs rendelkezésre álló adat",
|
||||
"sInfo": "Találatok: _START_ - _END_ Összesen: _TOTAL_",
|
||||
"sInfoEmpty": "Nulla találat",
|
||||
"sInfoFiltered": "(_MAX_ összes rekord közül szűrve)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": " ",
|
||||
"sLengthMenu": "_MENU_ találat oldalanként",
|
||||
"sLoadingRecords": "Betöltés...",
|
||||
"sProcessing": "Feldolgozás...",
|
||||
"sSearch": "Keresés:",
|
||||
"sZeroRecords": "Nincs a keresésnek megfelelő találat",
|
||||
"oPaginate": {
|
||||
"sFirst": "Első",
|
||||
"sPrevious": "Előző",
|
||||
"sNext": "Következő",
|
||||
"sLast": "Utolsó"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": aktiválja a növekvő rendezéshez",
|
||||
"sSortDescending": ": aktiválja a csökkenő rendezéshez"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Տվյալները բացակայում են",
|
||||
"sProcessing": "Կատարվում է...",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "Ցուցադրել _MENU_ արդյունքներ մեկ էջում",
|
||||
"sLoadingRecords": "Բեռնվում է ...",
|
||||
"sZeroRecords": "Հարցմանը համապատասխանող արդյունքներ չկան",
|
||||
"sInfo": "Ցուցադրված են _START_-ից _END_ արդյունքները ընդհանուր _TOTAL_-ից",
|
||||
"sInfoEmpty": "Արդյունքներ գտնված չեն",
|
||||
"sInfoFiltered": "(ֆիլտրվել է ընդհանուր _MAX_ արդյունքներից)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Փնտրել",
|
||||
"oPaginate": {
|
||||
"sFirst": "Առաջին էջ",
|
||||
"sPrevious": "Նախորդ էջ",
|
||||
"sNext": "Հաջորդ էջ",
|
||||
"sLast": "Վերջին էջ"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": ակտիվացրեք աճման կարգով դասավորելու համար",
|
||||
"sSortDescending": ": ակտիվացրեք նվազման կարգով դասավորելու համար"
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Tidak ada data yang tersedia pada tabel ini",
|
||||
"sProcessing": "Sedang memproses...",
|
||||
"sLengthMenu": "Tampilkan _MENU_ entri",
|
||||
"sZeroRecords": "Tidak ditemukan data yang sesuai",
|
||||
"sInfo": "Menampilkan _START_ sampai _END_ dari _TOTAL_ entri",
|
||||
"sInfoEmpty": "Menampilkan 0 sampai 0 dari 0 entri",
|
||||
"sInfoFiltered": "(disaring dari _MAX_ entri keseluruhan)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Cari:",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "Pertama",
|
||||
"sPrevious": "Sebelumnya",
|
||||
"sNext": "Selanjutnya",
|
||||
"sLast": "Terakhir"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Engin gögn eru í þessari töflu",
|
||||
"sInfo": "Sýni _START_ til _END_ af _TOTAL_ færslum",
|
||||
"sInfoEmpty": "Sýni 0 til 0 af 0 færslum",
|
||||
"sInfoFiltered": "(síað út frá _MAX_ færslum)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ".",
|
||||
"sLengthMenu": "Sýna _MENU_ færslur",
|
||||
"sLoadingRecords": "Hleð...",
|
||||
"sProcessing": "Úrvinnsla...",
|
||||
"sSearch": "Leita:",
|
||||
"sZeroRecords": "Engar færslur fundust",
|
||||
"oPaginate": {
|
||||
"sFirst": "Fyrsta",
|
||||
"sLast": "Síðasta",
|
||||
"sNext": "Næsta",
|
||||
"sPrevious": "Fyrri"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": virkja til að raða dálki í hækkandi röð",
|
||||
"sSortDescending": ": virkja til að raða dálki lækkandi í röð"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Nessun dato presente nella tabella",
|
||||
"sInfo": "Vista da _START_ a _END_ di _TOTAL_ elementi",
|
||||
"sInfoEmpty": "Vista da 0 a 0 di 0 elementi",
|
||||
"sInfoFiltered": "(filtrati da _MAX_ elementi totali)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ".",
|
||||
"sLengthMenu": "Visualizza _MENU_ elementi",
|
||||
"sLoadingRecords": "Caricamento...",
|
||||
"sProcessing": "Elaborazione...",
|
||||
"sSearch": "Cerca:",
|
||||
"sZeroRecords": "La ricerca non ha portato alcun risultato.",
|
||||
"oPaginate": {
|
||||
"sFirst": "Inizio",
|
||||
"sPrevious": "Precedente",
|
||||
"sNext": "Successivo",
|
||||
"sLast": "Fine"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": attiva per ordinare la colonna in ordine crescente",
|
||||
"sSortDescending": ": attiva per ordinare la colonna in ordine decrescente"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "テーブルにデータがありません",
|
||||
"sInfo": " _TOTAL_ 件中 _START_ から _END_ まで表示",
|
||||
"sInfoEmpty": " 0 件中 0 から 0 まで表示",
|
||||
"sInfoFiltered": "(全 _MAX_ 件より抽出)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "_MENU_ 件表示",
|
||||
"sLoadingRecords": "読み込み中...",
|
||||
"sProcessing": "処理中...",
|
||||
"sSearch": "検索:",
|
||||
"sZeroRecords": "一致するレコードがありません",
|
||||
"oPaginate": {
|
||||
"sFirst": "先頭",
|
||||
"sLast": "最終",
|
||||
"sNext": "次",
|
||||
"sPrevious": "前"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": 列を昇順に並べ替えるにはアクティブにする",
|
||||
"sSortDescending": ": 列を降順に並べ替えるにはアクティブにする"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "ცხრილში არ არის მონაცემები",
|
||||
"sInfo": "ნაჩვენებია ჩანაწერები _START_–დან _END_–მდე, _TOTAL_ ჩანაწერიდან",
|
||||
"sInfoEmpty": "ნაჩვენებია ჩანაწერები 0–დან 0–მდე, 0 ჩანაწერიდან",
|
||||
"sInfoFiltered": "(გაფილტრული შედეგი _MAX_ ჩანაწერიდან)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ".",
|
||||
"sLengthMenu": "აჩვენე _MENU_ ჩანაწერი",
|
||||
"sLoadingRecords": "იტვირთება...",
|
||||
"sProcessing": "მუშავდება...",
|
||||
"sSearch": "ძიება:",
|
||||
"sZeroRecords": "არაფერი მოიძებნა",
|
||||
"oPaginate": {
|
||||
"sFirst": "პირველი",
|
||||
"sLast": "ბოლო",
|
||||
"sNext": "შემდეგი",
|
||||
"sPrevious": "წინა"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": სვეტის დალაგება ზრდის მიხედვით",
|
||||
"sSortDescending": ": სვეტის დალაგება კლების მიხედვით"
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"processing": "Күте тұрыңыз...",
|
||||
"search": "Іздеу:",
|
||||
"lengthMenu": "Жазбалар _MENU_ көрсету",
|
||||
"info": "_TOTAL_ жазбалары бойынша _START_ бастап _END_ дейінгі жазбалар",
|
||||
"infoEmpty": "0 жазбалары бойынша 0 бастап 0 дейінгі жазбалар",
|
||||
"infoFiltered": "(_MAX_ жазбасынан сұрыпталды)",
|
||||
"infoPostFix": "",
|
||||
"loadingRecords": "Жазбалар жүктемесі...",
|
||||
"zeroRecords": "Жазбалар жоқ",
|
||||
"emptyTable": "Кестеде деректер жоқ",
|
||||
"paginate": {
|
||||
"first": "Бірінші",
|
||||
"previous": "Алдыңғысы",
|
||||
"next": "Келесі",
|
||||
"last": "Соңғы"
|
||||
},
|
||||
"aria": {
|
||||
"sortAscending": ": өсімі бойынша бағанды сұрыптау үшін активациялау",
|
||||
"sortDescending": ": кемуі бойынша бағанды сұрыптау үшін активациялау"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "데이터가 없습니다",
|
||||
"sInfo": "_START_ - _END_ / _TOTAL_",
|
||||
"sInfoEmpty": "0 - 0 / 0",
|
||||
"sInfoFiltered": "(총 _MAX_ 개)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "페이지당 줄수 _MENU_",
|
||||
"sLoadingRecords": "읽는중...",
|
||||
"sProcessing": "처리중...",
|
||||
"sSearch": "검색:",
|
||||
"sZeroRecords": "검색 결과가 없습니다",
|
||||
"oPaginate": {
|
||||
"sFirst": "처음",
|
||||
"sLast": "마지막",
|
||||
"sNext": "다음",
|
||||
"sPrevious": "이전"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": 오름차순 정렬",
|
||||
"sSortDescending": ": 내림차순 정렬"
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Lentelėje nėra duomenų",
|
||||
"sInfo": "Rodomi įrašai nuo _START_ iki _END_ iš _TOTAL_ įrašų",
|
||||
"sInfoEmpty": "Rodomi įrašai nuo 0 iki 0 iš 0",
|
||||
"sInfoFiltered": "(atrinkta iš _MAX_ įrašų)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": " ",
|
||||
"sLengthMenu": "Rodyti _MENU_ įrašus",
|
||||
"sLoadingRecords": "Įkeliama...",
|
||||
"sProcessing": "Apdorojama...",
|
||||
"sSearch": "Ieškoti:",
|
||||
"sThousands": " ",
|
||||
"sUrl": "",
|
||||
"sZeroRecords": "Įrašų nerasta",
|
||||
|
||||
"oPaginate": {
|
||||
"sFirst": "Pirmas",
|
||||
"sPrevious": "Ankstesnis",
|
||||
"sNext": "Tolimesnis",
|
||||
"sLast": "Paskutinis"
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"processing": "Uzgaidiet ...",
|
||||
"search": "Meklēt:",
|
||||
"lengthMenu": "Rādīt _MENU_ ierakstus",
|
||||
"info": "Parādīti _START_ līdz _END_ no _TOTAL_ ierakstiem",
|
||||
"infoEmpty": "Nav ierakstu",
|
||||
"infoFiltered": "(atlasīts no pavisam _MAX_ ierakstiem)",
|
||||
"infoPostFix": "",
|
||||
"loadingRecords": "Notiek ielāde ...",
|
||||
"zeroRecords": "Nav atrasti vaicājumam atbilstoši ieraksti",
|
||||
"emptyTable": "Tabulā nav datu",
|
||||
"paginate": {
|
||||
"first": "Pirmā",
|
||||
"previous": "Iepriekšējā",
|
||||
"next": "Nākošā",
|
||||
"last": "Pēdējā"
|
||||
},
|
||||
"aria": {
|
||||
"sortAscending": ": aktivizēt kolonnu, lai kārtotu augoši",
|
||||
"sortDescending": ": aktivizēt kolonnu, lai kārtotu dilstoši"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Хүснэгт хоосон байна",
|
||||
"sInfo": "Нийт _TOTAL_ бичлэгээс _START_ - _END_ харуулж байна",
|
||||
"sInfoEmpty": "Тохирох үр дүн алга",
|
||||
"sInfoFiltered": "(нийт _MAX_ бичлэгээс шүүв)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "Дэлгэцэд _MENU_ бичлэг харуулна",
|
||||
"sLoadingRecords": "Ачааллаж байна...",
|
||||
"sProcessing": "Боловсруулж байна...",
|
||||
"sSearch": "Хайлт:",
|
||||
"sZeroRecords": "Тохирох бичлэг олдсонгүй",
|
||||
"oPaginate": {
|
||||
"sFirst": "Эхнийх",
|
||||
"sLast": "Сүүлийнх",
|
||||
"sNext": "Өмнөх",
|
||||
"sPrevious": "Дараах"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": цагаан толгойн дарааллаар эрэмбэлэх",
|
||||
"sSortDescending": ": цагаан толгойн эсрэг дарааллаар эрэмбэлэх"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Tiada data",
|
||||
"sInfo": "Paparan dari _START_ hingga _END_ dari _TOTAL_ rekod",
|
||||
"sInfoEmpty": "Paparan 0 hingga 0 dari 0 rekod",
|
||||
"sInfoFiltered": "(Ditapis dari jumlah _MAX_ rekod)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "Papar _MENU_ rekod",
|
||||
"sLoadingRecords": "Diproses...",
|
||||
"sProcessing": "Sedang diproses...",
|
||||
"sSearch": "Carian:",
|
||||
"sZeroRecords": "Tiada padanan rekod yang dijumpai.",
|
||||
"oPaginate": {
|
||||
"sFirst": "Pertama",
|
||||
"sPrevious": "Sebelum",
|
||||
"sNext": "Kemudian",
|
||||
"sLast": "Akhir"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": diaktifkan kepada susunan lajur menaik",
|
||||
"sSortDescending": ": diaktifkan kepada susunan lajur menurun"
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Ingen data tilgjengelig i tabellen",
|
||||
"sInfo": "Viser _START_ til _END_ av _TOTAL_ linjer",
|
||||
"sInfoEmpty": "Viser 0 til 0 av 0 linjer",
|
||||
"sInfoFiltered": "(filtrert fra _MAX_ totalt antall linjer)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": " ",
|
||||
"sLoadingRecords": "Laster...",
|
||||
"sLengthMenu": "Vis _MENU_ linjer",
|
||||
"sLoadingRecords": "Laster...",
|
||||
"sProcessing": "Laster...",
|
||||
"sSearch": "Søk:",
|
||||
"sUrl": "",
|
||||
"sZeroRecords": "Ingen linjer matcher søket",
|
||||
"oPaginate": {
|
||||
"sFirst": "Første",
|
||||
"sPrevious": "Forrige",
|
||||
"sNext": "Neste",
|
||||
"sLast": "Siste"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": aktiver for å sortere kolonnen stigende",
|
||||
"sSortDescending": ": aktiver for å sortere kolonnen synkende"
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "टेबलमा डाटा उपलब्ध भएन",
|
||||
"sInfo": "_TOTAL_ रेकर्ड मध्य _START_ देखि _END_ रेकर्ड देखाउंदै",
|
||||
"sInfoEmpty": "0 मध्य 0 देखि 0 रेकर्ड देखाउंदै",
|
||||
"sInfoFiltered": "(_MAX_ कुल रेकर्डबाट छनौट गरिएको)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": " _MENU_ रेकर्ड देखाउने ",
|
||||
"sLoadingRecords": "लोड हुँदैछ...",
|
||||
"sProcessing": "प्रगति हुदैंछ ...",
|
||||
"sSearch": "खोजी:",
|
||||
"sUrl": "",
|
||||
"sZeroRecords": "कुनै मिल्ने रेकर्ड फेला परेन",
|
||||
"oPaginate": {
|
||||
"sFirst": "प्रथम",
|
||||
"sPrevious": "पछिल्लो",
|
||||
"sNext": "अघिल्लो",
|
||||
"sLast": "अन्तिम"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": अगाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने",
|
||||
"sSortDescending": ": पछाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Bezig...",
|
||||
"sLengthMenu": "_MENU_ resultaten weergeven",
|
||||
"sZeroRecords": "Geen resultaten gevonden",
|
||||
"sInfo": "_START_ tot _END_ van _TOTAL_ resultaten",
|
||||
"sInfoEmpty": "Geen resultaten om weer te geven",
|
||||
"sInfoFiltered": " (gefilterd uit _MAX_ resultaten)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Zoeken:",
|
||||
"sEmptyTable": "Geen resultaten aanwezig in de tabel",
|
||||
"sInfoThousands": ".",
|
||||
"sLoadingRecords": "Een moment geduld aub - bezig met laden...",
|
||||
"oPaginate": {
|
||||
"sFirst": "Eerste",
|
||||
"sLast": "Laatste",
|
||||
"sNext": "Volgende",
|
||||
"sPrevious": "Vorige"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": activeer om kolom oplopend te sorteren",
|
||||
"sSortDescending": ": activeer om kolom aflopend te sorteren"
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Inga data tilgjengeleg i tabellen",
|
||||
"sInfo": "Syner _START_ til _END_ av _TOTAL_ linjer",
|
||||
"sInfoEmpty": "Syner 0 til 0 av 0 linjer",
|
||||
"sInfoFiltered": "(filtrert frå _MAX_ totalt antal linjer)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": " ",
|
||||
"sLoadingRecords": "Lastar...",
|
||||
"sLengthMenu": "Syn _MENU_ linjer",
|
||||
"sLoadingRecords": "Lastar...",
|
||||
"sProcessing": "Lastar...",
|
||||
"sSearch": "Søk:",
|
||||
"sUrl": "",
|
||||
"sZeroRecords": "Inga linjer treff på søket",
|
||||
"oPaginate": {
|
||||
"sFirst": "Fyrste",
|
||||
"sPrevious": "Forrige",
|
||||
"sNext": "Neste",
|
||||
"sLast": "Siste"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": aktiver for å sortere kolonna stigande",
|
||||
"sSortDescending": ": aktiver for å sortere kolonna synkande"
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"processing": "Przetwarzanie...",
|
||||
"search": "Szukaj:",
|
||||
"lengthMenu": "Pokaż _MENU_ pozycji",
|
||||
"info": "Pozycje od _START_ do _END_ z _TOTAL_ łącznie",
|
||||
"infoEmpty": "Pozycji 0 z 0 dostępnych",
|
||||
"infoFiltered": "(filtrowanie spośród _MAX_ dostępnych pozycji)",
|
||||
"infoPostFix": "",
|
||||
"loadingRecords": "Wczytywanie...",
|
||||
"zeroRecords": "Nie znaleziono pasujących pozycji",
|
||||
"emptyTable": "Brak danych",
|
||||
"paginate": {
|
||||
"first": "Pierwsza",
|
||||
"previous": "Poprzednia",
|
||||
"next": "Następna",
|
||||
"last": "Ostatnia"
|
||||
},
|
||||
"aria": {
|
||||
"sortAscending": ": aktywuj, by posortować kolumnę rosnąco",
|
||||
"sortDescending": ": aktywuj, by posortować kolumnę malejąco"
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Nenhum registro encontrado",
|
||||
"sProcessing": "A processar...",
|
||||
"sLengthMenu": "Mostrar _MENU_ registos",
|
||||
"sZeroRecords": "Não foram encontrados resultados",
|
||||
"sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registos",
|
||||
"sInfoEmpty": "Mostrando de 0 até 0 de 0 registos",
|
||||
"sInfoFiltered": "(filtrado de _MAX_ registos no total)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Procurar:",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "Primeiro",
|
||||
"sPrevious": "Anterior",
|
||||
"sNext": "Seguinte",
|
||||
"sLast": "Último"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": Ordenar colunas de forma ascendente",
|
||||
"sSortDescending": ": Ordenar colunas de forma descendente"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Procesează...",
|
||||
"sLengthMenu": "Afișează _MENU_ înregistrări pe pagină",
|
||||
"sZeroRecords": "Nu am găsit nimic - ne pare rău",
|
||||
"sInfo": "Afișate de la _START_ la _END_ din _TOTAL_ înregistrări",
|
||||
"sInfoEmpty": "Afișate de la 0 la 0 din 0 înregistrări",
|
||||
"sInfoFiltered": "(filtrate dintr-un total de _MAX_ înregistrări)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Caută:",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "Prima",
|
||||
"sPrevious": "Precedenta",
|
||||
"sNext": "Următoarea",
|
||||
"sLast": "Ultima"
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"processing": "Подождите...",
|
||||
"search": "Поиск:",
|
||||
"lengthMenu": "Показать _MENU_ записей",
|
||||
"info": "Записи с _START_ до _END_ из _TOTAL_ записей",
|
||||
"infoEmpty": "Записи с 0 до 0 из 0 записей",
|
||||
"infoFiltered": "(отфильтровано из _MAX_ записей)",
|
||||
"infoPostFix": "",
|
||||
"loadingRecords": "Загрузка записей...",
|
||||
"zeroRecords": "Записи отсутствуют.",
|
||||
"emptyTable": "В таблице отсутствуют данные",
|
||||
"paginate": {
|
||||
"first": "Первая",
|
||||
"previous": "Предыдущая",
|
||||
"next": "Следующая",
|
||||
"last": "Последняя"
|
||||
},
|
||||
"aria": {
|
||||
"sortAscending": ": активировать для сортировки столбца по возрастанию",
|
||||
"sortDescending": ": активировать для сортировки столбца по убыванию"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user