332 Commits

Author SHA1 Message Date
Kevin R
96a0a6e8cb Cleaning 2020-11-08 23:51:10 +01:00
Kevin R
d5fe894414 From scratch 2020-11-08 23:32:31 +01:00
Kevin R
307b487f64 Merge branch 'master' into ts-port 2020-09-25 02:39:54 +02:00
Kevin R
606c51733f Update README.md 2020-09-25 02:39:38 +02:00
Kevin R
d82fca2972 Changes 2020-09-10 01:09:22 +02:00
Kevin R
7ea819d26a Added test ci test results 2020-09-10 00:58:38 +02:00
Kevin R
68f10ac9ac Update .gitlab-ci.yml 2020-09-10 00:44:54 +02:00
Kevin R
1df39c76f4 Update .gitlab-ci.yml 2020-09-10 00:44:16 +02:00
Kevin R
2ac158ca88 Update .gitlab-ci.yml 2020-09-10 00:27:49 +02:00
Kevin R
73d330655a Update .gitlab-ci.yml 2020-09-10 00:26:23 +02:00
Kevin R
fedc0c4230 Update .gitlab-ci.yml 2020-09-10 00:25:00 +02:00
Kevin R
e2b638eafb Changes 2020-09-10 00:23:56 +02:00
Kevin R
0c694d86ad Merge branch 'master' into ts-port 2020-09-09 23:17:20 +02:00
Kevin R
6430bcc124 added infos to rules repo 2020-09-02 00:07:44 +02:00
Kevin R
e8264eefe8 Update data.min.json 2020-09-01 23:33:36 +02:00
Kevin R
79e54f8b5f Update FUNDING.yml 2020-08-22 00:26:59 +02:00
Kevin R
6b8e515d9a Update logEntry.ts 2020-08-21 22:02:58 +02:00
Kevin R
b0c20ac780 Update lockdown.yml 2020-08-21 00:52:27 +00:00
Kevin R
c6e92a7f29 Merge branch 'master' into ts-port 2020-08-21 00:27:01 +02:00
Kevin R
ad64f98a28 Update data.min.json 2020-08-21 00:22:53 +02:00
Kevin R
2ffdf4d77b Merge branch 'master' of https://gitlab.com/KevinRoebert/ClearUrls 2020-08-21 00:19:31 +02:00
Kevin R
951d1c9f7b Added new rule
https://github.com/ClearURLs/Addon/pull/57
2020-08-21 00:19:25 +02:00
Kevin R
3a20e97354 Update lockdown.yml 2020-08-20 22:12:55 +00:00
Kevin R
c138e3387b refactor 2020-08-20 23:42:46 +02:00
Kevin R
4432fb46bf init 2 2020-08-20 04:01:58 +02:00
Kevin R
4d4a418a95 Update utils.ts 2020-08-19 23:54:08 +02:00
Kevin R
843aeed109 init 2020-08-19 23:41:12 +02:00
Kevin R
b7e209bf15 Merge branch 'performance-optimizations-for-rules' into 'master'
Performance optimizations for rules

See merge request KevinRoebert/ClearUrls!75
2020-08-19 03:34:04 +00:00
Kevin R
0469156237 Update README.md 2020-08-18 22:45:28 +00:00
Kevin R
7ac9fe7d4d Update CHANGELOG.md 2020-08-19 00:03:58 +02:00
Kevin R
de876c0ff2 Update data.min.json 2020-08-18 23:46:41 +02:00
Kevin R
3ea3f347ba added ya.ru 2020-08-18 23:42:28 +02:00
Kevin R
329c78ff88 Update data.min.json 2020-08-18 21:01:29 +02:00
Kevin R
a4d15ece2f Merge branch 'cherry-pick-b2efd0ee' into 'performance-optimizations-for-rules'
Optimized rules list

See merge request KevinRoebert/ClearUrls!74
2020-08-18 18:31:09 +00:00
Teodor Atroshenko
c6ed12808b Optimized rules list
(cherry picked from commit b2efd0eea3)
2020-08-18 18:29:01 +00:00
Kevin R
db5bd659f0 Version 1.19.0
#570
#578
#580
#581
#587
#599
2020-07-22 00:30:09 +02:00
Kevin R
6c775b9bba Merge branch 'master' into 'master'
fix typo in urlPattern for argos.co.uk

See merge request KevinRoebert/ClearUrls!68
2020-07-02 01:55:44 +00:00
Kevin R
47dfe256eb Merge branch 'patch-1' into 'master'
removed the localization from the firefox-URL

See merge request KevinRoebert/ClearUrls!69
2020-07-02 01:55:36 +00:00
DJCrashdummy
3bac289758 removed the localization from the firefox-URL 2020-07-01 13:57:12 +00:00
swrup
53035f6bb2 fix typo in urlPattern for argos.co.uk 2020-06-29 21:49:01 +00:00
Kevin R
86fb5c469a Merge branch 'patch-1' into 'master'
added rule for cnbc.com (to fix #573)

Closes #573

See merge request KevinRoebert/ClearUrls!67
2020-06-24 14:12:14 +00:00
DJCrashdummy
f1086f8889 added rule for cnbc.com (to fix #573) 2020-06-24 14:12:14 +00:00
Kevin Röbert
bf27040864 Update .gitlab-ci.yml 2020-06-24 16:00:25 +02:00
Kevin Röbert
ca7df33fa3 Update .gitlab-ci.yml 2020-06-24 15:54:40 +02:00
Kevin Röbert
e017a8838e Update .gitlab-ci.yml
+ Test stage
+ Trigger page and hash only on change
2020-06-24 15:51:14 +02:00
Kevin R
1987634095 Merge branch 'patch-2' into 'master'
Yet another global rule

See merge request KevinRoebert/ClearUrls!66
2020-06-24 13:35:59 +00:00
Anton Yablokov
6e2d082eea Yet another global rule (from https://www.behance.net/gallery/88977751/Deep-Inside-Stockholm?tracking_source=curated_galleries_photography) 2020-06-23 05:46:32 +00:00
Kevin Röbert
fa3a33962b Update data.min.json
#523
2020-06-21 23:08:16 +02:00
Kevin Röbert
abaa5fe2c6 Updated rules and exceptions
#558
#460
#504
#508
#525
#530
#532
#538
#542
#450
#544
#563
2020-06-21 23:02:35 +02:00
Kevin R
992cd351af Merge branch 'patch-1' into 'master'
added `countview` for marketscreener.com...

Closes #448

See merge request KevinRoebert/ClearUrls!64
2020-06-18 20:27:01 +00:00
DJCrashdummy
6992302e23 added countview for marketscreener.com according to https://gitlab.com/KevinRoebert/ClearUrls/-/issues/448#note_363577772 2020-06-18 11:00:15 +00:00
Kevin Röbert
bc2e2510e8 Update FUNDING.yml 2020-06-17 02:18:58 +02:00
Kevin Röbert
1ec5838a98 Create FUNDING.yml 2020-06-17 01:29:59 +02:00
Kevin Röbert
c7b1f85672 Updated Japanese by Shitennouji & Euglena0211 2020-06-07 21:46:34 +02:00
Kevin Röbert
ac2d5da41c Hotfix v. 1.18.1 2020-06-07 21:32:24 +02:00
Kevin R
27af2c8c49 Merge branch 'jquery-removal' into 'master'
Removed jQuery from core scripts

See merge request KevinRoebert/ClearUrls!62
2020-06-05 22:24:04 +00:00
Kevin Röbert
01a911557b Version 1.18.0 2020-06-06 00:23:04 +02:00
Kevin Röbert
54210b71c5 Cleanup 2020-06-06 00:05:50 +02:00
Kevin Röbert
da5fb0b3c0 Removed even more jQuery dependencies 2020-06-06 00:02:03 +02:00
Kevin Röbert
08b62c0d94 Merge branch 'master' into jquery-removal 2020-06-05 21:51:52 +02:00
Kevin R
879fcdae03 Merge branch '475-too-many-protocol-entries-cut-off-the-internet-connection' into 'master'
Resolve "Too many protocol entries cut off the internet connection"

Closes #475

See merge request KevinRoebert/ClearUrls!63
2020-06-05 19:50:56 +00:00
Kevin Röbert
762d83e46c Hard limit for the log of 5000 entries 2020-06-05 21:50:03 +02:00
Kevin Röbert
ae30c0eb53 Removed jQuery from core scripts 2020-06-05 20:13:21 +02:00
Kevin R
0acd24d716 Update data.min.json 2020-05-26 18:28:07 +00:00
Kevin R
22e58ba0e6 Temporarily removed until a whitelist feature is available.
#527
#526
#520
#519
#514
#512
#505
2020-05-26 17:47:41 +00:00
Kevin Röbert
3ade08f344 Merge branch 'master' of https://gitlab.com/KevinRoebert/ClearUrls 2020-05-19 17:37:37 +02:00
Kevin Röbert
ea256a8081 Exception for api.bilibili.com 2020-05-19 17:37:30 +02:00
Kevin
90ab42a510 Merge branch 'add-privacytools-recommendation' into 'master'
Add PrivacyTools recommendation

See merge request KevinRoebert/ClearUrls!60
2020-05-19 15:34:54 +00:00
Kevin Röbert
c60e33d327 Added exception for zoom.us websocket
#513
2020-05-19 17:26:30 +02:00
Luca Trevisani
9f47a35318 Add PrivacyTools recommendation 2020-05-16 17:25:40 +00:00
Kevin Röbert
e931674dfe Added rules & exceptions
#501
#499
#493
#492
#491
#487
#486
#485
#484
#482
#479
#477
#473
2020-05-15 15:54:14 +02:00
Kevin
ed87f72c75 Merge branch 'patch-1' into 'master'
added some fields for marketscreener.com...

Closes #448

See merge request KevinRoebert/ClearUrls!59
2020-05-15 12:03:31 +00:00
DJCrashdummy
ee2e544223 added some fields for marketscreener.com (https://gitlab.com/KevinRoebert/ClearUrls/-/issues/448#note_343173596) 2020-05-15 09:48:40 +00:00
Kevin
9aaf4718f3 Update README.md 2020-04-28 22:50:21 +00:00
Kevin Röbert
bdca5d8659 Merge branch 'master' of https://gitlab.com/KevinRoebert/ClearUrls 2020-04-27 23:57:37 +02:00
Kevin Röbert
caca49b712 Change default logLimit to 100
#475
2020-04-27 23:57:35 +02:00
Röbert
4a1fad9a90 removed overlapping permissions 2020-04-25 15:05:23 +02:00
Kevin Röbert
9fbf5a839a Update rules
#463
#468
#469
#470
2020-04-24 01:19:44 +02:00
Kevin Röbert
8b815c5f50 Revert "Updated rules"
This reverts commit 201f3a9edb.
2020-04-24 01:19:06 +02:00
Kevin Röbert
4370912baa Merge branch 'master' of https://gitlab.com/KevinRoebert/ClearUrls 2020-04-24 01:18:46 +02:00
Kevin Röbert
201f3a9edb Updated rules
#463
#468
#469
#470
2020-04-24 01:17:58 +02:00
Kevin
349c0a79ce Update Bug.md
#478
2020-04-23 22:41:47 +00:00
Kevin Röbert
d74d53c40d Added exception
#471
2020-04-20 22:46:06 +02:00
Kevin Röbert
4030d9325b Update lockdown.yml 2020-04-15 09:05:34 +00:00
Kevin Röbert
fbac0bd1a9 Update lockdown.yml 2020-04-15 09:03:34 +00:00
Kevin Röbert
85ca03fdc0 Merge branch 'KevinRoebert-master-patch-74614' into 'master'
Update .github/lockdown.yml

See merge request KevinRoebert/ClearUrls!58
2020-04-14 23:28:09 +00:00
Kevin Röbert
0fc822a302 Update .github/lockdown.yml 2020-04-14 23:27:57 +00:00
Kevin Röbert
6cc57eae1a Merge branch 'KevinRoebert-master-patch-74450' into 'master'
Update lockdown.yml

See merge request KevinRoebert/ClearUrls!57
2020-04-14 23:26:58 +00:00
Kevin Röbert
694cc4613a Update lockdown.yml 2020-04-14 23:26:16 +00:00
Kevin Röbert
c81dbee1c7 Update data.min.json 2020-04-14 23:12:45 +00:00
Kevin Röbert
3f707bfd3a Version 1.17.0
#457
#462
#445
2020-04-15 00:53:01 +02:00
Kevin Röbert
9d62ddf1b0 Update messages.json (POEditor.com) 2020-04-14 21:26:24 +00:00
Kevin Röbert
1344fd8636 Update messages.json (POEditor.com) 2020-04-14 21:26:23 +00:00
Kevin Röbert
54915cf0de Update messages.json (POEditor.com) 2020-04-14 21:19:19 +00:00
Kevin Röbert
ab325759cd Update messages.json (POEditor.com) 2020-04-14 21:18:17 +00:00
Kevin Röbert
12f63e7f71 Update messages.json (POEditor.com) 2020-04-14 21:16:58 +00:00
Kevin Röbert
7bc3891072 Update messages.json (POEditor.com) 2020-04-14 21:15:14 +00:00
Kevin Röbert
9ff50c965d Update messages.json (POEditor.com) 2020-04-14 21:13:24 +00:00
Kevin Röbert
4014195da8 Update messages.json (POEditor.com) 2020-04-14 21:10:59 +00:00
Kevin Röbert
50aa5e5a73 Update messages.json (POEditor.com) 2020-04-14 21:10:57 +00:00
Kevin Röbert
4a571794dc Update messages.json (POEditor.com) 2020-04-14 21:10:56 +00:00
Kevin Röbert
23d13b0710 Update messages.json (POEditor.com) 2020-04-14 21:10:55 +00:00
Kevin Röbert
d060acae08 Update messages.json (POEditor.com) 2020-04-14 21:10:53 +00:00
Kevin Röbert
28dfe00ff7 Update messages.json (POEditor.com) 2020-04-14 21:10:51 +00:00
Kevin Röbert
5ee667eb92 Update messages.json (POEditor.com) 2020-04-14 21:10:50 +00:00
Kevin Röbert
fda7da7f13 Update messages.json (POEditor.com) 2020-04-14 21:10:48 +00:00
Kevin Röbert
578d4bc48d Update messages.json (POEditor.com) 2020-04-14 21:10:47 +00:00
Kevin Röbert
c7a1c40f9d Update messages.json (POEditor.com) 2020-04-14 21:10:45 +00:00
Kevin Röbert
57e6ed704f Update messages.json (POEditor.com) 2020-04-14 21:10:43 +00:00
Kevin Röbert
9ee55e6536 Update messages.json (POEditor.com) 2020-04-14 21:10:42 +00:00
Kevin Röbert
755db29738 Update messages.json (POEditor.com) 2020-04-14 21:10:40 +00:00
Kevin Röbert
66671aec68 Update messages.json (POEditor.com) 2020-04-14 21:10:38 +00:00
Kevin Röbert
c2f500e060 Update messages.json (POEditor.com) 2020-04-14 21:10:37 +00:00
Kevin Röbert
cfad3d2b23 Update messages.json (POEditor.com) 2020-04-14 21:09:26 +00:00
Kevin Röbert
6d27c8a906 Update messages.json (POEditor.com) 2020-04-14 21:01:06 +00:00
Kevin Röbert
ab19cfd714 Merge branch 'revert-2878af17' into 'master'
Revert "Update messages.json (POEditor.com)"

See merge request KevinRoebert/ClearUrls!56
2020-04-14 20:55:32 +00:00
Kevin Röbert
c64cfbfe86 Revert "Update messages.json (POEditor.com)"
This reverts commit 2878af17b6
2020-04-14 20:55:06 +00:00
Kevin Röbert
b70e0d4912 Update messages.json (POEditor.com) 2020-04-14 20:12:11 +00:00
Kevin Röbert
badc78a954 Added rules and exceptions
#459
#441
#457
#448
#452
2020-04-08 21:20:26 +02:00
Kevin Röbert
c0b7ad9b06 Update README.md 2020-04-02 23:21:38 +00:00
Kevin Röbert
d984b512c0 Update messages.json (POEditor.com) 2020-04-02 22:55:11 +00:00
Kevin Röbert
d4ca4b0362 Update messages.json (POEditor.com) 2020-04-02 22:55:08 +00:00
Kevin Röbert
2878af17b6 Update messages.json (POEditor.com) 2020-04-02 22:55:07 +00:00
Kevin Röbert
86ef50ce91 Update messages.json (POEditor.com) 2020-04-02 22:55:05 +00:00
Kevin Röbert
9afb4fa167 Updated French translation
Special thanks again to Lucifer for the translation into French.
2020-03-23 23:23:06 +01:00
Kevin Röbert
6ee6591019 source fix 2020-03-20 13:20:28 +01:00
Kevin Röbert
eb45b51bcb Updated description 2020-03-20 01:57:46 +01:00
Kevin Röbert
0298792aa1 Version 1.16.0
#362
#440
#429
#428
#431
2020-03-20 01:50:22 +01:00
Kevin Röbert
b1a5b5fcb0 Update README.md 2020-03-19 11:34:27 +00:00
Kevin Röbert
6ae8dd7d22 Add button for MEA 2020-03-19 12:31:00 +01:00
Kevin Röbert
afdf172716 Added rule
#434
#404
2020-03-18 16:12:32 +01:00
Kevin Röbert
31d63fa777 Added rules and exception
#433
#434
#432
#437
#438
2020-03-18 14:52:49 +01:00
Kevin Röbert
59707d7918 Added exception
#427
2020-03-10 20:33:42 +01:00
Kevin Röbert
f0bfe4c8dd Added rules and exception
#409
#411
#414
#418
#419
#420
#421
#424
2020-03-09 22:13:59 +01:00
Kevin Röbert
975ce2fea5 Added new rules 2020-02-27 17:57:32 +01:00
Kevin R
0d5fd4b452 Added new rule
#395
2020-02-27 17:12:09 +01:00
Kevin R
02a26d3231 Added new rules and exceptions
#390 #388 #408
2020-02-27 16:55:31 +01:00
Kevin R
88890b853a Fixed spm rule
Added missing question mark
2020-02-27 16:06:06 +01:00
Kevin R
53fb25f43d Added new rules
#402
#405
2020-02-25 21:13:31 +01:00
Kevin Röbert
3370985ee2 Update data.min.json 2020-02-22 21:49:54 +01:00
Kevin Röbert
95fe7eb17d Added new rules
#398
#393
2020-02-22 21:49:23 +01:00
Kevin Röbert
f7949e89f6 Added catch statements 2020-02-20 14:12:06 +01:00
Kevin Röbert
a44e13645c Updated localized extension description 2020-02-20 13:11:19 +01:00
Kevin Röbert
21cf8ec613 Added localized extension description 2020-02-19 18:55:50 +01:00
Kevin Röbert
a8d50a102c Create PRIVACY.md 2020-02-18 16:43:16 +01:00
Kevin Röbert
e79039d210 MS Store promotion 2020-02-17 17:20:55 +01:00
Kevin Röbert
019c2e64a3 Added rules and exception
#385
#387
2020-02-16 17:10:41 +01:00
Kevin Röbert
aaa46b5e6a Version 1.15.0
+ Updated Italian translation by @gioxx
2020-02-16 16:42:18 +01:00
Kevin Röbert
dd116ece8f Update messages.json (POEditor.com) 2020-02-16 15:38:13 +00:00
Kevin Röbert
b66b22f3e4 Added rules 2020-02-11 16:30:11 +01:00
Kevin Röbert
24bf821b59 Update data.min.json 2020-02-05 20:24:44 +01:00
Kevin Röbert
6012329278 Update test site 2020-02-05 20:24:18 +01:00
Kevin Röbert
be3909f5c0 Create bla.html 2020-02-05 20:09:49 +01:00
Kevin Röbert
f1c6599638 Update test page 2020-02-05 20:02:36 +01:00
Kevin Röbert
9aaf7eeb2e Update test page 2020-02-05 18:54:11 +01:00
Kevin Röbert
4b2b528248 Added rules
#352
2020-02-05 17:07:44 +01:00
Kevin Röbert
d28b81e97b Added rule and fixed (?) Disqus redirection
#342
#373
2020-02-05 16:53:12 +01:00
Kevin Röbert
6c7c5b18ac Added missing assets 2020-02-05 16:03:54 +01:00
Kevin Röbert
3f325201df Use only sources from same origin for GitLab pages 2020-02-05 15:54:20 +01:00
Kevin Röbert
5789640b75 Added exception
Fixed #369
2020-02-02 16:40:05 +01:00
Kevin Röbert
f8b7a1740a Update ClearURLs_in_action.png 2020-02-01 21:23:23 +01:00
Kevin Röbert
2f45e18a89 Updated Readme and changelog 2020-02-01 15:00:32 +01:00
Kevin Röbert
081890759d Version 1.14.0
Changed icon
2020-02-01 14:51:39 +01:00
Kevin Röbert
7d655baab4 Added rules
#352
2020-02-01 12:56:18 +01:00
Kevin Röbert
7972e24f4c New promo stuff 2020-02-01 12:43:05 +01:00
Kevin Röbert
b3ed752f02 Version 1.13.0 2020-02-01 12:19:11 +01:00
Kevin Röbert
93f81983f0 Update CHANGELOG.md 2020-01-29 16:29:10 +01:00
Kevin Röbert
9cce46590a Version 1.12.0 2020-01-29 16:25:34 +01:00
Röbert
a554391183 Removed default translations 2020-01-29 10:00:26 +01:00
Kevin Röbert
e8ca631829 Update messages.json (POEditor.com) 2020-01-29 08:46:55 +00:00
Röbert
0447f9aa25 Revert "Update messages.json (POEditor.com)"
This reverts commit 51f7cf9464.
2020-01-29 09:36:47 +01:00
Kevin Röbert
b605e3aa62 Update messages.json (POEditor.com) 2020-01-29 08:32:07 +00:00
Kevin Röbert
2fb7ddab10 Update messages.json (POEditor.com) 2020-01-29 08:32:02 +00:00
Kevin Röbert
523b52d34a Update messages.json (POEditor.com) 2020-01-29 08:32:00 +00:00
Kevin Röbert
6954ad2eef Update messages.json (POEditor.com) 2020-01-29 08:31:57 +00:00
Kevin Röbert
8d51e54237 Update messages.json (POEditor.com) 2020-01-29 08:31:55 +00:00
Kevin Röbert
f94f1a2064 Update messages.json (POEditor.com) 2020-01-29 08:31:53 +00:00
Kevin Röbert
e6370cc5fa Update messages.json (POEditor.com) 2020-01-29 08:31:51 +00:00
Kevin Röbert
193caa3ae0 Update messages.json (POEditor.com) 2020-01-29 08:31:49 +00:00
Kevin Röbert
e797c232f1 Update messages.json (POEditor.com) 2020-01-29 08:31:47 +00:00
Kevin Röbert
7043119985 Update messages.json (POEditor.com) 2020-01-29 08:31:44 +00:00
Kevin Röbert
27ad8953c6 Update messages.json (POEditor.com) 2020-01-29 08:31:42 +00:00
Kevin Röbert
51f7cf9464 Update messages.json (POEditor.com) 2020-01-29 08:31:40 +00:00
Kevin Röbert
ac9fc780f7 Update messages.json (POEditor.com) 2020-01-29 08:31:38 +00:00
Kevin Röbert
c37cae510f Update messages.json (POEditor.com) 2020-01-29 08:31:36 +00:00
Kevin Röbert
58b692ed39 Update messages.json (POEditor.com) 2020-01-29 08:31:34 +00:00
Kevin Röbert
ab948eab11 Update README.md 2020-01-29 08:17:38 +00:00
Röbert
9b29d5e907 Added rules
#366
2020-01-29 08:43:28 +01:00
Kevin Röbert
755af24b3e Changed rule/Added rules
#305
#360
#358
2020-01-17 10:19:32 +01:00
Kevin Röbert
cb9b2dbdea Merge branch 'master' into 'master'
Re-did Spanish localizacion

See merge request KevinRoebert/ClearUrls!55
2020-01-15 07:56:05 +00:00
Kevin Röbert
04a3f745b2 Added rules and exceptions
#350
#353
#357
2020-01-15 08:49:25 +01:00
Kevin Röbert
5930376eb5 Added exception
Added exception for Window 10 start menu bing search redirection
2020-01-12 20:46:59 +01:00
Kevin Röbert
f06609d3e1 Added exception
#351
2020-01-11 19:43:47 +01:00
Marcos Del Sol Vives
38ea5ed802 Re-did Spanish localizacion 2020-01-11 00:13:41 +01:00
Kevin Röbert
55cb9e8b39 Added rules
#348
2020-01-10 21:11:02 +01:00
Kevin Röbert
73954b2d82 Added exception
#347
2020-01-08 10:42:09 +01:00
Kevin Röbert
861cf554f5 Added exception handling on browser.tabs.get()
#346
2020-01-08 10:38:48 +01:00
Kevin Röbert
c3ddf2a8d4 Merge branch 'master' of https://gitlab.com/KevinRoebert/ClearUrls 2020-01-06 18:09:19 +01:00
Kevin Röbert
cf6fe59fbd Added new screenshots 2020-01-06 18:09:13 +01:00
Kevin Röbert
cbdc108358 Update README.md 2020-01-06 17:00:31 +00:00
Kevin Röbert
e4fdb6bca1 Merge branch 'master' of https://gitlab.com/KevinRoebert/ClearUrls 2020-01-06 17:36:05 +01:00
Kevin Röbert
44a4334843 Added exception
Fix #345
2020-01-06 17:35:49 +01:00
Kevin Röbert
b472913c67 Update README.md 2020-01-06 16:27:53 +00:00
Kevin Röbert
62fbf626ed Updates README 2020-01-06 17:26:58 +01:00
Kevin Röbert
ccdca3b595 Some beautifications 2020-01-06 17:15:58 +01:00
Kevin Röbert
0417469a26 Added yandex link fixer + renewed copyright notice
#305
2020-01-06 17:14:34 +01:00
Kevin Röbert
50542fa6a3 Version 1.11.0
#336
#340
#342
#339
#334
2020-01-06 16:22:37 +01:00
Kevin Röbert
08fe25dc0d Update CHANGELOG.md 2020-01-04 01:29:31 +01:00
Kevin Röbert
ae32bcf21e Merge branch 'upgrade-libs' into 'master'
Upgrade libs

Closes #307, #332, #333, and #338

See merge request KevinRoebert/ClearUrls!54
2020-01-04 00:14:03 +00:00
Kevin Röbert
b2ffb3293f Version 1.10.0
- 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)
- Added [popper.js 1.16.0](https://github.com/popperjs/popper.js/tree/v1.16.0)
- 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
2020-01-04 00:14:03 +00:00
Kevin Röbert
d41ab7ff9d Correction 2020-01-03 21:02:41 +01:00
Kevin Röbert
969385bc21 Merge branch 'master' into 'master'
Added Swedish translation

See merge request KevinRoebert/ClearUrls!53
2020-01-03 19:55:19 +00:00
Sopor
b8a1b4dadd Added Swedish translation 2020-01-03 19:55:19 +00:00
Kevin Röbert
5cfe99b753 Merge branch 'patch-1' into 'master'
minor corrections

See merge request KevinRoebert/ClearUrls!52
2020-01-02 15:35:50 +00:00
Sopor
392f3bc70a minor corrections 2019-12-28 12:17:03 +00:00
Kevin Röbert
d10e041125 New rules/redirections + fix for subdomains pattern 2019-12-26 14:16:08 +01:00
Kevin Röbert
6eb8636149 Added exception
#329
2019-12-22 20:15:13 +01:00
Kevin Röbert
fcb9f16b7a Added new rule
Fixed #314
2019-12-18 17:12:14 +01:00
Kevin Röbert
22426dfc24 Added exception for td.com
#325
2019-12-18 16:58:06 +01:00
Kevin Röbert
f8fb9bf5ef Version 1.9.5
+ Added Turkish translation by Ulaş Çakmak
+ Updated some strings of French translation by lucifer
+ Fixed problem with default RegExp
2019-12-17 20:35:05 +01:00
Kevin Röbert
c5e00dc5ef Updated french translation
A special thanks to lucifer
2019-12-17 20:28:10 +01:00
Röbert
e5d226e374 Added new rule
#321 - prevent Twitter AMP ping tracking
2019-12-16 14:18:15 +01:00
Kevin Röbert
3395a17c60 quick fix 2019-12-11 23:53:04 +01:00
Kevin Röbert
f7ed9fa1d8 Update data.min.json
#320
#317
#319
#318
2019-12-11 23:46:47 +01:00
Kevin Röbert
66d6672178 Added exception
#313
2019-12-07 19:23:17 +01:00
Kevin Röbert
80c29e7004 Added rules/exceptions
#310
#312
#313
2019-12-07 19:16:25 +01:00
Kevin Röbert
74aad21218 Update messages.json (POEditor.com) 2019-11-28 17:53:16 +00:00
Kevin Röbert
8115655a30 Merge branch 'KevinRoebert-master-patch-06543' into 'master'
Update _locales/tr/messages.json

See merge request KevinRoebert/ClearUrls!51
2019-11-28 17:51:02 +00:00
Kevin Röbert
073b55ad74 Update _locales/tr/messages.json 2019-11-28 17:51:02 +00:00
Kevin Röbert
51fe1bcac3 Added new rules + regex fixes
#303
2019-11-27 23:16:08 +01:00
Kevin Röbert
7c5f4c31d5 missing 2019-11-24 18:06:03 +01:00
Kevin Röbert
84c069331f Version 1.9.4 2019-11-24 18:05:42 +01:00
Kevin Röbert
deb7648d61 Exception amazon
#298
2019-11-21 22:46:19 +01:00
Kevin Röbert
46cd3f21d0 Added exceptions for gitlab instances and amazon support chat
#298
2019-11-21 22:40:53 +01:00
Kevin Röbert
26a5b0648f Added exception for gitlab instances
Works only for gitlab instances with git subdomain
2019-11-19 16:40:58 +01:00
Kevin Röbert
120239aa0d downward compatible 2019-11-15 22:56:26 +01:00
Kevin Röbert
a96684b93a Merge branch 'load-balancing-for-static-contents' into 'master'
Load balancing for static contents

See merge request KevinRoebert/ClearUrls!50
2019-11-15 20:28:04 +00:00
Kevin Röbert
ecd5f82b77 Version 1.9.3.1
+ 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).
2019-11-15 21:26:57 +01:00
Kevin Röbert
a645b52db0 .
.
2019-11-15 21:45:43 +01:00
Kevin Röbert
b016226750 Make static data accessible via GitLab pages 2019-11-15 21:43:58 +01:00
Kevin Röbert
80ebc5bffa Version 1.9.3
Fixed wrong initial rules URL
2019-11-15 03:06:32 +01:00
Kevin Röbert
468c2ac4ea Revert "Corrected line endings, so SRI hash are equals to the online versions"
This reverts commit 82ce2d4d4f.
2019-11-12 18:30:49 +01:00
Kevin Röbert
82ce2d4d4f Corrected line endings, so SRI hash are equals to the online versions 2019-11-12 18:25:30 +01:00
Kevin Röbert
f752e8aaff Merge branch 'patch-2' into 'master'
b@spiegel.de

See merge request KevinRoebert/ClearUrls!49
2019-11-12 01:52:22 +00:00
rusty-snake
bb4d543fc2 b@spiegel.de 2019-11-11 16:23:02 +01:00
Kevin Röbert
6eaf8726ee Updated promo pic 2019-11-09 13:47:44 +01:00
Kevin Röbert
0668562306 CI
I'm tired.
2019-11-09 01:46:38 +01:00
Kevin Röbert
722df04af0 CI location fix 2019-11-09 01:44:58 +01:00
Kevin Röbert
aa728302a8 CI fix 2 2019-11-09 01:43:24 +01:00
Kevin Röbert
4a77447992 CI fix 2019-11-09 01:41:42 +01:00
Kevin Röbert
61712e77a2 Version 1.9.2
#290
2019-11-09 01:40:17 +01:00
Kevin Röbert
61b911921e Remove doubleclick from complete blocking
As it turned out, doubleclick is needed for a lot of things, including playing videos.

If you want to block advertisements or domains, you can use advertising blockers like UBlock or Pihole.

ClearURL's task is to remove tracking fields and not to block pages.
2019-10-31 16:44:00 +01:00
Kevin Röbert
13c1bd774c Merge branch 'master' of https://gitlab.com/KevinRoebert/ClearUrls 2019-10-31 16:18:07 +01:00
Kevin Röbert
0384a1a6cc Added exception
#289
2019-10-31 16:17:53 +01:00
Kevin Röbert
cd6d7f2d09 Update messages.json (POEditor.com) 2019-10-30 23:57:07 +00:00
Kevin Röbert
b241428752 Added new redirection
- Added new redirection for smartredirect.de
2019-10-30 22:33:55 +01:00
Kevin Röbert
7b457e7e5e Merge branch 'master' of https://gitlab.com/KevinRoebert/ClearUrls 2019-10-30 21:34:58 +01:00
Kevin Röbert
927f2d8d69 Added redirection and exception
- Added new redirection for ebay
- Added exception #288
2019-10-30 21:34:56 +01:00
Kevin Röbert
0c1fc0646e Merge branch 'patch-1' into 'master'
Remove `redirect_source` parameter on mozilla.org

See merge request KevinRoebert/ClearUrls!48
2019-10-27 15:02:57 +00:00
rusty-snake
ef1b7fbd0e Update data.min.json 2019-10-26 15:47:47 +00:00
Kevin Röbert
8342851d4e Update CHANGELOG.md 2019-10-24 20:22:32 +02:00
Kevin Röbert
d52d8d75e2 Update messages.json (POEditor.com) 2019-10-24 18:18:02 +00:00
Kevin Röbert
dee6c21ad2 Dummy it translation file 2019-10-24 20:18:13 +02:00
Kevin Röbert
92d582b8d2 Version 1.9.1
- Fixed badged in quiet mode
2019-10-24 20:13:38 +02:00
Kevin Röbert
902605f8ee Update Bug.md 2019-10-22 23:55:02 +00:00
Kevin Röbert
4d9b86178e Update README.md 2019-10-22 23:21:01 +00:00
Kevin Röbert
d064537c07 Version 1.9.0
- Added #284
- Added #56
- Fixed #241
- Possible fix & workaround for #203
- Fixed bug in "history tracking injection protection". This option was not disabled, when the global filter switch are on off
- 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 "multiple times URL encodes" recognition
- Refactoring
- Changed background script loading sequence to prevent that required functions are not yet loaded.
2019-10-23 01:16:12 +02:00
Kevin Röbert
9df322a49a Update README.md 2019-10-22 16:26:39 +02:00
Kevin Röbert
99b86e7735 Update Bug.md 2019-10-22 13:17:40 +00:00
Kevin Röbert
145e11deac Updated ui screenshot 2019-10-20 19:41:38 +02:00
Kevin Röbert
4b5ad86c50 Added rules & exception
#282
#283
2019-10-20 19:13:04 +02:00
Kevin Röbert
d7b0094052 Added rules and redirection
#281
2019-10-18 13:21:25 +02:00
Kevin Röbert
ba7541c22e Removed amazon rule
#168
#280
2019-10-14 21:29:42 +02:00
Kevin Röbert
d689a7ce35 Added rules
#279
2019-10-13 19:00:38 +02:00
Kevin Röbert
fd561a1490 Added LinkedIn rules
#278
2019-10-09 16:49:09 +02:00
Kevin Röbert
8cffd42108 Added exceptions
#274
2019-10-08 15:26:00 +02:00
Kevin Röbert
94bb289bfa Add exception
#276
2019-10-08 14:42:41 +02:00
Kevin Röbert
a1b8f8eaaf rule improvement
#276
2019-10-08 14:30:38 +02:00
Kevin Röbert
600a4767d9 Added rules
#272
2019-10-04 15:23:54 +02:00
Kevin Röbert
191fcfce23 Version 1.8.5
#264
#262
#267
2019-09-29 17:10:26 +02:00
Kevin Röbert
1367284767 Added exception
#260
2019-09-26 21:15:38 +02:00
Kevin Röbert
89f6e7ea2d Update i253.html 2019-09-26 19:03:50 +00:00
Kevin Röbert
ad3ab8df07 Version 1.8.4
- Force redirects only on main frames
- Added google link fix script, to avoid the sub frame permission for force redirection on google
2019-09-26 20:50:39 +02:00
Kevin Röbert
7ccd78ad39 Added rule
#258
2019-09-25 00:34:53 +02:00
Kevin Röbert
1d061c4353 Deleted iframe border 2019-09-24 19:47:44 +02:00
Kevin Röbert
0b79d469ed Pages fix 2019-09-24 18:35:33 +02:00
Kevin Röbert
abd61783d2 Update .gitlab-ci.yml 2019-09-24 16:24:22 +00:00
Kevin Röbert
2b14d4f321 Merge branch 'master' of https://gitlab.com/KevinRoebert/ClearUrls 2019-09-24 18:24:07 +02:00
Kevin Röbert
8f1bdbfc7a Fix 2019-09-24 18:23:06 +02:00
Kevin Röbert
bfa5cb1f2f Update .gitlab-ci.yml 2019-09-24 16:19:19 +00:00
Kevin Röbert
f6b5627eaf Add test page to gitlab.io 2019-09-24 18:16:54 +02:00
Kevin Röbert
62d53b6f85 Changed rule 2019-09-24 18:02:51 +02:00
Kevin Röbert
c4612b099b Update README.md 2019-09-23 23:24:16 +00:00
Kevin Röbert
d5d6f58482 Version 1.8.3
+ Fixed OR case
2019-09-23 23:36:24 +02:00
Kevin Röbert
b26b6f9aec Version 1.8.2
+ Fixed #253
+ Fixed #254
2019-09-23 16:20:51 +02:00
Kevin Röbert
fe82c9ee1b Added exception for Tinkoff bank
#255
2019-09-23 14:05:07 +02:00
Kevin Röbert
7db112687e Added exception for googleusercontent proxys
#254
2019-09-23 14:03:24 +02:00
Kevin Röbert
5341f27a16 Added exception
#177
2019-09-15 17:07:24 +02:00
Kevin Röbert
589153f210 Removed rule
#246
2019-09-13 12:58:28 +02:00
Kevin Röbert
e159041600 Version 1.8.1
!47
#206
2019-09-12 22:17:13 +02:00
Kevin Röbert
7e78bed8cb Merge branch 'master' into 'master'
Save to storage only on changes

See merge request KevinRoebert/ClearUrls!47
2019-09-12 19:54:23 +00:00
tartpvule
a4a62b0d1e Add console logging in saveOnDisk 2019-09-12 19:52:10 +00:00
Kevin Röbert
c2577c834f Update README.md 2019-09-12 18:59:55 +00:00
Kevin Röbert
e0122600c3 Update README.md 2019-09-12 18:42:09 +00:00
tartpvule
b951cf1172 Missed a storeHashStatus call point 2019-09-12 16:53:33 +00:00
tartpvule
b0f1c85cd8 Save on storage change and deferred save, part 3
Insert calls to saveOnDisk and deferSaveOnDisk
2019-09-12 16:45:56 +00:00
tartpvule
891723b7b9 Save on storage change and deferred save, part 2
Insert calls to deferSaveOnDisk
2019-09-12 16:44:14 +00:00
tartpvule
6cdcfd099f Save on storage change and deferred save, part 1
Implement saveOnDisk (previously dead code), deferSaveOnDisk
Remove setInterval(saveOnExit, 60000)
2019-09-12 16:42:44 +00:00
Kevin Röbert
afc7aa8740 Added exception
#252
2019-09-12 16:45:43 +02:00
Kevin Röbert
e6cc434757 Added exceptions for #251
#251
2019-09-11 20:01:48 +02:00
Kevin Röbert
d7b2878428 Quick fix 2019-09-11 19:55:06 +02:00
Kevin Röbert
fad7010f10 Added exceptions for blizzard
#248
2019-09-11 19:51:02 +02:00
Kevin Röbert
6ed708b94d Update README.md 2019-09-11 16:26:09 +00:00
Kevin Röbert
d2ec7ce49e Version 1.8.0 2019-09-11 18:08:41 +02:00
Kevin Röbert
9029781974 Added rules
#250
#249
#247
#246
2019-09-11 01:52:53 +02:00
Kevin Röbert
5af81a7d49 Added rules 2019-09-08 19:26:06 +02:00
Kevin Röbert
5ae149509e Version 1.7.4
- Added Hungarian translations by @ztoldy2
2019-09-06 13:13:19 +02:00
Kevin Röbert
9543d0f56f Added exception
#240
2019-09-06 13:05:37 +02:00
Kevin Röbert
deaceaed24 Added rules
#245
#244
#241
#240
2019-09-06 13:00:25 +02:00
Kevin Röbert
246a916fb7 Exception for fairphone bug tracker
#239
2019-09-03 22:02:32 +02:00
Kevin Röbert
5622861cf3 Revert "Chrome double tab fix"
This reverts commit cb7ccae737
2019-08-31 09:18:52 +00:00
Kevin Röbert
cb7ccae737 Chrome double tab fix
I hope this works and does not break anything else ^^"
2019-08-31 01:56:40 +02:00
Kevin Röbert
2e9e6ac21f Added rules
#236
#237
2019-08-31 01:13:09 +02:00
Kevin Röbert
c2a092367a Fixed global ref rule
#235
2019-08-29 01:29:51 +02:00
Kevin Röbert
05f1442d96 Added rule for woot.com
#231
2019-08-23 23:20:53 +02:00
Kevin Röbert
4c43cf8149 Updated rules
#230
2019-08-23 21:07:51 +00:00
Kevin Röbert
962d484712 Update rules
#229
#230
2019-08-22 21:57:05 +02:00
Kevin Röbert
9289e6a276 Added rules
#224
2019-08-16 02:02:53 +02:00
Kevin Röbert
8f64e8310c Added rules
#223
2019-08-16 02:02:00 +02:00
Kevin Röbert
35ed991651 Version 1.7.3
+ Updated Brazilian Portuguese translation by Ramon S.
2019-08-07 22:27:02 +02:00
Kevin Röbert
5d08bbbbad Version 1.7.2
+ Update japanese translation by @Shitennouji
2019-08-07 14:39:08 +02:00
Kevin Röbert
bea5543997 Update messages.json (POEditor.com) 2019-08-07 12:31:50 +00:00
216 changed files with 17549 additions and 10191 deletions

13
.editorconfig Normal file
View 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
View 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
View 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
View 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

View File

@@ -3,40 +3,113 @@ image: debian:latest
before_script:
- export DEBIAN_FRONTEND= noninteractive
- apt-get update -y
- apt-get install -y zip unzip jq
- apt-get install -y zip unzip nodejs jsonlint
# This folder is cached between builds
# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
cache:
paths:
- node_modules/
stages:
- install
- test
- build
# - deploy
hash rules:
stage: build
# test rules:
# stage: test
# script:
# - jsonlint-php data/data.min.json
# only:
# changes:
# - data/data.min.json
#
# hash rules:
# stage: build
# script:
# - sha256sum data/data.min.json | awk '{print $1}' > rules.min.hash
# - node build_tools/minifyDataJSON.js "data/data.min.json" "data.minify.json"
# - sha256sum data.minify.json | awk '{print $1}' > rules.minify.hash
# artifacts:
# paths:
# - rules.min.hash
# - data.minify.json
# - rules.minify.hash
# only:
# refs:
# - merge_requests
# - master
# changes:
# - data/data.min.json
install dependencies:
image: node:latest
stage: install
script:
- sha256sum data/data.min.json | awk '{print $1}' > rules.min.hash
- npm install
test:lint:
image: node:latest
stage: test
dependencies:
- install dependencies
script:
- npm run lint
test:vulnerabilities:
image: node:latest
stage: test
dependencies:
- install dependencies
script:
- npm audit
test:addon:
image: node:latest
stage: test
dependencies:
- install dependencies
script:
- npm run test:ci
coverage: /All files[^|]*\|[^|]*\s+([\d\.]+)/
artifacts:
when: always
paths:
- rules.min.hash
- coverage
reports:
junit: junit.xml
expire_in: 30 days
build firefox:
bundle addon:
stage: build
script:
- zip ClearUrls_firefox -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
- zip ClearURLs -r -FS distribution/*
only:
- master
artifacts:
paths:
- ClearUrls_firefox.zip
- ClearURLs.zip
build chrome:
stage: build
script:
- jq 'del(.applications) | .description=""' manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
- zip ClearUrls_chrome -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
only:
- master
artifacts:
paths:
- ClearUrls_chrome.zip
# pages:
# stage: deploy
# script:
# - mkdir public
# - mkdir public/data
# - mv GitLabPages/* public/
# - cp img/clearurls.svg public/clearurls.svg
# - cp data/data.min.json public/data/data.min.json
# - sha256sum public/data/data.min.json | awk '{print $1}' > public/data/rules.min.hash
# - node build_tools/minifyDataJSON.js "public/data/data.min.json" "public/data/data.minify.json"
# - sha256sum public/data/data.minify.json | awk '{print $1}' > public/data/rules.minify.hash
# artifacts:
# paths:
# - public
# only:
# refs:
# - merge_requests
# - master
# changes:
# - GitLabPages/*
# - img/clearurls.svg
# - data/data.min.json
# - build_tools/minifyDataJSON.js

View File

@@ -36,21 +36,8 @@ You do not have to reinstall Firefox or disable all addons. You can just create
* **Version**: [compulsory. you must provide your version]
* **Platform**: [either `uname -a` output, or if Windows, version and 32-bit or
64-bit]
* **Country**: [The country from which you called the page. You can found your country here: http://ip-api.com/json/?fields=country]
* **Country**: [The country from which you called the page. You can found your country here: https://ipapi.co//country_capital]
### Log
<!-- Please enable the log functionality of ClearURLs and copy your log into this table. -->
<!-- Or if the log is to long, save the html file (press ctrl+s) and attach to this issue the `Log from ClearURLs.html` file -->
| Before processing | After processing | Rule | Time |
|-------------------|------------------|------|------|
| | | | |
<!-- If you attach the html file, please copy into the ``` area -->
```
```
<!-- Please enable the log functionality of ClearURLs and attach the exported log to this bug report. -->
<!-- Here you can find a step by step tutorial "How to enable logging in ClearURLs": https://www.youtube-nocookie.com/embed/Rm1YkwXQDSM -->

6
.prettierrc Normal file
View File

@@ -0,0 +1,6 @@
{
"trailingComma": "all",
"tabWidth": 2,
"semi": false,
"singleQuote": true
}

View File

@@ -4,6 +4,374 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Ongoing
### Changed
- Performance optimizations for rules by [@thexeos](https://gitlab.com/thexeos)
## [1.19.0] - 2020-07-22
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
### Changed
- Changed url decoding to prevent endless loop
## [1.18.1] - 2020-06-07
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
### Changed
- Hotfix for the endless loop on new log limit ([#545](https://gitlab.com/KevinRoebert/ClearUrls/issues/545), [#541](https://gitlab.com/KevinRoebert/ClearUrls/issues/541), [#539](https://gitlab.com/KevinRoebert/ClearUrls/issues/539))
## [1.18.0] - 2020-06-06
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
### Removed
- sha256.jquery.plugin
- Popper.js v1.16.0
- Bootstrap Colorpicker v3.2.0
- Removed `xbl` type from request types, because it throws since 78.0b3 exceptions (no longer supported)
### Added
- Pickr v1.7.0
### Changed
- Replaced sha256.jquery.plugin with native hashing
- Replaced jQuery dependencies with native JavaScript in all core files (jQuery is only required for the log page)
- Hopefully this fixes the performance problems that some users experience when using this addon in conjunction with other addons
- [#256](https://gitlab.com/KevinRoebert/ClearUrls/issues/256)
- [#535](https://gitlab.com/KevinRoebert/ClearUrls/issues/535)
- Restricted the log limit to max. 5000 entries
- Default value is now 100
- Too many log entries have resulted in performance losses for users who have forgotten that they have turned on the log. This step should prevent this.
## [1.17.0] - 2020-04-14
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Updated some strings of Spanish translation
- Updated some strings of French translation
- Updated some strings of Italian translation
- Updated some strings of Russian translation
- Updated some strings of Swedish translation
- Updated some strings of Turkish translation
- Updated some strings of Ukrainian translation
- Updated some strings of Chinese Simple translation
### Fixed
- Fixed a typo in the path to the Datatables JavaScript file
- Fixed [#445](https://gitlab.com/KevinRoebert/ClearUrls/issues/445)
- Fixed [#462](https://gitlab.com/KevinRoebert/ClearUrls/issues/462)
### Added
- Added check for setBadgeTextColor function (only supported in Firefox)
### Removed
- Removed browser-polyfill content script import (seems no longer needed)
- Removed old `applications` value
## [1.16.0] - 2020-03-20
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Added
- Added ETag header filtering [#362](https://gitlab.com/KevinRoebert/ClearUrls/issues/362), [#440](https://gitlab.com/KevinRoebert/ClearUrls/issues/440). Hint: Cache must be cleared before first use, to delete the already existing ETags.
### Fixed
- Fixed spontaneous disappearance of the badged
- Fixed wrong counting of blocked elements (too little was ;D)
### Changed
- Updated all translation
- Changed badged font color to #FFFFFF
- Changed watchdog behavior as follows [#428](https://gitlab.com/KevinRoebert/ClearUrls/issues/428), [#431](https://gitlab.com/KevinRoebert/ClearUrls/issues/431), [#429](https://gitlab.com/KevinRoebert/ClearUrls/issues/429):
- Increased watchdog interval to 60 seconds
- Executed watchdog only if ClearURLs is also active
- Watchdog restarts ClearURLs at most 3 times and only if ClearURLs has rules
- Changed behavior of downloading rules [#428](https://gitlab.com/KevinRoebert/ClearUrls/issues/428), [#431](https://gitlab.com/KevinRoebert/ClearUrls/issues/431), [#429](https://gitlab.com/KevinRoebert/ClearUrls/issues/429):
- If download of hash file fails and no local rules are available, then ClearURLs displays `hash_status_code_5` and deactivates itself
- If download of rules file fails and no local rules are available, then ClearURLs displays `hash_status_code_5` and deactivates itself
## [1.15.0] - 2020-02-16
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Updated Italian translation by [@gioxx](https://gitlab.com/gioxx)
## [1.14.0] - 2020-02-01
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Changed icon
## [1.13.0] - 2020-02-01
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Updated some strings of French translation by lucifer
## [1.12.0] - 2020-01-29
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Updated Russian translation by elfriob
- Updated Spanish translation by [@socram](https://gitlab.com/socram)
## [1.11.0] - 2020-01-06
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Added
- Added hyperlink auditing blocking [#184](https://gitlab.com/KevinRoebert/ClearUrls/issues/184)
- Added yandex link fix script, to avoid URL tracking [#305](https://gitlab.com/KevinRoebert/ClearUrls/issues/305)
## [1.10.0] - 2020-01-03
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Updated to Bootstrap 4.3.1
- Updated to jQuery 3.4.1
- Updated to DataTables 1.10.20
- Deleted unnecessary Bootstrap Dialog lib
- Replaced [pick-a-color](https://github.com/lauren/pick-a-color) with [bootstrap-colorpicker 3.2.0](https://github.com/itsjavi/bootstrap-colorpicker)
- Minor corrections on english translation by [@Sopor](https://gitlab.com/Sopor)
- Replaced glyphicons with [fontawesome 5.12.0](https://github.com/FortAwesome/Font-Awesome/tree/5.12.0)
### Added
- Added [popper.js 1.16.0](https://github.com/popperjs/popper.js/tree/v1.16.0)
- Added Swedish translation by [@Sopor](https://gitlab.com/Sopor)
### Fixed
- Fixed [#338](https://gitlab.com/KevinRoebert/ClearUrls/issues/338)
- Fixed [#333](https://gitlab.com/KevinRoebert/ClearUrls/issues/333)
- Fixed [#332](https://gitlab.com/KevinRoebert/ClearUrls/issues/332)
- Fixed [#307](https://gitlab.com/KevinRoebert/ClearUrls/issues/307)
- Maybe [#315](https://gitlab.com/KevinRoebert/ClearUrls/issues/315) fixed
## [1.9.5] - 2019-12-17
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Added
- Added Turkish translation by Ulaş Çakmak
### Changed
- Updated some strings of French translation by lucifer
### Fixed
- Fixed problem with default RegExp
## [1.9.4] - 2019-11-24
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Fixed
- Fixed toolbar icon on startup [#102](https://gitlab.com/KevinRoebert/ClearUrls/issues/102)
### Added
- Added option to disable/allow domain blocking [#294](https://gitlab.com/KevinRoebert/ClearUrls/issues/294)
### Changed
- Some refactoring
## [1.9.3.1] - 2019-11-15
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Changed data and hash URL to GitLab Pages, to prevent hitting the GitLab infrastructure directly [#295](https://gitlab.com/KevinRoebert/ClearUrls/issues/295#note_245456134).
## [1.9.3] - 2019-11-15
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Fixed
- Fixed wrong initial rules URL
## [1.9.2] - 2019-11-09
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Fixed
- Fixed [#290](https://gitlab.com/KevinRoebert/ClearUrls/issues/290)
### Changed
- Updated some strings of Italian translation by [@gioxx](https://gitlab.com/gioxx)
### Added
- Added a minimal version of the data.min.json file where all line breaks and spaces, as well as default values and empty lists are removed.
## [1.9.1] - 2019-10-24
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Fixed
- Fixed badged in quiet mode
### Added
- Added Italian translation by [@gioxx](https://gitlab.com/gioxx)
## [1.9.0] - 2019-10-22
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Fixed
- Fixed bug in "history tracking injection protection". This option was not disabled, when the global filter switch are on off
- Fixed [#241](https://gitlab.com/KevinRoebert/ClearUrls/issues/241)
- Possible fix for [#203](https://gitlab.com/KevinRoebert/ClearUrls/issues/203)
### Changed
- Refactoring
- Changed background script loading sequence to prevent that required functions are not yet loaded.
### Added
- Added an option to im-/export the log (requires the `downloads` permission)
- Added an option to im-/export the settings (requires the `downloads` permission)
- Added information page for blocked sites, when they are called in the `main_frame`
- Added option to allow referral marketing ([#284](https://gitlab.com/KevinRoebert/ClearUrls/issues/284))
- Added "multiple times URL encodes" recognition
- Added an option to limit the log entries ([#56](https://gitlab.com/KevinRoebert/ClearUrls/issues/56))
## [1.8.5] - 2019-09-29
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Fixed
- Fixed [#264](https://gitlab.com/KevinRoebert/ClearUrls/issues/264)
- Fixed [#262](https://gitlab.com/KevinRoebert/ClearUrls/issues/262)
- Fixed [#267](https://gitlab.com/KevinRoebert/ClearUrls/issues/267)
## [1.8.4] - 2019-09-26
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Force redirects only on main frames
- Added google link fix script, to avoid the sub frame permission for force redirection on google
## [1.8.3] - 2019-09-23
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Fixed
- Fixed OR case
## [1.8.2] - 2019-09-23
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Only redirects, if request is of type main or sub frame to prevent security issues on automatically loaded ressource like images
### Fixed
- Fixed [#253](https://gitlab.com/KevinRoebert/ClearUrls/issues/253)
- Fixed [#254](https://gitlab.com/KevinRoebert/ClearUrls/issues/254)
## [1.8.1] - 2019-09-12
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Improvements on check for android systems ([#206](https://gitlab.com/KevinRoebert/ClearUrls/issues/206))
- Improvements on storage. Away with periodic save of in-memory data to storage. Instead save when there are actual changes by [@tartpvule](https://gitlab.com/tartpvule) in ([!47](https://gitlab.com/KevinRoebert/ClearUrls/merge_requests/47))
## [1.8.0] - 2019-09-11
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Added
- Added default option to skip URLs with a host in a local range
### Fixed
- Fixed [#238](https://gitlab.com/KevinRoebert/ClearUrls/issues/238)
- Fixed wrong count on cleaning tool (forgot to count also the total amount of elements at cleaning tool)
### Changed
- Improvements on check for android systems ([#206](https://gitlab.com/KevinRoebert/ClearUrls/issues/206))
## [1.7.4] - 2019-09-06
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Added
- Added Hungarian translations by [@ztoldy2](https://gitlab.com/ztoldy2)
## [1.7.3] - 2019-08-07
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Updated Brazilian Portuguese translation by Ramon S.
## [1.7.2] - 2019-08-07
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 22
### Changed
- Updated japanese translation by [@Shitennouji](https://gitlab.com/Shitennouji)
## [1.7.1] - 2019-08-04
### Compatibility note

6
PRIVACY.md Normal file
View 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.

View File

@@ -1,43 +1,88 @@
# ClearURLs
<a href="https://www.paypal.me/KevinRoebert" target="_blank"><img src="https://raw.githubusercontent.com/KevinRoebert/DonateButtons/master/Paypal.png" alt="Buy Me A Coffee" height="55"></a>
<a href="https://liberapay.com/kroeb" target="_blank"><img src="https://raw.githubusercontent.com/KevinRoebert/DonateButtons/master/LiberaPay.png" alt="Buy Me A Coffee" height="55"></a>
<a href="https://www.buymeacoffee.com/KevinRoebert" target="_blank"><img src="https://raw.githubusercontent.com/KevinRoebert/DonateButtons/master/BuyMeACoffee.png" alt="Buy Me A Coffee" height="55"></a>
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and now also available for *Chrome* based browsers.
[<img src="https://blog.mozilla.org/addons/files/2020/04/get-the-addon-fx-apr-2020.svg" alt="for Firefox" height="60px">](https://addons.mozilla.org/firefox/addon/clearurls/) [<img src="https://gitlab.com/KevinRoebert/ClearUrls/-/raw/master/promotion/MEA-button.png" alt="for Edge" height="60px">](https://microsoftedge.microsoft.com/addons/detail/mdkdmaickkfdekbjdoojfalpbkgaddei) [<img src="https://developer.chrome.com/webstore/images/ChromeWebStore_BadgeWBorder_v2_206x58.png" alt="for Chrome" height="60px">](https://chrome.google.com/webstore/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk)
This add-on will remove the tracking fields from all URLs which are visited by the browser and use a rule file, namely `data.min.json`.
# <sub><img src="https://gitlab.com/KevinRoebert/ClearUrls/raw/master/img/clearurls.svg" width="64px" height="64px"></sub> ClearURLs [![Gitter](https://badges.gitter.im/ClearURLs/community.svg)](https://gitter.im/ClearURLs/community)
This add-on protects your privacy and block the request from advertising services like *doubleclick.net*.
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and *Chrome* based browsers.
This extension will automatically remove tracking elements from URLs to help protect your privacy when browse through the Internet,
which is regularly updated by us and can be found [here](https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json).
## Application
Large (and small) webpages use elements in the URL, e.g.: https://example.com?source=thisIstheSiteIvisitedBefore to track your online activities. In this example, the source field tells the provider which page you visited before. The add-on will remove these tracking fields from the URL.
Many websites use tracking elements in the URL (e.g. `https://example.com?utm_source=newsletter1&utm_medium=email&utm_campaign=sale`) to mark your online activity.
All that tracking code is not necessary for a website to be displayed or work correctly and can therefore be removed—that is exactly what ClearURLs does.
Another common example are Amazon URLs. If you search for a product on Amazon you will see a very long URL, such as:
```
https://www.amazon.com/dp/exampleProduct/ref=sxin_0_pb?__mk_de_DE=ÅMÅŽÕÑ&keywords=tea&pd_rd_i=exampleProduct&pd_rd_r=8d39e4cd-1e4f-43db-b6e7-72e969a84aa5&pd_rd_w=1pcKM&pd_rd_wg=hYrNl&pf_rd_p=50bbfd25-5ef7-41a2-68d6-74d854b30e30&pf_rd_r=0GMWD0YYKA7XFGX55ADP&qid=1517757263&rnid=2914120011
```
Indeed most of the above URL is tracking code. Once ClearURLs has cleaned the address, it will look like this:
`https://www.amazon.com/dp/exampleProduct`
## Features
* Removes tracking from URLs automatically in the background
* Blocks some common ad domains (optional)
* Has a built-in tool to clean up multiple URLs at once
* Supports redirection to the destination, without tracking services as middleman
* Adds an entry to the context menu so that links can be copied quickly and cleanly
* Blocks hyperlink auditing, also known as *ping tracking* (see also [this article](https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing))
* Prevents ETag tracking
* Prevents tracking injection over history API (see also: [The replaceState() method](https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method))
* Prevents Google from rewriting the search results (to include tracking elements)
* Prevents Yandex from rewriting the search results (to include tracking elements)
## Permissons
Reasoning for needed permissions can be found under [here](https://gitlab.com/KevinRoebert/ClearUrls/issues/159).
## Screenshot
![Interface (version 1.3.4.x)](https://gitlab.com/KevinRoebert/ClearUrls/raw/master/promotion/screens/Popup_1.5.2.png)
![Interface (version 1.14.0)](https://gitlab.com/KevinRoebert/ClearUrls/raw/master/promotion/screens/Popup_v_1.14.0.png)
## Offical installation
Firefox Add-on: [Download](https://addons.mozilla.org/en-US/firefox/addon/clearurls/)
Chrome Add-on: [Download](https://chrome.google.com/webstore/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk)
### Download (for Firefox- and Chrome-Dev only)
## CI/CD Artifacts Download (for Firefox- and Chrome-Dev only)
Here you can download the packed files for the Firefox- and Chrome-Dev:
[Firefox](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearUrls_firefox.zip?job=build%20firefox)
[<img src="promotion/download-128.png"/>](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs.zip?job=bundle%20addon)
[Chrome](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearUrls_chrome.zip?job=build%20chrome)
## Test
If you want to test whether ClearURLs works correctly on your system, you can go to this test page: [https://test.clearurls.xyz/](https://test.clearurls.xyz/)
## Contribute
If you have any suggestions or complaints, please [create an issue.](https://gitlab.com/KevinRoebert/ClearUrls/issues/new)
**Note: If you have any suggestions or complaints regarding the rules, please [create an issue in this repo](https://gitlab.com/anti-tracking/ClearURLs/rules/-/issues/new) or email us rules.support (at) clearurls.xyz (this mail will automatically create a new issue in this repo).**
### Translate ClearURLs
You want to help translating ClearURLs into many languages? Nice
You can choose between two options to contribute. You can create a merge request, or you can use the POEditor to translate ClearURLs.
*Hint: The description field in the translation files are only an information for what the translation is used.
It is not necessary to translate the description field; in the most cases it is empty.*
#### Merge request
If you want to create a merge request, you must open the path [`source/_locales/en/messages.json`](https://github.com/KevinRoebert/ClearUrls/blob/master/source/_locales/en/messages.json) in the ClearURLs repo
and translate the english terms into terms of your language. Once you have translated all the terms, you make a pull request of your translation.
Please push your translation into the folder `_locales/{country code}/messages.json`.
#### POEditor
[<img src="https://poeditor.com/public/images/logo/logo.svg" alt="https://poeditor.com/join/project/vKTpQWWvk2" width="150">](https://poeditor.com/join/project/vKTpQWWvk2)
## Projects that use parts of ClearURLs
* [Uroute](https://github.com/walterl/uroute) used ClearURLs to filter/clean URL before launching browser
* [Scrub](https://gitlab.com/CrunchBangDev/cbd-cogs/-/tree/master/Scrub) used ClearURLs to filter/clean URLs as cog for the Red Discord bot
## Recommended by...
* [ghacks-user.js](https://github.com/ghacksuserjs/ghacks-user.js/wiki/4.1-Extensions)
* [Awesome Humane Tech List](https://github.com/humanetech-community/awesome-humane-tech#tracking)
## Permissions
* [PrivacyTools](https://www.privacytools.io/browsers/#addons)
* ClearURLs is part of Mozilla's recommended extensions program
## Permissions
Reasoning for needed permissions you can find under [this discussion](https://gitlab.com/KevinRoebert/ClearUrls/issues/159).
## Copyright
@@ -45,16 +90,14 @@ We use some third-party scripts in our add-on. The authors and licenses are list
- [WebExtension browser API Polyfill](https://github.com/mozilla/webextension-polyfill) |
Copyright by Mozilla |
[MPL-2.0](https://github.com/mozilla/webextension-polyfill/blob/master/LICENSE)
- [Bootstrap v3.3.7 ](http://getbootstrap.com) |
- [Bootstrap v4.3.1](https://github.com/twbs/bootstrap/tree/v4.3.1) |
Copyright 2011-2016 Twitter, Inc. |
[MIT](https://github.com/twbs/bootstrap/blob/master/LICENSE)
- [jQuery v3.2.1](https://jquery.com/) |
Copyright 2017 The jQuery Foundation |
- [jQuery v3.4.1](https://github.com/jquery/jquery/tree/3.4.1) |
Copyright JS Foundation and other contributors |
[MIT](https://jquery.org/license/)
- [sha256.jquery.plugin](https://github.com/orsozed/sha256.jquery.plugin) |
Copyright 2003, Christoph Bichlmeier |
[MIT](https://raw.github.com/orsozed/JQuery-Plugins/master/license/MIT-LICENSE.txt) |
[GPLv2](https://raw.github.com/orsozed/JQuery-Plugins/master/license/GPL-LICENSE.txt)
- [DataTables](https://datatables.net/) | Copyright 2011-2015 SpryMedia Ltd | [MIT](https://datatables.net/license/)
- [Pick-a-Color v1.2.3](https://github.com/lauren/pick-a-color) | Copyright (c) 2013 Lauren Sperber and Broadstreet Ads |
[MIT](https://github.com/lauren/pick-a-color/blob/master/LICENSE)
- [DataTables v1.10.20](https://github.com/DataTables/DataTables/tree/master) | Copyright (c) 2008-2015 SpryMedia Limited | [MIT](https://datatables.net/license/)
- [Pickr v1.7.0](https://github.com/Simonwep/pickr/tree/1.7.0) | Copyright (c) 2018 - 2020 Simon Reinisch |
[MIT](https://github.com/Simonwep/pickr/blob/master/LICENSE)
- [Font Awesome v5.12.0](https://github.com/FortAwesome/Font-Awesome/tree/5.12.0) | Copyright (c) @fontawesome |
[Font Awesome Free License](https://github.com/FortAwesome/Font-Awesome/blob/master/LICENSE.txt)

46
__tests__/rules/rule.ts Normal file
View 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('([\/?#]|(&|&amp;))+(test=[^&]*)', 'gi').toString())
})
it('should return correct value on toString', () => {
rule = new SimpleRule('test')
expect(rule.toString()).toBe('([\/?#]|(&|&amp;))+(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)
})
})

View 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')
})
})

View File

@@ -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": ""
}
}

View File

@@ -1,283 +0,0 @@
{
"hash_status_code_1": {
"message": "à jour",
"description": ""
},
"hash_status_code_2": {
"message": "mis à jour",
"description": ""
},
"hash_status_code_3": {
"message": "mise à jour disponible",
"description": ""
},
"hash_status_code_4": {
"message": "erreur",
"description": ""
},
"hash_status_code_5": {
"message": "Quelque chose a dysfonctionné",
"description": ""
},
"log_redirect": {
"message": "Cette URL a été redirigée",
"description": ""
},
"log_domain_blocked": {
"message": "Ce domaine est bloqué",
"description": ""
},
"check_os_log": {
"message": "[ClearURLs]: Une base de données pour les URL a été ajoutée",
"description": ""
},
"log_html_page_title": {
"message": "Journaux de ClearURLs",
"description": ""
},
"log_html_table_head_1": {
"message": "Avant traitement",
"description": ""
},
"log_html_table_head_2": {
"message": "Après traitement. ",
"description": ""
},
"log_html_table_head_3": {
"message": "Règle",
"description": ""
},
"log_html_table_head_4": {
"message": "Temps",
"description": ""
},
"log_html_reset_button": {
"message": "Remise à zéro",
"description": ""
},
"log_html_reset_button_title": {
"message": "Réinitialiser les journaux globaux",
"description": ""
},
"popup_html_configs_head": {
"message": "Paramétrages",
"description": ""
},
"popup_html_configs_switch_filter": {
"message": "Filtre",
"description": ""
},
"popup_html_configs_switch_filter_title": {
"message": "Le commutateur de l'extension active ou désactive la fonction de nettoyage de ClearURLs",
"description": ""
},
"popup_html_configs_switch_log": {
"message": "Journalisation",
"description": ""
},
"popup_html_configs_switch_log_title": {
"message": "Les journaux sont enregistrés localement. Si vous navez pas besoin de les consulter, nous déconseillons de les activer",
"description": ""
},
"popup_html_configs_switch_badges": {
"message": "Compteur",
"description": ""
},
"popup_html_configs_switch_badges_title": {
"message": "Afficher le nombre d'URL nettoyées",
"description": ""
},
"popup_html_statistics_head": {
"message": "Statistiques",
"description": ""
},
"popup_html_statistics_elements": {
"message": "Éléments",
"description": ""
},
"popup_html_statistics_blocked": {
"message": "Nb. de bloqués",
"description": ""
},
"popup_html_statistics_percentage": {
"message": "Pourcentage",
"description": ""
},
"popup_html_statistics_reset_button": {
"message": "Remettre à zéro",
"description": ""
},
"popup_html_statistics_reset_button_title": {
"message": "Remettre à zéro les statistiques globales",
"description": ""
},
"popup_html_rules_status_head": {
"message": "Règles de la base de données",
"description": ""
},
"popup_html_log_head": {
"message": "Journaux",
"description": ""
},
"popup_html_log_head_title": {
"message": "Ouvrir les journaux",
"description": ""
},
"popup_html_report_button": {
"message": "Signaler cette URL",
"description": ""
},
"popup_html_report_button_title": {
"message": "Signaler un dysfonctionnement sur cette URL",
"description": ""
},
"core_save_on_disk": {
"message": "[ClearURLs]: Sauvegarder sur le disque.",
"description": ""
},
"core_error": {
"message": "[ClearURLs]: Lextension na pu être démarrée.",
"description": ""
},
"configs_switch_statistics": {
"message": "Statistiques",
"description": ""
},
"configs_switch_statistics_title": {
"message": "Activer ou désactiver les statistiques",
"description": ""
},
"settings_html_page_title": {
"message": "Paramétrages de ClearURLs",
"description": ""
},
"badged_color_label": {
"message": "Couleur du compteur",
"description": ""
},
"setting_html_reset_button": {
"message": "Remettre à létat initial",
"description": ""
},
"setting_html_reset_button_title": {
"message": "Réinitialisation de tous les paramètres",
"description": ""
},
"setting_rule_url_label": {
"message": "L'URL du fichier data.json (règles)",
"description": ""
},
"settings_html_save_button": {
"message": "Sauvegarder et redémarrer lextension",
"description": ""
},
"settings_html_save_button_title": {
"message": "Sauvegarde les paramétrages",
"description": ""
},
"setting_hash_url_label": {
"message": "L'URL du fichier rules.hash (signature de contrôle)",
"description": ""
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Types de requête (webRequest)</a> (niveau expert)",
"description": ""
},
"setting_report_server_label": {
"message": "Serveur pour signaler des URL",
"description": ""
},
"success_report_url": {
"message": "Nous avons reçu votre signalement. Nous allons vérifier cette URL.",
"description": ""
},
"error_report_url": {
"message": "Il semble que cette URL a déjà été signalée.",
"description": ""
},
"donate_button": {
"message": "Subventionner le créateur de ClearURLs.",
"description": ""
},
"clipboard_copy_link": {
"message": "Copier lURL sans le traqueur",
"description": ""
},
"context_menu_enabled": {
"message": "Activer ClearUrls dans le menu contextuel",
"description": ""
},
"history_listener_enabled": {
"message": "Empêcher le suivi par lAPI d'historique (<a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>La méthode replaceState()</a>)",
"description": ""
},
"cleaning_tool_page_title": {
"message": "Outil de nettoyage pour ClearURLs",
"description": ""
},
"cleaning_tool_description": {
"message": "Ici, vous pouvez déposer des URL et ClearURLs les nettoiera par un clic sur le bouton vert. Vous pouvez mettre plusieurs URL mais chaque URL devra être mise sur une ligne séparée.",
"description": ""
},
"cleaning_tool_btn": {
"message": "Nettoyer les URL",
"description": ""
},
"cleaning_tool_dirty_urls_label": {
"message": "Coller ici les URL à nettoyer :",
"description": ""
},
"cleaning_tool_clean_urls_label": {
"message": "Vous trouverez ici les URL nettoyées :",
"description": ""
}
}

View File

@@ -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 は既に報告されているようです。"
}
}

View File

@@ -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": ""
}
}

View File

@@ -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": ""
}
}

View File

@@ -1,202 +0,0 @@
{
"hash_status_code_1": {
"message": "не потребує оновлення",
"description": ""
},
"hash_status_code_2": {
"message": "оновлено",
"description": ""
},
"hash_status_code_3": {
"message": "наявне оновлення",
"description": ""
},
"hash_status_code_4": {
"message": "помилка",
"description": ""
},
"hash_status_code_5": {
"message": "Ой, щось не так!",
"description": ""
},
"log_redirect": {
"message": "Ця URL-адреса перенаправляється",
"description": ""
},
"log_domain_blocked": {
"message": "Цей домен заблоковано",
"description": ""
},
"check_os_log": {
"message": "[ClearURLs]: listener журналу додано.",
"description": ""
},
"log_html_page_title": {
"message": "Журнал ClearURLs",
"description": ""
},
"log_html_table_head_1": {
"message": "Перед обробкою",
"description": ""
},
"log_html_table_head_2": {
"message": "Після обробки",
"description": ""
},
"log_html_table_head_3": {
"message": "Правило",
"description": ""
},
"log_html_table_head_4": {
"message": "Час",
"description": ""
},
"log_html_reset_button": {
"message": "Скинути",
"description": ""
},
"log_html_reset_button_title": {
"message": "Скидання глобального журналу",
"description": ""
},
"popup_html_configs_head": {
"message": "Налаштування",
"description": ""
},
"popup_html_configs_switch_filter": {
"message": "Фільтр",
"description": ""
},
"popup_html_configs_switch_filter_title": {
"message": "Активує функцію очищення ClearURLs. Якщо вимкнути - додаток не працюватиме",
"description": ""
},
"popup_html_configs_switch_log": {
"message": "Журнал",
"description": ""
},
"popup_html_configs_switch_log_title": {
"message": "Журнал зберігається лише локально. Не активуйте цю функцію, якщо вона вам не потрібна",
"description": ""
},
"popup_html_configs_switch_badges": {
"message": "Позначки",
"description": ""
},
"popup_html_configs_switch_badges_title": {
"message": "Показати кількість очищених URL",
"description": ""
},
"popup_html_statistics_head": {
"message": "Статистика",
"description": ""
},
"popup_html_statistics_elements": {
"message": "Елементи",
"description": ""
},
"popup_html_statistics_blocked": {
"message": "Заблоковано",
"description": ""
},
"popup_html_statistics_percentage": {
"message": "Відсоток",
"description": ""
},
"popup_html_statistics_reset_button": {
"message": "Скинути",
"description": ""
},
"popup_html_statistics_reset_button_title": {
"message": "Скидання глобальної статистики",
"description": ""
},
"popup_html_rules_status_head": {
"message": "Актуальність правил",
"description": ""
},
"popup_html_log_head": {
"message": "Журнал",
"description": ""
},
"popup_html_log_head_title": {
"message": "Відкрити журнал",
"description": ""
},
"popup_html_report_button": {
"message": "Повідомити про URL",
"description": ""
},
"popup_html_report_button_title": {
"message": "Повідомити про URL з цієї вкладки.",
"description": ""
},
"core_save_on_disk": {
"message": "[ClearURLs]: Зберегти на диск.",
"description": ""
},
"core_error": {
"message": "[ClearURLs]: Не вдалося запустити додаток.",
"description": ""
},
"configs_switch_statistics": {
"message": "Статистика",
"description": ""
},
"configs_switch_statistics_title": {
"message": "Увімкнення чи вимкнення статистики",
"description": ""
},
"settings_html_page_title": {
"message": "Налаштування ClearURLs",
"description": ""
},
"badged_color_label": {
"message": "Колір піктограми",
"description": ""
},
"setting_html_reset_button": {
"message": "Скинути",
"description": ""
},
"setting_html_reset_button_title": {
"message": "Скинути все",
"description": ""
},
"setting_rule_url_label": {
"message": "Посилання на файл data.json (правила)",
"description": ""
},
"settings_html_save_button": {
"message": "Зберегти і перезавантажити додаток",
"description": ""
},
"settings_html_save_button_title": {
"message": "Збереження налаштувань",
"description": ""
},
"setting_hash_url_label": {
"message": "Посилання на файл rules.hash (хеш)",
"description": ""
},
"setting_types_label": {
"message": "<a href='https:\/\/developer.mozilla.org\/en-US\/docs\/Mozilla\/Add-ons\/WebExtensions\/API\/webRequest\/ResourceType' target='_blank'>Типи запитів<\/a> (експертний рівень)",
"description": ""
},
"setting_report_server_label": {
"message": "Звіт про сервер URL",
"description": ""
},
"success_report_url": {
"message": "Успішно повідомлено про URL-адресу. Ми невдовзі це перевіримо.",
"description": ""
},
"error_report_url": {
"message": "Схоже, про цю URL-адресу вже повідомлено.",
"description": ""
},
"donate_button": {
"message": "Внесок для розробників ClearURLs.",
"description": ""
}
}

View File

@@ -1,291 +0,0 @@
{
"hash_status_code_1": {
"message": "已是最新的",
"description": ""
},
"hash_status_code_2": {
"message": "已更新",
"description": ""
},
"hash_status_code_3": {
"message": "有可用的更新",
"description": ""
},
"hash_status_code_4": {
"message": "错误",
"description": ""
},
"hash_status_code_5": {
"message": "发生错误",
"description": ""
},
"log_redirect": {
"message": "此网址已被转址",
"description": ""
},
"log_domain_blocked": {
"message": "此网域已被封锁",
"description": ""
},
"check_os_log": {
"message": "[ClearURLs]: 已新增日志聆听者",
"description": ""
},
"log_html_page_title": {
"message": "ClearURLs日志",
"description": ""
},
"log_html_table_head_1": {
"message": "处理前",
"description": ""
},
"log_html_table_head_2": {
"message": "处理后",
"description": ""
},
"log_html_table_head_3": {
"message": "规则",
"description": ""
},
"log_html_table_head_4": {
"message": "时间",
"description": ""
},
"log_html_reset_button": {
"message": "重置",
"description": ""
},
"log_html_reset_button_title": {
"message": "重置全局日志",
"description": ""
},
"popup_html_configs_head": {
"message": "设定",
"description": ""
},
"popup_html_configs_switch_filter": {
"message": "过滤器",
"description": ""
},
"popup_html_configs_switch_filter_title": {
"message": "此为ClearURLs的主开关. 若关闭则此插件失效.",
"description": ""
},
"popup_html_configs_switch_log": {
"message": "日志",
"description": ""
},
"popup_html_configs_switch_log_title": {
"message": "日志会被储存于本地. 若不需要此功能建议关闭.",
"description": ""
},
"popup_html_configs_switch_badges": {
"message": "徽章",
"description": ""
},
"popup_html_configs_switch_badges_title": {
"message": "显示已清理数量",
"description": ""
},
"popup_html_statistics_head": {
"message": "统计",
"description": ""
},
"popup_html_statistics_elements": {
"message": "元件",
"description": ""
},
"popup_html_statistics_blocked": {
"message": "已阻挡",
"description": ""
},
"popup_html_statistics_percentage": {
"message": "比例",
"description": ""
},
"popup_html_statistics_reset_button": {
"message": "重置",
"description": ""
},
"popup_html_statistics_reset_button_title": {
"message": "重置全局统计",
"description": ""
},
"popup_html_rules_status_head": {
"message": "规则-状态",
"description": ""
},
"popup_html_log_head": {
"message": "日志",
"description": ""
},
"popup_html_log_head_title": {
"message": "开启日志",
"description": ""
},
"popup_html_report_button": {
"message": "回报目前网址",
"description": ""
},
"popup_html_report_button_title": {
"message": "回报该分页目前网址",
"description": ""
},
"core_save_on_disk": {
"message": "[ClearURLs]: 储存于本地",
"description": ""
},
"core_error": {
"message": "[ClearURLs]: 插件无法启动",
"description": ""
},
"configs_switch_statistics": {
"message": "统计",
"description": ""
},
"configs_switch_statistics_title": {
"message": "开启或关闭统计功能",
"description": ""
},
"settings_html_page_title": {
"message": "ClearURLs设定",
"description": ""
},
"badged_color_label": {
"message": "徽章颜色",
"description": ""
},
"setting_html_reset_button": {
"message": "重置",
"description": ""
},
"setting_html_reset_button_title": {
"message": "重置所有设定",
"description": ""
},
"setting_rule_url_label": {
"message": "data.json档的网址 (规则)",
"description": ""
},
"settings_html_save_button": {
"message": "储存并重启插件",
"description": ""
},
"settings_html_save_button_title": {
"message": "储存设定",
"description": ""
},
"setting_hash_url_label": {
"message": "rules.hash档的网址 (校验)",
"description": ""
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>请求类型</a> (进阶设定)",
"description": ""
},
"setting_report_server_label": {
"message": "回报网址",
"description": ""
},
"success_report_url": {
"message": "该网址已成功回报",
"description": ""
},
"error_report_url": {
"message": "该网址已被回报过",
"description": ""
},
"donate_button": {
"message": "给ClearURLs的作者一点贊助",
"description": ""
},
"clipboard_copy_link": {
"message": "複製清理过的网址",
"description": ""
},
"context_menu_enabled": {
"message": "显示右键选单条目",
"description": ""
},
"history_listener_enabled": {
"message": "Prevent tracking injection over history API (详见: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
"description": ""
},
"cleaning_tool_page_title": {
"message": "ClearURLs的网址清理工具",
"description": ""
},
"cleaning_tool_description": {
"message": "此工具提供手动清理网址的功能. 在下方贴上网址并按下绿色按钮, ClearURLs将会输出清理后的网址. 若要同时清理多个网址, 请将每个置于不同行.",
"description": ""
},
"cleaning_tool_btn": {
"message": "网址清理工具",
"description": ""
},
"cleaning_tool_dirty_urls_label": {
"message": "清理前的网址:",
"description": ""
},
"cleaning_tool_clean_urls_label": {
"message": "清理后的网址:",
"description": ""
}
}

View File

@@ -1,291 +0,0 @@
{
"hash_status_code_1": {
"message": "已是最新的",
"description": ""
},
"hash_status_code_2": {
"message": "已更新",
"description": ""
},
"hash_status_code_3": {
"message": "有可用的更新",
"description": ""
},
"hash_status_code_4": {
"message": "錯誤",
"description": ""
},
"hash_status_code_5": {
"message": "發生錯誤",
"description": ""
},
"log_redirect": {
"message": "此網址已被轉址",
"description": ""
},
"log_domain_blocked": {
"message": "此網域已被封鎖",
"description": ""
},
"check_os_log": {
"message": "[ClearURLs]: 已新增記錄監聽器",
"description": ""
},
"log_html_page_title": {
"message": "ClearURLs歷史記錄",
"description": ""
},
"log_html_table_head_1": {
"message": "處理前",
"description": ""
},
"log_html_table_head_2": {
"message": "處理後",
"description": ""
},
"log_html_table_head_3": {
"message": "規則",
"description": ""
},
"log_html_table_head_4": {
"message": "時間",
"description": ""
},
"log_html_reset_button": {
"message": "重置",
"description": ""
},
"log_html_reset_button_title": {
"message": "重置全域記錄檔",
"description": ""
},
"popup_html_configs_head": {
"message": "設定",
"description": ""
},
"popup_html_configs_switch_filter": {
"message": "過濾器",
"description": ""
},
"popup_html_configs_switch_filter_title": {
"message": "此為ClearURLs的主開關. 若關閉則此附件元件失效.",
"description": ""
},
"popup_html_configs_switch_log": {
"message": "歷史記錄",
"description": ""
},
"popup_html_configs_switch_log_title": {
"message": "記錄檔會被儲存於本機. 若不需要此功能建議關閉.",
"description": ""
},
"popup_html_configs_switch_badges": {
"message": "徽章",
"description": ""
},
"popup_html_configs_switch_badges_title": {
"message": "顯示已清理數量",
"description": ""
},
"popup_html_statistics_head": {
"message": "統計",
"description": ""
},
"popup_html_statistics_elements": {
"message": "元件",
"description": ""
},
"popup_html_statistics_blocked": {
"message": "已阻擋",
"description": ""
},
"popup_html_statistics_percentage": {
"message": "比例",
"description": ""
},
"popup_html_statistics_reset_button": {
"message": "重置",
"description": ""
},
"popup_html_statistics_reset_button_title": {
"message": "重置全域統計",
"description": ""
},
"popup_html_rules_status_head": {
"message": "規則-狀態",
"description": ""
},
"popup_html_log_head": {
"message": "記錄",
"description": ""
},
"popup_html_log_head_title": {
"message": "開啟記錄",
"description": ""
},
"popup_html_report_button": {
"message": "回報目前網址",
"description": ""
},
"popup_html_report_button_title": {
"message": "回報該分頁目前網址",
"description": ""
},
"core_save_on_disk": {
"message": "[ClearURLs]: 儲存於本機",
"description": ""
},
"core_error": {
"message": "[ClearURLs]: 附加元件無法啟動",
"description": ""
},
"configs_switch_statistics": {
"message": "統計",
"description": ""
},
"configs_switch_statistics_title": {
"message": "開啟或關閉統計功能",
"description": ""
},
"settings_html_page_title": {
"message": "ClearURLs設定",
"description": ""
},
"badged_color_label": {
"message": "徽章顏色",
"description": ""
},
"setting_html_reset_button": {
"message": "重置",
"description": ""
},
"setting_html_reset_button_title": {
"message": "重置所有設定",
"description": ""
},
"setting_rule_url_label": {
"message": "data.json檔的網址 (規則)",
"description": ""
},
"settings_html_save_button": {
"message": "儲存並重啟附件元件",
"description": ""
},
"settings_html_save_button_title": {
"message": "儲存設定",
"description": ""
},
"setting_hash_url_label": {
"message": "rules.hash檔的網址 (校驗)",
"description": ""
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>請求類型</a> (進階設定)",
"description": ""
},
"setting_report_server_label": {
"message": "回報網址",
"description": ""
},
"success_report_url": {
"message": "該網址已成功回報",
"description": ""
},
"error_report_url": {
"message": "該網址已被回報過",
"description": ""
},
"donate_button": {
"message": "給ClearURLs的作者一點贊助",
"description": ""
},
"clipboard_copy_link": {
"message": "複製清理過的網址",
"description": ""
},
"context_menu_enabled": {
"message": "顯示右鍵選單項目",
"description": ""
},
"history_listener_enabled": {
"message": "Prevent tracking injection over history API (詳見: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
"description": ""
},
"cleaning_tool_page_title": {
"message": "ClearURLs的網址清理工具",
"description": ""
},
"cleaning_tool_description": {
"message": "此工具提供手動清理網址的功能. 在下方貼上網址並按下綠色按鈕, ClearURLs將會輸出清理後的網址. 若要同時清理多個網址, 請將每個置於不同行.",
"description": ""
},
"cleaning_tool_btn": {
"message": "網址清理工具",
"description": ""
},
"cleaning_tool_dirty_urls_label": {
"message": "清理前的網址:",
"description": ""
},
"cleaning_tool_clean_urls_label": {
"message": "清理後的網址:",
"description": ""
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,767 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for the core functionalities.
*/
var providers = [];
var prvKeys = [];
var badges = [];
var tabid = 0;
var siteBlockedAlert = 'javascript:void(0)';
var dataHash;
var localDataHash;
var os;
var currentURL;
/**
* Helper function which remove the tracking fields
* for each provider given as parameter.
*
* @param {Provider} provider Provider-Object
* @return {Array} Array with changes and url fields
*/
function removeFieldsFormURL(provider, pureUrl)
{
var url = pureUrl;
var domain = "";
var fragments = "";
var fields = "";
var rules = provider.getRules();
var changes = false;
var cancel = false;
var rawRules = provider.getRawRules();
/*
* Apply raw rules to the URL.
*/
rawRules.forEach(function(rawRule) {
var beforReplace = url;
url = url.replace(new RegExp(rawRule, "gi"), "");
if(beforReplace !== url) {
//Log the action
if(storage.loggingStatus)
{
pushToLog(beforReplace, url, rawRule);
}
if(badges[tabid] == null) badges[tabid] = 0;
increaseURLCounter();
if(!checkOSAndroid())
{
if(storage.badgedStatus) {
browser.browserAction.setBadgeText({text: (++badges[tabid]).toString(), tabId: tabid});
}
else
{
browser.browserAction.setBadgeText({text: "", tabId: tabid});
}
}
changes = true;
}
});
if(existsFragments(url)) {
domain = url.replace(new RegExp("#.*", "i"), "");
}
if(existsFields(url)) {
domain = url.replace(new RegExp("\\?.*", "i"), "");
}
/*
* Expand the url by provider redirections. So no tracking on
* url redirections form sites to sites.
*/
var re = provider.getRedirection(url);
if(re !== null)
{
url = decodeURIComponent(re);
//Log the action
pushToLog(pureUrl, url, translate('log_redirect'));
return {
"redirect": true,
"url": url
};
}
if(existsFields(url)) {
fields = "?"+extractFileds(url).rmEmpty().join("&");
}
if(existsFragments(url)) {
fragments = "#"+extractFragments(url).rmEmpty().join("&");
}
/**
* Only test for matches, if there are fields or fragments that can be cleaned.
*/
if(fields !== "" || fragments !== "")
{
rules.forEach(function(rule) {
var beforReplace = fields;
var beforReplaceFragments = fragments;
fields = fields.replace(new RegExp(rule, "gi"), "");
fragments = fragments.replace(new RegExp(rule, "gi"), "");
if(beforReplace !== fields || beforReplaceFragments !== fragments)
{
//Log the action
if(storage.loggingStatus)
{
var tempURL = domain;
var tempBeforeURL = domain;
if(fields !== "") tempURL += "?"+fields.replace("?&", "?").replace("?", "");
if(fragments !== "") tempURL += "#"+fragments.replace("#&","#").replace("#", "");
if(beforReplace !== "") tempBeforeURL += "?"+beforReplace.replace("?&", "?").replace("?", "");
if(beforReplaceFragments !== "") tempBeforeURL += "#"+beforReplaceFragments.replace("#&","#").replace("#", "");
pushToLog(tempBeforeURL, tempURL, rule);
}
if(badges[tabid] == null) badges[tabid] = 0;
increaseURLCounter();
if(!checkOSAndroid())
{
if(storage.badgedStatus) {
browser.browserAction.setBadgeText({text: (++badges[tabid]).toString(), tabId: tabid});
}
else
{
browser.browserAction.setBadgeText({text: "", tabId: tabid});
}
}
changes = true;
}
});
var finalURL = domain;
if(fields !== "") finalURL += "?"+fields.replace("?", "");
if(fragments !== "") finalURL += "#"+fragments.replace("#", "");
url = finalURL.replace(new RegExp("\\?&"), "?").replace(new RegExp("#&"), "#");
}
if(provider.isCaneling()){
pushToLog(pureUrl, pureUrl, translate('log_domain_blocked'));
if(badges[tabid] == null)
{
badges[tabid] = 0;
}
increaseURLCounter();
if(!checkOSAndroid())
{
if(storage.badgedStatus) {
browser.browserAction.setBadgeText({text: (++badges[tabid]).toString(), tabId: tabid});
}
else
{
browser.browserAction.setBadgeText({text: "", tabId: tabid});
}
}
cancel = true;
}
return {
"changes": changes,
"url": url,
"cancel": cancel
};
}
function start()
{
/**
* Save OS Version
*/
chrome.runtime.getPlatformInfo(function(info) {
os = info.os;
changeIcon();
/**
* Initialize the JSON provider object keys.
*
* @param {JSON Object} obj
*/
function getKeys(obj){
for(var key in obj){
prvKeys.push(key);
}
}
/**
* Initialize the providers form the JSON object.
*
*/
function createProviders()
{
data = storage.ClearURLsData;
for(var p = 0; p < prvKeys.length; p++)
{
//Create new provider
providers.push(new Provider(prvKeys[p], data.providers[prvKeys[p]].completeProvider,
data.providers[prvKeys[p]].forceRedirection));
//Add URL Pattern
providers[p].setURLPattern(data.providers[prvKeys[p]].urlPattern);
//Add rules to provider
for(var r = 0; r < data.providers[prvKeys[p]].rules.length; r++)
{
providers[p].addRule(data.providers[prvKeys[p]].rules[r]);
}
//Add raw rules to provider
for(var raw = 0; raw < data.providers[prvKeys[p]].rawRules.length; raw++)
{
providers[p].addRawRule(data.providers[prvKeys[p]].rawRules[raw]);
}
//Add exceptions to provider
for(var e = 0; e < data.providers[prvKeys[p]].exceptions.length; e++)
{
providers[p].addException(data.providers[prvKeys[p]].exceptions[e]);
}
//Add redirections to provider
for(var re = 0; re < data.providers[prvKeys[p]].redirections.length; re++)
{
providers[p].addRedirection(data.providers[prvKeys[p]].redirections[re]);
}
}
}
/**
* Convert the external data to Objects and
* call the create provider function.
*
* @param {String} retrievedText - pure data form github
*/
function toObject(retrievedText) {
getKeys(storage.ClearURLsData.providers);
createProviders();
}
/**
* Get the hash for the rule file on github.
* Check the hash with the hash form the local file.
* If the hash has changed, then download the new rule file.
* Else do nothing.
*/
function getHash()
{
//Get the target hash from github
fetch(storage.hashURL)
.then(function(response){
var responseTextHash = response.clone().text().then(function(responseTextHash){
if(response.ok && $.trim(responseTextHash))
{
dataHash = responseTextHash;
if($.trim(dataHash) !== $.trim(localDataHash))
{
fetchFromURL();
}
else {
toObject(storage.ClearURLsData);
storeHashStatus(1);
}
}
else {
dataHash = false;
}
});
});
}
/*
* ##################################################################
* # Fetch Rules & Exception from URL #
* ##################################################################
*/
function fetchFromURL()
{
fetch(storage.ruleURL)
.then(checkResponse);
function checkResponse(response)
{
var responseText = response.clone().text().then(function(responseText){
if(response.ok && $.trim(responseText))
{
var downloadedFileHash = $.sha256(responseText);
if($.trim(downloadedFileHash) === $.trim(dataHash))
{
storage.ClearURLsData = responseText;
storage.dataHash = downloadedFileHash;
storeHashStatus(2);
}
else {
storeHashStatus(3);
}
storage.ClearURLsData = JSON.parse(storage.ClearURLsData);
toObject(storage.ClearURLsData);
}
});
}
}
// ##################################################################
/*
* ##################################################################
* # Supertyp Provider #
* ##################################################################
*/
/**
* Declare constructor
*
* @param {String} _name Provider name
* @param {boolean} _completeProvider Set URL Pattern as rule
* @param {boolean} _forceRedirection Whether redirects should be enforced via a "tabs.update"
* @param {boolean} _isActive Is the provider active?
*/
function Provider(_name, _completeProvider = false, _forceRedirection = false, _isActive = true){
var name = _name;
var urlPattern;
var enabled_rules = {};
var disabled_rules = {};
var enabled_exceptions = {};
var disabled_exceptions = {};
var canceling = _completeProvider;
var enabled_redirections = {};
var disabled_redirections = {};
var active = _isActive;
var enabled_rawRules = {};
var disabled_rawRules = {};
if(_completeProvider){
enabled_rules[".*"] = true;
}
/**
* Returns whether redirects should be enforced via a "tabs.update"
* @return {boolean} whether redirects should be enforced
*/
this.shouldForceRedirect = function() {
return _forceRedirection;
};
/**
* Returns the provider name.
* @return {String}
*/
this.getName = function() {
return name;
};
/**
* Add URL pattern.
*
* @require urlPatterns as RegExp
*/
this.setURLPattern = function(urlPatterns) {
urlPattern = new RegExp(urlPatterns, "i");
};
/**
* Return if the Provider Request is canceled
* @return {Boolean} isCanceled
*/
this.isCaneling = function() {
return canceling;
};
/**
* Check the url is matching the ProviderURL.
*
* @return {boolean} ProviderURL as RegExp
*/
this.matchURL = function(url) {
return urlPattern.test(url) && !(this.matchException(url));
};
/**
* Add a rule to the rule array
* and replace old rule with new rule.
*
* @param {String} rule RegExp as string
* @param {boolean} isActive Is this rule active?
*/
this.addRule = function(rule, isActive = true) {
rule = "([\\/|\\?|#]|(&|&amp;))+("+rule+"=[^\\/|\\?|&]*)";
if(isActive)
{
enabled_rules[rule] = true;
if(disabled_rules[rule] !== undefined)
{
delete disabled_rules[rule];
}
}
else {
disabled_rules[rule] = true;
if(enabled_rules[rule] !== undefined)
{
delete enabled_rules[rule];
}
}
};
/**
* Return all active rules as an array.
*
* @return Array RegExp strings
*/
this.getRules = function() {
return Object.keys(enabled_rules);
};
/**
* Add a raw rule to the raw rule array
* and replace old raw rule with new raw rule.
*
* @param {String} rule RegExp as string
* @param {boolean} isActive Is this rule active?
*/
this.addRawRule = function(rule, isActive = true) {
if(isActive)
{
enabled_rawRules[rule] = true;
if(disabled_rawRules[rule] !== undefined)
{
delete disabled_rawRules[rule];
}
}
else {
disabled_rawRules[rule] = true;
if(enabled_rawRules[rule] !== undefined)
{
delete enabled_rawRules[rule];
}
}
};
/**
* Return all active raw rules as an array.
*
* @return Array RegExp strings
*/
this.getRawRules = function() {
return Object.keys(enabled_rawRules);
};
/**
* Add a exception to the exceptions array
* and replace old with new exception.
*
* @param {String} exception RegExp as string
* @param {Boolean} isActive Is this exception acitve?
*/
this.addException = function(exception, isActive = true) {
if(isActive)
{
enabled_exceptions[exception] = true;
if(disabled_exceptions[exception] !== undefined)
{
delete disabled_exceptions[exception];
}
}
else {
disabled_exceptions[exception] = true;
if(enabled_exceptions[exception] !== undefined)
{
delete enabled_exceptions[exception];
}
}
};
/**
* Private helper method to check if the url
* an exception.
*
* @param {String} url RegExp as string
* @return {boolean} if matching? true: false
*/
this.matchException = function(url) {
var result = false;
//Add the site blocked alert to every exception
if(url == siteBlockedAlert) return true;
for(var exception in enabled_exceptions) {
if(result) break;
exception_regex = new RegExp(exception, "i");
result = exception_regex.test(url);
}
return result;
};
/**
* Add a redirection to the redirections array
* and replace old with new redirection.
*
* @param {String} redirection RegExp as string
* @param {Boolean} isActive Is this redirection active?
*/
this.addRedirection = function(redirection, isActive = true) {
if(isActive)
{
enabled_redirections[redirection] = true;
if(disabled_redirections[redirection] !== undefined)
{
delete disabled_redirections[redirection];
}
}
else {
disabled_redirections[redirection] = true;
if(enabled_redirections[redirection] !== undefined)
{
delete enabled_redirections[redirection];
}
}
};
/**
* Return all redirection.
*
* @return url
*/
this.getRedirection = function(url) {
var re = null;
for(var redirection in enabled_redirections) {
result = (url.match(new RegExp(redirection, "i")));
if (result && result.length > 0 && redirection)
{
re = (new RegExp(redirection, "i")).exec(url)[1];
break;
}
}
return re;
};
}
// ##################################################################
/**
* Function which called from the webRequest to
* remove the tracking fields from the url.
*
* @param {webRequest} request webRequest-Object
* @return {Array} redirectUrl or none
*/
function clearUrl(request)
{
var URLbeforeReplaceCount = countFields(request.url);
//Add Fields form Request to global url counter
increaseGlobalURLCounter(URLbeforeReplaceCount);
if(storage.globalStatus){
var result = {
"changes": false,
"url": "",
"redirect": false,
"cancel": false
};
/*
* Call for every provider the removeFieldsFormURL method.
*/
for (var i = 0; i < providers.length; i++) {
if(providers[i].matchURL(request.url))
{
result = removeFieldsFormURL(providers[i], request.url);
}
/*
* Expand urls and bypass tracking.
* Cancel the active request.
*/
if(result.redirect)
{
if(providers[i].shouldForceRedirect()) {
browser.tabs.update(request.tabId, {url: result.url});
return {cancel: true};
}
return {
redirectUrl: result.url
};
}
/*
* Cancel the Request and redirect to the site blocked alert page,
* to inform the user about the full url blocking.
*/
if(result.cancel){
return {
redirectUrl: siteBlockedAlert
};
}
/*
* Ensure that the function go not into
* a loop.
*/
if(result.changes){
return {
redirectUrl: result.url
};
}
}
}
// Default case
return {};
}
/**
* Call loadOldDataFromStore, getHash, counter, status and log functions
*/
loadOldDataFromStore();
getHash();
setBadgedStatus();
/**
* Call by each tab is updated.
* And if url has changed.
*/
function handleUpdated(tabId, changeInfo, tabInfo) {
if(changeInfo.url)
{
delete badges[tabId];
}
currentURL = tabInfo.url;
}
/**
* Call by each tab is updated.
*/
browser.tabs.onUpdated.addListener(handleUpdated);
/**
* Call by each tab change to set the actual tab id
*/
function handleActivated(activeInfo) {
tabid = activeInfo.tabId;
browser.tabs.get(tabid).then(function (tab) {
currentURL = tab.url;
});
}
/**
* Call by each tab change.
*/
browser.tabs.onActivated.addListener(handleActivated);
/**
* Check the request.
*/
function promise(requestDetails)
{
if(isDataURL(requestDetails))
{
return {};
}
else {
var ret = clearUrl(requestDetails);
return ret;
}
}
/**
* To prevent long loading on data urls
* we will check here for data urls.
*
* @type {requestDetails}
* @return {boolean}
*/
function isDataURL(requestDetails) {
var s = requestDetails.url;
return s.substring(0,4) == "data";
}
/**
* Call by each Request and checking the url.
*
* @type {Array}
*/
browser.webRequest.onBeforeRequest.addListener(
promise,
{urls: ["<all_urls>"], types: getData("types")},
["blocking"]
);
});
}
/**
* Function to log all activities from ClearUrls.
* Only logging when activated.
* The log is only temporary saved in the cache and will
* permanently saved with the saveLogOnClose function.
*
* @param beforeProcessing the url before the clear process
* @param afterProcessing the url after the clear process
* @param rule the rule that triggered the process
*/
function pushToLog(beforeProcessing, afterProcessing, rule)
{
if(storage.loggingStatus)
{
storage.log.log.push(
{
"before": beforeProcessing,
"after": afterProcessing,
"rule": rule,
"timestamp": Date.now()
}
);
}
}

View File

@@ -1,80 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
var cleanedURLs = [];
var i = 0;
var length = 0;
/**
* Load only when document is ready
*/
$(document).ready(function(){
setText();
$('#cleaning_tool_btn').on("click", cleanURLs);
});
/**
* This function cleans all URLs line by line in the textarea.
*/
function cleanURLs() {
var cleanTArea = $('#cleanURLs');
var dirtyTArea = $('#dirtyURLs');
var urls = dirtyTArea.val().split('\n');
cleanedURLs = [];
length = urls.length;
for(i=0; i < length; i++) {
browser.runtime.sendMessage({
function: "pureCleaning",
params: [urls[i]]
}).then((data) => {
cleanedURLs.push(data.response);
if(i >= length-1) {
cleanTArea.val(cleanedURLs.join('\n'));
}
}, handleError);
}
}
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
*/
function translate(string)
{
return browser.i18n.getMessage(string);
}
/**
* Set the text for the UI.
*/
function setText()
{
document.title = translate('cleaning_tool_page_title');
$('#page_title').text(translate('cleaning_tool_page_title'));
$('#cleaning_tool_description').text(translate('cleaning_tool_description'));
$('#cleaning_tool_btn').text(translate('cleaning_tool_btn'));
$('#cleaning_tool_dirty_urls_label').text(translate('cleaning_tool_dirty_urls_label'));
$('#cleaning_tool_clean_urls_label').text(translate('cleaning_tool_clean_urls_label'));
}
function handleError(error) {
console.log(`Error: ${error}`);
}

View File

@@ -1,57 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for context menu cleaning functions
* and based on: https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types
*/
function contextMenuStart() {
if(storage.contextMenuEnabled) {
browser.contextMenus.create({
id: "copy-link-to-clipboard",
title: translate("clipboard_copy_link"),
contexts: ["link"]
});
browser.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === "copy-link-to-clipboard") {
const url = pureCleaning(info.linkUrl);
const code = "copyToClipboard(" +
JSON.stringify(url)+");";
browser.tabs.executeScript({
code: "typeof copyToClipboard === 'function';",
}).then((results) => {
if (!results || results[0] !== true) {
return browser.tabs.executeScript(tab.id, {
file: "/external_js/clipboard-helper.js",
});
}
}).then(() => {
return browser.tabs.executeScript(tab.id, {
code,
});
}).catch((error) => {
console.error("Failed to copy text: " + error);
});
}
});
}
}

View File

@@ -1,53 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for listen on history changes.
* This technique is often used to inject tracking code into the location bar,
* because all feature events will use the updated URL.
*/
function historyListenerStart() {
if(storage.historyListenerEnabled) {
browser.webNavigation.onHistoryStateUpdated.addListener(historyCleaner);
}
}
/**
* Function that is triggered on history changes. Injects script into page
* to clean links that were pushed to the history stack with the
* history.replaceState method.
* @param {state object} details The state object is a JavaScript object
* which is associated with the new history entry created by replaceState()
*/
function historyCleaner(details) {
var urlBefore = details.url;
var urlAfter = pureCleaning(details.url);
if(urlBefore != urlAfter) {
browser.tabs.executeScript(details.tabId, {
frameId: details.frameId,
code: 'history.replaceState({state: "cleaned_history"},"",'+JSON.stringify(urlAfter)+');'
}).then(() => {}, onError);
}
}
function onError(error) {
console.log(`[ClearURLs] Error: ${error}`);
}

View File

@@ -1,135 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/**
* Get the log and display the data as table.
*/
var log = {};
/**
* Reset the global log
*/
function resetGlobalLog(){
obj = {"log": []};
browser.runtime.sendMessage({
function: "setData",
params: ['log', JSON.stringify(obj)]
});
getLog();
location.reload();
}
/**
* Get the log and display to the user
*/
function getLog()
{
browser.runtime.sendMessage({
function: "getData",
params: ['log']
}).then((data) => {
log = data.response;
// Sort the log | issue #70
log.log.sort(function(a,b) {
return b.timestamp - a.timestamp;
});
var length = Object.keys(log.log).length;
var row;
if(length != 0)
{
for(var i=0; i<length;i++)
{
row = "<tr>" +
"<td>"+log.log[i].before+"</td>" +
"<td>"+log.log[i].after+"</td>" +
"<td>"+log.log[i].rule+"</td>" +
"<td>"+toDate(log.log[i].timestamp)+"</td>";
$('#tbody').append(row);
}
}
$('#logTable').DataTable({
"pageLength": 10,
"language": {
"url": getDataTableTranslation()
}
} ).order([3, 'desc']).draw();
});
}
/**
* Get the translation file for the DataTable
*/
function getDataTableTranslation()
{
var lang = browser.i18n.getUILanguage();
lang = lang.substring(0,2);
var file = browser.extension.getURL('./external_js/dataTables/i18n/'+lang+'.lang');
return file;
}
/**
* Convert timestamp to date
*/
function toDate(time)
{
return new Date(time).toLocaleString();
}
/**
* Load only when document is ready
*/
$(document).ready(function(){
setText();
getLog();
$('#reset_log_btn').on("click", resetGlobalLog);
});
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
*/
function translate(string)
{
return browser.i18n.getMessage(string);
}
/**
* Set the text for the UI.
*/
function setText()
{
document.title = translate('log_html_page_title');
$('#page_title').text(translate('log_html_page_title'));
$('#reset_log_btn').text(translate('log_html_reset_button'));
$('#log_html_reset_button').prop('title', translate('log_html_reset_button_title'));
$('#head_1').text(translate('log_html_table_head_1'));
$('#head_2').text(translate('log_html_table_head_2'));
$('#head_3').text(translate('log_html_table_head_3'));
$('#head_4').text(translate('log_html_table_head_4'));
}
function handleError(error) {
console.log(`Error: ${error}`);
}

View File

@@ -1,42 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for the communication between background and content_scripts.
*/
/**
* [handleMessage description]
* @param request The message itself. This is a JSON-ifiable object.
* @param sender A runtime.MessageSender object representing the sender of the message.
* @param sendResponse A function to call, at most once, to send a response to the message. The function takes a single argument, which may be any JSON-ifiable object. This argument is passed back to the message sender.
*/
function handleMessage(request, sender, sendResponse)
{
var fn = window[request.function];
if(typeof fn === "function")
{
var response = fn.apply(null, request.params);
return Promise.resolve({response});
}
}
browser.runtime.onMessage.addListener(handleMessage);

View File

@@ -1,315 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
var element = $("#statistics_value");
var elGlobalPercentage = $("#statistics_value_global_percentage");
var elProgressbar_blocked = $('#progress_blocked');
var elProgressbar_non_blocked = $('#progress_non_blocked');
var elTotal = $('#statistics_total_elements');
var globalPercentage = 0;
var globalCounter;
var globalurlcounter;
var globalStatus;
var badgedStatus;
var hashStatus;
var loggingStatus;
var statisticsStatus;
var currentURL;
async function getData()
{
await browser.runtime.sendMessage({
function: "getData",
params: ["globalCounter"]
}).then((data) => {
globalCounter = data.response;
});
await browser.runtime.sendMessage({
function: "getData",
params: ["globalurlcounter"]
}).then((data) => {
globalurlcounter = data.response;
});
await browser.runtime.sendMessage({
function: "getData",
params: ["globalStatus"]
}).then((data) => {
globalStatus = data.response;
});
await browser.runtime.sendMessage({
function: "getData",
params: ["badgedStatus"]
}).then((data) => {
badgedStatus = data.response;
});
await browser.runtime.sendMessage({
function: "getData",
params: ["hashStatus"]
}).then((data) => {
hashStatus = data.response;
});
await browser.runtime.sendMessage({
function: "getData",
params: ["loggingStatus"]
}).then((data) => {
loggingStatus = data.response;
});
await browser.runtime.sendMessage({
function: "getData",
params: ["statisticsStatus"]
}).then((data) => {
statisticsStatus = data.response;
});
await browser.runtime.sendMessage({
function: "getCurrentURL",
params: []
}).then((data) => {
currentURL = data.response;
});
}
/**
* Initialize the UI.
*
*/
function init()
{
setSwitchButton("globalStatus", "globalStatus");
setSwitchButton("tabcounter", "badgedStatus");
setSwitchButton("logging", "loggingStatus");
setSwitchButton("statistics", "statisticsStatus");
setHashStatus();
changeStatistics();
}
/**
* Get the globalCounter and globalurlcounter value from the storage
* @param {(data){} Return value form storage
*/
function changeStatistics()
{
globalPercentage = ((globalCounter/globalurlcounter)*100).toFixed(3);
if(isNaN(Number(globalPercentage))) globalPercentage = 0;
element.text(globalCounter.toLocaleString());
elGlobalPercentage.text(globalPercentage+"%");
elProgressbar_blocked.css('width', globalPercentage+'%');
elProgressbar_non_blocked.css('width', (100-globalPercentage)+'%');
elTotal.text(globalurlcounter.toLocaleString());
}
/**
* Set the value for the hashStatus on startUp.
*/
function setHashStatus()
{
var element = $('#hashStatus');
if(hashStatus)
{
element.text(translate(hashStatus));
}
else {
element.text(translate('hash_status_code_5'));
}
}
/**
* Change the value of a switch button.
* @param {string} id HTML id
* @param {string} storageID storage internal id
*/
function changeSwitchButton(id, storageID)
{
var element = $('#'+id);
changeVisibility(id, storageID);
element.on('change', function(){
browser.runtime.sendMessage({
function: "setData",
params: [storageID, element.is(':checked')]
}).then((data) => {
if(storageID == "globalStatus"){
browser.runtime.sendMessage({
function: "changeIcon",
params: []
});
}
changeVisibility(id, storageID);
browser.runtime.sendMessage({
function: "saveOnExit",
params: []
});
});
});
}
/**
* Change the visibility of sections.
*/
function changeVisibility(id, storageID)
{
var element;
switch(storageID)
{
case "loggingStatus":
element = $('#log_section');
break;
case "statisticsStatus":
element = $('#statistic_section');
break;
default:
element = "undefine";
}
if(element != "undefine")
{
if($('#'+id).is(':checked'))
{
element.css('display', '');
element.css('display', '');
}
else {
element.css('display', 'none');
element.css('display', 'none');
}
}
}
/**
* Set the value of a switch button.
* @param {string} id HTML id
* @param {string} varname js internal variable name
*/
function setSwitchButton(id, varname)
{
var element = $('#'+id);
element.prop('checked', this[varname]);
}
/**
* Reset the global statistic
*/
function resetGlobalCounter(){
browser.runtime.sendMessage({
function: "setData",
params: ['globalCounter', 0]
});
browser.runtime.sendMessage({
function: "setData",
params: ['globalurlcounter', 0]
});
browser.runtime.sendMessage({
function: "saveOnExit",
params: []
});
globalCounter = 0;
globalurlcounter = 0;
changeStatistics();
}
$(document).ready(function(){
getData().then(() => {
init();
$('#reset_counter_btn').on("click", resetGlobalCounter);
changeSwitchButton("globalStatus", "globalStatus");
changeSwitchButton("tabcounter", "badgedStatus");
changeSwitchButton("logging", "loggingStatus");
changeSwitchButton("statistics", "statisticsStatus");
$('#loggingPage').attr('href', browser.extension.getURL('./html/log.html'));
$('#settings').attr('href', browser.extension.getURL('./html/settings.html'));
$('#cleaning_tools').attr('href', browser.extension.getURL('./html/cleaningTool.html'));
setText();
});
});
/**
* Set the text for the UI.
*/
function setText()
{
injectText('loggingPage','popup_html_log_head');
injectText('reset_counter_btn','popup_html_statistics_reset_button');
injectText('rules_status_head','popup_html_rules_status_head');
injectText('statistics_percentage','popup_html_statistics_percentage');
injectText('statistics_blocked','popup_html_statistics_blocked');
injectText('statistics_elements','popup_html_statistics_elements');
injectText('statistics_head','popup_html_statistics_head');
injectText('configs_switch_badges','popup_html_configs_switch_badges');
injectText('configs_switch_log','popup_html_configs_switch_log');
injectText('configs_switch_filter','popup_html_configs_switch_filter');
injectText('configs_head','popup_html_configs_head');
injectText('configs_switch_statistics','configs_switch_statistics');
$('#donate').prop('title', translate('donate_button'));
}
/**
* Helper function to inject the translated text and tooltip.
*
* @param {string} id ID of the HTML element
* @param {string} attribute Name of the attribute used for localization
* @param {boolean} tooltip
*/
function injectText(id, attribute, tooltip)
{
object = $('#'+id);
object.text(translate(attribute));
/*
This function will throw an error if no translation
is found for the tooltip. This is a planned error.
*/
tooltip = translate(attribute+"_title");
if(tooltip != "")
{
object.prop('title', tooltip);
}
}
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
*/
function translate(string)
{
return browser.i18n.getMessage(string);
}
function handleError(error) {
console.log(`Error: ${error}`);
}

View File

@@ -1,51 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/**
* Cleans given links. Also do automatic redirection.
*
* @param {[type]} url url as string
* @return {Array} redirectUrl or none
*/
function pureCleaning(url) {
var cleanURL = url;
for (var i = 0; i < providers.length; i++) {
var result = {
"changes": false,
"url": "",
"redirect": false,
"cancel": false
};
if(providers[i].matchURL(cleanURL))
{
result = removeFieldsFormURL(providers[i], cleanURL);
cleanURL = result.url;
}
if(result.redirect)
{
return result.url;
}
}
return cleanURL;
}

View File

@@ -1,270 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
var settings = [];
getData();
/**
* Load only when document is ready
*/
$(document).ready(function(){
setText();
$(".pick-a-color").pickAColor();
$('#reset_settings_btn').on("click", reset);
$('#save_settings_btn').on("click", save);
$("#badged_color input").on("change", function () {
settings.badged_color = $(this).val();
browser.runtime.sendMessage({
function: "setData",
params: ["badged_color", settings.badged_color]
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "setBadgedStatus",
params: []
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "saveOnExit",
params: []
}).then(handleResponse, handleError);
});
});
/**
* Reset everything.
* Set everthing to the default values.
*/
function reset()
{
browser.runtime.sendMessage({
function: "initSettings",
params: []
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "saveOnExit",
params: []
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "reload",
params: []
}).then(handleResponse, handleError);
}
/**
* Saves the settings.
*/
function save()
{
browser.runtime.sendMessage({
function: "setData",
params: ["badged_color", $('input[name=badged_color]').val()]
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "setBadgedStatus",
params: []
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "setData",
params: ["ruleURL", $('input[name=rule_url]').val()]
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "setData",
params: ["hashURL", $('input[name=hash_url]').val()]
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "setData",
params: ["types", $('input[name=types]').val()]
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "saveOnExit",
params: []
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "reload",
params: []
}).then(handleResponse, handleError);
//location.reload();
}
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
*/
function translate(string)
{
return browser.i18n.getMessage(string);
}
/**
* Get the data.
*/
function getData()
{
browser.runtime.sendMessage({
function: "getData",
params: ["badged_color"]
}).then((data) => handleResponseData(data, "badged_color", "badged_color"), handleError);
browser.runtime.sendMessage({
function: "getData",
params: ["ruleURL"]
}).then((data) => handleResponseData(data, "rule_url", "rule_url"), handleError);
browser.runtime.sendMessage({
function: "getData",
params: ["hashURL"]
}).then((data) => handleResponseData(data, "hash_url", "hash_url"), handleError);
browser.runtime.sendMessage({
function: "getData",
params: ["types"]
}).then((data) => handleResponseData(data, "types", "types"), handleError);
browser.runtime.sendMessage({
function: "getData",
params: ["contextMenuEnabled"]
}).then((data) => {
handleResponseData(data, "contextMenuEnabled", "contextMenuEnabled");
browser.runtime.sendMessage({
function: "getData",
params: ["historyListenerEnabled"]
}).then((data) => {
handleResponseData(data, "historyListenerEnabled", "historyListenerEnabled");
changeSwitchButton("contextMenuEnabled", "contextMenuEnabled");
changeSwitchButton("historyListenerEnabled", "historyListenerEnabled");
}, handleError);
}, handleError);
}
/**
* Set the text for the UI.
*/
function setText()
{
document.title = translate('settings_html_page_title');
$('#page_title').text(translate('settings_html_page_title'));
$('#badged_color_label').text(translate('badged_color_label'));
$('#reset_settings_btn').text(translate('setting_html_reset_button'));
$('#reset_settings_btn').prop('title', translate('setting_html_reset_button_title'));
$('#rule_url_label').text(translate('setting_rule_url_label'));
$('#hash_url_label').text(translate('setting_hash_url_label'));
$('#types_label').html(translate('setting_types_label'));
$('#save_settings_btn').text(translate('settings_html_save_button'));
$('#save_settings_btn').prop('title', translate('settings_html_save_button_title'));
injectText("context_menu_enabled", "context_menu_enabled");
$('#history_listener_enabled').html(translate('history_listener_enabled'));
}
/**
* Handle the response from the storage and saves the data.
* @param {JSON-Object} data Data JSON-Object
*/
function handleResponseData(data, varName, inputID)
{
settings[varName] = data.response;
$('input[name='+inputID+']').val(data.response);
}
function handleResponse(message) {
console.log(`Message from the background script: ${message.response}`);
}
function handleError(error) {
console.log(`Error: ${error}`);
}
/**
* Change the value of a switch button.
* @param {string} id HTML id
* @param {string} storageID storage internal id
*/
function changeSwitchButton(id, storageID)
{
var element = $('#'+id);
element.on('change', function(){
browser.runtime.sendMessage({
function: "setData",
params: [storageID, element.is(':checked')]
}).then((data) => {
if(storageID == "globalStatus"){
browser.runtime.sendMessage({
function: "changeIcon",
params: []
});
}
browser.runtime.sendMessage({
function: "saveOnExit",
params: []
});
});
});
setSwitchButton(id, storageID);
}
/**
* Helper function to inject the translated text and tooltip.
*
* @param {string} id ID of the HTML element
* @param {string} attribute Name of the attribute used for localization
* @param {boolean} tooltip
*/
function injectText(id, attribute, tooltip)
{
object = $('#'+id);
object.text(translate(attribute));
/*
This function will throw an error if no translation
is found for the tooltip. This is a planned error.
*/
tooltip = translate(attribute+"_title");
if(tooltip != "")
{
object.prop('title', tooltip);
}
}
/**
* Set the value of a switch button.
* @param {string} id HTML id
* @param {string} varname js internal variable name
*/
function setSwitchButton(id, varname)
{
var element = $('#'+id);
element.prop('checked', settings[varname]);
}

View File

@@ -1,230 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for the storage.
*/
var storage = [];
/**
* Writes the storage variable to the disk.
*/
function saveOnExit()
{
var json = {};
Object.entries(storage).forEach(([key, value]) => {
switch (key) {
case "ClearURLsData":
case "log":
json[key] = JSON.stringify(value);
break;
case "types":
json[key] = value.toString();
break;
default:
json[key] = value;
}
});
console.log(translate('core_save_on_disk'));
browser.storage.local.set(json);
}
/**
* Save the value under the key on the disk.
* @param {String} key
* @param {Object} value
*/
function saveOnDisk(key, value)
{
browser.storage.local.set({key: value});
}
/**
* Retrieve everything and save on the RAM.
*/
function getDataFromDisk()
{
browser.storage.local.get(null).then(initStorage, error);
}
/**
* Return the value under the key.
* @param {String} key
* @return {Object}
*/
function getData(key)
{
return storage[key];
}
/**
* Return the entire storage object.
* @return {Object}
*/
function getEntireData()
{
return storage;
}
/**
* Save the value under the key on the RAM.
* @param {String} key
* @param {Object} value
*/
function setData(key, value)
{
switch (key) {
case "ClearURLsData":
case "log":
storage[key] = JSON.parse(value);
break;
case "hashURL":
case "ruleURL":
storage[key] = replaceOldURLs(value);
break;
case "types":
storage[key] = value.split(',');
break;
default:
storage[key] = value;
}
}
/**
* Write error on console.
*/
function error(e)
{
console.log(translate('core_error'));
console.error(e);
}
/**
* Set default values, if the storage is empty.
* @param {Object} items
*/
function initStorage(items)
{
initSettings();
if(!isEmpty(items)) {
Object.entries(items).forEach(([key, value]) => {
setData(key, value);
});
}
// Start the clearurls.js
start();
// Start the context_menu
contextMenuStart();
// Start history listener
historyListenerStart();
}
/**
* Set default values for the settings.
*/
function initSettings()
{
storage.ClearURLsData = [];
storage.dataHash = "";
storage.badgedStatus = true;
storage.globalStatus = true;
storage.globalurlcounter = 0;
storage.globalCounter = 0;
storage.hashStatus = "error";
storage.loggingStatus = false;
storage.log = {"log": []};
storage.statisticsStatus = true;
storage.badged_color = "ffa500";
storage.hashURL = "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules";
storage.ruleURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
storage.contextMenuEnabled = true;
storage.historyListenerEnabled = true;
if(getBrowser() === "Firefox") {
storage.types = ["font", "image", "imageset", "main_frame", "media", "object", "object_subrequest", "other", "script", "stylesheet", "sub_frame", "websocket", "xbl", "xml_dtd", "xmlhttprequest", "xslt"];
} else if (getBrowser() === "Chrome") {
storage.types = ["main_frame", "sub_frame", "stylesheet", "script", "image", "font", "object", "xmlhttprequest", "ping", "csp_report", "media", "websocket", "other"];
}
}
/**
* Replace the old URLs with the
* new GitLab URLs.
*/
function replaceOldURLs(url)
{
switch (url) {
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/rules.hash?flush_cache=true":
return "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules";
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/data.json?flush_cache=true":
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/rules.hash":
return "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules";
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json":
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
default:
return url;
}
}
/**
* Load local saved data, if the browser is offline or
* some other network trouble.
*/
function loadOldDataFromStore()
{
localDataHash = storage.dataHash;
}
/**
* Save the hash status to the local storage.
* The status can have the following values:
* 1 "up to date"
* 2 "updated"
* 3 "update available"
* @param status_code the number for the status
*/
function storeHashStatus(status_code)
{
switch(status_code)
{
case 1: status_code = "hash_status_code_1";
break;
case 2: status_code = "hash_status_code_2";
break;
case 3: status_code = "hash_status_code_3";
break;
default: status_code = "hash_status_code_4";
}
storage.hashStatus = status_code;
}
/**
* Save every minute the temporary data to the disk.
*/
setInterval(saveOnExit, 60000);
// Start storage
getDataFromDisk();

View File

@@ -1,269 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for some tools.
*/
/*
* To support Waterfox.
*/
Array.prototype.rmEmpty = function() {
return this.filter(v => v);
};
/*
* To support Waterfox.
*/
Array.prototype.flatten = function() {
return this.reduce((a, b) => a.concat(b), []);
};
/**
* Check if an object is empty.
* @param {Object} obj
* @return {Boolean}
*/
function isEmpty(obj)
{
return (Object.getOwnPropertyNames(obj).length === 0);
}
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
*/
function translate(string)
{
return browser.i18n.getMessage(string);
}
/**
* Reloads the extension.
*/
function reload()
{
browser.runtime.reload();
}
/**
* Check if it is an android device.
* @return bool
*/
function checkOSAndroid()
{
if(os === undefined || os === null || os === "") {
chrome.runtime.getPlatformInfo(function(info) {
os = info.os;
});
}
if(os == "android")
{
return true;
}
else{
return false;
}
}
/**
* Return the number of parameters query strings.
* @param {String} url URL as String
* @return {int} Number of Parameters
*/
function countFields(url)
{
return extractFileds(url).length;
}
/**
* Returns true if fields exists.
* @param {String} url URL as String
* @return {boolean}
*/
function existsFields(url)
{
var matches = (url.match(/\?.+/i) || []);
var count = matches.length;
return (count > 0);
}
/**
* Extract the fields from an url.
* @param {String} url URL as String
* @return {Array} Fields as array
*/
function extractFileds(url)
{
if(existsFields(url)) {
var fields = url.replace(new RegExp(".*?\\?", "i"), "");
if(existsFragments(url)) {
fields = fields.replace(new RegExp("#.*", "i"), "");
}
return (fields.match(/[^\/|\?|&]+=?[^&]*/gi) || []);
}
return [];
}
/**
* Return the number of fragments query strings.
* @param {String} url URL as String
* @return {int} Number of fragments
*/
function countFragments(url)
{
return extractFragments(url).length;
}
/**
* Extract the fragments from an url.
* @param {String} url URL as String
* @return {Array} fragments as array
*/
function extractFragments(url)
{
if(existsFragments(url)) {
var fragments = url.replace(new RegExp(".*?#", "i"), "");
return (fragments.match(/[^&]+=?[^&]*/gi) || []);
}
return [];
}
/**
* Returns true if fragments exists.
* @param {String} url URL as String
* @return {boolean}
*/
function existsFragments(url)
{
var matches = (url.match(/\#.+/i) || []);
var count = matches.length;
return (count > 0);
}
/**
* Load local saved data, if the browser is offline or
* some other network trouble.
*/
function loadOldDataFromStore()
{
localDataHash = storage.dataHash;
}
/**
* Save the hash status to the local storage.
* The status can have the following values:
* 1 "up to date"
* 2 "updated"
* 3 "update available"
* @param status_code the number for the status
*/
function storeHashStatus(status_code)
{
switch(status_code)
{
case 1: status_code = "hash_status_code_1";
break;
case 2: status_code = "hash_status_code_2";
break;
case 3: status_code = "hash_status_code_3";
break;
default: status_code = "hash_status_code_4";
}
storage.hashStatus = status_code;
}
/**
* Increase by {number} the GlobalURLCounter
* @param {int} number
*/
function increaseGlobalURLCounter(number)
{
if(storage.statisticsStatus)
{
storage.globalurlcounter += number;
}
}
/**
* Increase by one the URLCounter
*/
function increaseURLCounter()
{
if(storage.statisticsStatus)
{
storage.globalCounter++;
}
}
/**
* Change the icon.
*/
function changeIcon()
{
if(!checkOSAndroid()) {
if(storage.globalStatus){
browser.browserAction.setIcon({path: "img/clearurls_128x128.png"});
} else{
browser.browserAction.setIcon({path: "img/clearurls_gray_128x128.png"});
}
}
}
/**
* Get the badged status from the browser storage and put the value
* into a local variable.
*
*/
function setBadgedStatus()
{
if(!checkOSAndroid() && storage.badgedStatus){
browser.browserAction.setBadgeBackgroundColor({
'color': '#'+storage.badged_color
});
}
}
/**
* Returns the current URL.
* @return {String} [description]
*/
function getCurrentURL()
{
return currentURL;
}
/**
* Check for browser.
*/
function getBrowser() {
if(typeof InstallTrigger !== 'undefined') {
return "Firefox";
} else {
return "Chrome";
}
}

View File

@@ -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)}}

File diff suppressed because one or more lines are too long

View File

@@ -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}

View File

@@ -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}}}

View File

@@ -1,89 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Stylesheet for the switch buttons.
*/
/* Box around the slider */
.switch {
position: relative;
display: inline-block;
width: 50px;
height: 24px;
}
.switch input {
display: none;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #FF7800;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 16px;
width: 16px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #B5E61D;
}
input:focus + .slider {
box-shadow: 0 0 1px #B5E61D;
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
.switch label {
position: absolute;
left: 60px;
}
label {
font-weight: normal;
}

View File

@@ -1,461 +0,0 @@
{
"providers": {
"amazon": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"pf_rd_[a-zA-Z]=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"qid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"srs=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(adsensecustomsearchads\\.com)\\/.*",
"pd_rd_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"__mk_[a-zA-Z]{1,3}_[a-zA-Z]{1,3}=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"spIA=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ms3_c=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"[a-zA-Z%0-9]*ie=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"refRID=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"colid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"coliid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"[^a-zA-Z%0-9]adId=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"qualifier=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"_encoding=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"smid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"field-lbr_brands_browse-bin=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [
".*(amazon\\.).*(\\/gp).*\\/redirector.html\\/.*"
],
"redirections": []
},
"fls-na.amazon": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(fls-na\\.amazon)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"google": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(google)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"ved=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"bi[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"gfe_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ei=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"site=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"&\\.[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"oq=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"esrc=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"uact=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"cd=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"cad=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"gws_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"atyp=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"vet=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"_u=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"je=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"dcr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ie=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sei=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sa=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"dpr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"btn[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sa=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"usg=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"cd=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"cad=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"uact=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [
".*(mail\\.google\\.).*(\\/mail\\/u\\/0).*",
".*(google\\.).*(\\/upload)?(\\/drive)\\/.*",
".*(docs\\.google\\.).*\\/.*",
".*(accounts\\.google\\.).*",
".*(google\\.).*\\/searchbyimage\\?image_url=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(hangouts\\.google\\.).*\\/webchat.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(client-channel\\.google\\.).*\\/client-channel.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(google\\.).*\\/complete\\/search\\?.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(google\\.).*\\/s\\?tbm=map.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(news\\.google\\.).*\\?hl=.*",
".*(google\\.).*\\/setprefs\\?.*hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(google\\.).*\\/appsactivity\\/.*",
".*(google\\.).*\\/recaptcha\\/.*"
],
"redirections": [
".*google\\..*\\/.*url\\?.*url=((https|http)[^&]*)",
".*google\\..*\\/.*url\\?.*q=((https|http)[^&]*)"
]
},
"googlesyndication": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(googlesyndication)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"doubleclick": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(doubleclick)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": [
".*doubleclick\\..*\\/.*tag_for_child_directed_treatment=;%3F(.*)"
]
},
"globalRules": {
"urlPattern": ".*",
"completeProvider": false,
"rules": [
"utm_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_medium=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_term=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_content=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_campaign=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_place=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"yclid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"_openstat=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"fb_action_ids=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"fb_action_types=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"fb_source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"fb_ref=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"fbclid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"action_object_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"action_type_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"action_ref_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"gs_l=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"mkt_tok=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"hmb_campaign=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"hmb_medium=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"hmb_source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"[\\?|&]ref[\\_]?=[^\\/|\\?|&]*",
"\\?$",
"\\&$"
],
"exceptions": [
".*([\\.]?matrix\\.org)(\\/_matrix)\\/.*",
".*([\\.]?prismic\\.io).*",
".*([\\.]?gitlab\\.com).*",
".*([\\.]?gcsip\\.com).*[\\?|&]ref[\\_]?=[^\\/|\\?|&]*.*",
".*([\\.]?cloudflare\\.com).*",
".*([\\.]?tv2\\.no)(\\/api)\\/.*"
],
"redirections": []
},
"adtech": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adtech)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"contentpass.net": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(contentpass\\.net).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"bf-ad": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bf-ad)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"amazon-adsystem": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon-adsystem)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"adsensecustomsearchads": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adsensecustomsearchads)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"youtube": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"feature=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"gclid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"kw=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"facebook": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(facebook)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"hc_[a-zA-Z_\\[\\]0-9]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"[a-zA-Z]*ref[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"__tn__=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"eid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"__xts__%5B[0-9]%5D=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [
".*(facebook\\.)\\w{2,}.*(\\/plugins\\/).*"
],
"redirections": [
".*l\\.facebook\\..*\\/.*l\\.php\\?.*u=((https%3A%2F%2F|http%3A%2F%2F)[^&]*)"
]
},
"twitter": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitter)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"(ref_)?src=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"reddit": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(reddit)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [],
"exceptions": [],
"redirections": [
"out\\.reddit\\.\\w{2,}\\/.*url=([^&]*)"
]
}
,
"netflix": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(netflix)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"trackId=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"tctx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"jb[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"techcrunch": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?([\\.]?techcrunch\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"ncid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sr_share=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"guccounter=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"guce_referrer_[a-z]+=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"bing": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bing)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"cvid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"form=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sk=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sp=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sc=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"qs=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"qp=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"tweakers": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tweakers\\.net)(.*\\?.*)",
"completeProvider": false,
"rules": [
"nb=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"u=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"twitch": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitch)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"tt_medium=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"tt_content=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"vivaldi": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(vivaldi\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"pk_campaign=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"pk_kwd=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"indeed": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(indeed\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"from=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"alid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"[a-zA-Z]*tk=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"hhdotru": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(hh\\.ru)(.*\\?.*)",
"completeProvider": false,
"rules": [
"vss=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"t=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"swnt=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"grpos=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ptl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"stl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"exp=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"plim=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"ebay": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(ebay)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"_trkparms=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"_trksid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"_from=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"cnet": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(cnet\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"ftag=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"imdb.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(imdb\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"ref_=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"pf_rd_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"govdelivery.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(govdelivery\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [],
"exceptions": [],
"redirections": [
".*links\\.govdelivery\\.com.*\\/track\\?.*(http:\\/\\/.*)",
".*links\\.govdelivery\\.com.*\\/track\\?.*(https:\\/\\/.*)"
]
},
"walmart.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(walmart\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"u1=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ath[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"net-parade.it": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(net\\-parade\\.it)(.*\\?.*)",
"completeProvider": false,
"rules": [
"pl=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"prvnizpravy.cz": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(prvnizpravy\\.cz)(.*\\?.*)",
"completeProvider": false,
"rules": [
"xid=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"youku.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youku\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"spm=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"tpa=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"nytimes.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(nytimes\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"smid=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"tchibo.de": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tchibo\\.de)(.*\\?.*)",
"completeProvider": false,
"rules": [
"wbdcd=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"steam": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steampowered\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"snr=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"disq.us": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(disq\\.us)(.*\\?.*)",
"completeProvider": false,
"rules": [],
"exceptions": [],
"redirections": [
".*disq\\.us.*\\/.*url\\?.*url=((https%3A%2F%2F|http%3A%2F%2F).*)%3A"
]
},
"mozaws.net": {
"urlPattern": "https?://outgoing\\.prod\\.mozaws\\.net/.*",
"completeProvider": false,
"rules": [],
"exceptions": [],
"redirections": [
"https?://[^/]+/v1/[0-9a-f]{64}/(.*)"
]
},
"shutterstock.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(shutterstock\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"src=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
}
}
}

View File

@@ -1,751 +0,0 @@
{
"providers": {
"amazon": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"pf_rd_[a-zA-Z]",
"qid",
"sr",
"srs",
"pd_rd_[a-zA-Z]*",
"__mk_[a-zA-Z]{1,3}_[a-zA-Z]{1,3}",
"spIA",
"ms3_c",
"[a-zA-Z%0-9]*ie",
"refRID",
"colid",
"coliid",
"[^a-zA-Z%0-9]adId",
"qualifier",
"_encoding",
"smid",
"field-lbr_brands_browse-bin",
"ref_?"
],
"exceptions": [
".*(amazon\\.).*(\\/gp).*\\/redirector.html\\/.*"
],
"rawRules": [
"\\/ref=[^\\/|\\?]*"
],
"redirections": [],
"forceRedirection": false
},
"fls-na.amazon": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(fls-na\\.amazon)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"google": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(google)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"ved",
"bi[a-zA-Z]*",
"gfe_[a-zA-Z]*",
"ei",
"source",
"gs_[a-zA-Z]*",
"site",
"oq",
"esrc",
"uact",
"cd",
"cad",
"gws_[a-zA-Z]*",
"atyp",
"vet",
"zx",
"_u",
"je",
"dcr",
"ie",
"sei",
"sa",
"dpr",
"btn[a-zA-Z]*",
"sa",
"usg",
"cd",
"cad",
"uact"
],
"rawRules": [],
"exceptions": [
".*(mail\\.google\\.).*(\\/mail\\/u\\/0).*",
".*(google\\.).*(\\/upload)?(\\/drive)\\/.*",
".*(docs\\.google\\.).*\\/.*",
".*(accounts\\.google\\.).*",
".*(google\\.).*\\/searchbyimage\\?image_url=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(hangouts\\.google\\.).*\\/webchat.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(client-channel\\.google\\.).*\\/client-channel.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(google\\.).*\\/complete\\/search\\?.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(google\\.).*\\/s\\?tbm=map.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(news\\.google\\.).*\\?hl=.*",
".*(google\\.).*\\/setprefs\\?.*hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(google\\.).*\\/appsactivity\\/.*"
],
"redirections": [
".*google\\..*\\/.*url\\?.*url=((https|http)[^&]*)",
".*google\\..*\\/.*url\\?.*q=((https|http)[^&]*)",
".*google\\..*\\/.*adurl=([^&]*)"
],
"forceRedirection": true
},
"googlesyndication": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(googlesyndication)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"doubleclick": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(doubleclick)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*doubleclick\\..*\\/.*tag_for_child_directed_treatment=;%3F(.*)"
],
"forceRedirection": false
},
"googleadservices": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(googleadservices)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*googleadservices\\..*\\/.*adurl=([^&]*)"
],
"forceRedirection": false
},
"globalRules": {
"urlPattern": ".*",
"completeProvider": false,
"rules": [
"(%3F)?utm_[a-zA-Z]*",
"(%3F)?ga_source",
"(%3F)?ga_medium",
"(%3F)?ga_term",
"(%3F)?ga_content",
"(%3F)?ga_campaign",
"(%3F)?ga_place",
"(%3F)?yclid",
"(%3F)?_openstat",
"(%3F)?fb_action_ids",
"(%3F)?fb_action_types",
"(%3F)?fb_source",
"(%3F)?fb_ref",
"(%3F)?fbclid",
"(%3F)?action_object_map",
"(%3F)?action_type_map",
"(%3F)?action_ref_map",
"(%3F)?gs_l",
"(%3F)?mkt_tok",
"(%3F)?hmb_campaign",
"(%3F)?hmb_medium",
"(%3F)?hmb_source",
"(%3F)?[\\?|&]ref[\\_]?",
"(%3F)?gclid"
],
"rawRules": [],
"exceptions": [
".*([\\.]?matrix\\.org)(\\/_matrix)\\/.*",
".*([\\.]?prismic\\.io).*",
".*([\\.]?gitlab\\.com).*",
".*([\\.]?gcsip\\.com).*[\\?|&]ref[\\_]?=[^\\/|\\?|&]*.*",
".*([\\.]?cloudflare\\.com).*",
".*(myaccount.google\\.[a-zA-Z]{2,}).*",
".*([\\.]?tangerine\\.ca).*"
],
"redirections": [],
"forceRedirection": false
},
"adtech": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adtech)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"contentpass.net": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(contentpass\\.net).*",
"completeProvider": true,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"bf-ad": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bf-ad)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"amazon-adsystem": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon-adsystem)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"adsensecustomsearchads": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adsensecustomsearchads)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"youtube": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"feature",
"gclid",
"kw"
],
"rawRules": [],
"exceptions": [],
"redirections": [
".*youtube\\..*\\/redirect?.*q=([^&]*)"
],
"forceRedirection": false
},
"youtube_pagead": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,})\\/pagead",
"completeProvider": true,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"youtube_apiads": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,})\\/api\\/stats\\/ads",
"completeProvider": true,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"facebook": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(facebook)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"hc_[a-zA-Z_%\\[\\]0-9]*",
"[a-zA-Z]*ref[a-zA-Z]*",
"__tn__",
"eid",
"__xts__%5B[0-9]%5D",
"__xts__\\[[0-9]\\]",
"comment_tracking",
"dti",
"app",
"video_source",
"ftentidentifier",
"pageid",
"padding",
"ls_ref",
"action_history"
],
"rawRules": [],
"exceptions": [
".*(facebook\\.)\\w{2,}.*(\\/plugins\\/).*",
".*(facebook\\.)\\w{2,}.*(\\/dialog\\/share).*"
],
"redirections": [
".*l[a-zA-Z]?\\.facebook\\..*\\/.*l\\.php\\?.*u=((https%3A%2F%2F|http%3A%2F%2F)[^&]*)"
],
"forceRedirection": false
},
"twitter": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitter)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"(ref_?)?src",
"s",
"cn"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"reddit": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(reddit)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*out\\.reddit\\.\\w{2,}\\/.*url=([^&]*)"
],
"forceRedirection": false
}
,
"netflix": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(netflix)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"trackId",
"tctx",
"jb[a-zA-Z]*"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"techcrunch": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?([\\.]?techcrunch\\.com).*",
"completeProvider": false,
"rules": [
"ncid",
"sr",
"sr_share"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"bing": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bing)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"cvid",
"form",
"sk",
"sp",
"sc",
"qs",
"qp"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"tweakers": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tweakers\\.net).*",
"completeProvider": false,
"rules": [
"nb",
"u"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"twitch": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitch)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"tt_medium",
"tt_content"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"vivaldi": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(vivaldi\\.com).*",
"completeProvider": false,
"rules": [
"pk_campaign",
"pk_kwd"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"indeed": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(indeed\\.com).*",
"completeProvider": false,
"rules": [
"from",
"alid",
"[a-zA-Z]*tk"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"hhdotru": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(hh\\.ru).*",
"completeProvider": false,
"rules": [
"vss",
"t",
"swnt",
"grpos",
"ptl",
"stl",
"exp",
"plim"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"ebay": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(ebay)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"_trkparms",
"_trksid",
"_from"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"cnet": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(cnet\\.com).*",
"completeProvider": false,
"rules": [
"ftag"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"imdb.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(imdb\\.com).*",
"completeProvider": false,
"rules": [
"ref_",
"pf_rd_[a-zA-Z]*"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"govdelivery.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(govdelivery\\.com).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*links\\.govdelivery\\.com.*\\/track\\?.*(http:\\/\\/.*)",
".*links\\.govdelivery\\.com.*\\/track\\?.*(https:\\/\\/.*)"
],
"forceRedirection": false
},
"walmart.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(walmart\\.com).*",
"completeProvider": false,
"rules": [
"u1",
"ath[a-zA-Z]*"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"net-parade.it": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(net\\-parade\\.it).*",
"completeProvider": false,
"rules": [
"pl"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"prvnizpravy.cz": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(prvnizpravy\\.cz).*",
"completeProvider": false,
"rules": [
"xid"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"youku.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youku\\.com).*",
"completeProvider": false,
"rules": [
"spm",
"tpa"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"nytimes.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(nytimes\\.com).*",
"completeProvider": false,
"rules": [
"smid"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"tchibo.de": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tchibo\\.de).*",
"completeProvider": false,
"rules": [
"wbdcd"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"steampowered": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steampowered\\.com).*",
"completeProvider": false,
"rules": [
"snr"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"steamcommunity": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steamcommunity\\.com).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*steamcommunity\\.com.*\\/linkfilter\\/\\?url=(.*)"
],
"forceRedirection": false
},
"disq.us": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(disq\\.us).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*disq\\.us.*\\/.*url\\?.*url=((https%3A%2F%2F|http%3A%2F%2F).*)%3A"
],
"forceRedirection": false
},
"mozaws.net": {
"urlPattern": "https?:\\/\\/outgoing\\.prod\\.mozaws\\.net/.*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
"https?:\\/\\/[^/]+/v1/[0-9a-f]{64}/(.*)"
],
"forceRedirection": false
},
"shutterstock.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(shutterstock\\.com).*",
"completeProvider": false,
"rules": [
"src"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"mozilla.org": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(mozilla\\.org).*",
"completeProvider": false,
"rules": [
"src",
"platform"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"readdc.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(readdc\\.com).*",
"completeProvider": false,
"rules": [
"ref"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"dailycodingproblem.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(dailycodingproblem\\.com).*",
"completeProvider": false,
"rules": [
"email"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"github.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(github\\.com).*",
"completeProvider": false,
"rules": [
"email_token",
"email_source"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"deviantart.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(deviantart\\.com).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*deviantart\\.com.*outgoing\\?(.*)"
],
"forceRedirection": false
},
"site2.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(site2\\.com).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*site2\\.com.*\\?.*=(.*)"
],
"forceRedirection": false
},
"site.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(site\\.com).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*site\\.com.*\\?to=([^&]*)"
],
"forceRedirection": false
},
"site3.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(site3\\.com).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*site3\\.com.*\\?r=([^&]*)"
],
"forceRedirection": false
},
"aliexpress.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(aliexpress\\.com).*",
"completeProvider": false,
"rules": [
"ws_ab_test",
"btsid",
"algo_expid",
"algo_pvid",
"spm",
"gps-id",
"scm[_a-zA-Z\\-]*",
"pvid"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"mozillazine.org": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(mozillazine\\.org).*",
"completeProvider": false,
"rules": [
"sid"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"9gag.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(9gag\\.com).*",
"completeProvider": false,
"rules": [
"ref"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"linksynergy.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(linksynergy\\.com).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*linksynergy\\.com.*\\/.*murl=([^&]*)"
],
"forceRedirection": false
},
"giphy.com": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(giphy\\.com).*",
"completeProvider": false,
"rules": [
"ref"
],
"rawRules": [],
"exceptions": [],
"redirections": [],
"forceRedirection": false
},
"gate.sc": {
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(gate\\.sc).*",
"completeProvider": false,
"rules": [],
"rawRules": [],
"exceptions": [],
"redirections": [
".*gate\\.sc.*\\/.*url=([^&]*)"
],
"forceRedirection": false
}
}
}

View File

@@ -1 +0,0 @@
b0e1fc948f5e391a53a57092b1c29e8cff474402d5411f4045cfb4a7db37d2bc

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,16 +0,0 @@
/*
* Source: https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types
*/
function copyToClipboard(text) {
function oncopy(event) {
document.removeEventListener("copy", oncopy, true);
event.stopImmediatePropagation();
event.preventDefault();
event.clipboardData.setData("text/plain", text);
}
document.addEventListener("copy", oncopy, true);
document.execCommand("copy");
}

View File

@@ -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="&#x2026;";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});

View File

@@ -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
*/

View File

@@ -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"
}
}

View File

@@ -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": ": ከመጨረሻ ወደ መጀመሪያ(ወራጅ) አደራደር"
}
}

View File

@@ -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": "الأخير"
}
}

View File

@@ -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": ": актываваць для сартавання слупка па змяншэнні"
}
}

View File

@@ -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": "Последна"
}
}

View File

@@ -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"
}
}

View File

@@ -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ě"
}
}

View File

@@ -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"
}
}

View File

@@ -1,17 +0,0 @@
{
"sProcessing": "Henter...",
"sLengthMenu": "Vis _MENU_ linjer",
"sZeroRecords": "Ingen linjer matcher s&oslash;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&oslash;g:",
"sUrl": "",
"oPaginate": {
"sFirst": "F&oslash;rste",
"sPrevious": "Forrige",
"sNext": "N&aelig;ste",
"sLast": "Sidste"
}
}

View File

@@ -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"
}
}
}

View File

@@ -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": ": ενεργοποιήστε για φθίνουσα ταξινόμηση της στήλης"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -1,16 +0,0 @@
{
"sProcessing": "Palun oodake, koostan kuvamiseks nimekirja!",
"sLengthMenu": "N&auml;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&otilde;ik kuvatud kirjed p&otilde;hinevad reaalsetel tulemustel.",
"sSearch": "Otsi k&otilde;ikide tulemuste seast:",
"oPaginate": {
"sFirst": "Algus",
"sPrevious": "Eelmine",
"sNext": "J&auml;rgmine",
"sLast": "Viimane"
}
}

View File

@@ -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"
}
}

View File

@@ -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": ": فعال سازی نمایش به صورت نزولی"
}
}

View File

@@ -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."
}
}

View File

@@ -1,29 +0,0 @@
{
"sProcessing": "Traitement en cours...",
"sSearch": "Rechercher&nbsp;:",
"sLengthMenu": "Afficher _MENU_ &eacute;l&eacute;ments",
"sInfo": "Affichage de l'&eacute;l&eacute;ment _START_ &agrave; _END_ sur _TOTAL_ &eacute;l&eacute;ments",
"sInfoEmpty": "Affichage de l'&eacute;l&eacute;ment 0 &agrave; 0 sur 0 &eacute;l&eacute;ment",
"sInfoFiltered": "(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",
"sInfoPostFix": "",
"sLoadingRecords": "Chargement en cours...",
"sZeroRecords": "Aucun &eacute;l&eacute;ment &agrave; afficher",
"sEmptyTable": "Aucune donn&eacute;e disponible dans le tableau",
"oPaginate": {
"sFirst": "Premier",
"sPrevious": "Pr&eacute;c&eacute;dent",
"sNext": "Suivant",
"sLast": "Dernier"
},
"oAria": {
"sSortAscending": ": activer pour trier la colonne par ordre croissant",
"sSortDescending": ": activer pour trier la colonne par ordre d&eacute;croissant"
},
"select": {
"rows": {
_: "%d lignes séléctionnées",
0: "Aucune ligne séléctionnée",
1: "1 ligne séléctionnée"
}
}
}

View File

@@ -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"
}
}

View File

@@ -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": ": કૉલમ ઉતરતા ક્રમમાં ગોઠવવા માટે સક્રિય"
}
}

View File

@@ -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": "אחרון"
}
}

View File

@@ -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": "अंतिम"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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": ": ակտիվացրեք նվազման կարգով դասավորելու համար"
}
}

View File

@@ -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"
}
}

View File

@@ -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öð"
}
}

View File

@@ -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"
}
}

View File

@@ -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": ": 列を降順に並べ替えるにはアクティブにする"
}
}

View File

@@ -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": ": სვეტის დალაგება კლების მიხედვით"
}
}

View File

@@ -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": ": кемуі бойынша бағанды сұрыптау үшін активациялау"
}
}

View File

@@ -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": ": 내림차순 정렬"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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": ": цагаан толгойн эсрэг дарааллаар эрэмбэлэх"
}
}

View File

@@ -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"
}
}

View File

@@ -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&oslash;k:",
"sUrl": "",
"sZeroRecords": "Ingen linjer matcher s&oslash;ket",
"oPaginate": {
"sFirst": "F&oslash;rste",
"sPrevious": "Forrige",
"sNext": "Neste",
"sLast": "Siste"
},
"oAria": {
"sSortAscending": ": aktiver for å sortere kolonnen stigende",
"sSortDescending": ": aktiver for å sortere kolonnen synkende"
}
}

View File

@@ -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": ": पछाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने"
}
}

View File

@@ -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"
}
}

View File

@@ -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&oslash;k:",
"sUrl": "",
"sZeroRecords": "Inga linjer treff p&aring; s&oslash;ket",
"oPaginate": {
"sFirst": "Fyrste",
"sPrevious": "Forrige",
"sNext": "Neste",
"sLast": "Siste"
},
"oAria": {
"sSortAscending": ": aktiver for å sortere kolonna stigande",
"sSortDescending": ": aktiver for å sortere kolonna synkande"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -1,22 +0,0 @@
{
"processing": "Подождите...",
"search": "Поиск:",
"lengthMenu": "Показать _MENU_ записей",
"info": "Записи с _START_ до _END_ из _TOTAL_ записей",
"infoEmpty": "Записи с 0 до 0 из 0 записей",
"infoFiltered": "(отфильтровано из _MAX_ записей)",
"infoPostFix": "",
"loadingRecords": "Загрузка записей...",
"zeroRecords": "Записи отсутствуют.",
"emptyTable": "В таблице отсутствуют данные",
"paginate": {
"first": "Первая",
"previous": "Предыдущая",
"next": "Следующая",
"last": "Последняя"
},
"aria": {
"sortAscending": ": активировать для сортировки столбца по возрастанию",
"sortDescending": ": активировать для сортировки столбца по убыванию"
}
}

Some files were not shown because too many files have changed in this diff Show More