mirror of
https://gitlab.com/KevinRoebert/ClearUrls
synced 2025-12-17 22:55:36 +07:00
Compare commits
478 Commits
v1.3.3.16_
...
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 | ||
|
|
9537b181b8 | ||
|
|
291118d185 | ||
|
|
b75235f306 | ||
|
|
f4ad457047 | ||
|
|
0f1ade94a2 | ||
|
|
cd988ed24e | ||
|
|
5da65aed98 | ||
|
|
15daf50c71 | ||
|
|
dbe7c603f9 | ||
|
|
53de1eae53 | ||
|
|
a3d3818766 | ||
|
|
6c113d4ebd | ||
|
|
830cc055db | ||
|
|
ccd40c7df3 | ||
|
|
1a057e8494 | ||
|
|
2506dc6ebc | ||
|
|
44b0c043f8 | ||
|
|
f9289d9216 | ||
|
|
4d9e066781 | ||
|
|
fe8de86c73 | ||
|
|
89963b0d6d | ||
|
|
e3191eecb1 | ||
|
|
5c3b1f4880 | ||
|
|
a78256e52d | ||
|
|
bb516b81d8 | ||
|
|
a35ef95d66 | ||
|
|
836cfc74da | ||
|
|
4eddd4e594 | ||
|
|
4670cacc7d | ||
|
|
484b52319c | ||
|
|
ad404ae6f7 | ||
|
|
531ade1b05 | ||
|
|
f53ea156c0 | ||
|
|
3e2e75d38b | ||
|
|
c9f2deab11 | ||
|
|
8ca852476d | ||
|
|
1d6d36eb8c | ||
|
|
a8a5f7e311 | ||
|
|
929aa53aa1 | ||
|
|
aa2344b4cc | ||
|
|
7999077671 | ||
|
|
75275bad7e | ||
|
|
54d72e7865 | ||
|
|
61d285be99 | ||
|
|
217393ded8 | ||
|
|
91d46a7b70 | ||
|
|
ae139af5ea | ||
|
|
a41deb20d8 | ||
|
|
a76ecb17b3 | ||
|
|
dfebef07ac | ||
|
|
1b6cc37bdd | ||
|
|
cfd3bf5f43 | ||
|
|
a91b79aa18 | ||
|
|
4fc4018859 | ||
|
|
e87aa9d027 | ||
|
|
9b7dd7f9cb | ||
|
|
8b8ac33ed2 | ||
|
|
a67abc6bc6 | ||
|
|
c53a36999c | ||
|
|
1caeeb29ab | ||
|
|
0a948968b3 | ||
|
|
304cbe2e6b | ||
|
|
ed61dbdbaf | ||
|
|
2d1d81810e | ||
|
|
c9f3b3610d | ||
|
|
932511fbf8 | ||
|
|
28af5a8630 | ||
|
|
36300bf1c9 | ||
|
|
4f86852312 | ||
|
|
03e0580b20 | ||
|
|
869cd63e64 | ||
|
|
f69ae79adb | ||
|
|
cd6bb5d6f5 | ||
|
|
f02d36c6a7 | ||
|
|
f46daa7205 | ||
|
|
cc358744f2 | ||
|
|
df4e461102 | ||
|
|
9a6adad225 | ||
|
|
1e15c8a265 | ||
|
|
d87d88250d | ||
|
|
1175d0ff9d | ||
|
|
bfabe4ca98 | ||
|
|
80af6f6fea | ||
|
|
43a510efe7 | ||
|
|
2a158f6dd7 | ||
|
|
8f70a49bb2 | ||
|
|
6b2e79669c | ||
|
|
8231ade8a3 | ||
|
|
239ee17697 | ||
|
|
805ef75f7f | ||
|
|
4367f13f03 | ||
|
|
b9931f0d63 | ||
|
|
b87eaa4eea | ||
|
|
9c638c52f9 | ||
|
|
3480dd71c5 | ||
|
|
110fd19a07 | ||
|
|
3cc2d6d1a8 | ||
|
|
18cc61de0b | ||
|
|
6395335428 | ||
|
|
f2034a9b7e | ||
|
|
15ad222706 | ||
|
|
688026c408 | ||
|
|
8884674e36 | ||
|
|
81bc71de5e | ||
|
|
03cdcbb38a | ||
|
|
078b51de98 | ||
|
|
c39ead0a6d | ||
|
|
a57591cd0b | ||
|
|
8bee5b99f1 | ||
|
|
4321771762 | ||
|
|
32b525363a | ||
|
|
c6f66ec646 | ||
|
|
f139e628ab | ||
|
|
23e7fa4064 | ||
|
|
99ba98f909 | ||
|
|
126dc02e07 | ||
|
|
a8334e60fa | ||
|
|
0b3b1f7498 | ||
|
|
3fae440364 | ||
|
|
6b9f9a5ca1 | ||
|
|
2266cbb434 | ||
|
|
11abcf9783 | ||
|
|
d2d4b25f0b | ||
|
|
57de51eb53 | ||
|
|
ca6d0e037d | ||
|
|
f3c86db0b9 | ||
|
|
c7d0c63f79 | ||
|
|
06b84d7490 | ||
|
|
8c84fa865c | ||
|
|
30a8ac5c47 | ||
|
|
1754370ee5 | ||
|
|
bf6ef0049a | ||
|
|
bba11abc92 | ||
|
|
0dd713cbab | ||
|
|
e9cd5af088 | ||
|
|
2bf4a1e806 | ||
|
|
228015e640 | ||
|
|
7087935918 | ||
|
|
a4312f005c | ||
|
|
ed185168d5 | ||
|
|
76addcf18c | ||
|
|
7351f5b559 | ||
|
|
03c8c164fc | ||
|
|
71783f568e | ||
|
|
037ef829b4 | ||
|
|
ed95ed92a6 |
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
|
||||
115
.gitlab-ci.yml
Normal file
115
.gitlab-ci.yml
Normal file
@@ -0,0 +1,115 @@
|
||||
image: debian:latest
|
||||
|
||||
before_script:
|
||||
- export DEBIAN_FRONTEND= noninteractive
|
||||
- apt-get update -y
|
||||
- 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
|
||||
|
||||
# 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:
|
||||
- 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:
|
||||
- coverage
|
||||
reports:
|
||||
junit: junit.xml
|
||||
expire_in: 30 days
|
||||
|
||||
bundle addon:
|
||||
stage: build
|
||||
script:
|
||||
- zip ClearURLs -r -FS distribution/*
|
||||
only:
|
||||
- master
|
||||
artifacts:
|
||||
paths:
|
||||
- ClearURLs.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,20 +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: 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
|
||||
}
|
||||
616
CHANGELOG.md
Normal file
616
CHANGELOG.md
Normal file
@@ -0,0 +1,616 @@
|
||||
# Changelog
|
||||
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
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added new setting to data.min.json to set if redirects should be enforced via a "tabs.update" ([#221](https://gitlab.com/KevinRoebert/ClearUrls/issues/221))
|
||||
- Added [#220](https://gitlab.com/KevinRoebert/ClearUrls/issues/220)
|
||||
- Added [#218](https://gitlab.com/KevinRoebert/ClearUrls/issues/218)
|
||||
|
||||
### Fixed
|
||||
- Fixed YouTube ad redirection bug ([#221](https://gitlab.com/KevinRoebert/ClearUrls/issues/221))
|
||||
- Fixed [#217](https://gitlab.com/KevinRoebert/ClearUrls/issues/217)
|
||||
|
||||
## [1.7.0] - 2019-07-30
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added support for raw rules to cleaning also parts from URL-path
|
||||
|
||||
### Fixed
|
||||
- Fixed misspelling in german translation
|
||||
|
||||
## [1.6.9] - 2019-07-29
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- Fixed error in fields RegExp
|
||||
|
||||
## [1.6.8] - 2019-07-28
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Improvements on check for android systems ([#206](https://gitlab.com/KevinRoebert/ClearUrls/issues/206))
|
||||
|
||||
### Fixed
|
||||
- [#205](https://gitlab.com/KevinRoebert/ClearUrls/issues/205)
|
||||
|
||||
## [1.6.7] - 2019-07-25
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- [#175](https://gitlab.com/KevinRoebert/ClearUrls/issues/175) by [@yukulele](https://gitlab.com/yukulele)
|
||||
- [#196](https://gitlab.com/KevinRoebert/ClearUrls/issues/196)
|
||||
- [#204](https://gitlab.com/KevinRoebert/ClearUrls/issues/204)
|
||||
|
||||
## [1.6.6] - 2019-06-14
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- [#171](https://gitlab.com/KevinRoebert/ClearUrls/issues/171)
|
||||
- [#195](https://gitlab.com/KevinRoebert/ClearUrls/issues/195)
|
||||
|
||||
## [1.6.5] - 2019-06-12
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added support for fragment cleaning
|
||||
|
||||
### Fixed
|
||||
- [#171](https://gitlab.com/KevinRoebert/ClearUrls/issues/171)
|
||||
- [#191](https://gitlab.com/KevinRoebert/ClearUrls/issues/191)
|
||||
- [#192](https://gitlab.com/KevinRoebert/ClearUrls/issues/192)
|
||||
- [#193](https://gitlab.com/KevinRoebert/ClearUrls/issues/193)
|
||||
- [#194](https://gitlab.com/KevinRoebert/ClearUrls/issues/194)
|
||||
|
||||
## [1.6.4] - 2019-05-07
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added Polish translation by [@alekksander](https://gitlab.com/alekksander)
|
||||
|
||||
## [1.6.3] - 2019-05-06
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added redirection from [#181](https://gitlab.com/KevinRoebert/ClearUrls/issues/181)
|
||||
|
||||
### Changed
|
||||
- Update french translation by [@hydrargyrum](https://gitlab.com/hydrargyrum)
|
||||
- Update chinese translation
|
||||
|
||||
## [1.6.2] - 2019-04-26
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added rules from [#172](https://gitlab.com/KevinRoebert/ClearUrls/issues/172)
|
||||
- Added rules from [#176](https://gitlab.com/KevinRoebert/ClearUrls/issues/176)
|
||||
- Added rules from [#178](https://gitlab.com/KevinRoebert/ClearUrls/issues/178)
|
||||
|
||||
### Fixed
|
||||
- [#170](https://gitlab.com/KevinRoebert/ClearUrls/issues/170)
|
||||
- [#162](https://gitlab.com/KevinRoebert/ClearUrls/issues/162)
|
||||
- [#163](https://gitlab.com/KevinRoebert/ClearUrls/issues/163)
|
||||
|
||||
## [[1.6.1] - 2019-04-14](https://gitlab.com/KevinRoebert/ClearUrls/commit/a8a5f7e311300ae7f186d4b581e805bdf3f9f5d9)
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Chinese translations by [@yipinghuang](https://gitlab.com/yipinghuang)
|
||||
- French translations
|
||||
|
||||
## [1.6] - 2019-04-11
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 28
|
||||
|
||||
### Added
|
||||
- Added listener to the browser history to prevent tracking with the [history.pushState method](https://developer.mozilla.org/en-US/docs/Web/API/History_API)
|
||||
- Added webNavigation and tabs permissions, for the new feature
|
||||
- Added switches in settings to enable and disable the context menu entry and the history listener
|
||||
- Added tool to clean URLs, that was pasted into a textbox
|
||||
- Added icon for new tool to clean URLs
|
||||
|
||||
### Fixed
|
||||
- [#40](https://gitlab.com/KevinRoebert/ClearUrls/issues/40), see also https://curl.kevinroebert.de
|
||||
- [#103](https://gitlab.com/KevinRoebert/ClearUrls/issues/103), see also https://curl.kevinroebert.de
|
||||
|
||||
### Changed
|
||||
- Changed clipboard-helper.js path to be absolute to prevent problems
|
||||
- Changed rewrite of old GitHub links to the new data.min.json and rules.min.hash
|
||||
- Config icon is now bigger and above the config label
|
||||
- Update Traditional Chinese Translation by [@yipinghuang](https://gitlab.com/yipinghuang)
|
||||
|
||||
## [[1.5.8] - 2019-04-10](https://gitlab.com/KevinRoebert/ClearUrls/commit/1b6cc37bdd23011d006bf7ef6824463e7c96067a)
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 28
|
||||
|
||||
### Added
|
||||
- Added context menu entry, to clean and copy links into clipboard
|
||||
|
||||
## [[1.5.4] - 2019-04-08](https://gitlab.com/KevinRoebert/ClearUrls/commit/0a948968b309f418ec4175dd23fedb0b88c97086)
|
||||
|
||||
### Fixed
|
||||
- Changed icon format from svg into png to support Chrome
|
||||
|
||||
## [[1.5.3] - 2019-04-03](https://gitlab.com/KevinRoebert/ClearUrls/commit/304cbe2e6bf3756f4bcb675ec4b8b7403158ea5c)
|
||||
|
||||
### Removed
|
||||
- Removed the *tab permission*, because it is not required for all used methods on the tabs api
|
||||
|
||||
## [[1.5.2] - 2019-04-01](https://gitlab.com/KevinRoebert/ClearUrls/commit/03e0580b202fc0a77f442f284dd5470cddbbd5c0)
|
||||
|
||||
### Added
|
||||
- Added new screenshots of the ClearURLs popup
|
||||
|
||||
### Changed
|
||||
- Replaced *webextension-polyfill* v.0.3.1 with the new version v0.4.0
|
||||
- Updated the Chrome version of ClearURLs to the newest version
|
||||
- Changed ClearURLs to support both Firefox and Chrome, without generating every time to different source codes
|
||||
- Changed the GitLab-CI to build the Chrome version automatically from the Firefox version
|
||||
- Replaced the old screenshots in the README with new ones
|
||||
|
||||
### Removed
|
||||
- Removed the old ClearURLs Chrome version
|
||||
|
||||
## [[1.5.1.6a] - 2019-03-27](https://gitlab.com/KevinRoebert/ClearUrls/commit/869cd63e645e2cacaf26017366fa4eaa3fb97411)
|
||||
|
||||
### Fixed
|
||||
- Added own flat function and a function that removes empty fields from arrays to support Waterfox
|
||||
|
||||
## [[1.5.1.5a] - 2019-03-18](https://gitlab.com/KevinRoebert/ClearUrls/commit/d87d88250dccd07570c10b37f41054ed44a0ee97)
|
||||
|
||||
### Fixed
|
||||
- Bugfix to support Android devices again
|
||||
|
||||
## [[1.5.1a] - 2019-03-14](https://gitlab.com/KevinRoebert/ClearUrls/commit/80af6f6feac086490f841adad5fe769d71be86f8)
|
||||
|
||||
### Added
|
||||
- Added *unlimitedStorage* permissions to prevent storage restrictions (which will come in future versions of firefox) and to have enough space for user generated rules
|
||||
|
||||
### Changed
|
||||
- Changed the regex interpretation for better performance
|
||||
|
||||
## [[1.5a] - 2019-03-14](https://gitlab.com/KevinRoebert/ClearUrls/commit/80af6f6feac086490f841adad5fe769d71be86f8)
|
||||
|
||||
### Added
|
||||
- New rules file *data.min.json* that is a minimized version of the old one
|
||||
- New technique to get data from the local storage
|
||||
- The command pattern has been implemented so that ClearURLs also works in private mode
|
||||
- Automatically generating hash for *data.min.json* file with GitLab-CI
|
||||
- Add start and end delimiters to rules
|
||||
- Preparations for costume rules
|
||||
|
||||
### Changed
|
||||
- Storage improvements, better performance
|
||||
- Splitted core file into multiple pieces for better overview
|
||||
- Minimize rules length
|
||||
|
||||
### Fixed
|
||||
- [#124](https://gitlab.com/KevinRoebert/ClearUrls/issues/124)
|
||||
|
||||
### Removed
|
||||
- Warning in private mode (no longer necessary)
|
||||
- Removed *Report URL* function
|
||||
|
||||
## [[1.3.4.2] - 2019-02-01](https://gitlab.com/KevinRoebert/ClearUrls/commit/23e7fa406436c40c561c1e0108c5e9c8c7e9e0d8)
|
||||
|
||||
### Changed
|
||||
- Updated Ukrainian translation from [@a-polivanchuk](https://gitlab.com/a-polivanchuk)
|
||||
|
||||
## [[1.3.4.0] - 2018-10-08](https://gitlab.com/KevinRoebert/ClearUrls/commit/06b84d749084997e3d759ebd916772b446adfe9c)
|
||||
|
||||
## Added
|
||||
- Added more request types, as proposed in [#106](https://gitlab.com/KevinRoebert/ClearUrls/issues/106)
|
||||
|
||||
## Updated
|
||||
- Updated french translation
|
||||
@@ -1,892 +0,0 @@
|
||||
/*
|
||||
* ##################################################################
|
||||
* # Fetch Rules & Exception from URL #
|
||||
* ##################################################################
|
||||
*/
|
||||
var providers = [];
|
||||
var prvKeys = [];
|
||||
var badges = [];
|
||||
var tabid = 0;
|
||||
var siteBlockedAlert = 'javascript:void(0)';
|
||||
var dataHash;
|
||||
var localDataHash;
|
||||
var os;
|
||||
var currentURL;
|
||||
|
||||
var storage = [];
|
||||
|
||||
getDataFromDisk();
|
||||
|
||||
function start(items)
|
||||
{
|
||||
initStorage(items);
|
||||
|
||||
/**
|
||||
* Save OS Version
|
||||
*/
|
||||
chrome.runtime.getPlatformInfo(function(info) {
|
||||
|
||||
os = info.os;
|
||||
|
||||
|
||||
/**
|
||||
* 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));
|
||||
|
||||
//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 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();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
dataHash = responseTextHash;
|
||||
|
||||
if($.trim(dataHash) !== $.trim(localDataHash))
|
||||
{
|
||||
fetchFromURL();
|
||||
}
|
||||
else {
|
||||
toObject(storage.ClearURLsData);
|
||||
storeHashStatus(1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
dataHash = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch the Rules & Exception from github.
|
||||
*/
|
||||
function fetchFromURL()
|
||||
{
|
||||
fetch(storage.ruleURL)
|
||||
.then(checkResponse);
|
||||
|
||||
function checkResponse(response)
|
||||
{
|
||||
var responseText = response.clone().text().then(function(responseText){
|
||||
if(response.ok)
|
||||
{
|
||||
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
|
||||
*/
|
||||
function Provider(_name,_completeProvider = false){
|
||||
var name = _name;
|
||||
var urlPattern;
|
||||
var rules = [];
|
||||
var exceptions = [];
|
||||
var canceling = _completeProvider;
|
||||
var redirections = [];
|
||||
|
||||
if(_completeProvider){
|
||||
rules.push(".*");
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 !(this.matchException(url)) && urlPattern.test(url);
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a rule to the rule array.
|
||||
*
|
||||
* @param String rule RegExp as string
|
||||
*/
|
||||
this.addRule = function(rule) {
|
||||
rules.push(rule);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return all rules as an array.
|
||||
*
|
||||
* @return Array RegExp strings
|
||||
*/
|
||||
this.getRules = function() {
|
||||
return rules;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a exception to the exceptions array.
|
||||
*
|
||||
* @param String exception RegExp as string
|
||||
*/
|
||||
this.addException = function(exception) {
|
||||
exceptions.push(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 i = 0; i < exceptions.length; i++) {
|
||||
if(result) { break; }
|
||||
|
||||
exception_regex = new RegExp(exceptions[i], "i");
|
||||
result = exception_regex.test(url);
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a redirection to the redirections array.
|
||||
*
|
||||
* @param String redirection RegExp as string
|
||||
*/
|
||||
this.addRedirection = function(redirection) {
|
||||
redirections.push(redirection);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return all redirection.
|
||||
*
|
||||
* @return url
|
||||
*/
|
||||
this.getRedirection = function(url) {
|
||||
var re = null;
|
||||
|
||||
for(var i = 0; i < redirections.length; i++)
|
||||
{
|
||||
result = (url.match(new RegExp(redirections[i], "i")));
|
||||
|
||||
if (result && result.length > 0)
|
||||
{
|
||||
re = (new RegExp(redirections[i], "i")).exec(url)[1];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return re;
|
||||
};
|
||||
}
|
||||
// ##################################################################
|
||||
|
||||
/**
|
||||
* Helper function which remove the tracking fields
|
||||
* for each provider given as parameter.
|
||||
*
|
||||
* @param {Provider} provider Provider-Object
|
||||
* @param {webRequest} request webRequest-Object
|
||||
* @return {Array} Array with changes and url fields
|
||||
*/
|
||||
function removeFieldsFormURL(provider, request)
|
||||
{
|
||||
var url = request.url;
|
||||
var domain = url.replace(new RegExp("\\?.*", "i"), "");
|
||||
var fields = "";
|
||||
var rules = provider.getRules();
|
||||
var changes = false;
|
||||
var cancel = false;
|
||||
|
||||
/*
|
||||
* 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(request.url, re, translate('log_redirect'));
|
||||
|
||||
return {
|
||||
"redirect": true,
|
||||
"url": url
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Only test for matches, if there are fields that can be cleaned.
|
||||
*/
|
||||
if(existsFields(url))
|
||||
{
|
||||
/**
|
||||
* It must be non-greedy, because by default .* will match
|
||||
* all ? chars. So the replace function delete everything
|
||||
* before the last ?. With adding a ? on the quantifier *,
|
||||
* we fixed this problem.
|
||||
*/
|
||||
fields = url.replace(new RegExp(".*?\\?", "i"), "");
|
||||
|
||||
for (var i = 0; i < rules.length; i++) {
|
||||
var beforReplace = fields;
|
||||
|
||||
fields = fields.replace(new RegExp(rules[i], "i"), "");
|
||||
|
||||
if(beforReplace != fields)
|
||||
{
|
||||
//Log the action
|
||||
pushToLog(domain+"?"+beforReplace, domain+"?"+fields, rules[i]);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
url = domain+"?"+fields;
|
||||
}
|
||||
else {
|
||||
if(domain != url)
|
||||
{
|
||||
url = domain;
|
||||
changes = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(provider.isCaneling()){
|
||||
pushToLog(request.url, request.url, 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
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of parameters query strings.
|
||||
* @param {String} url URL as String
|
||||
* @return {int} Number of Parameters
|
||||
*/
|
||||
function countFields(url)
|
||||
{
|
||||
var matches = (url.match(/[^\/|\?|&]+=[^\/|\?|&]+/gi) || []);
|
||||
var count = matches.length;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
/*
|
||||
* Expand urls and bypass tracking.
|
||||
* Cancel the active request.
|
||||
*/
|
||||
if(result.redirect)
|
||||
{
|
||||
browser.tabs.update(request.tabId, {url: result.url});
|
||||
return {cancel: true};
|
||||
}
|
||||
|
||||
/*
|
||||
* 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 {};
|
||||
}
|
||||
|
||||
/**
|
||||
* 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()
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Save every minute the temporary data to the disk.
|
||||
*/
|
||||
setInterval(saveOnExit, 60000);
|
||||
|
||||
/**
|
||||
* 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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the icon.
|
||||
*/
|
||||
function changeIcon()
|
||||
{
|
||||
if(storage.globalStatus){
|
||||
browser.browserAction.setIcon({path: "img/clearurls.svg"});
|
||||
} else{
|
||||
browser.browserAction.setIcon({path: "img/clearurls_gray.svg"});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if it is an android device.
|
||||
* @return bool
|
||||
*/
|
||||
function checkOSAndroid()
|
||||
{
|
||||
if(os == "android")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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().then(start, error);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value under the key.
|
||||
* @param {String} key
|
||||
* @return {Object}
|
||||
*/
|
||||
function getData(key)
|
||||
{
|
||||
return storage[key];
|
||||
}
|
||||
|
||||
/**
|
||||
* 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] = replaceOldGithubURLs(value);
|
||||
break;
|
||||
case "types":
|
||||
storage[key] = value.split(',');
|
||||
break;
|
||||
default:
|
||||
storage[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write error on console.
|
||||
*/
|
||||
function error()
|
||||
{
|
||||
console.log(translate('core_error'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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/raw/master/data/rules.hash";
|
||||
storage.ruleURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json";
|
||||
storage.types = ["main_frame", "sub_frame", "xmlhttprequest"];
|
||||
storage.reportServer = "https://clearurls.xn--rb-fka.it";
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads the extension.
|
||||
*/
|
||||
function reload()
|
||||
{
|
||||
browser.runtime.reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the old GitHub URLs with the
|
||||
* new GitLab URLs.
|
||||
*/
|
||||
function replaceOldGithubURLs(url)
|
||||
{
|
||||
switch (url) {
|
||||
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/rules.hash?flush_cache=true":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/rules.hash";
|
||||
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/data.json?flush_cache=true":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json";
|
||||
default:
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an object is empty.
|
||||
* @param {Object} obj
|
||||
* @return {Boolean}
|
||||
*/
|
||||
function isEmpty(obj)
|
||||
{
|
||||
return (Object.getOwnPropertyNames(obj).length === 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current URL.
|
||||
* @return {String} [description]
|
||||
*/
|
||||
function getCurrentURL()
|
||||
{
|
||||
return currentURL;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
body {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.small-version {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.navbar-header {
|
||||
margin-top: 0;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.col-sm-1 {
|
||||
margin-top: -10px;
|
||||
}
|
||||
|
||||
#body-popup {
|
||||
width: 200px;
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "ClearURLs",
|
||||
"version": "1.3.3.14",
|
||||
"author": "Kevin R.",
|
||||
"description": "Remove tracking elements form URLs.",
|
||||
"homepage_url": "https://gitlab.com/KevinRoebert/ClearUrls",
|
||||
"default_locale": "en",
|
||||
"icons": {
|
||||
"16": "img/clearurls.png",
|
||||
"19": "img/clearurls.png",
|
||||
"20": "img/clearurls.png",
|
||||
"24": "img/clearurls.png",
|
||||
"30": "img/clearurls.png",
|
||||
"32": "img/clearurls.png",
|
||||
"38": "img/clearurls.png",
|
||||
"48": "img/clearurls.png",
|
||||
"64": "img/clearurls.png",
|
||||
"96": "img/clearurls.png",
|
||||
"128": "img/clearurls.png"
|
||||
|
||||
},
|
||||
"browser_action": {
|
||||
"browser_style": true,
|
||||
"default_icon": {
|
||||
"16": "img/clearurls.png",
|
||||
"19": "img/clearurls.png",
|
||||
"20": "img/clearurls.png",
|
||||
"24": "img/clearurls.png",
|
||||
"30": "img/clearurls.png",
|
||||
"32": "img/clearurls.png",
|
||||
"38": "img/clearurls.png",
|
||||
"48": "img/clearurls.png",
|
||||
"64": "img/clearurls.png",
|
||||
"96": "img/clearurls.png",
|
||||
"128": "img/clearurls.png"
|
||||
|
||||
},
|
||||
"default_title": "ClearURLs Add-on",
|
||||
"default_popup": "html/popup.html"
|
||||
},
|
||||
"permissions": [
|
||||
"*://*/*",
|
||||
"<all_urls>",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"storage",
|
||||
"tabs"
|
||||
],
|
||||
"background": {
|
||||
"scripts": [
|
||||
"browser-polyfill.js",
|
||||
"external_js/jquery-3.2.1.min.js",
|
||||
"external_js/sha256.jquery.js",
|
||||
"clearurls.js"
|
||||
]
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["<all_urls>"],
|
||||
"js": [
|
||||
"browser-polyfill.js"
|
||||
]
|
||||
}
|
||||
],
|
||||
"options_ui": {
|
||||
"page": "html/settings.html"
|
||||
}
|
||||
}
|
||||
165
LICENSE
Normal file
165
LICENSE
Normal file
@@ -0,0 +1,165 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
118
LICENSE.md
118
LICENSE.md
@@ -1,118 +0,0 @@
|
||||
Qabel Public License Version 0.2 (QaPL v0.2) (c) Qabel GmbH, Hannover
|
||||
=====================================================================
|
||||
|
||||
|
||||
You may copy and distribute verbatim copies of this license agreement. You may also use content from it for your own license agreement. Unless not expressly stated, you may not use the name Qabel Public License ("QaPL") in connection with any license agreement that is not a verbatim copy of This License.
|
||||
|
||||
|
||||
PREAMBLE
|
||||
--------
|
||||
|
||||
Today Software is the undisputed centerpiece of the information society and access to software and information society services became a public commodity. Yet traditional software is made available in object code only, where the software user is not entitled to study or even modify the source code. We believe that this is a salient shortcoming in particular when it comes to software which is designed to help the user protect his privacy in a virtual world. A proprietary software developer who refuses to unveil the source code of its security software, requires users to place a great deal of faith into the computer program and its ability to protect personal data. Not only because trust in conventional software security was all too often disappointed, we have decided to replace "trust" with "transparency" and everybody is welcome to study, modify and improve the source code of this software. Furthermore, and although we believe in the idea of free software, we have decided to make two important exceptions, to wit, QaPL-licensed software should neither be used commercially without our consent, nor for military, intelligence or related purposes. By that we hope to make it a powerful, self sustaining and constantly evolving tool that helps to reinforce data security and the protection of personal data. However, it shall be up to the user to decide whether he finds this software fit for the purpose.
|
||||
|
||||
|
||||
[0] Definitions
|
||||
---------------
|
||||
|
||||
[a] "Application" means any software that may be, directly or indirectly, linked to the Library by using its interface.
|
||||
|
||||
[b] "Commercial use" means utilizing the Library or other software licensed under the QaPL or parts thereof to, directly or indirectly, establish a source of income, including but not limited to, embedding the Library or other software licensed under the QaPL or parts thereof into Proprietary Software, executable software, or consulting services utilizing the Library or other software licensed under the QaPL or parts thereof. It is not considered Commercial Use if the Licensee, including a commercial enterprise, uses the Library or other software licensed under the QaPL or parts thereof for academic, study and/or research purposes, or if a software project is solely based on donations.
|
||||
|
||||
[c] "Original Copyright Holder" means Kevin Röbert.
|
||||
|
||||
[d] "Contributor" means any person or entity that creates or contributes to the creation of modifications to the Library or other software licensed under the QaPL.
|
||||
|
||||
[e] "Library" means a collection of software functions, subroutines and/or data prepared so as to be conveniently linked with Applications (which use some of those functions and data) to form executables including associated documentation.
|
||||
|
||||
[f] "Licensee" means any individual or legal entity exercising rights under the QaPL.
|
||||
|
||||
[g] "Make Publicly Available" refers to the public distribution of the Library or other software licensed under the QaPL in an immaterial form, including but not limited to, making it available for download in data networks and Software as a Service (SaaS).
|
||||
|
||||
[h] "Modification" means any change to the Library or other software licensed under the QaPL in a way that would, under the applicable law, require the copyright holder's permission, including but not limited to the extension, deletion, alteration, translation into other programming languages or combination with other software.
|
||||
|
||||
[i] "Modification of the Library" means the Library or its derivatives containing the Library as a whole or in parts and Applications or any other software that are linked to the Library.
|
||||
|
||||
[j] "Object Code" means any machine-readable form of the Library or other software licensed under the QaPL, excluding the Source Code.
|
||||
|
||||
[k] "Proprietary Software" means software that is not licensed under an open source license as defined by the open source definition (Version 1.9).
|
||||
|
||||
[l] "Source Code" means the preferred form of the Library or other software licensed under the QaPL for making Modifications to it.
|
||||
|
||||
[m] "This License" means the Qabel Public License regardless of its version.
|
||||
|
||||
|
||||
[1] Scope of Application
|
||||
-------------------------------
|
||||
|
||||
The QaPL applies to any software library or other software that contains a notice placed by the copyright holder or another authorised party stating that the Library or other software is governed by the
|
||||
terms of the QaPL. This license shall also apply to remote network interaction.
|
||||
|
||||
|
||||
[2] License Grant and Conditions
|
||||
------------------------------------------
|
||||
|
||||
[a] As far as This License is not restricted according to sec. [3], Licensee may free of charge and in any medium modify, reproduce, distribute, and Make Publicly Available the Library or other software licensed under the QaPL.
|
||||
|
||||
[b] Licensee may distribute, and Make Publicly Available unmodified versions, of the Library or other software licensed under the QaPL provided that the following condition is met: A conspicuous reference to the text of This License
|
||||
that allows any recipient to easily access the text of This License must be provided.
|
||||
|
||||
[c] Licensee may distribute, and Make Publicly Available modified versions, of the Library or other software licensed under the QaPL provided that, in addition to the conditions stated in sec. [2][b], the following conditions are met: The files modified must bear notices which state that the files were changed, the date of change and the author of the Modification. The Library or other software licensed under the QaPL must in its entirety be licensed free of charge to all third parties under the terms of This License.
|
||||
|
||||
[d] If you wish to distribute or Make the Library or other software licensed under the QaPL, modified or unmodified, Publicly Available in Object Code form only, you must in addition to the forgoing make the complete Source Code publicly available or ensure that the Original Copyright Holder does so and make a conspicuous reference to the internet address from which the Source Code may be downloaded.
|
||||
|
||||
|
||||
[3] Restrictions
|
||||
--------------------
|
||||
|
||||
[a] No license is granted by the Original Copyright Holder for the Commercial Use of the Library or other software licensed under the QaPL. In particular, no license is granted for linking Applications to the Library which shall be used commercially. If you would like to use the Library or other software licensed under the QaPL for commercial purposes or link to an Application that shall be used commercially, including selling an Application that shall be linked to the Library or other software licensed under the QaPL, please inquire with the Original Copyright Holder.
|
||||
|
||||
[b] No license is granted by the Original Copyright Holder for military, intelligence or related purposes, including but not limited to intelligence and military research.
|
||||
|
||||
|
||||
[4] Contributor's License Grant
|
||||
----------------------------------------
|
||||
|
||||
[a] A Contributor, who distributes or makes publicly available a Modification, hereby grants the Original Copyright Holder a perpetual, irrevocable, worldwide, free of charge, royalty-free, non-exclusive, unrestricted license that may be subject to third party property claims, to use, reproduce, modify, display, perform, sublicense, distribute, Make Publicly Available, commercially exploit and exercise all ownership rights in the Contributors contribution. Contributor hereby agrees that he will not assert any moral rights in his contribution against the Original Copyright Holder.
|
||||
|
||||
[b] A contributor, who distributes or makes publicly available a Modification, hereby grants to the Original Copyright Holder a perpetual, worldwide, non-exclusive, free-of-charge, royalty-free patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Library or other software licensed under the QaPL. Where such license applies it shall only apply to those patent claims licensable by the Contributor that are necessarily infringed by their contributions alone or by combination of their contributions with the Library or other software licensed under the QaPL with which such contribution was combined.
|
||||
|
||||
[c] Contributor represents and warrants that his contribution is his own original creation and to the best of his knowledge he can legally grant the rights in his contribution set out in This License and, where applicable, is authorised by his employer and that the Original Copyright Holder exercising the rights granted under this license does, to the best of the Contributors knowledge, not infringe any third party rights. Contributor further represents that he is not aware of any claims, suits or court actions in relation to his contribution. Contributor agrees that he will immediately notify the Original Copyright Holder if he becomes aware of any third party claims and, if the Contributor after having submitted or otherwise distributed his contribution, becomes aware of a third party claim in relation to his contribution, shall promptly take all reasonable measures to mitigate damages resulting from the infringement of third party claims, including but not limited to informing those who may have received software containing the contribution.
|
||||
|
||||
|
||||
[5] Conclusion of Contract
|
||||
----------------------------------
|
||||
|
||||
[a] This License constitutes the offer to conclude a contract to use the Library or other software licensed under the QaPL in compliance with the conditions of This License. Acceptance may be declared by exercising the right granted under sec. [2] of This License.
|
||||
|
||||
[b] All Licensees obtain the rights granted by This License directly from the Original Copyright Holder. Without having to accept This License the Library or other software may still be used in accordance with the applicable statutory provisions.
|
||||
|
||||
|
||||
[6] Termination
|
||||
--------------------
|
||||
|
||||
The rights granted under This License will terminate
|
||||
automatically if the Licensee fails to comply with its terms.
|
||||
|
||||
|
||||
[7] Warranty and Liability
|
||||
---------------------------------
|
||||
|
||||
[a] The copyright holders are not liable for contradictory third-party rights, unless they were aware of such rights without informing the Licensee.
|
||||
|
||||
[b] Liability for damages arising out of the use or inability to use the Library or other software licensed under the QaPL, including but not limited to software failure, data loss, data being rendered inaccurate, a failure of the software to operate with any other program and any other defects in the Library or other software licensed under the QaPL, shall be governed by separate agreements, or, if no such agreement exists, by the applicable statutory provisions.
|
||||
|
||||
|
||||
[8] License Updates
|
||||
-------------------------
|
||||
|
||||
Qabel GmbH or its legal successors may, from time to time, revise and update the QaPL in order to address new developments and concerns. These revisions and updates will reflect the spirit of the current license version and will not impose on any Licensee or copyright holder additional obligations. QaPL license updates shall replace all older license versions in existing agreements. This does not apply to original copyright holders other than Qabel GmbH, who have chosen to submit their program to the QaPL, unless they have designated their program as licensed under "QaPL 0.2 or any later version".
|
||||
|
||||
|
||||
[9] Miscellaneous
|
||||
----------------------
|
||||
|
||||
[a] This License shall be governed by German Law. The application of the UN Convention on the International Sale of Goods (CISG) and the principles of conflict of laws shall be excluded.
|
||||
|
||||
[b] If you wish to incorporate parts of the Library or other software licensed under the QaPL into other software whose license terms contradict with the provisions of this license, you may inquire with either the Original Copyright Holder or the copyright holder of the other software on possible exceptions.
|
||||
|
||||
[c] If, under the applicable law, any provision of This License is or becomes invalid or unenforceable, it shall not affect the validity or enforceability of the remainder of the terms of This License, and without further action by the parties to This License, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
|
||||
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.
|
||||
109
README.md
109
README.md
@@ -1,48 +1,103 @@
|
||||
# ClearURLs [](https://addons.mozilla.org/en-US/firefox/addon/clearurls/versions/)
|
||||
[](https://www.paypal.me/KevinRoebert)
|
||||
<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>
|
||||
|
||||
[](https://addons.mozilla.org/en-US/firefox/addon/clearurls/reviews/)
|
||||
[<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)
|
||||
|
||||
[](https://addons.mozilla.org/en-US/firefox/addon/clearurls/statistics/?last=30)
|
||||
# <sub><img src="https://gitlab.com/KevinRoebert/ClearUrls/raw/master/img/clearurls.svg" width="64px" height="64px"></sub> ClearURLs [](https://gitter.im/ClearURLs/community)
|
||||
|
||||
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and now also available for *Chrome* based browsers.
|
||||
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and *Chrome* based browsers.
|
||||
|
||||
This add-on will remove the tracking fields from all URLs which are visited by the browser and use a rule file, namely `data.json`.
|
||||
|
||||
This add-on protects your privacy and block the request from advertising services like *doubleclick.net*.
|
||||
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.
|
||||
|
||||
## Installation
|
||||
Mozilla Add-on: [](https://addons.mozilla.org/en-US/firefox/addon/clearurls/)
|
||||
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
|
||||
```
|
||||
|
||||
[Chrome Add-on](https://gitlab.com/KevinRoebert/ClearUrls/tags?utf8=%E2%9C%93&search=_cv)
|
||||
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
|
||||

|
||||
|
||||
## CI/CD Artifacts Download (for Firefox- and Chrome-Dev only)
|
||||
Here you can download the packed files for the Firefox- and Chrome-Dev:
|
||||
|
||||
[<img src="promotion/download-128.png"/>](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs.zip?job=bundle%20addon)
|
||||
|
||||
## 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)
|
||||
|
||||
## Screenshot
|
||||

|
||||
**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)
|
||||
* [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
|
||||
We use some third-party scripts in our add-on. The authors and licenses are listed below.
|
||||
- [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)
|
||||
|
||||
## Licence
|
||||
[](https://gitlab.com/KevinRoebert/ClearUrls/blob/master/LICENSE.md)
|
||||
- [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,246 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "Aktuell",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "Aktuallisiert",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "Aktuallisierung verfügbar",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "Fehler",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Da ist etwas schiefgelaufen!",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "Diese Url wurde weiter geleitet",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "Diese Domain wurde blockiert",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: Protokoll-Listener wurde hinzugefügt.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Protokoll von ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Vor der Verarbeitung",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "Nach der Verarbeitung",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "Regel",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "Zeit",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Zurücksetzen",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Setzt das globale Protokoll zurück",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "Einstellungen",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Filter",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "Der Filter-Schalter aktiviert die Reinigungsfunktion von ClearURLs, wenn sie die Funktion ausschalten, dann deaktivieren sie das gesamte Addon",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Protokoll",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "Das Protokoll wird nur lokal gespeichert. Wir empfehlen diese Funktion deaktiviert zulassen, wenn Sie sie nicht benötigen",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Zähler",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Zeigt die Anzahl der gereinigten URLs an",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Statistik",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Elemente",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Blockiert",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Anteil",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Zurücksetzen",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Setzt die globale Statistik zurück",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Regel Status",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Protokoll",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Öffnet das Protokoll",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"message": "Aktuelle URL melden",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "Meldet die aktuelle URL aus diesem Tab.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Auf Festplatte gespeichert.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: Das Addon konnte nicht gestartet werden.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "Statistiken",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Aktiviert oder deaktiviert die Statistikfunktion",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "Einstellungen von ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "Zählerfarbe",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "Zurücksetzen",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Setzt alle Einstellungen zurück",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "Die Url zu der data.json Datei (Regeln)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Speichern & Addon neustarten",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Speichert die Einstellungen",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "Die Url zu der rules.hash Datei (Hash)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_types_label": {
|
||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (Expertenniveau)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "Meldungsserver für URLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "Die URL wurde erfolgreich gemeldet. Wir werden sie in Kürze prüfen.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "Es schaut so aus, als ob diese URL schon gemeldet wurde.",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
@@ -1,246 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "up to date",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "updated",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "update available",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "error",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Oops something went wrong!",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "This url is redirected",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "This domain is blocked",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: Log listener is added.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Log from ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Before processing",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "After processing",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "Rule",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "Time",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Reset",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Reset the global log",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "Configs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Filter",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "The filters switch activates the cleaning functionality of ClearURLs. If you disable this option, the whole addon is disabled",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Logging",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "The log is saved only locally. We advise against this feature if you do not need it",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Badges",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Show number of cleaned urls",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Statistics",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Elements",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Blocked",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Percentage",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Reset",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Reset the global statistics",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Rules-Status",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Log",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Open the log",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"message": "Report current URL",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "Report the current URL from this tab.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Save on disk.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: The addon could not started.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "Statistics",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Activate or deactivate the statistics function",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "Settings from ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "Badged color",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "Reset",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Reset everything",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "The url to the data.json file (rules)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Save & reload addon",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Saves the settings",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "The url to the rules.hash file (hash)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_types_label": {
|
||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (expert level)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "Report server for URLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "The URL was successfully reported. We will check this URL soon.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "It seems like this URL has already been reported.",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
@@ -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,221 +0,0 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "Mise à 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é, mais quoi ...",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "Ce lien Internet a été redirigé",
|
||||
"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": "Connexion à partir de ClearURLS",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Avant le processus de traitement",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "Après le processus de 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 à l’état initial",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Réinitialiser la base de données",
|
||||
"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": "Historique",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "L'historique est enregistré localement. Si vous n’avez pas besoin de le consulter, nous déconseillons de l’activer",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Compteur",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Nombre de liens Internet nettoyés",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Statistiques",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Liens Internet",
|
||||
"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 le décompte, les statistiques",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Règles de la base de données",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Compte-rendu",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Ouvrir le compte-rendu",
|
||||
"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": "Lien Internet du fichier Data (basse de données)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Sauvegarder et redémarrer l’extension",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Sauvegarder les paramétrages",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "Lien Internet du fichier 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'>Demande de données (webRequest)</a> (Uniquement si vous maitrisez la programmation)",
|
||||
"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,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,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": "此网址已被转址",
|
||||
"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": ""
|
||||
},
|
||||
|
||||
"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,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": "此網址已被轉址",
|
||||
"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": ""
|
||||
},
|
||||
|
||||
"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": ""
|
||||
}
|
||||
}
|
||||
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
892
clearurls.js
892
clearurls.js
@@ -1,892 +0,0 @@
|
||||
/*
|
||||
* ##################################################################
|
||||
* # Fetch Rules & Exception from URL #
|
||||
* ##################################################################
|
||||
*/
|
||||
var providers = [];
|
||||
var prvKeys = [];
|
||||
var badges = [];
|
||||
var tabid = 0;
|
||||
var siteBlockedAlert = 'javascript:void(0)';
|
||||
var dataHash;
|
||||
var localDataHash;
|
||||
var os;
|
||||
var currentURL;
|
||||
|
||||
var storage = [];
|
||||
|
||||
getDataFromDisk();
|
||||
|
||||
function start(items)
|
||||
{
|
||||
initStorage(items);
|
||||
|
||||
/**
|
||||
* Save OS Version
|
||||
*/
|
||||
browser.runtime.getPlatformInfo(function(info) {
|
||||
|
||||
os = info.os;
|
||||
|
||||
|
||||
/**
|
||||
* 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));
|
||||
|
||||
//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 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();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
dataHash = responseTextHash;
|
||||
|
||||
if($.trim(dataHash) !== $.trim(localDataHash))
|
||||
{
|
||||
fetchFromURL();
|
||||
}
|
||||
else {
|
||||
toObject(storage.ClearURLsData);
|
||||
storeHashStatus(1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
dataHash = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch the Rules & Exception from github.
|
||||
*/
|
||||
function fetchFromURL()
|
||||
{
|
||||
fetch(storage.ruleURL)
|
||||
.then(checkResponse);
|
||||
|
||||
function checkResponse(response)
|
||||
{
|
||||
var responseText = response.clone().text().then(function(responseText){
|
||||
if(response.ok)
|
||||
{
|
||||
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
|
||||
*/
|
||||
function Provider(_name,_completeProvider = false){
|
||||
var name = _name;
|
||||
var urlPattern;
|
||||
var rules = [];
|
||||
var exceptions = [];
|
||||
var canceling = _completeProvider;
|
||||
var redirections = [];
|
||||
|
||||
if(_completeProvider){
|
||||
rules.push(".*");
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 !(this.matchException(url)) && urlPattern.test(url);
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a rule to the rule array.
|
||||
*
|
||||
* @param String rule RegExp as string
|
||||
*/
|
||||
this.addRule = function(rule) {
|
||||
rules.push(rule);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return all rules as an array.
|
||||
*
|
||||
* @return Array RegExp strings
|
||||
*/
|
||||
this.getRules = function() {
|
||||
return rules;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a exception to the exceptions array.
|
||||
*
|
||||
* @param String exception RegExp as string
|
||||
*/
|
||||
this.addException = function(exception) {
|
||||
exceptions.push(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 i = 0; i < exceptions.length; i++) {
|
||||
if(result) { break; }
|
||||
|
||||
exception_regex = new RegExp(exceptions[i], "i");
|
||||
result = exception_regex.test(url);
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a redirection to the redirections array.
|
||||
*
|
||||
* @param String redirection RegExp as string
|
||||
*/
|
||||
this.addRedirection = function(redirection) {
|
||||
redirections.push(redirection);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return all redirection.
|
||||
*
|
||||
* @return url
|
||||
*/
|
||||
this.getRedirection = function(url) {
|
||||
var re = null;
|
||||
|
||||
for(var i = 0; i < redirections.length; i++)
|
||||
{
|
||||
result = (url.match(new RegExp(redirections[i], "i")));
|
||||
|
||||
if (result && result.length > 0)
|
||||
{
|
||||
re = (new RegExp(redirections[i], "i")).exec(url)[1];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return re;
|
||||
};
|
||||
}
|
||||
// ##################################################################
|
||||
|
||||
/**
|
||||
* Helper function which remove the tracking fields
|
||||
* for each provider given as parameter.
|
||||
*
|
||||
* @param {Provider} provider Provider-Object
|
||||
* @param {webRequest} request webRequest-Object
|
||||
* @return {Array} Array with changes and url fields
|
||||
*/
|
||||
function removeFieldsFormURL(provider, request)
|
||||
{
|
||||
var url = request.url;
|
||||
var domain = url.replace(new RegExp("\\?.*", "i"), "");
|
||||
var fields = "";
|
||||
var rules = provider.getRules();
|
||||
var changes = false;
|
||||
var cancel = false;
|
||||
|
||||
/*
|
||||
* 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(request.url, re, translate('log_redirect'));
|
||||
|
||||
return {
|
||||
"redirect": true,
|
||||
"url": url
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Only test for matches, if there are fields that can be cleaned.
|
||||
*/
|
||||
if(existsFields(url))
|
||||
{
|
||||
/**
|
||||
* It must be non-greedy, because by default .* will match
|
||||
* all ? chars. So the replace function delete everything
|
||||
* before the last ?. With adding a ? on the quantifier *,
|
||||
* we fixed this problem.
|
||||
*/
|
||||
fields = url.replace(new RegExp(".*?\\?", "i"), "");
|
||||
|
||||
for (var i = 0; i < rules.length; i++) {
|
||||
var beforReplace = fields;
|
||||
|
||||
fields = fields.replace(new RegExp(rules[i], "i"), "");
|
||||
|
||||
if(beforReplace != fields)
|
||||
{
|
||||
//Log the action
|
||||
pushToLog(domain+"?"+beforReplace, domain+"?"+fields, rules[i]);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
url = domain+"?"+fields;
|
||||
}
|
||||
else {
|
||||
if(domain != url)
|
||||
{
|
||||
url = domain;
|
||||
changes = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(provider.isCaneling()){
|
||||
pushToLog(request.url, request.url, 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
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of parameters query strings.
|
||||
* @param {String} url URL as String
|
||||
* @return {int} Number of Parameters
|
||||
*/
|
||||
function countFields(url)
|
||||
{
|
||||
var matches = (url.match(/[^\/|\?|&]+=[^\/|\?|&]+/gi) || []);
|
||||
var count = matches.length;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
/*
|
||||
* Expand urls and bypass tracking.
|
||||
* Cancel the active request.
|
||||
*/
|
||||
if(result.redirect)
|
||||
{
|
||||
browser.tabs.update(request.tabId, {url: result.url});
|
||||
return {cancel: true};
|
||||
}
|
||||
|
||||
/*
|
||||
* 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 {};
|
||||
}
|
||||
|
||||
/**
|
||||
* 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()
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Save every minute the temporary data to the disk.
|
||||
*/
|
||||
setInterval(saveOnExit, 60000);
|
||||
|
||||
/**
|
||||
* 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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the icon.
|
||||
*/
|
||||
function changeIcon()
|
||||
{
|
||||
if(storage.globalStatus){
|
||||
browser.browserAction.setIcon({path: "img/clearurls.svg"});
|
||||
} else{
|
||||
browser.browserAction.setIcon({path: "img/clearurls_gray.svg"});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if it is an android device.
|
||||
* @return bool
|
||||
*/
|
||||
function checkOSAndroid()
|
||||
{
|
||||
if(os == "android")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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().then(start, error);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value under the key.
|
||||
* @param {String} key
|
||||
* @return {Object}
|
||||
*/
|
||||
function getData(key)
|
||||
{
|
||||
return storage[key];
|
||||
}
|
||||
|
||||
/**
|
||||
* 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] = replaceOldGithubURLs(value);
|
||||
break;
|
||||
case "types":
|
||||
storage[key] = value.split(',');
|
||||
break;
|
||||
default:
|
||||
storage[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write error on console.
|
||||
*/
|
||||
function error()
|
||||
{
|
||||
console.log(translate('core_error'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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/raw/master/data/rules.hash";
|
||||
storage.ruleURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json";
|
||||
storage.types = ["main_frame", "sub_frame", "xmlhttprequest"];
|
||||
storage.reportServer = "https://clearurls.xn--rb-fka.it";
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads the extension.
|
||||
*/
|
||||
function reload()
|
||||
{
|
||||
browser.runtime.reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the old GitHub URLs with the
|
||||
* new GitLab URLs.
|
||||
*/
|
||||
function replaceOldGithubURLs(url)
|
||||
{
|
||||
switch (url) {
|
||||
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/rules.hash?flush_cache=true":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/rules.hash";
|
||||
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/data.json?flush_cache=true":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json";
|
||||
default:
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an object is empty.
|
||||
* @param {Object} obj
|
||||
* @return {Boolean}
|
||||
*/
|
||||
function isEmpty(obj)
|
||||
{
|
||||
return (Object.getOwnPropertyNames(obj).length === 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current URL.
|
||||
* @return {String} [description]
|
||||
*/
|
||||
function getCurrentURL()
|
||||
{
|
||||
return currentURL;
|
||||
}
|
||||
110
core_js/log.js
110
core_js/log.js
@@ -1,110 +0,0 @@
|
||||
/**
|
||||
* Get the log and display the data as table.
|
||||
*/
|
||||
var log = {};
|
||||
|
||||
var core = function (func) {
|
||||
return browser.runtime.getBackgroundPage().then(func);
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset the global log
|
||||
*/
|
||||
function resetGlobalLog(){
|
||||
core(function (ref){
|
||||
obj = {"log": []};
|
||||
ref.setData('log', JSON.stringify(obj));
|
||||
});
|
||||
getLog();
|
||||
location.reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the log and display to the user
|
||||
*/
|
||||
function getLog()
|
||||
{
|
||||
core(function (ref){
|
||||
log = ref.getData('log');
|
||||
|
||||
// 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'));
|
||||
}
|
||||
@@ -1,265 +0,0 @@
|
||||
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;
|
||||
var reportServer;
|
||||
|
||||
var core = function (func) {
|
||||
return browser.runtime.getBackgroundPage().then(func);
|
||||
};
|
||||
|
||||
function getData()
|
||||
{
|
||||
core(function (ref){
|
||||
globalCounter = ref.getData('globalCounter');
|
||||
globalurlcounter = ref.getData('globalurlcounter');
|
||||
globalStatus = ref.getData('globalStatus');
|
||||
badgedStatus = ref.getData('badgedStatus');
|
||||
hashStatus = ref.getData('hashStatus');
|
||||
loggingStatus = ref.getData('loggingStatus');
|
||||
statisticsStatus = ref.getData('statisticsStatus');
|
||||
currentURL = ref.getCurrentURL();
|
||||
reportServer = ref.getData('reportServer');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the UI.
|
||||
*
|
||||
*/
|
||||
function init()
|
||||
{
|
||||
setSwitchButton("globalStatus", "globalStatus");
|
||||
setSwitchButton("tabcounter", "badgedStatus");
|
||||
setSwitchButton("logging", "loggingStatus");
|
||||
setSwitchButton("statistics", "statisticsStatus");
|
||||
setHashStatus();
|
||||
changeStatistics();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the globalCounter value from the browser storage
|
||||
* @param {(data){} Return value form browser.storage.local.get
|
||||
*/
|
||||
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(){
|
||||
core(function (ref){
|
||||
ref.setData(storageID, element.is(':checked'));
|
||||
if(storageID == "globalStatus") ref.changeIcon();
|
||||
changeVisibility(id, storageID);
|
||||
|
||||
ref.saveOnExit();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 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(){
|
||||
core(function (ref){
|
||||
globalurlcounter = 0;
|
||||
globalCounter = 0;
|
||||
ref.setData('globalCounter', 0);
|
||||
ref.setData('globalurlcounter', 0);
|
||||
ref.saveOnExit();
|
||||
|
||||
changeStatistics();
|
||||
});
|
||||
}
|
||||
|
||||
if(!browser.extension.inIncognitoContext)
|
||||
{
|
||||
getData();
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
if(!browser.extension.inIncognitoContext)
|
||||
{
|
||||
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'));
|
||||
$('#reportButton').on("click", reportURL);
|
||||
setText();
|
||||
} else {
|
||||
$('#config_section').remove();
|
||||
$('#statistic_section').remove();
|
||||
$('#status_section').remove();
|
||||
$('#log_section').remove();
|
||||
$('#incognito').css('display', '');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* 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');
|
||||
injectText('reportButton', 'popup_html_report_button', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the url to the DB on clearurls.röb.it to checked for tracking fields.
|
||||
*/
|
||||
function reportURL()
|
||||
{
|
||||
$.ajax({
|
||||
url: reportServer+'/report_url.php?url='+encodeURI(currentURL),
|
||||
success: function(result) {
|
||||
BootstrapDialog.show({
|
||||
message: translate('success_report_url')
|
||||
});
|
||||
},
|
||||
error: function(result) {
|
||||
BootstrapDialog.show({
|
||||
message: translate('error_report_url')
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1,105 +0,0 @@
|
||||
var settings = [];
|
||||
|
||||
var core = function (func) {
|
||||
return browser.runtime.getBackgroundPage().then(func);
|
||||
};
|
||||
|
||||
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();
|
||||
core(function (ref){
|
||||
ref.setData('badged_color', settings.badged_color);
|
||||
ref.setBadgedStatus();
|
||||
ref.saveOnExit();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Reset everything.
|
||||
* Set everthing to the default values.
|
||||
*/
|
||||
function reset()
|
||||
{
|
||||
core(function (ref){
|
||||
ref.initSettings();
|
||||
ref.saveOnExit();
|
||||
ref.reload();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the settings.
|
||||
*/
|
||||
function save()
|
||||
{
|
||||
core(function (ref){
|
||||
ref.setData('badged_color', $('input[name=badged_color]').val());
|
||||
ref.setBadgedStatus();
|
||||
ref.setData('ruleURL', $('input[name=rule_url]').val());
|
||||
ref.setData('hashURL', $('input[name=hash_url]').val());
|
||||
ref.setData('types', $('input[name=types]').val());
|
||||
ref.setData('reportServer', $('input[name=report_server]').val());
|
||||
ref.saveOnExit();
|
||||
ref.reload();
|
||||
});
|
||||
|
||||
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()
|
||||
{
|
||||
core(function (ref){
|
||||
settings.badged_color = ref.getData('badged_color');
|
||||
settings.rule_url = ref.getData('ruleURL');
|
||||
settings.hash_url = ref.getData('hashURL');
|
||||
settings.types = ref.getData('types');
|
||||
settings.reportServer = ref.getData('reportServer');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 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'));
|
||||
$('input[name=badged_color]').val(settings.badged_color);
|
||||
$('#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'));
|
||||
$('input[name=rule_url]').val(settings.rule_url);
|
||||
$('#hash_url_label').text(translate('setting_hash_url_label'));
|
||||
$('input[name=hash_url]').val(settings.hash_url);
|
||||
$('#types_label').html(translate('setting_types_label'));
|
||||
$('input[name=types]').val(settings.types);
|
||||
$('#save_settings_btn').text(translate('settings_html_save_button'));
|
||||
$('#save_settings_btn').prop('title', translate('settings_html_save_button_title'));
|
||||
$('#report_server_label').html(translate('setting_report_server_label'));
|
||||
$('input[name=report_server]').val(settings.reportServer);
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
/**
|
||||
* This file writes only the version into every page.
|
||||
* @return version
|
||||
*/
|
||||
var version = browser.runtime.getManifest().version;
|
||||
$('#version').text(version);
|
||||
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
16
css/core.css
16
css/core.css
@@ -1,16 +0,0 @@
|
||||
body {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.small-version {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.navbar-header {
|
||||
margin-top: 0;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.col-sm-1 {
|
||||
margin-top: -10px;
|
||||
}
|
||||
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,71 +0,0 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
378
data/data.json
378
data/data.json
@@ -1,378 +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;)?)?"
|
||||
],
|
||||
"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;)?)?",
|
||||
"btnG=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [
|
||||
".*(mail\\.google\\.).*(\\/mail\\/u\\/0)\\/.*",
|
||||
".*(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\\?client=youtube.*gs_gbg=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/s\\?tbm=map.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(news\\.google\\.).*\\?hl=.*"
|
||||
],
|
||||
"redirections": [
|
||||
".*google\\..*\\/.*url\\?.*url=([^&]*)"
|
||||
]
|
||||
},
|
||||
"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;)?)?",
|
||||
"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).*"
|
||||
],
|
||||
"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_location=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"ref=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [
|
||||
".*(facebook\\.)\\w{2,}.*(\\/plugins\\/).*"
|
||||
],
|
||||
"redirections": []
|
||||
},
|
||||
"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;)?)?"
|
||||
],
|
||||
"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;)?)?"
|
||||
],
|
||||
"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": []
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
ebf585f37a97c528de8465c017db1280283db472c5e66dcf0181821c57434143
|
||||
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
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": ": активировать для сортировки столбца по убыванию"
|
||||
}
|
||||
}
|
||||
@@ -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": "Nie sú k dispozícii žiadne dáta",
|
||||
"sInfo": "Záznamy _START_ až _END_ z celkom _TOTAL_",
|
||||
"sInfoEmpty": "Záznamy 0 až 0 z celkom 0 ",
|
||||
"sInfoFiltered": "(vyfiltrované spomedzi _MAX_ záznamov)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "Zobraz _MENU_ záznamov",
|
||||
"sLoadingRecords": "Načítavam...",
|
||||
"sProcessing": "Spracúvam...",
|
||||
"sSearch": "Hľadať:",
|
||||
"sZeroRecords": "Nenašli sa žiadne vyhovujúce záznamy",
|
||||
"oPaginate": {
|
||||
"sFirst": "Prvá",
|
||||
"sLast": "Posledná",
|
||||
"sNext": "Nasledujúca",
|
||||
"sPrevious": "Predchádzajúca"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": aktivujte na zoradenie stĺpca vzostupne",
|
||||
"sSortDescending": ": aktivujte na zoradenie stĺpca zostupne"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Nobenih podatkov ni na voljo",
|
||||
"sInfo": "Prikazujem _START_ do _END_ od _TOTAL_ zapisov",
|
||||
"sInfoEmpty": "Prikazujem 0 do 0 od 0 zapisov",
|
||||
"sInfoFiltered": "(filtrirano od _MAX_ vseh zapisov)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "Prikaži _MENU_ zapisov",
|
||||
"sLoadingRecords": "Nalagam...",
|
||||
"sProcessing": "Obdelujem...",
|
||||
"sSearch": "Išči:",
|
||||
"sZeroRecords": "Nobeden zapis ne ustreza",
|
||||
"oPaginate": {
|
||||
"sFirst": "Prvi",
|
||||
"sLast": "Zadnji",
|
||||
"sNext": "Nasl.",
|
||||
"sPrevious": "Pred."
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": vključite za naraščujoči sort",
|
||||
"sSortDescending": ": vključite za padajoči sort"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Nuk ka asnjë të dhënë në tabele",
|
||||
"sInfo": "Duke treguar _START_ deri _END_ prej _TOTAL_ reshtave",
|
||||
"sInfoEmpty": "Duke treguar 0 deri 0 prej 0 reshtave",
|
||||
"sInfoFiltered": "(të filtruara nga gjithësej _MAX_ reshtave)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": ",",
|
||||
"sLengthMenu": "Shiko _MENU_ reshta",
|
||||
"sLoadingRecords": "Duke punuar...",
|
||||
"sProcessing": "Duke procesuar...",
|
||||
"sSearch": "Kërkoni:",
|
||||
"sZeroRecords": "Asnjë e dhënë nuk u gjet",
|
||||
"oPaginate": {
|
||||
"sFirst": "E para",
|
||||
"sLast": "E Fundit",
|
||||
"sNext": "Tjetra",
|
||||
"sPrevious": "E Kaluara"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": aktivizo për të sortuar kolumnin me vlera në ngritje",
|
||||
"sSortDescending": ": aktivizo për të sortuar kolumnin me vlera në zbritje"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"sProcessing": "Procesiranje u toku...",
|
||||
"sLengthMenu": "Prikaži _MENU_ elemenata",
|
||||
"sZeroRecords": "Nije pronađen nijedan rezultat",
|
||||
"sInfo": "Prikaz _START_ do _END_ od ukupno _TOTAL_ elemenata",
|
||||
"sInfoEmpty": "Prikaz 0 do 0 od ukupno 0 elemenata",
|
||||
"sInfoFiltered": "(filtrirano od ukupno _MAX_ elemenata)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Pretraga:",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "Početna",
|
||||
"sPrevious": "Prethodna",
|
||||
"sNext": "Sledeća",
|
||||
"sLast": "Poslednja"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"sEmptyTable": "Tabellen innehåller ingen data",
|
||||
"sInfo": "Visar _START_ till _END_ av totalt _TOTAL_ rader",
|
||||
"sInfoEmpty": "Visar 0 till 0 av totalt 0 rader",
|
||||
"sInfoFiltered": "(filtrerade från totalt _MAX_ rader)",
|
||||
"sInfoPostFix": "",
|
||||
"sInfoThousands": " ",
|
||||
"sLengthMenu": "Visa _MENU_ rader",
|
||||
"sLoadingRecords": "Laddar...",
|
||||
"sProcessing": "Bearbetar...",
|
||||
"sSearch": "Sök:",
|
||||
"sZeroRecords": "Hittade inga matchande resultat",
|
||||
"oPaginate": {
|
||||
"sFirst": "Första",
|
||||
"sLast": "Sista",
|
||||
"sNext": "Nästa",
|
||||
"sPrevious": "Föregående"
|
||||
},
|
||||
"oAria": {
|
||||
"sSortAscending": ": aktivera för att sortera kolumnen i stigande ordning",
|
||||
"sSortDescending": ": aktivera för att sortera kolumnen i fallande ordning"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user