165 Commits

Author SHA1 Message Date
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
81 changed files with 16101 additions and 2662 deletions

20
.gitignore vendored Normal file
View File

@@ -0,0 +1,20 @@
# 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/

View File

@@ -3,18 +3,25 @@ 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 jq nodejs
stages:
- build
- deploy
hash rules:
stage: build
script:
- sha256sum data/data.min.json | awk '{print $1}' > rules.min.hash
artifacts:
paths:
- rules.min.hash
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:
- master
build firefox:
stage: build
@@ -40,3 +47,20 @@ build chrome:
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:
- master

View File

@@ -39,18 +39,5 @@ You do not have to reinstall Firefox or disable all addons. You can just create
* **Country**: [The country from which you called the page. You can found your country here: http://ip-api.com/json/?fields=country]
### 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 -->

View File

@@ -4,6 +4,246 @@ 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).
## [1.11.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

View File

@@ -0,0 +1,16 @@
body {
background-color: #FFFFFF;
}
.ui.menu .item img.logo {
margin-right: 1.5em;
}
.main.container {
margin-top: 7em;
}
.wireframe {
margin-top: 2em;
}
.ui.footer.segment {
margin: 5em 0em 0em;
padding: 5em 0em;
}

42
GitLabPages/i253.html Normal file
View File

@@ -0,0 +1,42 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ClearURLs - Issue 253</title>
<meta name="description" content="ClearURLs test page">
<meta name="author" content="Kevin Röbert">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.css">
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<div class="ui inverted menu">
<div class="ui container">
<a href="#" class="header item">
<img class="logo" src="clearurls.svg">
ClearURLs
</a>
</div>
</div>
<div class="ui main text container">
<h1 class="ui header">ClearURLs - Issue 253</h1>
<div class="ui negative icon message">
<i class="huge warning sign icon"></i>
<div class="content">
<p>
Your ClearURLs version is vulnerable to the problem from issue 253.
Please update your ClearURLs installation to at least version <b>1.8.4 or higher</b>.
</p>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.js"></script>
</body>
</html>

58
GitLabPages/index.html Normal file
View File

@@ -0,0 +1,58 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ClearURLs test page</title>
<meta name="description" content="ClearURLs test page">
<meta name="author" content="Kevin Röbert">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.css">
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<div class="ui inverted menu">
<div class="ui container">
<a href="#" class="header item">
<img class="logo" src="clearurls.svg">
ClearURLs
</a>
</div>
</div>
<div class="ui main text container">
<h1 class="ui header">ClearURLs test page</h1>
<p>
On this page you can automatically check whether ClearURLs works correctly.
If you are using an obsolete ClearURLs version that is affected by a potential security vulnerability,
you will also be notified on this page.
</p>
<br />
<div class="ui icon message" id="rules_filter_test"></div>
<div class="ui icon message" id="redirection_filter_test"></div>
<div class="ui icon message" id="block_filter_test"></div>
<div class="ui icon message" id="issue_253_test"></div>
<iframe src="https://kevinroebert.gitlab.io/ClearUrls/void/index.html?ref=gitlab"
height="1" width="1" id="void_roebert_eu_iframe" style="border:0; border:none;"></iframe>
<iframe src="https://youtube.com/redirect?q=https%3A%2F%2Fkevinroebert.gitlab.io%2FClearUrls%2Fvoid%2Findex.html%3Fref%3Dgitlab"
height="1" width="1" id="redirect_roebert_eu_iframe" style="border:0; border:none;"></iframe>
<iframe src="https://www.google.com/url?rct=j&url=https%3A%2F%2Fkevinroebert.gitlab.io%2FClearUrls%2Fi253.html"
height="1" width="1" id="i253_roebert_eu_iframe" style="border:0; border:none;"></iframe>
<img id="i253_roebert_eu_img" height="1" width="1"/>
<img id="block_roebert_eu_img" height="1" width="1"/>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.js"></script>
<script src="js/scripts.js"></script>
</body>
</html>

113
GitLabPages/js/scripts.js Normal file
View File

@@ -0,0 +1,113 @@
/*
* 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/>.
*/
/*jshint esversion: 6 */
function checkRule() {
let resURL;
try {
resURL = document.getElementById("void_roebert_eu_iframe").contentWindow.location.href;
} catch(e) {
resURL = "error";
}
let segment = $('#rules_filter_test');
if(resURL === 'https://kevinroebert.gitlab.io/ClearUrls/void/index.html') {
segment.addClass('positive');
segment.append('<i class="large smile outline icon"></i>');
segment.append('<div class="content"><p>The tracking filter function of ClearURLs works correctly.</p></div>');
} else {
segment.addClass('warning');
segment.append('<i class="large frown outline icon"></i>');
segment.append('<div class="content"><p>The tracking filter function of ClearURLs does <b>not</b> work properly. ' +
'Maybe the addon is disabled or the rules could not be downloaded.</p></div>');
}
}
function checkRedirection() {
let resURL;
try {
resURL = document.getElementById("redirect_roebert_eu_iframe").contentWindow.location.href;
} catch(e) {
resURL = "error";
}
let segment = $('#redirection_filter_test');
if(resURL === 'https://kevinroebert.gitlab.io/ClearUrls/void/index.html') {
segment.addClass('positive');
segment.append('<i class="large smile outline icon"></i>');
segment.append('<div class="content"><p>The redirection function of ClearURLs works correctly.</p></div>');
} else {
segment.addClass('warning');
segment.append('<i class="large frown outline icon"></i>');
segment.append('<div class="content"><p>The redirection function of ClearURLs does <b>not</b> work properly. ' +
'Maybe the addon is disabled or the rules could not be downloaded.</p></div>');
}
}
function checkBlock() {
let segment = $('#block_filter_test');
$('#block_roebert_eu_img')
.on('load', function() {
segment.addClass('warning');
segment.append('<i class="large frown outline icon"></i>');
segment.append('<div class="content"><p>The block function of ClearURLs does <b>not</b> work properly. ' +
'Maybe the addon is disabled or the rules could not be downloaded.</p></div>');
})
.on('error', function() {
segment.addClass('positive');
segment.append('<i class="large smile outline icon"></i>');
segment.append('<div class="content"><p>The block function of ClearURLs works correctly.</p></div>');
})
.attr("src", 'https://www.contentpass.de/img/logo.svg');
}
function checkIssue253() {
let segment = $('#issue_253_test');
$('#i253_roebert_eu_img')
.on('load', function() {
segment.addClass('negative');
segment.append('<i class="large frown outline icon"></i>');
segment.append('<div class="content"><p>Your ClearURLs version is vulnerable to the problem from issue 253. ' +
'Please update your ClearURLs installation to at least version <b>1.8.3 or higher</b>.</p></div>');
})
.on('error', function() {
segment.addClass('positive');
segment.append('<i class="large smile outline icon"></i>');
segment.append('<div class="content"><p>Your ClearURLs version is not vulnerable to the problem from Issue 253.</p></div>');
})
.attr("src", 'https://www.google.com/url?rct=j&url=https%3A%2F%2Fkevinroebert.gitlab.io%2FClearUrls%2Fi253.html');
}
$(window).on('load', function () {
try {
checkRule();
} catch(e) {}
try {
checkRedirection();
} catch(e) {}
try {
checkBlock();
} catch(e) {}
try {
checkIssue253();
} catch(e) {}
});

View File

View File

@@ -1,33 +1,73 @@
# ClearURLs
<a href="https://www.buymeacoffee.com/KevinRoebert" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="51" width="217"></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://addons.cdn.mozilla.net/static/img/addons-buttons/AMO-button_1.png" alt="for Firefox">](https://addons.mozilla.org/en-US/firefox/addon/clearurls/) [<img src="https://developer.chrome.com/webstore/images/ChromeWebStore_BadgeWBorder_v2_206x58.png" alt="for Chrome">](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
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 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.11.0)](https://gitlab.com/KevinRoebert/ClearUrls/raw/master/promotion/screens/Popup_v_1.11.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)
[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://clearurls.roebert.eu/](https://clearurls.roebert.eu/)
## Contribute
If you have any suggestions or complaints, please [create an issue.](https://gitlab.com/KevinRoebert/ClearUrls/issues/new)
### 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 [`_locales/en/messages.json`](https://github.com/KevinRoebert/ClearUrls/blob/master/_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
@@ -35,9 +75,9 @@ If you have any suggestions or complaints, please [create an issue.](https://git
## 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)
* 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 +85,20 @@ 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/)
- [Popper.js v1.16.0](https://github.com/popperjs/popper.js/tree/v1.16.0) | Copyright (c) 2016 Federico Zivolo and contributors |
[MIT](https://github.com/popperjs/popper.js/blob/master/LICENSE.md)
- [Bootstrap Colorpicker v3.2.0](https://github.com/itsjavi/bootstrap-colorpicker/tree/3.2.0) | Copyright (c) 2017 Javi Aguilar |
[MIT](https://github.com/itsjavi/bootstrap-colorpicker/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)

View File

@@ -230,5 +230,99 @@
"cleaning_tool_clean_urls_label": {
"message": "Hier finden Sie die gesäuberten URLs:",
"description": "Diese Zeichenfolge wird als Titel auf der Bereinigungswerkzeugseite für die bereinigten URLs verwendet."
},
"local_hosts_skipping": {
"message": "Auslassen von lokalen URLs (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "Diese Zeichenkette wird als Beschreibung für das Auslassen von lokalen URLs verwendet."
},
"local_hosts_skipping_title": {
"message": "Auslassen von lokalen URLs",
"description": "Diese Zeichenkette wird als Titel für das Auslassen von lokalen URLs verwendet."
},
"log_html_export_button": {
"message": "Exportieren",
"description": "Diese Zeichenfolge wird für die Schaltfläche zum Exportieren auf der Protokollseite verwendet."
},
"log_html_export_button_title": {
"message": "Exportieren des globalen Protokolls",
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Exportieren auf der Protokollseite verwendet."
},
"log_html_import_button": {
"message": "Importieren",
"description": "Diese Zeichenfolge wird für die Schaltfläche zum Importieren auf der Protokollseite verwendet."
},
"log_html_import_button_title": {
"message": "Importieren des globalen Protokolls",
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Importieren auf der Protokollseite verwendet."
},
"setting_html_export_button": {
"message": "Exportieren",
"description": "Diese Zeichenfolge wird als Name für die Schaltfläche zum Exportieren auf der Einstellungsseite verwendet."
},
"setting_html_export_button_title": {
"message": "Exportiert alle Einstellungen",
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Exportieren auf der Einstellungsseite verwendet."
},
"setting_html_import_button": {
"message": "Importieren",
"description": "Diese Zeichenfolge wird als Name für die Schaltfläche zum Importieren auf der Einstellungsseite verwendet."
},
"setting_html_import_button_title": {
"message": "Importiert alle Einstellungen inkl. Regeln und Protokoll",
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Importieren auf der Einstellungsseite verwendet."
},
"setting_log_limit_label": {
"message": "Limitiert das Protokoll auf $LIMIT$ Einträge. (-1 := ∞)",
"description": "Diese Zeichenfolge wird als Name für das Protokolllimit verwendet.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Diese Seite wurde von <b>ClearURLs</b> blockiert.",
"description": "Diese Zeichenfolge wird als Titel auf der Hinweisseite für blockierte Seiten verwendet."
},
"blocked_html_body": {
"message": "Diese Seite wurde vom <b>ClearURLs</b> Add-On blockiert, weil wir sie als Werbe- bzw. Trackingservice identifiziert haben. Um diese Seite zu besuchen, müssen Sie das Add-On temporär deaktivieren oder in den Einstellungen von ClearURLs das Domain-Blocking deaktivieren. Dann können Sie auf den untenstehenden Button klicken, um die Seite aufzurufen.",
"description": "Diese Zeichenfolge wird als Mengentext auf der Hinweisseite für blockierte Seiten verwendet."
},
"blocked_html_button": {
"message": "Seite besuchen",
"description": "Diese Zeichenfolge wird als Buttontext auf der Hinweisseite für blockierte Seiten verwendet."
},
"referral_marketing_enabled": {
"message": "Erlaube Referral-Marketing",
"description": "Diese Zeichenkette wird als Beschreibung für das Referral-Marketing verwendet."
},
"referral_marketing_enabled_title": {
"message": "Erlaubt Referral-Marketing",
"description": "Diese Zeichenkette wird als Titel für das Referral-Marketing verwendet."
},
"watchdog": {
"message": "[ClearURLs]: Der Watchdog hat ein Problem festgestellt. ClearURLs wird neugestartet.",
"description": "Diese Zeichenkette wird als Text für den Watchdog verwendet."
},
"domain_blocking_enabled": {
"message": "Erlaube Domain-Blocking (Kann zu Problemen auf Seiten führen, die AdBlocker nicht erlauben)",
"description": "Diese Zeichenkette wird als Beschreibung für das Domain-Blocking verwendet."
},
"domain_blocking_enabled_title": {
"message": "Erlaube Domain-Blocking (Kann zu Problemen auf Seiten führen, die AdBlocker nicht erlauben)",
"description": "Diese Zeichenkette wird als Titel für das Domain-Blocking verwendet."
},
"log_ping_blocked": {
"message": "Diese Hyperlink Auditing Anfrage wurde blockiert",
"description": "Diese Zeichenfolge wird für blockierte Hyperlink Auditing Anfragen im ClearURL-Protokoll verwendet."
},
"ping_blocking_enabled": {
"message": "Blockiere Hyperlink Auditing Anfragen (Siehe auch <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>diese Spezifikation</a>)",
"description": "Diese Zeichenkette wird als Beschreibung für das Hyperlink Auditing-Blocking verwendet."
},
"ping_blocking_enabled_title": {
"message": "Blockiere Hyperlink Auditing Anfragen",
"description": "Diese Zeichenkette wird als Titel für das Hyperlink Auditing-Blocking verwendet."
}
}

View File

@@ -56,7 +56,7 @@
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "Reset the global log",
"message": "Resets the global log",
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
@@ -84,7 +84,7 @@
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "Show number of cleaned urls",
"message": "Show numbers of cleaned urls",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
@@ -136,7 +136,7 @@
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: The addon could not started.",
"message": "[ClearURLs]: The addon could not start.",
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
@@ -148,11 +148,11 @@
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "Settings from ClearURLs",
"message": "ClearURLs settings",
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "Badged color",
"message": "Badge color",
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
@@ -160,7 +160,7 @@
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "Reset everything",
"message": "Resets everything",
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
@@ -212,11 +212,11 @@
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "Cleaning tool from ClearURLs",
"message": "ClearURLs cleaning tool",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "With this tool you can paste in URLs and ClearURLs will cleaned the URLs after a click on the green button. You can paste in multiple URLs at once, but every URL must be in a separate line.",
"message": "With this tool you can paste in URLs and ClearURLs will clean the URLs after a click on the green button. You can paste in multiple URLs at once, but every URL must be on a separate line.",
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
@@ -230,5 +230,99 @@
"cleaning_tool_clean_urls_label": {
"message": "Here you can find the cleaned URLs:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
},
"local_hosts_skipping": {
"message": "Skip URLs on local hosts (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "This string is used as label for the local host skipping switch"
},
"local_hosts_skipping_title": {
"message": "Skips URLs on local hosts",
"description": "This string is used as title for the local host skipping switch"
},
"log_html_export_button": {
"message": "Export",
"description": "This string is used for the export button on the log page."
},
"log_html_export_button_title": {
"message": "Exports the global log",
"description": "This string is used as title for the export button on the log page."
},
"log_html_import_button": {
"message": "Import",
"description": "This string is used for the import button on the log page."
},
"log_html_import_button_title": {
"message": "Import the global log",
"description": "This string is used as title for the import button on the log page."
},
"setting_html_export_button": {
"message": "Export",
"description": "This string is used as name for the export button on the settings page."
},
"setting_html_export_button_title": {
"message": "Exports everything",
"description": "This string is used as title for the export button on the settings page."
},
"setting_html_import_button": {
"message": "Import",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_import_button_title": {
"message": "Imports everything",
"description": "This string is used as title for the import button on the settings page."
},
"setting_log_limit_label": {
"message": "Limit the log to $LIMIT$ entries. (-1 := ∞)",
"description": "This string is used as name for the log limit label.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "This site was blocked by <b>ClearURLs</b>",
"description": "This string is used as title on the blocked site page."
},
"blocked_html_body": {
"message": "This site was blocked by the <b>ClearURLs</b> Add-on, because we identify this site as an advertising and/or tracking service. To visit this site, you must temporarily deactivate the Add-on or disable domain blocking in the ClearURLs settings. After this you can click on the button below to load the page.",
"description": "This string is used as body on the blocked site page."
},
"blocked_html_button": {
"message": "Visit page",
"description": "This string is used as button on the blocked site page."
},
"referral_marketing_enabled": {
"message": "Allow referral marketing",
"description": "This string is used as label for the referral marketing switch"
},
"referral_marketing_enabled_title": {
"message": "Allows referral marketing",
"description": "This string is used as title for the referral marketing switch"
},
"watchdog": {
"message": "[ClearURLs]: The watchdog has detected a problem. ClearURLs is restarting.",
"description": "This string is used as text for the watchdog"
},
"domain_blocking_enabled": {
"message": "Allow domain blocking (Can lead to problems on pages that do not allow AdBlockers)",
"description": "This string is used as label for the domain blocking switch"
},
"domain_blocking_enabled_title": {
"message": "Allow domain blocking (Can lead to problems on pages that do not allow AdBlockers)",
"description": "This string is used as title for the domain blocking switch"
},
"log_ping_blocked": {
"message": "This hyperlink auditing was blocked",
"description": "This string is used on hyperlink auditing in the ClearURLs log."
},
"ping_blocking_enabled": {
"message": "Block hyperlink auditing (See also <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>this article</a>)",
"description": "This string is used as label for the hyperlink auditing blocking switch"
},
"ping_blocking_enabled_title": {
"message": "Block hyperlink auditing",
"description": "This string is used as title for the hyperlink auditing blocking switch"
}
}

View File

@@ -1,216 +1,328 @@
{
"hash_status_code_1": {
"message": "atualizado",
"description": ""
"message": "actualizado",
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "atualizado",
"description": ""
"message": "actualizado",
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "atualização disponivel",
"description": ""
"message": "actualización disponible",
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "erro",
"description": ""
"message": "error",
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "Oops, algo deu errado!",
"description": ""
"message": "¡Vaya, algo ha ido mal!",
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "Esta url foi redirecionada",
"description": ""
"message": "Esta dirección ha sido redirigida",
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "Este domínio foi bloqueado",
"description": ""
"message": "Este dominio está bloqueado",
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: Examinador de registro foi adicionado",
"description": ""
"message": "[ClearURLs]: Registro activado.",
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "Registro do ClearURLs",
"description": ""
"message": "Registro de ClearURLs",
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "Antes de processar",
"description": ""
"message": "Antes de procesar",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "Depois de processar",
"description": ""
"message": "Tras procesar",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "Regra",
"description": ""
"message": "Regla",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "Tempo",
"description": ""
"message": "Hora",
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "Resetar",
"description": ""
"message": "Reiniciar",
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "Resetar o registro global",
"description": ""
"message": "Reiniciar el registro general",
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "Configurações",
"description": ""
"message": "Configuraciones",
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "Filtrar",
"description": ""
"message": "Filtrado",
"description": "This string is used as name for the filter switch button on the popup page."
},
"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": ""
"message": "Este interruptor activa la funcionalidad de filtrado de ClearURLs. Si se deshabilita, el complemento entero dejará de operar.",
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "Registro",
"description": ""
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "O registro é salvo localmente apenas. Aconselhamos contra este recurso se você não precisa dele",
"description": ""
"message": "El registro sólo se guarda localmente. No recomendamos activarlo a menos que la necesites.",
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "Contador",
"description": ""
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "Mostrar número de urls limpas",
"description": ""
"message": "Muestra el número de direcciones modificadas.",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "Estatísticas",
"description": ""
"message": "Estadísticas",
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "Elementos",
"description": ""
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "Bloqueado",
"description": ""
"message": "Bloqueados",
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "Porcentagem",
"description": ""
"message": "Porcentaje",
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "Resetar",
"description": ""
"message": "Reiniciar",
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "Resetar as estatísticas globais",
"description": ""
"message": "Reinicia las estadísticas generales",
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "Estado das regras",
"description": ""
"message": "Reglas",
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "Registro",
"description": ""
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "Abrir o registro",
"description": ""
"message": "Abre el registro.",
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "Notificar dirección actual",
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "Notifica sobre la dirección de la pestaña actual.",
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Salvar no disco.",
"description": ""
"message": "[ClearURLs]: Guardar a disco.",
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: A extensão não pode ser inicializada.",
"description": ""
"message": "[ClearURLs]: El complemento no ha podido arrancar.",
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "Estatísticas",
"description": ""
"message": "Estadísticas",
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "Ativar ou desativar função de estatísticas",
"description": ""
"message": "Habilita o deshabilita las estadísticas",
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "Configurações do ClearURLs",
"description": ""
"message": "Ajustes de ClearURLs",
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "Cor do contador",
"description": ""
"message": "Color del contador",
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "Resetar",
"description": ""
"message": "Reiniciar",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "Resetar tudo",
"description": ""
"message": "Reinicia el complemento entero.",
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "Url do arquivo data.json (regras)",
"description": ""
"message": "Dirección al fichero data.json de reglas",
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "Salvar e recarregar extensão",
"description": ""
"message": "Guardar y aplicar",
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "Salvar configurações",
"description": ""
"message": "Guarda los ajustes.",
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "Url do arquivo rules.hash (hash)",
"description": ""
"message": "Dirección al fichero rules.hash (hash)",
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Solicitar tipos</a> (nivel experto)",
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "Servidor de notificado de direcciones",
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "La dirección ha sido enviada satisfactoriamente. La comprobaremos en breves.",
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "Parece que esta dirección ya había sido notificada.",
"description": "Note: Currently not used."
},
"donate_button": {
"message": "Donar al creador de ClearURLs.",
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "Copiar ubicación actual limpia",
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "Mostrar en el menú contextual",
"description": "This string is used toggle the context menu entry to copy clean links."
},
"history_listener_enabled": {
"message": "Evitar inyección mediante la API del historial (información técnica en <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>el método replaceState()</a>)",
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "Herramienta de filtrado de ClearURLs",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "Con esta herramienta puedes filtrar múltiples direcciones de un plumazo. Simplemente pégalas en la caja de abajo, con una dirección por línea, y pulsa sobre el botón verde.",
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "Filtrar direcciones",
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "Aquí puedes pegar las direcciones con metadatos:",
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "Aquí aparecerán las direcciones filtradas:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
},
"local_hosts_skipping": {
"message": "Omitir filtrado en redes locales (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "This string is used as label for the local host skipping switch"
},
"local_hosts_skipping_title": {
"message": "Omitir filtrado en local",
"description": "This string is used as title for the local host skipping switch"
},
"log_html_export_button": {
"message": "Exportar",
"description": "This string is used for the export button on the log page."
},
"log_html_export_button_title": {
"message": "Exporta el registro general",
"description": "This string is used as title for the export button on the log page."
},
"log_html_import_button": {
"message": "Importar",
"description": "This string is used for the import button on the log page."
},
"log_html_import_button_title": {
"message": "Importar el registro general",
"description": "This string is used as title for the import button on the log page."
},
"setting_html_export_button": {
"message": "Exportar",
"description": "This string is used as name for the export button on the settings page."
},
"setting_html_export_button_title": {
"message": "Exporta todo.",
"description": "This string is used as title for the export button on the settings page."
},
"setting_html_import_button": {
"message": "Importar",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_import_button_title": {
"message": "Importar todo.",
"description": "This string is used as title for the import button on the settings page."
},
"setting_log_limit_label": {
"message": "Limitar el tamaño del registro a $LIMIT$ eventos. (-1 := ∞)",
"description": "This string is used as name for the log limit label.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Este sitio ha sido bloqueado por <b>ClearURLs</b>",
"description": "This string is used as title on the blocked site page."
},
"blocked_html_body": {
"message": "Este sitio ha sido bloqueado por el complemento <b>ClearURLs</b> porque hemos detectado que se trata de un sitio empleado para publicidad o seguimiento. Si deseas aun así visitarlo, tendrás que deshabilitar temporalmente el complemento o desabilitar el bloqueo de dominios en los ajustes, y después pulsar el botón de abajo.",
"description": "This string is used as body on the blocked site page."
},
"blocked_html_button": {
"message": "Visitar página",
"description": "This string is used as button on the blocked site page."
},
"referral_marketing_enabled": {
"message": "Permitir márketing de referidos",
"description": "This string is used as label for the referral marketing switch"
},
"referral_marketing_enabled_title": {
"message": "Permitir márketing de referidos",
"description": "This string is used as title for the referral marketing switch"
},
"watchdog": {
"message": "[ClearURLs]: El watchdog detectado un problema. ClearURLs será reiniciado.",
"description": "This string is used as text for the watchdog"
},
"domain_blocking_enabled": {
"message": "Permitir bloqueo de dominios (Puede provocar problemas con sitios que no permitan bloqueadores de anuncios)",
"description": "This string is used as label for the domain blocking switch"
},
"domain_blocking_enabled_title": {
"message": "Permitir bloqueo de dominios (Puede provocar problemas con sitios que no permitan bloqueadores de anuncios)",
"description": "This string is used as title for the domain blocking switch"
},
"log_ping_blocked": {
"message": "La auditoría de este hipervínculo ha sido bloqueada",
"description": "This string is used on hyperlink auditing in the ClearURLs log."
},
"ping_blocking_enabled": {
"message": "Bloquear auditoría de hipervínculos (más información en inglés en <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>este artículo</a>)",
"description": "This string is used as label for the hyperlink auditing blocking switch"
},
"ping_blocking_enabled_title": {
"message": "Bloquear auditoría de hipervínculos",
"description": "This string is used as title for the hyperlink auditing blocking switch"
}
}
}

View File

@@ -1,283 +1,316 @@
{
"hash_status_code_1": {
"message": "à jour",
"description": ""
"description": "Les règles ClearURLs sont parfaitement à jour."
},
"hash_status_code_2": {
"message": "mis à jour",
"description": ""
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "mise à jour disponible",
"description": ""
"description": "Une mis à jour pour les règles de ClearURLs sont disponibles."
},
"hash_status_code_4": {
"message": "erreur",
"description": ""
"description": "ClearURLs na pas pu démarrer adéquatement pour son bon fonctionnement."
},
"hash_status_code_5": {
"message": "Quelque chose a dysfonctionné",
"description": ""
"description": "Pendant la mis à jour des règles ClearURLs un dysfonctionnement est survenue."
},
"log_redirect": {
"message": "Cette URL a été redirigée",
"description": ""
"description": "Cette chaîne est utilisée pour les redirections dans le protocole ClearURL."
},
"log_domain_blocked": {
"message": "Ce domaine est bloqué",
"description": ""
"description": "Cette chaîne est utilisée sur les domaines bloqués dans le journal de ClearURLs."
},
"check_os_log": {
"message": "[ClearURLs]: Une base de données pour les URL a été ajoutée",
"description": ""
"description": "Cette chaîne est utilisée au démarrage du journal de ClearURL."
},
"log_html_page_title": {
"message": "Journaux de ClearURLs",
"description": ""
"description": "Cette chaîne est utilisée comme en-tête sur la page de journal."
},
"log_html_table_head_1": {
"message": "Avant traitement",
"description": ""
"description": "Cette chaîne est utilisée comme titre de tableau sur la page de journal."
},
"log_html_table_head_2": {
"message": "Après traitement. ",
"description": ""
"description": "Cette chaîne est utilisée comme titre de tableau sur la page de journal."
},
"log_html_table_head_3": {
"message": "Règle",
"description": ""
"description": "Cette chaîne est utilisée comme titre de tableau sur la page de journal."
},
"log_html_table_head_4": {
"message": "Temps",
"description": ""
"description": "Cette chaîne est utilisée comme titre de tableau sur la page de journal."
},
"log_html_reset_button": {
"message": "Remise à zéro",
"description": ""
"description": "Cette chaîne est utilisée comme titre de tableau sur la page de journal."
},
"log_html_reset_button_title": {
"message": "Réinitialiser les journaux globaux",
"description": ""
"description": "Cette chaîne est utilisée comme titre pour le bouton de réinitialisation sur la page de journal."
},
"popup_html_configs_head": {
"message": "Paramétrages",
"description": ""
"description": "Cette chaîne est utilisée comme titre pour les paramétrages sur la page qui affiche les options."
},
"popup_html_configs_switch_filter": {
"message": "Filtre",
"description": ""
"description": "Cette chaîne est utilisée comme nom pour le bouton de changement de filtre sur la page qui affiche les options."
},
"popup_html_configs_switch_filter_title": {
"message": "Le commutateur de l'extension active ou désactive la fonction de nettoyage de ClearURLs",
"description": ""
"description": "Cette chaîne est utilisée comme titre pour le bouton de changement de filtre sur la page qui affiche les options."
},
"popup_html_configs_switch_log": {
"message": "Journalisation",
"description": ""
"description": "Cette chaîne est utilisée comme nom pour le bouton du commutateur de journalisation sur la page qui affiche les options."
},
"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": ""
"description": "Cette chaîne est utilisée comme titre pour le bouton du commutateur de journalisation sur la page qui affiche les options."
},
"popup_html_configs_switch_badges": {
"message": "Compteur",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_configs_switch_badges_title": {
"message": "Afficher le nombre d'URL nettoyées",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_statistics_head": {
"message": "Statistiques",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_statistics_elements": {
"message": "Éléments",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_statistics_blocked": {
"message": "Nb. de bloqués",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_statistics_percentage": {
"message": "Pourcentage",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_statistics_reset_button": {
"message": "Remettre à zéro",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_statistics_reset_button_title": {
"message": "Remettre à zéro les statistiques globales",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_rules_status_head": {
"message": "Règles de la base de données",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_log_head": {
"message": "Journaux",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_log_head_title": {
"message": "Ouvrir les journaux",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"popup_html_report_button": {
"message": "Signaler cette URL",
"description": ""
"description": "Annotation : actuellement non utilisé."
},
"popup_html_report_button_title": {
"message": "Signaler un dysfonctionnement sur cette URL",
"description": ""
"description": "actuellement non utilisé."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Sauvegarder sur le disque.",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"core_error": {
"message": "[ClearURLs]: Lextension na pu être démarrée.",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"configs_switch_statistics": {
"message": "Statistiques",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"configs_switch_statistics_title": {
"message": "Activer ou désactiver les statistiques",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"settings_html_page_title": {
"message": "Paramétrages de ClearURLs",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"badged_color_label": {
"message": "Couleur du compteur",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"setting_html_reset_button": {
"message": "Remettre à létat initial",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"setting_html_reset_button_title": {
"message": "Réinitialisation de tous les paramètres",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"setting_rule_url_label": {
"message": "L'URL du fichier data.json (règles)",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"settings_html_save_button": {
"message": "Sauvegarder et redémarrer lextension",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"settings_html_save_button_title": {
"message": "Sauvegarde les paramétrages",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"setting_hash_url_label": {
"message": "L'URL du fichier rules.hash (signature de contrôle)",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"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": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"setting_report_server_label": {
"message": "Serveur pour signaler des URL",
"description": ""
"description": "Annotation : actuellement non utilisé."
},
"success_report_url": {
"message": "Nous avons reçu votre signalement. Nous allons vérifier cette URL.",
"description": ""
"description": "Annotation : actuellement non utilisé."
},
"error_report_url": {
"message": "Il semble que cette URL a déjà été signalée.",
"description": ""
"description": "Annotation : actuellement non utilisé."
},
"donate_button": {
"message": "Subventionner le créateur de ClearURLs.",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"clipboard_copy_link": {
"message": "Copier lURL sans le traqueur",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"context_menu_enabled": {
"message": "Activer ClearUrls dans le menu contextuel",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"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": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"cleaning_tool_page_title": {
"message": "Outil de nettoyage pour ClearURLs",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"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": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"cleaning_tool_btn": {
"message": "Nettoyer les URL",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"cleaning_tool_dirty_urls_label": {
"message": "Coller ici les URL à nettoyer :",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"cleaning_tool_clean_urls_label": {
"message": "Vous trouverez ici les URL nettoyées :",
"description": ""
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"local_hosts_skipping": {
"message": "Ignorer les IP sur les hôtes locaux, Box, routeur, serveur, etc. (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"local_hosts_skipping_title": {
"message": "Ignorer les IP ou URL sur les hôtes locaux, Box, routeur, serveur ...",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"log_html_export_button": {
"message": "Exporter",
"description": "Cette chaîne est utilisée pour le bouton d'exportation sur la page du journal."
},
"log_html_export_button_title": {
"message": "Exporter le journal",
"description": "Cette chaîne est utilisée comme titre pour le bouton d'exportation de la page du journal."
},
"log_html_import_button": {
"message": "Importer",
"description": "Cette chaîne est utilisée pour le bouton d'importation sur la page de journal."
},
"log_html_import_button_title": {
"message": "Importer le journal",
"description": "Cette chaîne est utilisée comme titre pour le bouton d'importation sur la page de journal."
},
"setting_html_export_button": {
"message": "Exporter",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"setting_html_export_button_title": {
"message": "Tout exporter",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"setting_html_import_button": {
"message": "Importer",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"setting_html_import_button_title": {
"message": "Tout importer",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"setting_log_limit_label": {
"message": "Nombre déléments à enregistrer dans le journal, $LIMIT$ de -1 à linfini (-1 := ∞)",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Site Internet bloqué par <b>ClearURLs</b>",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"blocked_html_body": {
"message": "Ce site Internet a été bloqué par lextension <b>ClearURLs</b> ; il est identifié comme étant problématique, soit publicitaire, soit despionnage ; vous pouvez désactiver temporairement le blocage du site dans les paramétrages, soit lextension, afin de vous y connecter. Il vous faudra recharger la page, soit par le navigateur, soit avec le bouton ci-dessous.",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"blocked_html_button": {
"message": "Se connecter",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"referral_marketing_enabled": {
"message": "Permettre certaines actions commerciales",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"referral_marketing_enabled_title": {
"message": "Permettre certaines actions commerciales",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"watchdog": {
"message": "[ClearURLs]: Temps ou délais dexécution imparti dépassé. ClearURLs doit redémarrer.",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"domain_blocking_enabled": {
"message": "Bloquer les atteintes à la vie privée. Cependant, des sites décèlent la technique de protection et dysfonctionnent délibérément ou affichent des avertissements",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
},
"domain_blocking_enabled_title": {
"message": "Bloquer les atteintes à la vie privée. Cependant, des sites décèlent la technique de protection et dysfonctionnent délibérément ou affichent des avertissements",
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
}
}
}

218
_locales/hu/messages.json Normal file
View File

@@ -0,0 +1,218 @@
{
"hash_status_code_1": {
"message": "naprakész",
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "frissítve",
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "frissítés érhető el",
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "hiba",
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "Hoppá, valami nincs rendben!",
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "Ez az url átirányítva",
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "A domain blokkolva",
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: naplózás elindult.",
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "ClearURLs napló",
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "Feldolgozás előtt",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "Feldolgozást követően",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "Szabály",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "Idő",
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "Nullázás",
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "Teljes napló törlése",
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "Beállítások",
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "Szűrők",
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "A Szűrők kapcsoló aktiválja a ClearURLs tisztítás funkcióját. Ha kikapcsolod, akkor az egész bővítmény működése leáll.",
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "Naplózás",
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "A napló helyileg lesz elmentve. Ha nincs rá szükséged inkább ne kapcsold be.",
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "Jelvények",
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "Mutassa a tisztított URL-ek számát",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "Statisztika",
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "Összes elem",
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "Blokkolva",
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "Százalék",
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "Nullázás",
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "Teljes statisztika törlése",
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "Szabályok állapota",
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "Napló",
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "Napló megnyitása",
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "Aktív URL jelentése",
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "Jelenlegi fül URL címének jelentése.",
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: elmentve a lemezre.",
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: a bővítmény nem tudott elindulni.",
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "Statisztika",
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "Statisztika funkció aktiválása, letiltása",
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "ClearURLs beállításai",
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "Jelvény színe",
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "Visszaállítás",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "Minden visszaállítása alapértékre",
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "URL a data.json fájlhoz (szabályok)",
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "Mentés és bővítmény újraindítása",
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "Beállítások elmentése",
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "URL a rules.hash fájlhoz (hash)",
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (haladó szint)",
"description": "This string is used as name for the types label."
},
"donate_button": {
"message": "Adomány a ClearURLs készítőjének.",
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "Tisztított link másolása",
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "Környezeti menü elemei",
"description": "This string is used toggle the context menu entry to copy clean links."
},
"cleaning_tool_page_title": {
"message": "Tisztító eszköz a ClearURLs-től",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "Az ide beillesztett URL-eket megtisztíthatod a ClearURLs segítségével, ha a zöld gombra nyomsz. Egyszerre több URL-t is megadhatsz, de a címeket soronként kell beírnod.",
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "URL tisztítás",
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "Itt adhatod meg az URL-eket:",
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "Itt láthatod a tisztított URL-eket:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
}
}

308
_locales/it/messages.json Normal file
View File

@@ -0,0 +1,308 @@
{
"hash_status_code_1": {
"message": "tutto aggiornato",
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "aggiornate",
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "aggiornamento disponibile",
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "errore",
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "Oops qualcosa è andato storto!",
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "Questo URL viene reindirizzato",
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "Questo dominio è bloccato",
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: Log listener è stato aggiunto.",
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "Log di ClearURLs",
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "Prima dell'elaborazione",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "Dopo l'elaborazione",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "Regola",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "Data e ora",
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "Ripristina",
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "Azzera il log globale",
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "Configurazioni",
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "Filtra",
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "L'interruttore dei filtri attiva la funzione di pulizia di ClearURLs. Se si disabilita questa opzione, l'intero componente aggiuntivo è disabilitato.",
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "Log",
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "Il registro viene salvato solo in locale. Si sconsiglia di utilizzare questa funzione se non ne hai bisogno.",
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "Contatore",
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "Mostra il numero di url puliti",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "Statistiche",
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "Elementi",
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "Bloccati",
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "Percentuale",
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "Ripristina",
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "Ripristina le statistiche globali",
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "Regole-Stato",
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "Log",
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "Apri il file di log",
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "Segnala l'url corrente",
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "Segnala l'URL corrente da questa scheda.",
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Salva sul disco.",
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: Il componente aggiuntivo non può essere avviato.",
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "Statistiche",
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "Attiva o disattiva le statistiche",
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "Impostazioni da ClearURLs",
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "Colore distintivo",
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "Ripristina",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "Ripristina tutto",
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "Indirizzo del file data.json (regole)",
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "Salva e ricarica il componente aggiuntivo",
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "Salva le impostazioni",
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "Indirizzo del file rules.hash (hash)",
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (livello esperto)\n",
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "Server di report per gli URL",
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "L'URL è stato segnalato correttamente. Verificheremo l'URL quanto prima.",
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "Sembra che questo URL sia già stato segnalato.",
"description": "Note: Currently not used."
},
"donate_button": {
"message": "Una donazione per l'autore di ClearURLs.",
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "Copia i collegamenti puliti",
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "Visualizza la voce del menu contestuale",
"description": "This string is used toggle the context menu entry to copy clean links."
},
"history_listener_enabled": {
"message": "Impedisci il tracciamento via cronologia API (vedi: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>Il metodo replaceState()</a>)",
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "Strumento di pulizia di ClearURLs",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "Con questo strumento è possibile incollare URL che ClearURLs pulirà facendo clic sul pulsante verde. È possibile incollare più URL contemporaneamente, indica un singolo URL per riga.",
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "Pulisci gli URL",
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "Qui puoi incollare gli URL sporchi:",
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "Qui di seguito puoi trovare gli URL puliti:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
},
"local_hosts_skipping": {
"message": "Escludi gli URL locali (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "This string is used as label for the local host skipping switch"
},
"local_hosts_skipping_title": {
"message": "Escludi gli URL locali",
"description": "This string is used as title for the local host skipping switch"
},
"log_html_export_button": {
"message": "Esporta",
"description": "This string is used for the export button on the log page."
},
"log_html_export_button_title": {
"message": "Esporta il log globale",
"description": "This string is used as title for the export button on the log page."
},
"log_html_import_button": {
"message": "Importa",
"description": "This string is used for the import button on the log page."
},
"log_html_import_button_title": {
"message": "Importa il log globale",
"description": "This string is used as title for the import button on the log page."
},
"setting_html_export_button": {
"message": "Esporta",
"description": "This string is used as name for the export button on the settings page."
},
"setting_html_export_button_title": {
"message": "Esporta tutto",
"description": "This string is used as title for the export button on the settings page."
},
"setting_html_import_button": {
"message": "Importa",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_import_button_title": {
"message": "Importa tutto",
"description": "This string is used as title for the import button on the settings page."
},
"setting_log_limit_label": {
"message": "Limita le voci di log a $LIMIT$. (-1 := ∞)",
"description": "This string is used as name for the log limit label.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Questo sito è stato bloccato da <b>ClearURLs</b>",
"description": "This string is used as title on the blocked site page."
},
"blocked_html_body": {
"message": "Questo sito è stato bloccato da <b>ClearURLs</b> perché è stato identificato come sito web di advertising e/o servizio di tracciamento. Per visitare questo sito web devi temporaneamente disattivare il componente aggiuntivo. Dopo aver disattivato ClearURLs potrai fare clic sul pulsante qui sotto per ricaricare la pagina.",
"description": "This string is used as body on the blocked site page."
},
"blocked_html_button": {
"message": "Visita la pagina",
"description": "This string is used as button on the blocked site page."
},
"referral_marketing_enabled": {
"message": "Permetti l'utilizzo di referral marketing",
"description": "This string is used as label for the referral marketing switch"
},
"referral_marketing_enabled_title": {
"message": "Permette l'utilizzo del referral marketing (esempio: Amazon)",
"description": "This string is used as title for the referral marketing switch"
},
"watchdog": {
"message": "[ClearURLs]: Il sistema di controllo ha identificato un problema. ClearURLs verrà riavviato.",
"description": "This string is used as text for the watchdog"
}
}

View File

@@ -1,246 +1,234 @@
{
"hash_status_code_1": {
"description": "up to date",
"message": "最新の"
"message": "最新の",
"description": "このステータスコードは、ClearURLs ルールの更新が利用できず、すべてが最新であることを示しています。"
},
"hash_status_code_2": {
"description": "updated",
"message": "更新する"
"message": "更新する",
"description": "このステータスコードは、ClearURLs ルールが正常に更新されたことを示しています。"
},
"hash_status_code_3": {
"description": "update available",
"message": "利用可能な更新"
"message": "利用可能な更新",
"description": "このステータスコードは、ClearURLs ルールの更新が利用可能であることを示しています。"
},
"hash_status_code_4": {
"description": "error",
"message": "エラー"
"message": "エラー",
"description": "このステータスコードは、ClearURLs を正しく開始できなかったことを示しています。"
},
"hash_status_code_5": {
"description": "Oops something went wrong!",
"message": "おっと!何かが間違っていた!"
"message": "おっと!何かが間違っていた!",
"description": "このステータスコードは、ClearURLs ルールの更新中にエラーが発生したことを示しています。"
},
"log_redirect": {
"description": "This url is redirected",
"message": "この URL はリダイレクトされます"
"message": "この URL はリダイレクトされます",
"description": "この文字列は、ClearURLs ログをリダイレクトして使用されます"
},
"log_domain_blocked": {
"description": "This domain is blocked",
"message": "このドメインはブロックされています"
"message": "このドメインはブロックされています",
"description": "この文字列は、ClearURLs ログのブロックされたドメインで使用されます"
},
"check_os_log": {
"description": "[ClearURLs]: Log listener is added.",
"message": "[ClearURLs]:ログリスナーが追加されました。"
"message": "[ClearURLs]:ログリスナーが追加されました。",
"description": "この文字列は、ClearURLs ログの起動時に使用されま。"
},
"log_html_page_title": {
"description": "Log from ClearURLs",
"message": "ClearURLs からのログ"
"message": "ClearURLs からのログ",
"description": "この文字列は、ログページのヘッダーとして使用されます。"
},
"log_html_table_head_1": {
"description": "Before processing",
"message": "処理する前に"
"message": "処理する前に",
"description": "この文字列は、ログページのテーブルタイトルとして使用されます。"
},
"log_html_table_head_2": {
"description": "After processing",
"message": "処理後"
"message": "処理後",
"description": "この文字列は、ログページのテーブルタイトルとして使用されます。"
},
"log_html_table_head_3": {
"description": "Rule",
"message": "規則"
"message": "規則",
"description": "この文字列は、ログページのテーブルタイトルとして使用されます。"
},
"log_html_table_head_4": {
"description": "Time",
"message": "時間"
"message": "時間",
"description": "この文字列は、ログページのテーブルタイトルとして使用されます。"
},
"log_html_reset_button": {
"description": "Reset",
"message": "リセットする"
"message": "リセットする",
"description": "この文字列は、ログページのリセットボタンに使用されます。"
},
"log_html_reset_button_title": {
"description": "Reset the global log",
"message": "グローバルログをリセットする"
"message": "グローバルログをリセットする",
"description": "この文字列は、ログページのリセットボタンのタイトルとして使用されます。"
},
"popup_html_configs_head": {
"description": "Configs",
"message": "設定"
"message": "設定",
"description": "この文字列は、ポップアップページの設定のタイトルとして使用されます。"
},
"popup_html_configs_switch_filter": {
"description": "Filter",
"message": "フィルター"
"message": "フィルター",
"description": "この文字列は、ポップアップページのフィルタースイッチボタンの名前として使用されます。"
},
"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 のクリーニング機能を有効にします。 このオプションを無効にすると、アドオン全体が無効になります。"
"message": "フィルタースイッチは、ClearURLs のクリーニング機能を有効にします。 このオプションを無効にすると、アドオン全体が無効になります。",
"description": "この文字列は、ポップアップページのフィルタースイッチボタンのタイトルとして使用されます。"
},
"popup_html_configs_switch_log": {
"description": "Logging",
"message": "追跡記録"
"message": "追跡記録",
"description": "この文字列は、ポップアップページのロギングスイッチボタンの名前として使用されます。"
},
"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": "ログはローカルにのみ保存されます。この機能が必要ない場合は、この機能を無効にすることをおすすめします。"
"message": "ログはローカルにのみ保存されます。この機能が必要ない場合は、この機能を無効にすることをおすすめします。",
"description": "この文字列は、ポップアップページのロギングスイッチボタンのタイトルとして使用されます。"
},
"popup_html_configs_switch_badges": {
"description": "Badges",
"message": "バッジ"
"message": "バッジ",
"description": "この文字列は、ポップアップページのバッジスイッチボタンの名前として使用されます。"
},
"popup_html_configs_switch_badges_title": {
"description": "Show number of cleaned urls",
"message": "消去された URL の数を表示する"
"message": "消去された URL の数を表示する",
"description": "この文字列は、ポップアップページのバッジ切り替えボタンのタイトルとして使用されます。"
},
"popup_html_statistics_head": {
"description": "Statistics",
"message": "統計"
"message": "統計",
"description": "この文字列は、ポップアップページの統計のタイトルとして使用されます。"
},
"popup_html_statistics_elements": {
"description": "Elements",
"message": "要素"
"message": "要素",
"description": "この文字列は、ポップアップページの要素の名前として使用されます。"
},
"popup_html_statistics_blocked": {
"description": "Blocked",
"message": "ブロックされた"
"message": "ブロックされた要素",
"description": "この文字列は、ポップアップページでブロックされた要素の名前として使用されます。"
},
"popup_html_statistics_percentage": {
"description": "Percentage",
"message": "パーセンテージ"
"message": "ブロックされた要素の割合",
"description": "この文字列は、ポップアップページでブロックされた要素の割合の名前として使用されます。"
},
"popup_html_statistics_reset_button": {
"description": "Reset",
"message": "リセットする"
"message": "リセットする",
"description": "この文字列は、ポップアップページの統計リセットボタンの名前として使用されます。"
},
"popup_html_statistics_reset_button_title": {
"description": "Reset the global statistics",
"message": "グローバル統計リセットする"
"message": "グローバル統計をリセットする",
"description": "この文字列は、ポップアップページの統計リセットボタンのタイトルとして使用されます。"
},
"popup_html_rules_status_head": {
"description": "Rules-Status",
"message": "ルール・ステータス"
"message": "ルール・ステータス",
"description": "この文字列は、ポップアップページのルール・ステータスセクションのタイトルとして使用されます。"
},
"popup_html_log_head": {
"description": "Log",
"message": "記録を取る"
"message": "記録を取る",
"description": "この文字列は、ポップアップページのログボタンの名前として使用されます。"
},
"popup_html_log_head_title": {
"description": "Open the log",
"message": "記録を開く"
"message": "記録を開く",
"description": "この文字列は、ポップアップページのログボタンのタイトルとして使用されます。"
},
"popup_html_report_button": {
"description": "Report current URL",
"message": "現在の URL を報告する"
"message": "現在の URL を報告する",
"description": "注:現在使用されていません。"
},
"popup_html_report_button_title": {
"description": "Report the current URL from this tab.",
"message": "このタブから現在の URL を報告してください。"
"message": "このタブから現在の URL を報告してください。",
"description": "現在使用されていません。"
},
"core_save_on_disk": {
"description": "[ClearURLs]: Save on disk.",
"message": "[ClearURLs]ディスクに保存します。"
"message": "[ClearURLs]:ディスクに保存します。",
"description": "この文字列は、ClearURLs が設定をディスクに保存したことをユーザーに伝えるために使用されます。"
},
"core_error": {
"description": "[ClearURLs]: The addon could not started.",
"message": "[ClearURLs]:アドオンを開始できませんでした。"
"message": "[ClearURLs]:アドオンを開始できませんでした。",
"description": "この文字列は、ClearURLs を開始できなかったことをユーザーに伝えるために使用されます。"
},
"configs_switch_statistics": {
"description": "Statistics",
"message": "統計"
"message": "統計情報",
"description": "この文字列は、ポップアップページの統計情報切り替えボタンの名前として使用されます。"
},
"configs_switch_statistics_title": {
"description": "Activate or deactivate the statistics function",
"message": "統計機能を有効または無効にする"
"message": "統計情報機能を有効または無効にする",
"description": "この文字列は、ポップアップページの統計情報切り替えボタンのタイトルとして使用されます。"
},
"settings_html_page_title": {
"description": "Settings from ClearURLs",
"message": "ClearURL からの設定"
"message": "ClearURLs からの設定",
"description": "この文字列は、設定ページのタイトルとして使用されます。"
},
"badged_color_label": {
"description": "Badged color",
"message": "バッジの色"
"message": "バッジの色",
"description": "この文字列は、バッジ付きカラーラベルの名前として使用されます。"
},
"setting_html_reset_button": {
"description": "Reset",
"message": "リセットする"
"message": "リセットする",
"description": "この文字列は、設定ページのリセットボタンの名前として使用されます。"
},
"setting_html_reset_button_title": {
"description": "Reset everything",
"message": "すべてをリセットする"
"message": "すべてをリセットする",
"description": "この文字列は、設定ページのリセットボタンのタイトルとして使用されます。"
},
"setting_rule_url_label": {
"description": "The url to the data.json file (rules)",
"message": "data.json ファイルへの URLルール"
"message": "data.json ファイルへの URLルール",
"description": "この文字列は、ルールの URL ラベルの名前として使用されます。"
},
"settings_html_save_button": {
"description": "Save & reload addon",
"message": "アドオンの保存と再読み込み"
"message": "アドオンの保存と再読み込み",
"description": "この文字列は、設定ページの保存と再読み込みボタンの名前として使用されます。"
},
"settings_html_save_button_title": {
"description": "Saves the settings",
"message": "設定を保存します。"
"message": "設定を保存します。",
"description": "この文字列は、設定ページの保存と再読み込みボタンのタイトルとして使用されます。"
},
"setting_hash_url_label": {
"description": "The url to the rules.hash file (hash)",
"message": "rules.hash ファイル(ハッシュ)への URL"
"message": "rules.hash ファイル(ハッシュ)への URL",
"description": "この文字列は、rule.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> (エキスパートレベル)"
"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": {
"description": "Report server for URLs",
"message": "URL のサーバーを報告する"
"message": "URL のサーバーを報告する",
"description": "注:現在使用されていません。"
},
"success_report_url": {
"description": "The URL was successfully reported. We will check this URL soon.",
"message": "URL は正常に報告されました。 我々はすぐに、この URL をチェックします。"
"message": "URL は正常に報告されました。 我々はすぐに、この URL をチェックします。",
"description": "注:現在使用されていません。"
},
"error_report_url": {
"description": "It seems like this URL has already been reported.",
"message": "この URL は既に報告されているようです。"
"message": "この URL は既に報告されているようです。",
"description": "注:現在使用されていません。"
},
"donate_button": {
"message": "ClearURLs 作成者への寄付。",
"description": "この文字列は、寄付ページを参照するために使用されます。"
},
"clipboard_copy_link": {
"message": "クリーンリンクの Location位置情報のコピー",
"description": "この文字列は、コンテキストメニューでクリーンリンクをコピーするために使用されます。"
},
"context_menu_enabled": {
"message": "コンテキストメニューエントリを表示する",
"description": "この文字列は、コンテキストメニューのエントリを切り替えて、クリーンなリンクをコピーするために使用されます。"
},
"history_listener_enabled": {
"message": "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": "この文字列は、history(履歴)API リスナーラベルの名前として使用されます。"
},
"cleaning_tool_page_title": {
"message": "ClearURLs のクリーニングツール",
"description": "この文字列は、クリーニングツールページのタイトルとして使用されます。"
},
"cleaning_tool_description": {
"message": "このツールを使用すると、URL を貼り付けることができます。ClearURLs は、緑色のボタンをクリックすると URL を消去します。 一度に複数の URL を貼り付けることができますが、すべての URL を別々の行に含める必要があります。",
"description": "この文字列は、クリーニングツールの説明として使用されます。"
},
"cleaning_tool_btn": {
"message": "Clean URLs",
"description": "この文字列は、クリーン URL ボタンの名前として使用されます。"
},
"cleaning_tool_dirty_urls_label": {
"message": "ここで、難読化された URL を貼り付けることができます。",
"description": "この文字列は、難読化された URL のクリーニングツールページのタイトルとして使用されます。"
},
"cleaning_tool_clean_urls_label": {
"message": "ここで、クリーンアップされた URL を見つけることができます。",
"description": "この文字列は、クリーン URL のクリーニングツールページのタイトルとして使用されます。"
}
}
}

View File

@@ -1,283 +1,230 @@
{
"hash_status_code_1": {
"message": "aktualne",
"description": ""
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "zaktualizowane",
"description": ""
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "dostępna aktualizacja",
"description": ""
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "błąd",
"description": ""
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "Ups, coś poszło nie tak!",
"description": ""
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "Ten url jest przekierowany",
"description": ""
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "Ta domena jest zablokowana",
"description": ""
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: Dodano nasłuchiwanie dziennika.",
"description": ""
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "Dziennik ClearURLs",
"description": ""
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "Przed przetworzeniem",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "Po przetworzeniu",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "Reguła",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "Czas",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "Wyczyść",
"description": ""
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "Wyczyść wszystkie wpisy dziennika",
"description": ""
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "Konfiguracja",
"description": ""
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "Filtr",
"description": ""
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "Przełącznik filtra aktywuje funkcję oczyszczania ClearURLs. Jeśli wyłączysz tę funkcję, dodatek przestanie działać.",
"description": ""
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "Dziennik",
"description": ""
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "Dziennik zapisywany jest wyłącznie lokalnie. Zalecamy nie używanie tej funkcji jeśli nie jest ci potrzebna.",
"description": ""
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "Znacznik",
"description": ""
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "Pokazuje liczbę oczyszczonych url",
"description": ""
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "Statystyki",
"description": ""
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "Elementy",
"description": ""
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "Zablokowano",
"description": ""
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "Procent",
"description": ""
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "Wyczyść",
"description": ""
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "Wyczyść wszystkie statystyki",
"description": ""
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "StatusReguł",
"description": ""
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "Dziennik",
"description": ""
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "Otwórz dziennik",
"description": ""
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "Raportuj aktualny URL",
"description": ""
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "Raportuj aktualny URL z tej karty.",
"description": ""
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Zapisz na dysku.",
"description": ""
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: Dodatek nie mógł się uruchomić.",
"description": ""
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "Statystyki",
"description": ""
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "Aktywuj lub dezaktywuj funkcję statystyk",
"description": ""
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "Ustawienia ClearURLs",
"description": ""
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "Kolor znacznika",
"description": ""
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "Wyczyść",
"description": ""
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "Wyczyść wszystko",
"description": ""
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "Url do pliku data.json (reguły)",
"description": ""
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "Zapisz i załaduj dodatek ponownie",
"description": ""
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "Zapisz ustawienia",
"description": ""
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "Url do pliku rules.hash (hash)",
"description": ""
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (expert level)",
"description": ""
},
"setting_report_server_label": {
"message": "Serwer raportów dla adresów URL",
"description": ""
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "URL został zaraportowany z powodzeniem. Wkrótce sprawdzimy ten raport.",
"description": ""
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "Ten Url już był raportowany.",
"description": ""
"description": "Note: Currently not used."
},
"donate_button": {
"message": "Dotacja dla twórcy ClearURLs.",
"description": ""
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "Kopiuj Oczyszczony Odnośnik",
"description": ""
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "Wyświetl wpis w menu kontekstowym",
"description": ""
"description": "This string is used toggle the context menu entry to copy clean links."
},
"history_listener_enabled": {
"message": "Zapobiegaj iniekcji śledzenia w API historii (Zobacz także: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
"description": ""
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "Narzędzie do oczyszczania URL",
"description": ""
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "To narzędzie pozwoli wkleić URL, a po wciśnięciu zielonego przycisku ClearURLs oczyści go. Można wkleić wiele URL jednocześnie, ale każdy pojedyńczy winien być w osobnej linii.",
"description": ""
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "Oczyść",
"description": ""
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "Tu możesz wkleić brudne URL:",
"description": ""
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "Tu możesz znaleźć oczyszczone URL:",
"description": ""
"description": "This string is used as title on the cleaning tool page for the clean URLs."
}
}
}

View File

@@ -1,206 +1,234 @@
{
"hash_status_code_1": {
"message": "atualizado",
"description": ""
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "atualizado",
"description": ""
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "atualização disponivel",
"description": ""
"message": "atualização disponível",
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "erro",
"description": ""
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "Oops, algo deu errado!",
"description": ""
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "Esta url foi redirecionada",
"description": ""
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "Este domínio foi bloqueado",
"description": ""
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: Examinador de registro foi adicionado",
"description": ""
"message": "[ClearURLs]: Examinador de registro foi adicionado.",
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "Registro do ClearURLs",
"description": ""
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "Antes de processar",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "Depois de processar",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "Regra",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "Tempo",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "Resetar",
"description": ""
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "Resetar o registro global",
"description": ""
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "Configurações",
"description": ""
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "Filtrar",
"description": ""
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "O switch de filtros ativa a funcionalidade de limpeza do ClearURLs. Se você desabilitar essa opção, toda a extensão será desativada",
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "Registro",
"description": ""
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "O registro é salvo localmente apenas. Aconselhamos contra este recurso se você não precisa dele",
"description": ""
"message": "O registro é salvo apenas localmente. Aconselhamos contra este recurso se você não precisa dele",
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "Contador",
"description": ""
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "Mostrar o número de urls limpas",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "Estatísticas",
"description": ""
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "Elementos",
"description": ""
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "Bloqueado",
"description": ""
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "Porcentagem",
"description": ""
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "Resetar",
"description": ""
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "Resetar as estatísticas globais",
"description": ""
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "Estado das regras",
"description": ""
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "Registro",
"description": ""
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "Abrir o registro",
"description": ""
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "Reportar URL atual",
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "Reportar a URL atual dessa aba.",
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Salvar no disco.",
"description": ""
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: A extensão não pode ser inicializada.",
"description": ""
"message": "[ClearURLs]: A extensão não pôde ser inicializada.",
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "Estatísticas",
"description": ""
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "Ativar ou desativar função de estatísticas",
"description": ""
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "Configurações do ClearURLs",
"description": ""
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "Cor do contador",
"description": ""
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "Resetar",
"description": ""
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "Resetar tudo",
"description": ""
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "Url do arquivo data.json (regras)",
"description": ""
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "Salvar e recarregar extensão",
"description": ""
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "Salvar configurações",
"description": ""
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "Url do arquivo rules.hash (hash)",
"description": ""
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Tipos de pedidos</a> (expert level)",
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "Reportar servidor para URLs",
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "A URL foi reportada com sucesso. Estaremos verificando a url em breve.",
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "Parece que essa URL ja foi reportada.",
"description": "Note: Currently not used."
},
"donate_button": {
"message": "Uma doação para o criador do ClearURLs.",
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "Copiar local do link limpo",
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "Mostrar entrada do menu de contexto",
"description": "This string is used toggle the context menu entry to copy clean links."
},
"history_listener_enabled": {
"message": "Prevent tracking injection over history API (See also: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "Ferramenta de limpeza do ClearURLs",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "Com essa ferramenta você pode colar URLs e ClearURLs as limpará após um clique no botão verde. Você pode colar várias URLs de uma só vez, mas cada URL deve estar em uma linha separada.",
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "Limpar URLs",
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "Aqui você pode colar as urls que deseja limpar:",
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "Aqui você pode encontrar as urls limpas:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
}
}
}

View File

@@ -1,216 +1,328 @@
{
"hash_status_code_1": {
"message": "не требует обновления",
"description": ""
"message": "актуальны",
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "обновлено",
"description": ""
"message": "обновлены",
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "есть обновление",
"description": ""
"message": "доступно обновление",
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "ошибка",
"description": ""
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "Ой, что-то не так!",
"description": ""
"message": "Ой! Что-то пошло не так!",
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "Этот URL перенаправляется",
"description": ""
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "Этот домен заблокирован",
"description": ""
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: Лог listener добавлен.",
"description": ""
"message": "[ClearURLs]: логирование активировано.",
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "Лог ClearURLs",
"description": ""
"message": "Журнал ClearURLs",
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "До обработки",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "После обработки",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "Правило",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "Время",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "Сброс",
"description": ""
"message": "Очистить",
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "Сброс глобального лога",
"description": ""
"message": "Очистить журнал",
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "Настройки",
"description": ""
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "Фильтр",
"description": ""
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "Активирует функцию очистки URL. Если выключить - аддон не будет работать",
"description": ""
"message": "Функция очистки URL. Если выключить - расширение работать не будет!",
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "Логирование",
"description": ""
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "Лог сохраняется только локально. Не используйте эту функцию, если она вам не нужна.",
"description": ""
"message": "Журнал сохраняется только локально. Не используйте эту функцию, если она Вам не нужна",
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "Значки",
"description": ""
"message": "Счётчик",
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "Показать количество очищенных URL",
"description": ""
"message": "Показывать количество очищенных URL",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "Статистика",
"description": ""
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "Элементы",
"description": ""
"message": "Элементов",
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "Заблокировано",
"description": ""
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "Процент",
"description": ""
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "Сброс",
"description": ""
"message": "Очистить",
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "Сброс глобальной статистики",
"description": ""
"message": "Очистить статистику",
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "Актуальность правил",
"description": ""
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "Лог",
"description": ""
"message": "Журнал",
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "Открыть лог",
"description": ""
"message": "Открыть журнал",
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "Сообщить о текущей ссылке",
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "Сообщить о текущей вкладке",
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Сохранить на диск.",
"description": ""
"message": "[ClearURLs]: сохранено на диск.",
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: Не удалось запустить аддон.",
"description": ""
"message": "[ClearURLs]: не удалось запустить расширение.",
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "Статистика",
"description": ""
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "Вкл. или выкл. статистику",
"description": ""
"message": "Вкл./выкл. статистики",
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "Настройки ClearURLs",
"description": ""
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "Цвет значка",
"description": ""
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "Сброс",
"description": ""
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "Сбросить всё",
"description": ""
"message": "Сброс всех настроек",
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "Ссылка на файл data.json (правила)",
"description": ""
"message": "Ссылка к файлу data.json (правила)",
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "Сохранить и перезагрузить аддон",
"description": ""
"message": "Сохранить и перезапустить расширение",
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "Сохранение настроек",
"description": ""
"message": "Сохранить настройки",
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "Ссылка на файл rules.hash (хэш)",
"description": ""
"message": "Ссылка к файлу rules.hash (хэш)",
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Тип запроса</a> (уровень эксперта)",
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "Сервер отчётов для URL-адресов",
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "Отчёт об URL успешно отправлен. Мы проверим его в ближайшее время.",
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "Похоже, об этом URL уже сообщили.",
"description": "Note: Currently not used."
},
"donate_button": {
"message": "Пожертвование для разработчика ClearURLs",
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "Копировать чистую ссылку",
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "Отображение пункта в контекстном меню",
"description": "This string is used toggle the context menu entry to copy clean links."
},
"history_listener_enabled": {
"message": "Предотвращение отслеживания по истории API (см.: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>replaceState() метод</a>)",
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "Инструмент очистки ClearURLs",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "Вставьте ссылки в текстовое поле, ClearURLs очистит ссылки после нажатия на зелёную кнопку. Вы можете вставить несколько URL-адресов, но каждый URL-адрес должен быть в отдельной строке.",
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "Почистить ссылки",
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "Сюда Вы можете вставить грязные ссылки:",
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "Здесь Вы найдёте очищенные ссылки:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
},
"local_hosts_skipping": {
"message": "Пропускать локальные адреса (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "This string is used as label for the local host skipping switch"
},
"local_hosts_skipping_title": {
"message": "Пропускать локальные адреса",
"description": "This string is used as title for the local host skipping switch"
},
"log_html_export_button": {
"message": "Экспорт",
"description": "This string is used for the export button on the log page."
},
"log_html_export_button_title": {
"message": "Экспорт журнала",
"description": "This string is used as title for the export button on the log page."
},
"log_html_import_button": {
"message": "Импорт",
"description": "This string is used for the import button on the log page."
},
"log_html_import_button_title": {
"message": "Импорт журнала",
"description": "This string is used as title for the import button on the log page."
},
"setting_html_export_button": {
"message": "Экспорт",
"description": "This string is used as name for the export button on the settings page."
},
"setting_html_export_button_title": {
"message": "Экспортировать всё",
"description": "This string is used as title for the export button on the settings page."
},
"setting_html_import_button": {
"message": "Импорт",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_import_button_title": {
"message": "Импортировать всё",
"description": "This string is used as title for the import button on the settings page."
},
"setting_log_limit_label": {
"message": "Ограничивать журнал до $LIMIT$ записей (-1 := ∞)",
"description": "This string is used as name for the log limit label.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Этот сайт был заблокирован <b>ClearURLs</b>",
"description": "This string is used as title on the blocked site page."
},
"blocked_html_body": {
"message": "Этот сайт был заблокирован расширением <b>ClearURLs</b>, потому что он определён как рекламный и/или отслеживающий сервис. Чтобы посетить этот сайт, необходимо временно отключить расширение или отключить блокировку домена в настройках ClearURLs. Затем нажмите кнопку ниже, чтобы загрузить страницу",
"description": "This string is used as body on the blocked site page."
},
"blocked_html_button": {
"message": "Посетить страницу",
"description": "This string is used as button on the blocked site page."
},
"referral_marketing_enabled": {
"message": "Разрешить рефералы маркетинга",
"description": "This string is used as label for the referral marketing switch"
},
"referral_marketing_enabled_title": {
"message": "Разрешить рефералы маркетинга",
"description": "This string is used as title for the referral marketing switch"
},
"watchdog": {
"message": "[ClearURLs]: сторожевой таймер обнаружил проблему. ClearURLs будет перезапущен.",
"description": "This string is used as text for the watchdog"
},
"domain_blocking_enabled": {
"message": "Разрешить блокировку домена (может вызвать проблемы на сайтах, которые запрещают AdBlocker)",
"description": "This string is used as label for the domain blocking switch"
},
"domain_blocking_enabled_title": {
"message": "Разрешить блокировку домена (может вызвать проблемы на сайтах, которые запрещают AdBlocker)",
"description": "This string is used as title for the domain blocking switch"
},
"log_ping_blocked": {
"message": "Аудит гиперссылки был заблокирован",
"description": "This string is used on hyperlink auditing in the ClearURLs log."
},
"ping_blocking_enabled": {
"message": "Блокировка аудита гиперссылок (см. <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>эту статью</a>)",
"description": "This string is used as label for the hyperlink auditing blocking switch"
},
"ping_blocking_enabled_title": {
"message": "Блокировка аудита гиперссылок",
"description": "This string is used as title for the hyperlink auditing blocking switch"
}
}
}

View File

@@ -0,0 +1,316 @@
{
"hash_status_code_1": {
"message": "senaste version",
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "uppdaterad",
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "uppdatering tillgänglig",
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "fel",
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "Ojdå, något gick fel!",
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "Den här webbadressen omdirigeras",
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "Den här domänen är blockerad",
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: Logglistare är tilllagd.",
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "Logg från ClearURLs",
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "Före bearbetning",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "Efter bearbetning",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "Regel",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "Tid",
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "Återställ",
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "Återställ den globala loggen",
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "Konfiguration",
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "Filter",
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "Filteromkopplaren aktiverar rensningsfunktionen i ClearURLs. Om du inaktiverar detta alternativ, är hela tillägget inaktiverat",
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "Logga",
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "Loggen sparas endast lokalt. Vi avråder dig från att använda den här funktionen om du inte behöver den",
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "Märken",
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "Visa antalet rensade webbadresser",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "Statistik",
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "Element",
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "Blockerade",
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "Procentsats",
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "Återställ",
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "Återställ den globala statistiken",
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "Regler-Status",
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "Logg",
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "Öppna loggen",
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "Rapportera aktuell webbadress",
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "Rapportera den aktuella webbadressen från den här fliken.",
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Spara till disk.",
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: Tillägget kunde inte starta.",
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "Statistik",
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "Aktivera eller inaktivera statistiken",
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "Inställningar för ClearURLs",
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "Märkesfärg",
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "Återställ",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "Återställer allt",
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "Webbadressen till filen data.json (regler)",
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "Spara och ladda om tillägget",
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "Sparar inställningarna",
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "Webbadressen till filen rules.hash (hash)",
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (expertnivå)",
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "Rapporteringsserver för webbadresser",
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "Webbadressen har rapporterats. Vi kommer att kontrollera webbadressen snart.",
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "Det verkar som att den här webbadressen redan har rapporterats.",
"description": "Note: Currently not used."
},
"donate_button": {
"message": "Donera till skaparen av ClearURLs.",
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "Kopiera rensad webbadress",
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "Visa post i innehållsmenyn",
"description": "This string is used toggle the context menu entry to copy clean links."
},
"history_listener_enabled": {
"message": "Förhindra spårning av injektion över historik-API (Se även: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "Rensningsverktyg för ClearURLs",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "Med detta verktyg kan du klistra in webbadresser och ClearURLs kommer att rensa webbadresserna efter ett klick på den gröna knappen. Du kan klistra en mer än en webbadress samtidigt, men varje webbadress måste vara på var sin rad.",
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "Rensa webbadresser",
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "Här kan du klistra in orensade webbadresser:",
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "Här hittar du de rensade webbadresserna:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
},
"local_hosts_skipping": {
"message": "Hoppa över webbadresser på lokala värdar (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "This string is used as label for the local host skipping switch"
},
"local_hosts_skipping_title": {
"message": "Hoppa över webbadresser på lokala värdar",
"description": "This string is used as title for the local host skipping switch"
},
"log_html_export_button": {
"message": "Exportera",
"description": "This string is used for the export button on the log page."
},
"log_html_export_button_title": {
"message": "Exportera den globala loggen",
"description": "This string is used as title for the export button on the log page."
},
"log_html_import_button": {
"message": "Importera",
"description": "This string is used for the import button on the log page."
},
"log_html_import_button_title": {
"message": "Importera den globala loggen",
"description": "This string is used as title for the import button on the log page."
},
"setting_html_export_button": {
"message": "Exportera",
"description": "This string is used as name for the export button on the settings page."
},
"setting_html_export_button_title": {
"message": "Exportera allt",
"description": "This string is used as title for the export button on the settings page."
},
"setting_html_import_button": {
"message": "Importera",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_import_button_title": {
"message": "Importera allt",
"description": "This string is used as title for the import button on the settings page."
},
"setting_log_limit_label": {
"message": "Begränsa loggfilen till $LIMIT$ poster. (-1 := ∞)",
"description": "This string is used as name for the log limit label.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Den här webbplatsen blockerades av <b>ClearURLs</b>",
"description": "This string is used as title on the blocked site page."
},
"blocked_html_body": {
"message": "Den här sidan har blivit blockerats av <b>ClearURLs</b>, eftersom vi har identifierat webbplatsen som en reklam- och/eller spårningstjänst. För att besöka webbplatsen måste du tillfälligt inaktivera tillägget eller inaktivera domänblockering i inställningarna på ClearURLs. Efter detta kan du klicka på knappen nedan för att ladda sidan.",
"description": "This string is used as body on the blocked site page."
},
"blocked_html_button": {
"message": "Gå till sidan",
"description": "This string is used as button on the blocked site page."
},
"referral_marketing_enabled": {
"message": "Tillåt referral marketing",
"description": "This string is used as label for the referral marketing switch"
},
"referral_marketing_enabled_title": {
"message": "Tillåt referral marketing",
"description": "This string is used as title for the referral marketing switch"
},
"watchdog": {
"message": "[ClearURLs]: Ett problem har upptäckts. ClearURLs startar om.",
"description": "This string is used as text for the watchdog"
},
"domain_blocking_enabled": {
"message": "Tillåt domänblockering (Kan leda till problem på sidor som inte tillåter AdBlockers)",
"description": "This string is used as label for the domain blocking switch"
},
"domain_blocking_enabled_title": {
"message": "Tillåt domänblockering (Kan leda till problem på sidor som inte tillåter AdBlockers)",
"description": "This string is used as title for the domain blocking switch"
}
}

328
_locales/tr/messages.json Normal file
View File

@@ -0,0 +1,328 @@
{
"hash_status_code_1": {
"message": "güncel",
"description": "Bu durum kodu, ClearURL kuralları için güncelleme olmadığını ve her şeyin güncel olduğunu söylüyor."
},
"hash_status_code_2": {
"message": "güncelleştirildi",
"description": "Bu durum kodu, ClearURL kurallarının başarıyla güncellendiğini söylüyor."
},
"hash_status_code_3": {
"message": "Güncelleme mevcut",
"description": "Bu durum kodu, ClearURL kuralları için bir güncellemenin mevcut olduğunu söylüyor."
},
"hash_status_code_4": {
"message": "hata",
"description": "Bu durum kodu, ClearURL'lerin doğru şekilde başlatılamadığını söylüyor."
},
"hash_status_code_5": {
"message": "Hoop! Birşeyler yanlış gitti!",
"description": "Bu durum kodu, ClearURL kurallarını güncellerken bir hata oluştuğunu söylüyor."
},
"log_redirect": {
"message": "Bu URL yönlendirildi",
"description": "Bu dize ClearURL'ler günlüğündeki yönlendirmelerde kullanılır."
},
"log_domain_blocked": {
"message": "Bu alan adı engellendi",
"description": "Bu dize ClearURL'ler günlüğündeki engellenen alan adlarında kullanılır."
},
"check_os_log": {
"message": "[ClearURLs]: Günlük dinleyicisi eklendi.",
"description": "Bu dize ClearURLs log başlangıcında kullanılır."
},
"log_html_page_title": {
"message": "ClearURLs'dan Günlük",
"description": "Bu dize, günlük sayfasında üstbilgi olarak kullanılır."
},
"log_html_table_head_1": {
"message": "İşlemeden önce",
"description": "Bu dize, günlük sayfasında tablo başlığı olarak kullanılır."
},
"log_html_table_head_2": {
"message": "İşlemden sonra",
"description": "Bu dize, günlük sayfasında tablo başlığı olarak kullanılır."
},
"log_html_table_head_3": {
"message": "Kural",
"description": "Bu dize, günlük sayfasında tablo başlığı olarak kullanılır."
},
"log_html_table_head_4": {
"message": "Zaman",
"description": "Bu dize, günlük sayfasında tablo başlığı olarak kullanılır."
},
"log_html_reset_button": {
"message": "Sıfırla",
"description": "Bu dize, günlük sayfasındaki sıfırlama düğmesi için kullanılır."
},
"log_html_reset_button_title": {
"message": "Genel günlüğü sıfırla",
"description": "Bu dize, günlük sayfasındaki sıfırlama düğmesi için başlık olarak kullanılır."
},
"popup_html_configs_head": {
"message": "Yapılandırmalar",
"description": "Bu dize, açılır sayfadaki yapılandırmalar için başlık olarak kullanılır."
},
"popup_html_configs_switch_filter": {
"message": "Filtre",
"description": "Bu dize, açılır sayfadaki filtre değiştirme düğmesinin adı olarak kullanılır."
},
"popup_html_configs_switch_filter_title": {
"message": "Filtreler anahtarı ClearURL'lerin temizleme işlevini etkinleştirir. Bu seçeneği devre dışı bırakırsanız, tüm eklenti devre dışı bırakılır",
"description": "Bu dize, açılır sayfadaki filtre değiştirme düğmesinin başlığı olarak kullanılır."
},
"popup_html_configs_switch_log": {
"message": "Günlük tutma",
"description": "Bu dize, açılır sayfadaki günlük anahtar düğmesinin adı olarak kullanılır."
},
"popup_html_configs_switch_log_title": {
"message": "Günlük yalnızca yerel olarak kaydedilir. İhtiyacınız yoksa bu özelliğe karşı tavsiyede bulunuruz",
"description": "Bu dize, açılır sayfadaki kayıt anahtarı düğmesinin başlığı olarak kullanılır."
},
"popup_html_configs_switch_badges": {
"message": "Rozetler",
"description": "Bu dize, açılır sayfadaki rozetler anahtar düğmesinin adı olarak kullanılır."
},
"popup_html_configs_switch_badges_title": {
"message": "Temizlenmiş URL'lerin sayısını göster",
"description": "Bu dize, açılır sayfadaki rozetler anahtar düğmesinin başlığı olarak kullanılır."
},
"popup_html_statistics_head": {
"message": "istatistik",
"description": "Bu dize, açılır sayfadaki istatistikler için başlık olarak kullanılır."
},
"popup_html_statistics_elements": {
"message": "Öğeler",
"description": "Bu dize, açılır sayfadaki öğelerin adı olarak kullanılır."
},
"popup_html_statistics_blocked": {
"message": "Engellendi",
"description": "Bu dize, açılır penceredeki engellenen öğelerin adı olarak kullanılır."
},
"popup_html_statistics_percentage": {
"message": "Yüzde",
"description": "Bu dize, açılır sayfadaki engellenen öğelerin yüzdesi için ad olarak kullanılır."
},
"popup_html_statistics_reset_button": {
"message": "Sıfırlama",
"description": "Bu dize, açılır sayfadaki istatistik sıfırlama düğmesinin adı olarak kullanılır."
},
"popup_html_statistics_reset_button_title": {
"message": "Genel istatistikleri sıfırla",
"description": "Bu dize, açılır sayfadaki istatistik sıfırlama düğmesinin başlığı olarak kullanılır."
},
"popup_html_rules_status_head": {
"message": "Kurallar-Durum",
"description": "Bu dize, açılır sayfadaki kurallar-durum bölümü için başlık olarak kullanılır."
},
"popup_html_log_head": {
"message": "Günlük",
"description": "Bu dize, açılır sayfadaki günlük düğmesinin adı olarak kullanılır."
},
"popup_html_log_head_title": {
"message": "Günlüğü aç",
"description": "Bu dize, açılır penceredeki günlük düğmesinin başlığı olarak kullanılır."
},
"popup_html_report_button": {
"message": "Geçerli URL'yi bildir",
"description": "Not: Şu anda kullanılmamaktadır."
},
"popup_html_report_button_title": {
"message": "Geçerli URLyi bu sekmeden bildirin.",
"description": "Şu anda kullanılmamış."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Diske kaydedin.",
"description": "Bu dize, kullanıcıya ClearURL'lerin ayarları diske kaydettiğini söylemek için kullanılır."
},
"core_error": {
"message": "[ClearURLs]: Eklenti başlatılamadı.",
"description": "Bu dize, kullanıcıya ClearURL'lerin başlatılamadığını söylemek için kullanılır."
},
"configs_switch_statistics": {
"message": "İstatistikler",
"description": "Bu dize, açılır sayfadaki istatistik anahtar düğmesinin adı olarak kullanılır."
},
"configs_switch_statistics_title": {
"message": "İstatistik işlevini etkinleştirin veya devre dışı bırakın",
"description": "Bu dize, açılır sayfadaki istatistik değiştirme düğmesinin başlığı olarak kullanılır."
},
"settings_html_page_title": {
"message": "ClearURL'lerdeki Ayarlar",
"description": "Bu dize, ayarlar sayfasında başlık olarak kullanılır."
},
"badged_color_label": {
"message": "Rozet renk",
"description": "Bu dize, rozet renk etiketinin adı olarak kullanılır."
},
"setting_html_reset_button": {
"message": "Sıfırlama",
"description": "Bu dize, ayarlar sayfasındaki sıfırlama düğmesinin adı olarak kullanılır."
},
"setting_html_reset_button_title": {
"message": "Her şeyi sıfırla",
"description": "Bu dize, ayarlar sayfasındaki sıfırlama düğmesinin adı olarak kullanılır."
},
"setting_rule_url_label": {
"message": "Data.json dosyasının URL'si (kurallar)",
"description": "Bu dize kural url etiketinin adı olarak kullanılır."
},
"settings_html_save_button": {
"message": "Eklentiyi kaydet ve yeniden yükle",
"description": "Bu dize, ayarlar sayfasındaki kaydet ve yeniden yükle düğmesinin adı olarak kullanılır."
},
"settings_html_save_button_title": {
"message": "Ayarları kaydeder",
"description": "Bu dize, ayarlar sayfasındaki kaydet ve yeniden yükle düğmesinin adı olarak kullanılır."
},
"setting_hash_url_label": {
"message": "Rules.hash dosyasının URL'si (karma)",
"description": "Bu dize rule.hash url etiketinin adı olarak kullanılır."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/tr-TR/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (uzman seviyesi)",
"description": "Bu dize, tür etiketi için ad olarak kullanılır."
},
"setting_report_server_label": {
"message": "URL'ler için rapor sunucusu",
"description": "Not: Şu anda kullanılmamaktadır."
},
"success_report_url": {
"message": "URL başarıyla rapor edildi. Bu URLyi yakında kontrol edeceğiz.",
"description": "Not: Şu anda kullanılmamaktadır."
},
"error_report_url": {
"message": "Bu URL zaten bildirilmiş gibi görünüyor.",
"description": "Not: Şu anda kullanılmamaktadır."
},
"donate_button": {
"message": "ClearURL'nin yaratıcısı için bir bağış.",
"description": "Bu dize bir bağış sayfasına başvurmak için kullanılır."
},
"clipboard_copy_link": {
"message": "Temiz Bağlantı Konumunu Kopyala",
"description": "Bu dize bağlam menüsünde temiz bağlantıları kopyalamak için kullanılır."
},
"context_menu_enabled": {
"message": "İçerik menüsü girişini görüntüle",
"description": "Bu dize, temiz linkleri kopyalamak için bağlam menüsü girişini değiştirmek için kullanılır."
},
"history_listener_enabled": {
"message": "Geçmiş API'si üzerinden izleme enjeksiyonunu engelle(Ayrıca bakınız: <a href='https://developer.mozilla.org/tr-TR/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
"description": "Bu dize geçmiş API dinleyici etiketinin adı olarak kullanılır."
},
"cleaning_tool_page_title": {
"message": "ClearURL'lerden temizleme aracı",
"description": "Bu dize temizleme aracı sayfasında başlık olarak kullanılır."
},
"cleaning_tool_description": {
"message": "Bu araçla URL'lere yapıştırabilirsiniz ve ClearURL'ler yeşil düğmeye tıkladıktan sonra URL'leri temizler. Aynı anda birden fazla URL'ye yapıştırabilirsiniz, ancak her URL ayrı bir satırda olmalıdır.",
"description": "Bu dize temizleme aracının açıklaması olarak kullanılır."
},
"cleaning_tool_btn": {
"message": "URLleri temizle",
"description": "Bu dize temiz url düğmesinin adı olarak kullanılır."
},
"cleaning_tool_dirty_urls_label": {
"message": "Burada kirli URL'leri yapıştırabilirsiniz:",
"description": "Bu dize, kirli URLlerin temizleme aracı sayfasında başlık olarak kullanılır."
},
"cleaning_tool_clean_urls_label": {
"message": "Temizlenmiş URLleri burada bulabilirsiniz:",
"description": "Bu dize, temiz URLlerin temizleme aracı sayfasında başlık olarak kullanılır."
},
"local_hosts_skipping": {
"message": "Yerel ana makinelerde URLlerin atlanması (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, yerel ana bilgisayar)",
"description": "Bu dize, yerel ana bilgisayar atlama anahtarı için etiket olarak kullanılır."
},
"local_hosts_skipping_title": {
"message": "Yerel ana makinelerde URL atlama",
"description": "Bu dize, yerel ana bilgisayar atlama anahtarı için başlık olarak kullanılır"
},
"log_html_export_button": {
"message": "Dışa Aktar",
"description": "Bu dize, günlük sayfasındaki verme düğmesi için kullanılır."
},
"log_html_export_button_title": {
"message": "Genel günlüğü dışa aktar",
"description": "Bu dize, günlük sayfasındaki verme düğmesine başlık olarak kullanılır."
},
"log_html_import_button": {
"message": "İçe Aktar",
"description": "Bu dize, günlük sayfasındaki içe aktar düğmesi için kullanılır."
},
"log_html_import_button_title": {
"message": "Genel günlüğü içe aktar",
"description": "Bu dize, günlük sayfasındaki içe aktarma düğmesi için başlık olarak kullanılır."
},
"setting_html_export_button": {
"message": "Dışa Aktar",
"description": "Bu dize, ayarlar sayfasındaki verme düğmesinin adı olarak kullanılır."
},
"setting_html_export_button_title": {
"message": "Her şeyi dışa aktar",
"description": "Bu dize, ayarlar sayfasındaki dışa aktar düğmesi için başlık olarak kullanılır."
},
"setting_html_import_button": {
"message": "Dışa Aktar",
"description": "Bu dize, ayarlar sayfasındaki sıfırlama düğmesinin adı olarak kullanılır."
},
"setting_html_import_button_title": {
"message": "Her şeyi içe aktar",
"description": "Bu dize, ayarlar sayfasındaki alma düğmesinin adı olarak kullanılır."
},
"setting_log_limit_label": {
"message": "Günlüğü $ LIMIT $ girişleriyle sınırlar. (-1: = ∞)",
"description": "Bu dize, günlük sınırı etiketinin adı olarak kullanılır.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Bu site tarafından engellendi <b>ClearURLs</b>",
"description": "Bu dize engellenen site sayfasında başlık olarak kullanılır."
},
"blocked_html_body": {
"message": "Bu site tarafından engellendi <b>ClearURLs</b> Eklentisi, çünkü bu siteyi bir reklamcılık ve / veya izleme hizmeti olarak tanımlıyoruz. Bu siteyi ziyaret etmek için Eklentiyi geçici olarak devre dışı bırakmanız gerekir. ClearURL'leri devre dışı bıraktıktan sonra sayfayı yüklemek için aşağıdaki düğmeye tıklayabilirsiniz.",
"description": "Bu dize engellenen site sayfasında gövde olarak kullanılır."
},
"blocked_html_button": {
"message": "Sayfayı ziyaret et",
"description": "Bu dize engellenen site sayfasındaki düğme olarak kullanılır."
},
"referral_marketing_enabled": {
"message": "Tavsiye pazarlamasına izin ver",
"description": "Bu dize tavsiye pazarlama anahtarı için etiket olarak kullanılır"
},
"referral_marketing_enabled_title": {
"message": "Tavsiye pazarlamasına izin verir",
"description": "Bu dize tavsiye pazarlama anahtarı için başlık olarak kullanılır"
},
"watchdog": {
"message": "[ClearURL'ler]: Güvenlik Zamanlayıcısı bir sorun tespit etti. ClearURL'ler yeniden başlatıldı.",
"description": "Bu dize güvenlik zamanlayıcısı için metin olarak kullanılır."
},
"domain_blocking_enabled": {
"message": "Alan adı engellemeye izin ver (Reklam Engelleyicilere izin vermeyen sayfalarda sorunlara neden olabilir)",
"description": "Bu dize, alan adı engelleme anahtarı için etiket olarak kullanılır"
},
"domain_blocking_enabled_title": {
"message": "Alan adı engellemeye izin ver (Reklam Engelleyicilere izin vermeyen sayfalarda sorunlara neden olabilir)",
"description": "Bu dize, alan adı engelleme anahtarının başlığı olarak kullanılır"
},
"log_ping_blocked": {
"message": "Bu köprü denetimi engellendi",
"description": "Bu dize, ClearURLs günlüğündeki köprü denetimi için kullanılır."
},
"ping_blocking_enabled": {
"message": "Köprü denetimini engelle (Ayrıca bkz.<a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>this article</a>)",
"description": "Bu dize köprü denetim engelleme anahtarı için etiket olarak kullanılır"
},
"ping_blocking_enabled_title": {
"message": "Köprü denetimini engelle",
"description": "Bu dize köprü denetim engelleme anahtarının başlığı olarak kullanılır"
}
}

View File

@@ -1,202 +1,202 @@
{
"hash_status_code_1": {
"message": "не потребує оновлення",
"description": ""
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "оновлено",
"description": ""
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "наявне оновлення",
"description": ""
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "помилка",
"description": ""
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "Ой, щось не так!",
"description": ""
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "Ця URL-адреса перенаправляється",
"description": ""
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "Цей домен заблоковано",
"description": ""
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: listener журналу додано.",
"description": ""
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "Журнал ClearURLs",
"description": ""
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "Перед обробкою",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "Після обробки",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "Правило",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "Час",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "Скинути",
"description": ""
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "Скидання глобального журналу",
"description": ""
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "Налаштування",
"description": ""
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "Фільтр",
"description": ""
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "Активує функцію очищення ClearURLs. Якщо вимкнути - додаток не працюватиме",
"description": ""
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "Журнал",
"description": ""
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "Журнал зберігається лише локально. Не активуйте цю функцію, якщо вона вам не потрібна",
"description": ""
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "Позначки",
"description": ""
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "Показати кількість очищених URL",
"description": ""
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "Статистика",
"description": ""
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "Елементи",
"description": ""
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "Заблоковано",
"description": ""
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "Відсоток",
"description": ""
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "Скинути",
"description": ""
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "Скидання глобальної статистики",
"description": ""
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "Актуальність правил",
"description": ""
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "Журнал",
"description": ""
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "Відкрити журнал",
"description": ""
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "Повідомити про URL",
"description": ""
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "Повідомити про URL з цієї вкладки.",
"description": ""
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Зберегти на диск.",
"description": ""
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: Не вдалося запустити додаток.",
"description": ""
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "Статистика",
"description": ""
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "Увімкнення чи вимкнення статистики",
"description": ""
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "Налаштування ClearURLs",
"description": ""
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "Колір піктограми",
"description": ""
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "Скинути",
"description": ""
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "Скинути все",
"description": ""
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "Посилання на файл data.json (правила)",
"description": ""
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "Зберегти і перезавантажити додаток",
"description": ""
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "Збереження налаштувань",
"description": ""
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "Посилання на файл rules.hash (хеш)",
"description": ""
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https:\/\/developer.mozilla.org\/en-US\/docs\/Mozilla\/Add-ons\/WebExtensions\/API\/webRequest\/ResourceType' target='_blank'>Типи запитів<\/a> (експертний рівень)",
"description": ""
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Типи запитів</a> (експертний рівень)",
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "Звіт про сервер URL",
"description": ""
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "Успішно повідомлено про URL-адресу. Ми невдовзі це перевіримо.",
"description": ""
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "Схоже, про цю URL-адресу вже повідомлено.",
"description": ""
"description": "Note: Currently not used."
},
"donate_button": {
"message": "Внесок для розробників ClearURLs.",
"description": ""
"description": "This string is used to refer to a donation page."
}
}

View File

@@ -1,291 +1,234 @@
{
"hash_status_code_1": {
"message": "已是最新的",
"description": ""
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "已更新",
"description": ""
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "有可用的更新",
"description": ""
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "错误",
"description": ""
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "发生错误",
"description": ""
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "此网址已被转址",
"description": ""
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "此网域已被封锁",
"description": ""
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: 已新增日志聆听者",
"description": ""
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "ClearURLs日志",
"description": ""
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "处理前",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "处理后",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "规则",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "时间",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "重置",
"description": ""
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "重置全局日志",
"description": ""
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "设定",
"description": ""
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "过滤器",
"description": ""
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "此为ClearURLs的主开关. 若关闭则此插件失效.",
"description": ""
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "日志",
"description": ""
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "日志会被储存于本地. 若不需要此功能建议关闭.",
"description": ""
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "徽章",
"description": ""
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "显示已清理数量",
"description": ""
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "统计",
"description": ""
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "元件",
"description": ""
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "已阻挡",
"description": ""
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "比例",
"description": ""
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "重置",
"description": ""
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "重置全局统计",
"description": ""
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "规则-状态",
"description": ""
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "日志",
"description": ""
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "开启日志",
"description": ""
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "回报目前网址",
"description": ""
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "回报该分页目前网址",
"description": ""
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: 储存于本地",
"description": ""
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: 插件无法启动",
"description": ""
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "统计",
"description": ""
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "开启或关闭统计功能",
"description": ""
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "ClearURLs设定",
"description": ""
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "徽章颜色",
"description": ""
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "重置",
"description": ""
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "重置所有设定",
"description": ""
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "data.json档的网址 (规则)",
"description": ""
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "储存并重启插件",
"description": ""
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "储存设定",
"description": ""
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "rules.hash档的网址 (校验)",
"description": ""
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>请求类型</a> (进阶设定)",
"description": ""
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "回报网址",
"description": ""
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "该网址已成功回报",
"description": ""
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "该网址已被回报过",
"description": ""
"description": "Note: Currently not used."
},
"donate_button": {
"message": "给ClearURLs的作者一点贊助",
"description": ""
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "複製清理过的网址",
"description": ""
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "显示右键选单条目",
"description": ""
"description": "This string is used toggle the context menu entry to copy clean links."
},
"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": ""
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "ClearURLs的网址清理工具",
"description": ""
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "此工具提供手动清理网址的功能. 在下方贴上网址并按下绿色按钮, ClearURLs将会输出清理后的网址. 若要同时清理多个网址, 请将每个置于不同行.",
"description": ""
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "网址清理工具",
"description": ""
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "清理前的网址:",
"description": ""
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "清理后的网址:",
"description": ""
"description": "This string is used as title on the cleaning tool page for the clean URLs."
}
}
}

View File

@@ -1,291 +1,234 @@
{
"hash_status_code_1": {
"message": "已是最新的",
"description": ""
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "已更新",
"description": ""
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "有可用的更新",
"description": ""
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "錯誤",
"description": ""
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "發生錯誤",
"description": ""
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "此網址已被轉址",
"description": ""
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "此網域已被封鎖",
"description": ""
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: 已新增記錄監聽器",
"description": ""
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "ClearURLs歷史記錄",
"description": ""
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "處理前",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "處理後",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "規則",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "時間",
"description": ""
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "重置",
"description": ""
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "重置全域記錄檔",
"description": ""
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "設定",
"description": ""
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "過濾器",
"description": ""
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "此為ClearURLs的主開關. 若關閉則此附件元件失效.",
"description": ""
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "歷史記錄",
"description": ""
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "記錄檔會被儲存於本機. 若不需要此功能建議關閉.",
"description": ""
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "徽章",
"description": ""
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "顯示已清理數量",
"description": ""
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "統計",
"description": ""
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "元件",
"description": ""
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "已阻擋",
"description": ""
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "比例",
"description": ""
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "重置",
"description": ""
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "重置全域統計",
"description": ""
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "規則-狀態",
"description": ""
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "記錄",
"description": ""
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "開啟記錄",
"description": ""
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "回報目前網址",
"description": ""
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "回報該分頁目前網址",
"description": ""
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: 儲存於本機",
"description": ""
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: 附加元件無法啟動",
"description": ""
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "統計",
"description": ""
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "開啟或關閉統計功能",
"description": ""
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "ClearURLs設定",
"description": ""
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "徽章顏色",
"description": ""
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "重置",
"description": ""
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "重置所有設定",
"description": ""
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "data.json檔的網址 (規則)",
"description": ""
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "儲存並重啟附件元件",
"description": ""
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "儲存設定",
"description": ""
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "rules.hash檔的網址 (校驗)",
"description": ""
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>請求類型</a> (進階設定)",
"description": ""
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "回報網址",
"description": ""
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "該網址已成功回報",
"description": ""
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "該網址已被回報過",
"description": ""
"description": "Note: Currently not used."
},
"donate_button": {
"message": "給ClearURLs的作者一點贊助",
"description": ""
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "複製清理過的網址",
"description": ""
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "顯示右鍵選單項目",
"description": ""
"description": "This string is used toggle the context menu entry to copy clean links."
},
"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": ""
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "ClearURLs的網址清理工具",
"description": ""
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "此工具提供手動清理網址的功能. 在下方貼上網址並按下綠色按鈕, ClearURLs將會輸出清理後的網址. 若要同時清理多個網址, 請將每個置於不同行.",
"description": ""
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "網址清理工具",
"description": ""
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "清理前的網址:",
"description": ""
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "清理後的網址:",
"description": ""
"description": "This string is used as title on the cleaning tool page for the clean URLs."
}
}
}

View File

@@ -0,0 +1,87 @@
/*
* 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/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for minification of the data.min.json file and deletes also empty entries.
*/
let fs = require('fs');
const inFileLocation = process.argv.slice(2)[0];
const outFileLocation = process.argv.slice(2)[1];
if(inFileLocation === undefined || outFileLocation === undefined) {
throw "in- and output must be set!";
}
const fileContent = fs.readFileSync(inFileLocation).toString();
/**
* Builds a minify version of the data.min.json file.
*/
function build() {
const data = JSON.parse(fileContent);
let minifiedData = {"providers":{}};
for(let provider in data.providers) {
minifiedData.providers[provider] = {};
let self = minifiedData.providers[provider];
if(data.providers[provider].completeProvider === true) {
self.completeProvider = true;
}
if(data.providers[provider].forceRedirection === true) {
self.forceRedirection = true;
}
if(data.providers[provider].urlPattern !== "") {
self.urlPattern = data.providers[provider].urlPattern;
}
if(data.providers[provider].rules.length !== 0) {
self.rules = data.providers[provider].rules;
}
if(data.providers[provider].rawRules.length !== 0) {
self.rawRules = data.providers[provider].rawRules;
}
if(data.providers[provider].referralMarketing.length !== 0) {
self.referralMarketing = data.providers[provider].referralMarketing;
}
if(data.providers[provider].exceptions.length !== 0) {
self.exceptions = data.providers[provider].exceptions;
}
if(data.providers[provider].redirections.length !== 0) {
self.redirections = data.providers[provider].redirections;
}
}
fs.writeFile(outFileLocation, JSON.stringify(minifiedData), function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
}
build();

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -33,9 +33,9 @@ $(document).ready(function(){
* 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');
const cleanTArea = $('#cleanURLs');
const dirtyTArea = $('#dirtyURLs');
const urls = dirtyTArea.val().split('\n');
cleanedURLs = [];
length = urls.length;

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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

View File

@@ -0,0 +1,67 @@
/*
* 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/>.
*
* Based on:
* Remove Google Redirection
* https://github.com/kodango/Remove-Google-Redirection/blob/master/extension/chrome/remove-google-redirection.user.js
* Copyright (c) 2017 kodango
* MIT License: https://github.com/kodango/Remove-Google-Redirection/blob/master/LICENSE
*/
(function (window) {
"use strict";
function injectFunction() {
let ele = document.createElement('script');
let s = document.getElementsByTagName('script')[0];
ele.type = 'text/javascript';
ele.textContent = "Object.defineProperty(window, 'rwt', {" +
" value: function() { return false; }," +
" writable: false," +
" configurable: false" +
"});";
s.parentNode.insertBefore(ele, s);
}
/*
* The main entry
*/
function main()
{
injectFunction();
document.addEventListener('mouseover', function (event) {
let a = event.target, depth = 1;
while (a && a.tagName !== 'A' && depth-- > 0) {
a = a.parentNode;
}
if (a && a.tagName === 'A') {
try {
a.removeAttribute('data-cthref');
delete a.dataset.cthref;
} catch(e) {
console.log(e);
}
}
}, true);
}
main();
})(window);

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -37,14 +37,16 @@ function historyListenerStart() {
* which is associated with the new history entry created by replaceState()
*/
function historyCleaner(details) {
var urlBefore = details.url;
var urlAfter = pureCleaning(details.url);
if(storage.globalStatus) {
const urlBefore = details.url;
const 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);
if(urlBefore !== urlAfter) {
browser.tabs.executeScript(details.tabId, {
frameId: details.frameId,
code: 'history.replaceState({state: "cleaned_history"},"",'+JSON.stringify(urlAfter)+');'
}).then(() => {}, onError);
}
}
}

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -26,14 +26,13 @@ var log = {};
* Reset the global log
*/
function resetGlobalLog(){
obj = {"log": []};
let obj = {"log": []};
browser.runtime.sendMessage({
function: "setData",
params: ['log', JSON.stringify(obj)]
});
getLog();
location.reload();
}
@@ -53,11 +52,11 @@ function getLog()
return b.timestamp - a.timestamp;
});
var length = Object.keys(log.log).length;
var row;
if(length != 0)
const length = Object.keys(log.log).length;
let row;
if(length !== 0)
{
for(var i=0; i<length;i++)
for(let i=0; i<length;i++)
{
row = "<tr>" +
"<td>"+log.log[i].before+"</td>" +
@@ -81,11 +80,9 @@ function getLog()
*/
function getDataTableTranslation()
{
var lang = browser.i18n.getUILanguage();
let lang = browser.i18n.getUILanguage();
lang = lang.substring(0,2);
var file = browser.extension.getURL('./external_js/dataTables/i18n/'+lang+'.lang');
return file;
return browser.extension.getURL('./external_js/dataTables/i18n/' + lang + '.lang');
}
/**
@@ -96,6 +93,42 @@ function toDate(time)
return new Date(time).toLocaleString();
}
/**
* This function export the global log as json file.
*/
function exportGlobalLog() {
browser.runtime.sendMessage({
function: "getData",
params: ['log']
}).then((data) => {
let blob = new Blob([JSON.stringify(data.response)], {type: 'application/json'});
browser.downloads.download({
'url': URL.createObjectURL(blob),
'filename': 'ClearURLsLogExport.json',
'saveAs': true
});
});
}
/**
* This function imports an exported global log and overwrites the old one.
*/
function importGlobalLog(evt) {
let file = evt.target.files[0];
let fileReader = new FileReader();
fileReader.onload = function(e) {
browser.runtime.sendMessage({
function: "setData",
params: ["log", e.target.result]
}).then(() => {
location.reload();
}, handleError);
};
fileReader.readAsText(file);
}
/**
* Load only when document is ready
*/
@@ -103,6 +136,8 @@ $(document).ready(function(){
setText();
getLog();
$('#reset_log_btn').on("click", resetGlobalLog);
$('#export_log_btn').on("click", exportGlobalLog);
$('#importLog').on("change", importGlobalLog);
});
/**
@@ -122,12 +157,16 @@ 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'));
$('#reset_log_btn').text(translate('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'));
$('#export_log_btn_text').text(translate('log_html_export_button'));
$('#export_log_btn').prop('title', translate('log_html_export_button_title'));
$('#import_log_btn_text').text(translate('log_html_import_button'));
$('#importLog').prop('title', translate('log_html_import_button_title'));
}
function handleError(error) {

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -29,11 +29,11 @@
*/
function handleMessage(request, sender, sendResponse)
{
var fn = window[request.function];
let fn = window[request.function];
if(typeof fn === "function")
{
var response = fn.apply(null, request.params);
let response = fn.apply(null, request.params);
return Promise.resolve({response});
}

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -32,65 +32,6 @@ 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.
*
@@ -107,7 +48,6 @@ function init()
/**
* Get the globalCounter and globalurlcounter value from the storage
* @param {(data){} Return value form storage
*/
function changeStatistics()
{
@@ -127,7 +67,7 @@ function changeStatistics()
*/
function setHashStatus()
{
var element = $('#hashStatus');
let element = $('#hashStatus');
if(hashStatus)
{
@@ -146,7 +86,7 @@ function setHashStatus()
*/
function changeSwitchButton(id, storageID)
{
var element = $('#'+id);
let element = $('#'+id);
changeVisibility(id, storageID);
@@ -155,7 +95,7 @@ function changeSwitchButton(id, storageID)
function: "setData",
params: [storageID, element.is(':checked')]
}).then((data) => {
if(storageID == "globalStatus"){
if(storageID === "globalStatus"){
browser.runtime.sendMessage({
function: "changeIcon",
params: []
@@ -176,7 +116,7 @@ function changeSwitchButton(id, storageID)
*/
function changeVisibility(id, storageID)
{
var element;
let element;
switch(storageID)
{
@@ -190,7 +130,7 @@ function changeVisibility(id, storageID)
element = "undefine";
}
if(element != "undefine")
if(element !== "undefine")
{
if($('#'+id).is(':checked'))
{
@@ -211,7 +151,7 @@ function changeVisibility(id, storageID)
*/
function setSwitchButton(id, varname)
{
var element = $('#'+id);
let element = $('#'+id);
element.prop('checked', this[varname]);
}
@@ -241,19 +181,26 @@ function resetGlobalCounter(){
}
$(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();
});
loadData("globalCounter")
.then(() => loadData("globalurlcounter"))
.then(() => loadData("globalStatus"))
.then(() => loadData("badgedStatus"))
.then(() => loadData("hashStatus"))
.then(() => loadData("loggingStatus"))
.then(() => loadData("statisticsStatus"))
.then(() => loadData("getCurrentURL", "currentURL"))
.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();
});
});
/**
@@ -281,11 +228,11 @@ function setText()
*
* @param {string} id ID of the HTML element
* @param {string} attribute Name of the attribute used for localization
* @param {boolean} tooltip
* @param {string} tooltip
*/
function injectText(id, attribute, tooltip)
function injectText(id, attribute, tooltip = "")
{
object = $('#'+id);
let object = $('#'+id);
object.text(translate(attribute));
/*
@@ -294,12 +241,31 @@ function injectText(id, attribute, tooltip)
*/
tooltip = translate(attribute+"_title");
if(tooltip != "")
if(tooltip !== "")
{
object.prop('title', tooltip);
}
}
/**
* Loads data from storage and saves into local variable.
*
* @param name data name
* @param varName variable name
* @returns {Promise<data>} requested data
*/
async function loadData(name, varName=name) {
return new Promise((resolve, reject) => {
browser.runtime.sendMessage({
function: "getData",
params: [name]
}).then(data => {
this[varName] = data.response;
resolve(data);
}, handleError);
});
}
/**
* Translate a string with the i18n API.
*

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -19,16 +19,23 @@
/*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;
* Cleans given links. Also do automatic redirection.
*
* @param {String} url url as string
* @param {boolean} quiet if the action should be displayed in log and statistics
* @return {String} redirectUrl or none
*/
function pureCleaning(url, quiet = false) {
let cleanURL = url;
const URLbeforeReplaceCount = countFields(url);
for (var i = 0; i < providers.length; i++) {
var result = {
if(!quiet) {
//Add Fields form Request to global url counter
increaseGlobalURLCounter(URLbeforeReplaceCount);
}
for (let i = 0; i < providers.length; i++) {
let result = {
"changes": false,
"url": "",
"redirect": false,
@@ -37,7 +44,7 @@ function pureCleaning(url) {
if(providers[i].matchURL(cleanURL))
{
result = removeFieldsFormURL(providers[i], cleanURL);
result = removeFieldsFormURL(providers[i], cleanURL, quiet);
cleanURL = result.url;
}

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -25,28 +25,13 @@ getData();
*/
$(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);
$("#badged-color-picker").colorpicker({
format: "hex"
});
$('#reset_settings_btn').on("click", reset);
$('#export_settings_btn').on("click", exportSettings);
$('#importSettings').on("change", importSettings);
$('#save_settings_btn').on("click", save);
});
/**
@@ -76,52 +61,34 @@ function reset()
*/
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();
saveData("badged_color", $('input[name=badged_color]').val())
.then(() => saveData("ruleURL", $('input[name=ruleURL]').val()))
.then(() => saveData("hashURL", $('input[name=hashURL]').val()))
.then(() => saveData("types", $('input[name=types]').val()))
.then(() => saveData("logLimit", $('input[name=logLimit]').val()))
.then(() => browser.runtime.sendMessage({
function: "setBadgedStatus",
params: []
}), handleError)
.then(() => browser.runtime.sendMessage({
function: "saveOnExit",
params: []
}), handleError)
.then(() => browser.runtime.sendMessage({
function: "reload",
params: []
}), handleError);
}
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
* @param {string[]} placeholders Array of placeholders
*/
function translate(string)
function translate(string, ...placeholders)
{
return browser.i18n.getMessage(string);
return browser.i18n.getMessage(string, placeholders);
}
/**
@@ -129,42 +96,71 @@ function translate(string)
*/
function getData()
{
browser.runtime.sendMessage({
function: "getData",
params: ["badged_color"]
}).then((data) => handleResponseData(data, "badged_color", "badged_color"), handleError);
loadData("badged_color")
.then(() => loadData("ruleURL"))
.then(() => loadData("hashURL"))
.then(() => loadData("types"))
.then(() => loadData("logLimit"))
.then(logData => {
if(logData.response === undefined || logData.response === -1) {
$('#logLimit_label').text(translate('setting_log_limit_label', "∞"));
} else {
$('#logLimit_label').text(translate('setting_log_limit_label', logData.response));
}
});
browser.runtime.sendMessage({
function: "getData",
params: ["ruleURL"]
}).then((data) => handleResponseData(data, "rule_url", "rule_url"), handleError);
loadData("contextMenuEnabled")
.then(() => loadData("historyListenerEnabled"))
.then(() => loadData("localHostsSkipping"))
.then(() => loadData("referralMarketing"))
.then(() => loadData("domainBlocking"))
.then(() => loadData("pingBlocking"))
.then(() => {
changeSwitchButton("localHostsSkipping", "localHostsSkipping");
changeSwitchButton("historyListenerEnabled", "historyListenerEnabled");
changeSwitchButton("contextMenuEnabled", "contextMenuEnabled");
changeSwitchButton("referralMarketing", "referralMarketing");
changeSwitchButton("domainBlocking", "domainBlocking");
changeSwitchButton("pingBlocking", "pingBlocking");
});
}
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");
/**
* Loads data from storage and saves into local variable.
*
* @param name data/variable name
* @returns {Promise<data>} requested data
*/
async function loadData(name) {
return new Promise((resolve, reject) => {
browser.runtime.sendMessage({
function: "getData",
params: ["historyListenerEnabled"]
}).then((data) => {
handleResponseData(data, "historyListenerEnabled", "historyListenerEnabled");
changeSwitchButton("contextMenuEnabled", "contextMenuEnabled");
changeSwitchButton("historyListenerEnabled", "historyListenerEnabled");
params: [name]
}).then(data => {
settings[name] = data.response;
$('input[name='+name+']').val(data.response);
resolve(data);
}, handleError);
}, handleError);
});
}
/**
* Saves data to storage.
*
* @param key key of the data that should be saved
* @param data data that should be saved
* @returns {Promise<message>} message from background script
*/
async function saveData(key, data) {
return new Promise((resolve, reject) => {
browser.runtime.sendMessage({
function: "setData",
params: [key, data]
}).then(message => {
handleResponse(message);
resolve(message);
}, handleError);
});
}
/**
@@ -175,25 +171,69 @@ 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'));
$('#reset_settings_btn').text(translate('setting_html_reset_button'))
.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'));
$('#save_settings_btn').text(translate('settings_html_save_button'))
.prop('title', translate('settings_html_save_button_title'));
injectText("context_menu_enabled", "context_menu_enabled");
$('#history_listener_enabled').html(translate('history_listener_enabled'));
injectText("local_hosts_skipping", "local_hosts_skipping");
$('#export_settings_btn_text').text(translate('setting_html_export_button'));
$('#export_settings_btn').prop('title', translate('setting_html_export_button_title'));
$('#import_settings_btn_text').text(translate('setting_html_import_button'));
$('#importSettings').prop('title', translate('setting_html_import_button_title'));
injectText("referral_marketing_enabled", "referral_marketing_enabled");
injectText("domain_blocking_enabled", "domain_blocking_enabled");
$('#ping_blocking_enabled').html(translate('ping_blocking_enabled'))
.prop('title', translate('ping_blocking_enabled_title'));
}
/**
* 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);
* This function exports all ClearURLs settings with statistics and rules.
*/
function exportSettings() {
browser.runtime.sendMessage({
function: "storageAsJSON",
params: []
}).then((data) => {
let blob = new Blob([JSON.stringify(data.response)], {type: 'application/json'});
browser.downloads.download({
'url': URL.createObjectURL(blob),
'filename': 'ClearURLs.conf',
'saveAs': true
});
});
}
/**
* This function imports an exported ClearURLs setting and overwrites the old one.
*/
function importSettings(evt) {
let file = evt.target.files[0];
let fileReader = new FileReader();
fileReader.onload = function(e) {
let data = JSON.parse(e.target.result);
const length = Object.keys(data).length;
let i=0;
Object.entries(data).forEach(([key, value]) => {
browser.runtime.sendMessage({
function: "setData",
params: [key, value]
}).then(() => {
i++;
if(i === length) {
location.reload();
}
}, handleError);
});
};
fileReader.readAsText(file);
}
function handleResponse(message) {
@@ -211,14 +251,14 @@ function handleError(error) {
*/
function changeSwitchButton(id, storageID)
{
var element = $('#'+id);
let element = $('#'+id);
element.on('change', function(){
browser.runtime.sendMessage({
function: "setData",
params: [storageID, element.is(':checked')]
}).then((data) => {
if(storageID == "globalStatus"){
if(storageID === "globalStatus"){
browser.runtime.sendMessage({
function: "changeIcon",
params: []
@@ -241,9 +281,9 @@ function changeSwitchButton(id, storageID)
* @param {string} attribute Name of the attribute used for localization
* @param {boolean} tooltip
*/
function injectText(id, attribute, tooltip)
function injectText(id, attribute, tooltip = "")
{
object = $('#'+id);
let object = $('#'+id);
object.text(translate(attribute));
/*
@@ -252,7 +292,7 @@ function injectText(id, attribute, tooltip)
*/
tooltip = translate(attribute+"_title");
if(tooltip != "")
if(tooltip !== "")
{
object.prop('title', tooltip);
}
@@ -265,6 +305,6 @@ function injectText(id, attribute, tooltip)
*/
function setSwitchButton(id, varname)
{
var element = $('#'+id);
let element = $('#'+id);
element.prop('checked', settings[varname]);
}

View File

@@ -0,0 +1,51 @@
/*
* 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/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for the blocked alert page.
*/
/**
* Set the text for the UI.
*/
function setText()
{
document.title = translate('blocked_html_title');
$('#title').html(translate('blocked_html_title'));
$('#body').html(translate('blocked_html_body'));
$('#page').text(translate('blocked_html_button'));
}
$(document).ready(function(){
setText();
let source = new URLSearchParams(window.location.search).get("source");
$('#page').attr('href', decodeURIComponent(source));
});
/**
* 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);
}

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -21,130 +21,175 @@
* This script is responsible for the storage.
*/
var storage = [];
var hasPendingSaves = false;
var pendingSaves = new Set();
/**
* Writes the storage variable to the disk.
*/
function saveOnExit()
{
var json = {};
* Writes the storage variable to the disk.
*/
function saveOnExit() {
saveOnDisk(Object.keys(storage));
}
/**
* Returns the storage as JSON.
*/
function storageAsJSON() {
let 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;
}
json[key] = storageDataAsString(key);
});
return json;
}
/**
* Converts a given storage data to its string representation.
* @param key key of the storage data
* @returns {string} string representation
*/
function storageDataAsString(key) {
let value = storage[key];
switch (key) {
case "ClearURLsData":
case "log":
return JSON.stringify(value);
case "types":
return value.toString();
default:
return value;
}
}
/**
* Save multiple keys on the disk.
* @param {String[]} keys
*/
function saveOnDisk(keys) {
let json = {};
keys.forEach(function (key) {
json[key] = storageDataAsString(key);
});
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});
* Schedule to save a key to disk in 30 seconds.
* @param {String} key
*/
function deferSaveOnDisk(key) {
if (hasPendingSaves) {
pendingSaves.add(key);
return;
}
setTimeout(function () {
saveOnDisk(Array.from(pendingSaves));
pendingSaves.clear();
hasPendingSaves = false;
}, 30000);
hasPendingSaves = true;
}
/**
* Retrieve everything and save on the RAM.
*/
function getDataFromDisk()
{
browser.storage.local.get(null).then(initStorage, error);
* Start sequence for ClearURLs.
*/
function genesis() {
browser.storage.local.get(null).then((items) => {
initStorage(items);
// Start the clearurls.js
start();
//Set correct icon on startup
changeIcon();
// Start the context_menu
contextMenuStart();
// Start history listener
historyListenerStart();
}, error);
}
/**
* Return the value under the key.
* @param {String} key
* @return {Object}
*/
function getData(key)
{
* 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 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)
{
* Save the value under the key on the RAM.
*
* Note: To store the data on the hard disk, one of
* deferSaveOnDisk(), saveOnDisk(), or saveOnExit()
* must be called.
* @param {String} key
* @param {Object} value
*/
function setData(key, value) {
switch (key) {
case "ClearURLsData":
case "log":
storage[key] = JSON.parse(value);
break;
storage[key] = JSON.parse(value);
break;
case "hashURL":
case "ruleURL":
storage[key] = replaceOldURLs(value);
break;
storage[key] = replaceOldURLs(value);
break;
case "types":
storage[key] = value.split(',');
break;
storage[key] = value.split(',');
break;
case "logLimit":
storage[key] = Number(value);
break;
default:
storage[key] = value;
storage[key] = value;
}
}
/**
* Write error on console.
*/
function error(e)
{
* 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)
{
* Set default values, if the storage is empty.
* @param {Object} items
*/
function initStorage(items) {
initSettings();
if(!isEmpty(items)) {
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()
{
* Set default values for the settings.
*/
function initSettings() {
storage.ClearURLsData = [];
storage.dataHash = "";
storage.badgedStatus = true;
@@ -155,76 +200,88 @@ function initSettings()
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.badged_color = "#ffa500";
storage.hashURL = "https://kevinroebert.gitlab.io/ClearUrls/data/rules.minify.hash";
storage.ruleURL = "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json";
storage.contextMenuEnabled = true;
storage.historyListenerEnabled = true;
storage.localHostsSkipping = true;
storage.referralMarketing = false;
storage.logLimit = -1;
storage.domainBlocking = true;
storage.pingBlocking = true;
if(getBrowser() === "Firefox") {
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"];
storage.pingRequestTypes = ["ping", "beacon"];
} else if (getBrowser() === "Chrome") {
storage.types = ["main_frame", "sub_frame", "stylesheet", "script", "image", "font", "object", "xmlhttprequest", "ping", "csp_report", "media", "websocket", "other"];
storage.pingRequestTypes = ["ping"];
}
}
/**
* Replace the old URLs with the
* new GitLab URLs.
*/
function replaceOldURLs(url)
{
* 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";
return "https://kevinroebert.gitlab.io/ClearUrls/data/rules.minify.hash";
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/data.json?flush_cache=true":
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
return "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.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";
return "https://kevinroebert.gitlab.io/ClearUrls/data/rules.minify.hash";
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json":
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
return "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json";
case "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules":
return "https://kevinroebert.gitlab.io/ClearUrls/data/rules.minify.hash";
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json":
return "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json";
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.minify.json":
return "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json";
case "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/data.minify.json?job=hash%20rules":
return "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json";
case "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.minify.hash?job=hash%20rules":
return "https://kevinroebert.gitlab.io/ClearUrls/data/rules.minify.hash";
default:
return url;
return url;
}
}
/**
* Load local saved data, if the browser is offline or
* some other network trouble.
*/
function loadOldDataFromStore()
{
* 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";
* Save the hash status to the local storage (RAM).
* 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();
// Start storage and ClearURLs
genesis();

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -24,99 +24,111 @@
/*
* To support Waterfox.
*/
Array.prototype.rmEmpty = function() {
Array.prototype.rmEmpty = function () {
return this.filter(v => v);
};
/*
* To support Waterfox.
*/
Array.prototype.flatten = function() {
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)
{
* 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)
{
* 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()
{
* 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) {
* Check if it is an android device.
* @return bool
*/
async function checkOSAndroid() {
if (os === undefined || os === null || os === "") {
await chrome.runtime.getPlatformInfo(function (info) {
os = info.os;
});
}
if(os == "android")
{
return true;
}
else{
return false;
}
return os === "android";
}
/**
* Return the number of parameters query strings.
* @param {String} url URL as String
* @return {int} Number of Parameters
*/
function countFields(url)
{
* Extract the host without port from an url.
* @param {String} url URL as String
* @return {String} host as string
*/
function extractHost(url) {
let parsed_url = new URL(url);
return parsed_url.hostname;
}
/**
* Returns true if the url has a local host.
* @param {String} url URL as String
* @return {boolean}
*/
function checkLocalURL(url) {
let host = extractHost(url);
return ipRangeCheck(host, ["10.0.0.0/8", "172.16.0.0/12",
"192.168.0.0/16", "100.64.0.0/10",
"169.254.0.0/16", "127.0.0.1"]) ||
host === 'localhost';
}
/**
* 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;
* Returns true if fields exists.
* @param {String} url URL as String
* @return {boolean}
*/
function existsFields(url) {
let matches = (url.match(/\?.+/i) || []);
let 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)) {
* Extract the fields from an url.
* @param {String} url URL as String
* @return {Array} Fields as array
*/
function extractFileds(url) {
if (existsFields(url)) {
let fields = url.replace(new RegExp(".*?\\?", "i"), "");
if (existsFragments(url)) {
fields = fields.replace(new RegExp("#.*", "i"), "");
}
@@ -127,24 +139,22 @@ function extractFileds(url)
}
/**
* Return the number of fragments query strings.
* @param {String} url URL as String
* @return {int} Number of fragments
*/
function countFragments(url)
{
* 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"), "");
* Extract the fragments from an url.
* @param {String} url URL as String
* @return {Array} fragments as array
*/
function extractFragments(url) {
if (existsFragments(url)) {
let fragments = url.replace(new RegExp(".*?#", "i"), "");
return (fragments.match(/[^&]+=?[^&]*/gi) || []);
}
@@ -152,118 +162,143 @@ function extractFragments(url)
}
/**
* 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;
* Returns true if fragments exists.
* @param {String} url URL as String
* @return {boolean}
*/
function existsFragments(url) {
let matches = (url.match(/\#.+/i) || []);
let count = matches.length;
return (count > 0);
}
/**
* Load local saved data, if the browser is offline or
* some other network trouble.
*/
function loadOldDataFromStore()
{
* 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";
* Save the hash status to the local storage (RAM).
* 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)
{
* Increase by {number} the GlobalURLCounter
* @param {int} number
*/
function increaseGlobalURLCounter(number) {
if (storage.statisticsStatus) {
storage.globalurlcounter += number;
deferSaveOnDisk('globalurlcounter');
}
}
/**
* Increase by one the URLCounter
*/
function increaseURLCounter()
{
if(storage.statisticsStatus)
{
* Increase by one the URLCounter
*/
function increaseURLCounter() {
if (storage.statisticsStatus) {
storage.globalCounter++;
deferSaveOnDisk('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"});
* Change the icon.
*/
function changeIcon() {
checkOSAndroid().then((res) => {
if (!res) {
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
});
}
* Get the badged status from the browser storage and put the value
* into a local variable.
*
*/
function setBadgedStatus() {
checkOSAndroid().then((res) => {
if (!res && storage.badgedStatus) {
let color = storage.badged_color;
if(storage.badged_color.charAt(0) !== '#')
color = '#' + storage.badged_color;
browser.browserAction.setBadgeBackgroundColor({
'color': color
});
}
});
}
/**
* Returns the current URL.
* @return {String} [description]
*/
function getCurrentURL()
{
* Returns the current URL.
* @return {String} [description]
*/
function getCurrentURL() {
return currentURL;
}
/**
* Check for browser.
*/
* Check for browser.
*/
function getBrowser() {
if(typeof InstallTrigger !== 'undefined') {
if (typeof InstallTrigger !== 'undefined') {
return "Firefox";
} else {
return "Chrome";
}
}
/**
* Decodes an URL, also one that is encoded multiple times.
* @param url the url, that should be decoded
*/
function decodeURL(url) {
const rtn = decodeURIComponent(url);
if (rtn.indexOf("http://") === -1 && rtn.indexOf("https://") === -1) {
return decodeURL(rtn);
}
return rtn;
}
/**
* Gets the value of at `key` an object. If the resolved value is `undefined`, the `defaultValue` is returned in its place.
*
* @param {string} key the key of the object
* @param {object} defaultValue the default value
*/
Object.prototype.getOrDefault = function (key, defaultValue) {
return this[key] === undefined ? defaultValue : this[key];
};

38
core_js/watchdog.js Normal file
View File

@@ -0,0 +1,38 @@
/*
* 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/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible to check in fixed intervals, that ClearURLs works properly.
* In issue #203, some users reported, that ClearURLs filter function doesn't work after
* some time, but without any recognizable reason.
*
* This watchdog restarts the whole Add-on, when the check fails.
*/
const CHECK_INTERVAL = 15000;
setInterval(function() {
const dirtyURL = "https://clearurls.roebert.eu?utm_source=addon";
const cleanURL = "https://clearurls.roebert.eu";
if(pureCleaning(dirtyURL, true) !== cleanURL) {
console.log(translate('watchdog'));
saveOnExit();
reload();
}
}, CHECK_INTERVAL);

View File

@@ -1,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -20,5 +20,5 @@
* This file writes only the version into every page.
* @return version
*/
var version = browser.runtime.getManifest().version;
const version = browser.runtime.getManifest().version;
$('#version').text(version);

View File

@@ -0,0 +1,66 @@
/*
* 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/>.
*
* Based on:
* Remove Google Redirection
* https://github.com/kodango/Remove-Google-Redirection/blob/master/extension/chrome/remove-google-redirection.user.js
* Copyright (c) 2017 kodango
* MIT License: https://github.com/kodango/Remove-Google-Redirection/blob/master/LICENSE
*/
(function (window) {
"use strict";
function injectFunction() {
let ele = document.createElement('script');
let s = document.getElementsByTagName('script')[0];
ele.type = 'text/javascript';
ele.textContent = "Object.defineProperty(window, '_borschik', {" +
" value: function() { return false; }," +
" writable: false," +
" configurable: false" +
"});";
s.parentNode.insertBefore(ele, s);
}
/*
* The main entry
*/
function main() {
injectFunction();
document.addEventListener('mouseover', function (event) {
let a = event.target, depth = 1;
while (a && a.tagName !== 'A' && depth-- > 0) {
a = a.parentNode;
}
if (a && a.tagName === 'A') {
try {
a.removeAttribute('data-counter');
delete a.dataset.cthref;
} catch (e) {
console.log(e);
}
}
}, true);
}
main();
})(window);

10
css/bootstrap-colorpicker.min.css vendored Normal file

File diff suppressed because one or more lines are too long

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,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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
@@ -17,32 +17,45 @@
*/
body {
font-size: 13px;
font-size: 14px;
}
.small-version {
font-size: 10px;
}
.navbar-header {
.brand {
font-size: 17px;
}
.navbar-margin {
margin-top: 0;
margin-bottom: 8px;
}
.col-sm-1 {
margin-top: -10px;
}
#body-popup {
width: 200px;
margin-bottom: 10px;
}
#donate {
transition: 0.3s;
opacity: 0.8;
color: red;
color: #ffa500;
}
#donate:hover {
opacity: 1;
}
.btn-default {
color:#333;
background-color:#fff;
border-color:#ccc
}
.btn-default.focus,
.btn-default:focus {
color:#333;
background-color:#e6e6e6;
border-color:#8c8c8c
}
.btn-default:hover {
color:#333;
background-color:#e6e6e6;
border-color:#adadad
}

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}

15
css/datatables.min.css vendored Normal file

File diff suppressed because one or more lines are too long

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,6 +1,6 @@
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

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,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,11 +1,11 @@
{
"sEmptyTable": "Nenhum registro encontrado",
"sEmptyTable": "Nenhum registros encontrado",
"sProcessing": "A processar...",
"sLengthMenu": "Mostrar _MENU_ registos",
"sLengthMenu": "Mostrar _MENU_ registros",
"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)",
"sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registros",
"sInfoEmpty": "Mostrando de 0 até 0 de 0 registros",
"sInfoFiltered": "(filtrado de _MAX_ registros no total)",
"sInfoPostFix": "",
"sSearch": "Procurar:",
"sUrl": "",

207
external_js/datatables.min.js vendored Normal file
View File

@@ -0,0 +1,207 @@
/*
* This combined file was created by the DataTables downloader builder:
* https://datatables.net/download
*
* To rebuild or modify this file with the latest versions of the included
* software please visit:
* https://datatables.net/download/#bs4/dt-1.10.20
*
* Included libraries:
* DataTables 1.10.20
*/
/*!
Copyright 2008-2019 SpryMedia Ltd.
This source file is free software, available under the following license:
MIT license - http://datatables.net/license
This source file 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 license files for details.
For details please refer to: http://www.datatables.net
DataTables 1.10.20
©2008-2019 SpryMedia Ltd - datatables.net/license
*/
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(f,z,y){f instanceof String&&(f=String(f));for(var p=f.length,H=0;H<p;H++){var L=f[H];if(z.call(y,L,H,f))return{i:H,v:L}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(f,z,y){f!=Array.prototype&&f!=Object.prototype&&(f[z]=y.value)};$jscomp.getGlobal=function(f){return"undefined"!=typeof window&&window===f?f:"undefined"!=typeof global&&null!=global?global:f};$jscomp.global=$jscomp.getGlobal(this);
$jscomp.polyfill=function(f,z,y,p){if(z){y=$jscomp.global;f=f.split(".");for(p=0;p<f.length-1;p++){var H=f[p];H in y||(y[H]={});y=y[H]}f=f[f.length-1];p=y[f];z=z(p);z!=p&&null!=z&&$jscomp.defineProperty(y,f,{configurable:!0,writable:!0,value:z})}};$jscomp.polyfill("Array.prototype.find",function(f){return f?f:function(f,y){return $jscomp.findInternal(this,f,y).v}},"es6","es3");
(function(f){"function"===typeof define&&define.amd?define(["jquery"],function(z){return f(z,window,document)}):"object"===typeof exports?module.exports=function(z,y){z||(z=window);y||(y="undefined"!==typeof window?require("jquery"):require("jquery")(z));return f(y,z,z.document)}:f(jQuery,window,document)})(function(f,z,y,p){function H(a){var b,c,d={};f.each(a,function(e,h){(b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" ")&&(c=e.replace(b[0],b[2].toLowerCase()),
d[c]=e,"o"===b[1]&&H(a[e]))});a._hungarianMap=d}function L(a,b,c){a._hungarianMap||H(a);var d;f.each(b,function(e,h){d=a._hungarianMap[e];d===p||!c&&b[d]!==p||("o"===d.charAt(0)?(b[d]||(b[d]={}),f.extend(!0,b[d],b[e]),L(a[d],b[d],c)):b[d]=b[e])})}function Ga(a){var b=q.defaults.oLanguage,c=b.sDecimal;c&&Ha(c);if(a){var d=a.sZeroRecords;!a.sEmptyTable&&d&&"No data available in table"===b.sEmptyTable&&M(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&d&&"Loading..."===b.sLoadingRecords&&M(a,a,
"sZeroRecords","sLoadingRecords");a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&c!==a&&Ha(a)}}function jb(a){F(a,"ordering","bSort");F(a,"orderMulti","bSortMulti");F(a,"orderClasses","bSortClasses");F(a,"orderCellsTop","bSortCellsTop");F(a,"order","aaSorting");F(a,"orderFixed","aaSortingFixed");F(a,"paging","bPaginate");F(a,"pagingType","sPaginationType");F(a,"pageLength","iDisplayLength");F(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":
"");"boolean"===typeof a.scrollX&&(a.scrollX=a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&L(q.models.oSearch,a[b])}function kb(a){F(a,"orderable","bSortable");F(a,"orderData","aDataSort");F(a,"orderSequence","asSorting");F(a,"orderDataType","sortDataType");var b=a.aDataSort;"number"!==typeof b||f.isArray(b)||(a.aDataSort=[b])}function lb(a){if(!q.__browser){var b={};q.__browser=b;var c=f("<div/>").css({position:"fixed",top:0,left:-1*f(z).scrollLeft(),height:1,width:1,
overflow:"hidden"}).append(f("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(f("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}f.extend(a.oBrowser,q.__browser);a.oScroll.iBarWidth=q.__browser.barWidth}
function mb(a,b,c,d,e,h){var g=!1;if(c!==p){var k=c;g=!0}for(;d!==e;)a.hasOwnProperty(d)&&(k=g?b(k,a[d],d,a):a[d],g=!0,d+=h);return k}function Ia(a,b){var c=q.defaults.column,d=a.aoColumns.length;c=f.extend({},q.models.oColumn,c,{nTh:b?b:y.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=f.extend({},q.models.oSearch,c[d]);ma(a,d,f(b).data())}function ma(a,b,c){b=a.aoColumns[b];
var d=a.oClasses,e=f(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var h=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);h&&(b.sWidthOrig=h[1])}c!==p&&null!==c&&(kb(c),L(q.defaults.column,c,!0),c.mDataProp===p||c.mData||(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),f.extend(b,c),M(b,c,"sWidth","sWidthOrig"),c.iDataSort!==p&&(b.aDataSort=[c.iDataSort]),M(b,c,"aDataSort"));var g=b.mData,k=U(g),
l=b.mRender?U(b.mRender):null;c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=f.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=k(a,b,p,c);return l&&b?l(d,b,a,c):d};b.fnSetData=function(a,b,c){return Q(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==f.inArray("asc",b.asSorting);c=-1!==f.inArray("desc",b.asSorting);b.bSortable&&(a||c)?a&&!c?(b.sSortingClass=
d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI):(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI="")}function aa(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ja(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;""===b.sY&&""===b.sX||na(a);A(a,null,"column-sizing",[a])}function ba(a,b){a=oa(a,"bVisible");return"number"===
typeof a[b]?a[b]:null}function ca(a,b){a=oa(a,"bVisible");b=f.inArray(b,a);return-1!==b?b:null}function W(a){var b=0;f.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==f(d.nTh).css("display")&&b++});return b}function oa(a,b){var c=[];f.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ka(a){var b=a.aoColumns,c=a.aoData,d=q.ext.type.detect,e,h,g;var k=0;for(e=b.length;k<e;k++){var f=b[k];var n=[];if(!f.sType&&f._sManualType)f.sType=f._sManualType;else if(!f.sType){var m=0;for(h=
d.length;m<h;m++){var w=0;for(g=c.length;w<g;w++){n[w]===p&&(n[w]=I(a,w,k,"type"));var u=d[m](n[w],a);if(!u&&m!==d.length-1)break;if("html"===u)break}if(u){f.sType=u;break}}f.sType||(f.sType="string")}}}function nb(a,b,c,d){var e,h,g,k=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){var l=b[e];var n=l.targets!==p?l.targets:l.aTargets;f.isArray(n)||(n=[n]);var m=0;for(h=n.length;m<h;m++)if("number"===typeof n[m]&&0<=n[m]){for(;k.length<=n[m];)Ia(a);d(n[m],l)}else if("number"===typeof n[m]&&0>n[m])d(k.length+
n[m],l);else if("string"===typeof n[m]){var w=0;for(g=k.length;w<g;w++)("_all"==n[m]||f(k[w].nTh).hasClass(n[m]))&&d(w,l)}}if(c)for(e=0,a=c.length;e<a;e++)d(e,c[e])}function R(a,b,c,d){var e=a.aoData.length,h=f.extend(!0,{},q.models.oRow,{src:c?"dom":"data",idx:e});h._aData=b;a.aoData.push(h);for(var g=a.aoColumns,k=0,l=g.length;k<l;k++)g[k].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==p&&(a.aIds[b]=h);!c&&a.oFeatures.bDeferRender||La(a,e,c,d);return e}function pa(a,b){var c;b instanceof
f||(b=f(b));return b.map(function(b,e){c=Ma(a,e);return R(a,c.data,e,c.cells)})}function I(a,b,c,d){var e=a.iDraw,h=a.aoColumns[c],g=a.aoData[b]._aData,k=h.sDefaultContent,f=h.fnGetData(g,d,{settings:a,row:b,col:c});if(f===p)return a.iDrawError!=e&&null===k&&(O(a,0,"Requested unknown parameter "+("function"==typeof h.mData?"{function}":"'"+h.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),k;if((f===g||null===f)&&null!==k&&d!==p)f=k;else if("function"===typeof f)return f.call(g);return null===
f&&"display"==d?"":f}function ob(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}function Na(a){return f.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\\./g,".")})}function U(a){if(f.isPlainObject(a)){var b={};f.each(a,function(a,c){c&&(b[a]=U(c))});return function(a,c,h,g){var d=b[c]||b._;return d!==p?d(a,c,h,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,h,g){return a(b,c,h,g)};if("string"!==typeof a||
-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(b,c){return b[a]};var c=function(a,b,h){if(""!==h){var d=Na(h);for(var e=0,l=d.length;e<l;e++){h=d[e].match(da);var n=d[e].match(X);if(h){d[e]=d[e].replace(da,"");""!==d[e]&&(a=a[d[e]]);n=[];d.splice(0,e+1);d=d.join(".");if(f.isArray(a))for(e=0,l=a.length;e<l;e++)n.push(c(a[e],b,d));a=h[0].substring(1,h[0].length-1);a=""===a?n:n.join(a);break}else if(n){d[e]=d[e].replace(X,"");a=a[d[e]]();continue}if(null===a||a[d[e]]===
p)return p;a=a[d[e]]}}return a};return function(b,e){return c(b,e,a)}}function Q(a){if(f.isPlainObject(a))return Q(a._);if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"!==typeof a||-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(b,d){b[a]=d};var b=function(a,d,e){e=Na(e);var c=e[e.length-1];for(var g,k,l=0,n=e.length-1;l<n;l++){g=e[l].match(da);k=e[l].match(X);if(g){e[l]=e[l].replace(da,"");a[e[l]]=[];c=e.slice();
c.splice(0,l+1);g=c.join(".");if(f.isArray(d))for(k=0,n=d.length;k<n;k++)c={},b(c,d[k],g),a[e[l]].push(c);else a[e[l]]=d;return}k&&(e[l]=e[l].replace(X,""),a=a[e[l]](d));if(null===a[e[l]]||a[e[l]]===p)a[e[l]]={};a=a[e[l]]}if(c.match(X))a[c.replace(X,"")](d);else a[c.replace(da,"")]=d};return function(c,d){return b(c,d,a)}}function Oa(a){return J(a.aoData,"_aData")}function qa(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function ra(a,b,c){for(var d=-1,e=0,h=a.length;e<
h;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===p&&a.splice(d,1)}function ea(a,b,c,d){var e=a.aoData[b],h,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);c.innerHTML=I(a,b,d,"display")};if("dom"!==c&&(c&&"auto"!==c||"dom"!==e.src)){var k=e.anCells;if(k)if(d!==p)g(k[d],d);else for(c=0,h=k.length;c<h;c++)g(k[c],c)}else e._aData=Ma(a,e,d,d===p?p:e._aData).data;e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==p)g[d].sType=null;else{c=0;for(h=g.length;c<h;c++)g[c].sType=null;
Pa(a,e)}}function Ma(a,b,c,d){var e=[],h=b.firstChild,g,k=0,l,n=a.aoColumns,m=a._rowReadObject;d=d!==p?d:m?{}:[];var w=function(a,b){if("string"===typeof a){var c=a.indexOf("@");-1!==c&&(c=a.substring(c+1),Q(a)(d,b.getAttribute(c)))}},u=function(a){if(c===p||c===k)g=n[k],l=f.trim(a.innerHTML),g&&g._bAttrSrc?(Q(g.mData._)(d,l),w(g.mData.sort,a),w(g.mData.type,a),w(g.mData.filter,a)):m?(g._setter||(g._setter=Q(g.mData)),g._setter(d,l)):d[k]=l;k++};if(h)for(;h;){var q=h.nodeName.toUpperCase();if("TD"==
q||"TH"==q)u(h),e.push(h);h=h.nextSibling}else for(e=b.anCells,h=0,q=e.length;h<q;h++)u(e[h]);(b=b.firstChild?b:b.nTr)&&(b=b.getAttribute("id"))&&Q(a.rowId)(d,b);return{data:d,cells:e}}function La(a,b,c,d){var e=a.aoData[b],h=e._aData,g=[],k,l;if(null===e.nTr){var n=c||y.createElement("tr");e.nTr=n;e.anCells=g;n._DT_RowIndex=b;Pa(a,e);var m=0;for(k=a.aoColumns.length;m<k;m++){var w=a.aoColumns[m];var p=(l=c?!1:!0)?y.createElement(w.sCellType):d[m];p._DT_CellIndex={row:b,column:m};g.push(p);if(l||
!(c&&!w.mRender&&w.mData===m||f.isPlainObject(w.mData)&&w.mData._===m+".display"))p.innerHTML=I(a,b,m,"display");w.sClass&&(p.className+=" "+w.sClass);w.bVisible&&!c?n.appendChild(p):!w.bVisible&&c&&p.parentNode.removeChild(p);w.fnCreatedCell&&w.fnCreatedCell.call(a.oInstance,p,I(a,b,m),h,b,m)}A(a,"aoRowCreatedCallback",null,[n,h,b,g])}e.nTr.setAttribute("role","row")}function Pa(a,b){var c=b.nTr,d=b._aData;if(c){if(a=a.rowIdFn(d))c.id=a;d.DT_RowClass&&(a=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?
ta(b.__rowc.concat(a)):a,f(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&f(c).attr(d.DT_RowAttr);d.DT_RowData&&f(c).data(d.DT_RowData)}}function pb(a){var b,c,d=a.nTHead,e=a.nTFoot,h=0===f("th, td",d).length,g=a.oClasses,k=a.aoColumns;h&&(c=f("<tr/>").appendTo(d));var l=0;for(b=k.length;l<b;l++){var n=k[l];var m=f(n.nTh).addClass(n.sClass);h&&m.appendTo(c);a.oFeatures.bSort&&(m.addClass(n.sSortingClass),!1!==n.bSortable&&(m.attr("tabindex",a.iTabIndex).attr("aria-controls",
a.sTableId),Qa(a,n.nTh,l)));n.sTitle!=m[0].innerHTML&&m.html(n.sTitle);Ra(a,"header")(a,m,n,g)}h&&fa(a.aoHeader,d);f(d).find(">tr").attr("role","row");f(d).find(">tr>th, >tr>td").addClass(g.sHeaderTH);f(e).find(">tr>th, >tr>td").addClass(g.sFooterTH);if(null!==e)for(a=a.aoFooter[0],l=0,b=a.length;l<b;l++)n=k[l],n.nTf=a[l].cell,n.sClass&&f(n.nTf).addClass(n.sClass)}function ha(a,b,c){var d,e,h=[],g=[],k=a.aoColumns.length;if(b){c===p&&(c=!1);var l=0;for(d=b.length;l<d;l++){h[l]=b[l].slice();h[l].nTr=
b[l].nTr;for(e=k-1;0<=e;e--)a.aoColumns[e].bVisible||c||h[l].splice(e,1);g.push([])}l=0;for(d=h.length;l<d;l++){if(a=h[l].nTr)for(;e=a.firstChild;)a.removeChild(e);e=0;for(b=h[l].length;e<b;e++){var n=k=1;if(g[l][e]===p){a.appendChild(h[l][e].cell);for(g[l][e]=1;h[l+k]!==p&&h[l][e].cell==h[l+k][e].cell;)g[l+k][e]=1,k++;for(;h[l][e+n]!==p&&h[l][e].cell==h[l][e+n].cell;){for(c=0;c<k;c++)g[l+c][e+n]=1;n++}f(h[l][e].cell).attr("rowspan",k).attr("colspan",n)}}}}}function S(a){var b=A(a,"aoPreDrawCallback",
"preDraw",[a]);if(-1!==f.inArray(!1,b))K(a,!1);else{b=[];var c=0,d=a.asStripeClasses,e=d.length,h=a.oLanguage,g=a.iInitDisplayStart,k="ssp"==D(a),l=a.aiDisplay;a.bDrawing=!0;g!==p&&-1!==g&&(a._iDisplayStart=k?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);g=a._iDisplayStart;var n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,K(a,!1);else if(!k)a.iDraw++;else if(!a.bDestroying&&!qb(a))return;if(0!==l.length)for(h=k?a.aoData.length:n,k=k?0:g;k<h;k++){var m=l[k],w=a.aoData[m];
null===w.nTr&&La(a,m);var u=w.nTr;if(0!==e){var q=d[c%e];w._sRowStripe!=q&&(f(u).removeClass(w._sRowStripe).addClass(q),w._sRowStripe=q)}A(a,"aoRowCallback",null,[u,w._aData,c,k,m]);b.push(u);c++}else c=h.sZeroRecords,1==a.iDraw&&"ajax"==D(a)?c=h.sLoadingRecords:h.sEmptyTable&&0===a.fnRecordsTotal()&&(c=h.sEmptyTable),b[0]=f("<tr/>",{"class":e?d[0]:""}).append(f("<td />",{valign:"top",colSpan:W(a),"class":a.oClasses.sRowEmpty}).html(c))[0];A(a,"aoHeaderCallback","header",[f(a.nTHead).children("tr")[0],
Oa(a),g,n,l]);A(a,"aoFooterCallback","footer",[f(a.nTFoot).children("tr")[0],Oa(a),g,n,l]);d=f(a.nTBody);d.children().detach();d.append(f(b));A(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function V(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&rb(a);d?ia(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;S(a);a._drawHold=!1}function sb(a){var b=a.oClasses,c=f(a.nTable);c=f("<div/>").insertBefore(c);var d=a.oFeatures,e=
f("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var h=a.sDom.split(""),g,k,l,n,m,p,u=0;u<h.length;u++){g=null;k=h[u];if("<"==k){l=f("<div/>")[0];n=h[u+1];if("'"==n||'"'==n){m="";for(p=2;h[u+p]!=n;)m+=h[u+p],p++;"H"==m?m=b.sJUIHeader:"F"==m&&(m=b.sJUIFooter);-1!=m.indexOf(".")?(n=m.split("."),l.id=n[0].substr(1,n[0].length-1),l.className=n[1]):"#"==m.charAt(0)?l.id=m.substr(1,
m.length-1):l.className=m;u+=p}e.append(l);e=f(l)}else if(">"==k)e=e.parent();else if("l"==k&&d.bPaginate&&d.bLengthChange)g=tb(a);else if("f"==k&&d.bFilter)g=ub(a);else if("r"==k&&d.bProcessing)g=vb(a);else if("t"==k)g=wb(a);else if("i"==k&&d.bInfo)g=xb(a);else if("p"==k&&d.bPaginate)g=yb(a);else if(0!==q.ext.feature.length)for(l=q.ext.feature,p=0,n=l.length;p<n;p++)if(k==l[p].cFeature){g=l[p].fnInit(a);break}g&&(l=a.aanFeatures,l[k]||(l[k]=[]),l[k].push(g),e.append(g))}c.replaceWith(e);a.nHolding=
null}function fa(a,b){b=f(b).children("tr");var c,d,e;a.splice(0,a.length);var h=0;for(e=b.length;h<e;h++)a.push([]);h=0;for(e=b.length;h<e;h++){var g=b[h];for(c=g.firstChild;c;){if("TD"==c.nodeName.toUpperCase()||"TH"==c.nodeName.toUpperCase()){var k=1*c.getAttribute("colspan");var l=1*c.getAttribute("rowspan");k=k&&0!==k&&1!==k?k:1;l=l&&0!==l&&1!==l?l:1;var n=0;for(d=a[h];d[n];)n++;var m=n;var p=1===k?!0:!1;for(d=0;d<k;d++)for(n=0;n<l;n++)a[h+n][m+d]={cell:c,unique:p},a[h+n].nTr=g}c=c.nextSibling}}}
function ua(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],fa(c,b)));b=0;for(var e=c.length;b<e;b++)for(var h=0,g=c[b].length;h<g;h++)!c[b][h].unique||d[h]&&a.bSortCellsTop||(d[h]=c[b][h].cell);return d}function va(a,b,c){A(a,"aoServerParams","serverParams",[b]);if(b&&f.isArray(b)){var d={},e=/(.*?)\[\]$/;f.each(b,function(a,b){(a=b.name.match(e))?(a=a[0],d[a]||(d[a]=[]),d[a].push(b.value)):d[b.name]=b.value});b=d}var h=a.ajax,g=a.oInstance,k=function(b){A(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(f.isPlainObject(h)&&
h.data){var l=h.data;var n="function"===typeof l?l(b,a):l;b="function"===typeof l&&n?n:f.extend(!0,b,n);delete h.data}n={data:b,success:function(b){var c=b.error||b.sError;c&&O(a,0,c);a.json=b;k(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c,d){d=A(a,null,"xhr",[a,null,a.jqXHR]);-1===f.inArray(!0,d)&&("parsererror"==c?O(a,0,"Invalid JSON response",1):4===b.readyState&&O(a,0,"Ajax error",7));K(a,!1)}};a.oAjaxData=b;A(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(g,
a.sAjaxSource,f.map(b,function(a,b){return{name:b,value:a}}),k,a):a.sAjaxSource||"string"===typeof h?a.jqXHR=f.ajax(f.extend(n,{url:h||a.sAjaxSource})):"function"===typeof h?a.jqXHR=h.call(g,b,k,a):(a.jqXHR=f.ajax(f.extend(n,h)),h.data=l)}function qb(a){return a.bAjaxDataGet?(a.iDraw++,K(a,!0),va(a,zb(a),function(b){Ab(a,b)}),!1):!0}function zb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,h=a.aoPreSearchCols,g=[],k=Y(a);var l=a._iDisplayStart;var n=!1!==d.bPaginate?a._iDisplayLength:
-1;var m=function(a,b){g.push({name:a,value:b})};m("sEcho",a.iDraw);m("iColumns",c);m("sColumns",J(b,"sName").join(","));m("iDisplayStart",l);m("iDisplayLength",n);var p={draw:a.iDraw,columns:[],order:[],start:l,length:n,search:{value:e.sSearch,regex:e.bRegex}};for(l=0;l<c;l++){var u=b[l];var sa=h[l];n="function"==typeof u.mData?"function":u.mData;p.columns.push({data:n,name:u.sName,searchable:u.bSearchable,orderable:u.bSortable,search:{value:sa.sSearch,regex:sa.bRegex}});m("mDataProp_"+l,n);d.bFilter&&
(m("sSearch_"+l,sa.sSearch),m("bRegex_"+l,sa.bRegex),m("bSearchable_"+l,u.bSearchable));d.bSort&&m("bSortable_"+l,u.bSortable)}d.bFilter&&(m("sSearch",e.sSearch),m("bRegex",e.bRegex));d.bSort&&(f.each(k,function(a,b){p.order.push({column:b.col,dir:b.dir});m("iSortCol_"+a,b.col);m("sSortDir_"+a,b.dir)}),m("iSortingCols",k.length));b=q.ext.legacy.ajax;return null===b?a.sAjaxSource?g:p:b?g:p}function Ab(a,b){var c=function(a,c){return b[a]!==p?b[a]:b[c]},d=wa(a,b),e=c("sEcho","draw"),h=c("iTotalRecords",
"recordsTotal");c=c("iTotalDisplayRecords","recordsFiltered");if(e){if(1*e<a.iDraw)return;a.iDraw=1*e}qa(a);a._iRecordsTotal=parseInt(h,10);a._iRecordsDisplay=parseInt(c,10);e=0;for(h=d.length;e<h;e++)R(a,d[e]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;S(a);a._bInitComplete||xa(a,b);a.bAjaxDataGet=!0;K(a,!1)}function wa(a,b){a=f.isPlainObject(a.ajax)&&a.ajax.dataSrc!==p?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===a?b.aaData||b[a]:""!==a?U(a)(b):b}function ub(a){var b=a.oClasses,c=
a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,h=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',k=d.sSearch;k=k.match(/_INPUT_/)?k.replace("_INPUT_",g):k+g;b=f("<div/>",{id:h.f?null:c+"_filter","class":b.sFilter}).append(f("<label/>").append(k));h=function(){var b=this.value?this.value:"";b!=e.sSearch&&(ia(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,S(a))};g=null!==a.searchDelay?a.searchDelay:"ssp"===D(a)?400:0;var l=f("input",
b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",g?Sa(h,g):h).on("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);f(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{l[0]!==y.activeElement&&l.val(e.sSearch)}catch(w){}});return b[0]}function ia(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,h=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive},g=function(a){return a.bEscapeRegex!==
p?!a.bEscapeRegex:a.bRegex};Ka(a);if("ssp"!=D(a)){Bb(a,b.sSearch,c,g(b),b.bSmart,b.bCaseInsensitive);h(b);for(b=0;b<e.length;b++)Cb(a,e[b].sSearch,b,g(e[b]),e[b].bSmart,e[b].bCaseInsensitive);Db(a)}else h(b);a.bFiltered=!0;A(a,null,"search",[a])}function Db(a){for(var b=q.ext.search,c=a.aiDisplay,d,e,h=0,g=b.length;h<g;h++){for(var k=[],l=0,n=c.length;l<n;l++)e=c[l],d=a.aoData[e],b[h](a,d._aFilterData,e,d._aData,l)&&k.push(e);c.length=0;f.merge(c,k)}}function Cb(a,b,c,d,e,h){if(""!==b){var g=[],k=
a.aiDisplay;d=Ta(b,d,e,h);for(e=0;e<k.length;e++)b=a.aoData[k[e]]._aFilterData[c],d.test(b)&&g.push(k[e]);a.aiDisplay=g}}function Bb(a,b,c,d,e,h){e=Ta(b,d,e,h);var g=a.oPreviousSearch.sSearch,k=a.aiDisplayMaster;h=[];0!==q.ext.search.length&&(c=!0);var f=Eb(a);if(0>=b.length)a.aiDisplay=k.slice();else{if(f||c||d||g.length>b.length||0!==b.indexOf(g)||a.bSorted)a.aiDisplay=k.slice();b=a.aiDisplay;for(c=0;c<b.length;c++)e.test(a.aoData[b[c]]._sFilterRow)&&h.push(b[c]);a.aiDisplay=h}}function Ta(a,b,
c,d){a=b?a:Ua(a);c&&(a="^(?=.*?"+f.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0)){var b=a.match(/^"(.*)"$/);a=b?b[1]:a}return a.replace('"',"")}).join(")(?=.*?")+").*$");return new RegExp(a,d?"i":"")}function Eb(a){var b=a.aoColumns,c,d,e=q.ext.type.search;var h=!1;var g=0;for(c=a.aoData.length;g<c;g++){var k=a.aoData[g];if(!k._aFilterData){var f=[];var n=0;for(d=b.length;n<d;n++){h=b[n];if(h.bSearchable){var m=I(a,g,n,"filter");e[h.sType]&&(m=e[h.sType](m));null===m&&(m="");
"string"!==typeof m&&m.toString&&(m=m.toString())}else m="";m.indexOf&&-1!==m.indexOf("&")&&(ya.innerHTML=m,m=$b?ya.textContent:ya.innerText);m.replace&&(m=m.replace(/[\r\n\u2028]/g,""));f.push(m)}k._aFilterData=f;k._sFilterRow=f.join(" ");h=!0}}return h}function Fb(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}function Gb(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function xb(a){var b=a.sTableId,c=a.aanFeatures.i,
d=f("<div/>",{"class":a.oClasses.sInfo,id:c?null:b+"_info"});c||(a.aoDrawCallback.push({fn:Hb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),f(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Hb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),h=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),k=g?c.sInfo:c.sInfoEmpty;g!==h&&(k+=" "+c.sInfoFiltered);k+=c.sInfoPostFix;k=Ib(a,k);c=c.fnInfoCallback;null!==c&&(k=c.call(a.oInstance,
a,d,e,h,g,k));f(b).html(k)}}function Ib(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,h=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,h)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(h/e)))}function ja(a){var b=a.iInitDisplayStart,c=a.aoColumns;var d=a.oFeatures;var e=a.bDeferLoading;if(a.bInitialised){sb(a);
pb(a);ha(a,a.aoHeader);ha(a,a.aoFooter);K(a,!0);d.bAutoWidth&&Ja(a);var h=0;for(d=c.length;h<d;h++){var g=c[h];g.sWidth&&(g.nTh.style.width=B(g.sWidth))}A(a,null,"preInit",[a]);V(a);c=D(a);if("ssp"!=c||e)"ajax"==c?va(a,[],function(c){var d=wa(a,c);for(h=0;h<d.length;h++)R(a,d[h]);a.iInitDisplayStart=b;V(a);K(a,!1);xa(a,c)},a):(K(a,!1),xa(a))}else setTimeout(function(){ja(a)},200)}function xa(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&aa(a);A(a,null,"plugin-init",[a,b]);A(a,"aoInitComplete","init",
[a,b])}function Va(a,b){b=parseInt(b,10);a._iDisplayLength=b;Wa(a);A(a,null,"length",[a,b])}function tb(a){var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=f.isArray(d[0]),h=e?d[0]:d;d=e?d[1]:d;e=f("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect});for(var g=0,k=h.length;g<k;g++)e[0][g]=new Option("number"===typeof d[g]?a.fnFormatNumber(d[g]):d[g],h[g]);var l=f("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(l[0].id=c+"_length");l.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",
e[0].outerHTML));f("select",l).val(a._iDisplayLength).on("change.DT",function(b){Va(a,f(this).val());S(a)});f(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&f("select",l).val(d)});return l[0]}function yb(a){var b=a.sPaginationType,c=q.ext.pager[b],d="function"===typeof c,e=function(a){S(a)};b=f("<div/>").addClass(a.oClasses.sPaging+b)[0];var h=a.aanFeatures;d||c.fnInit(a,b,e);h.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,g=a._iDisplayLength,
f=a.fnRecordsDisplay(),m=-1===g;b=m?0:Math.ceil(b/g);g=m?1:Math.ceil(f/g);f=c(b,g);var p;m=0;for(p=h.p.length;m<p;m++)Ra(a,"pageButton")(a,h.p[m],m,f,b,g)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Xa(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,h=a.fnRecordsDisplay();0===h||-1===e?d=0:"number"===typeof b?(d=b*e,d>h&&(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<h&&(d+=e):"last"==b?d=Math.floor((h-1)/e)*e:O(a,0,"Unknown paging action: "+b,5);b=
a._iDisplayStart!==d;a._iDisplayStart=d;b&&(A(a,null,"page",[a]),c&&S(a));return b}function vb(a){return f("<div/>",{id:a.aanFeatures.r?null:a.sTableId+"_processing","class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function K(a,b){a.oFeatures.bProcessing&&f(a.aanFeatures.r).css("display",b?"block":"none");A(a,null,"processing",[a,b])}function wb(a){var b=f(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,
h=a.oClasses,g=b.children("caption"),k=g.length?g[0]._captionSide:null,l=f(b[0].cloneNode(!1)),n=f(b[0].cloneNode(!1)),m=b.children("tfoot");m.length||(m=null);l=f("<div/>",{"class":h.sScrollWrapper}).append(f("<div/>",{"class":h.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?d?B(d):null:"100%"}).append(f("<div/>",{"class":h.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===k?g:null).append(b.children("thead"))))).append(f("<div/>",
{"class":h.sScrollBody}).css({position:"relative",overflow:"auto",width:d?B(d):null}).append(b));m&&l.append(f("<div/>",{"class":h.sScrollFoot}).css({overflow:"hidden",border:0,width:d?d?B(d):null:"100%"}).append(f("<div/>",{"class":h.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",0).append("bottom"===k?g:null).append(b.children("tfoot")))));b=l.children();var p=b[0];h=b[1];var u=m?b[2]:null;if(d)f(h).on("scroll.DT",function(a){a=this.scrollLeft;p.scrollLeft=a;m&&(u.scrollLeft=a)});
f(h).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=p;a.nScrollBody=h;a.nScrollFoot=u;a.aoDrawCallback.push({fn:na,sName:"scrolling"});return l[0]}function na(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY;b=b.iBarWidth;var h=f(a.nScrollHead),g=h[0].style,k=h.children("div"),l=k[0].style,n=k.children("table");k=a.nScrollBody;var m=f(k),w=k.style,u=f(a.nScrollFoot).children("div"),q=u.children("table"),t=f(a.nTHead),r=f(a.nTable),v=r[0],za=v.style,T=a.nTFoot?f(a.nTFoot):null,A=a.oBrowser,
x=A.bScrollOversize,ac=J(a.aoColumns,"nTh"),Ya=[],y=[],z=[],C=[],G,H=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};var D=k.scrollHeight>k.clientHeight;if(a.scrollBarVis!==D&&a.scrollBarVis!==p)a.scrollBarVis=D,aa(a);else{a.scrollBarVis=D;r.children("thead, tfoot").remove();if(T){var E=T.clone().prependTo(r);var F=T.find("tr");E=E.find("tr")}var I=t.clone().prependTo(r);t=t.find("tr");D=I.find("tr");I.find("th, td").removeAttr("tabindex");
c||(w.width="100%",h[0].style.width="100%");f.each(ua(a,I),function(b,c){G=ba(a,b);c.style.width=a.aoColumns[G].sWidth});T&&N(function(a){a.style.width=""},E);h=r.outerWidth();""===c?(za.width="100%",x&&(r.find("tbody").height()>k.offsetHeight||"scroll"==m.css("overflow-y"))&&(za.width=B(r.outerWidth()-b)),h=r.outerWidth()):""!==d&&(za.width=B(d),h=r.outerWidth());N(H,D);N(function(a){z.push(a.innerHTML);Ya.push(B(f(a).css("width")))},D);N(function(a,b){-1!==f.inArray(a,ac)&&(a.style.width=Ya[b])},
t);f(D).height(0);T&&(N(H,E),N(function(a){C.push(a.innerHTML);y.push(B(f(a).css("width")))},E),N(function(a,b){a.style.width=y[b]},F),f(E).height(0));N(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+z[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=Ya[b]},D);T&&N(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+C[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=y[b]},E);r.outerWidth()<
h?(F=k.scrollHeight>k.offsetHeight||"scroll"==m.css("overflow-y")?h+b:h,x&&(k.scrollHeight>k.offsetHeight||"scroll"==m.css("overflow-y"))&&(za.width=B(F-b)),""!==c&&""===d||O(a,1,"Possible column misalignment",6)):F="100%";w.width=B(F);g.width=B(F);T&&(a.nScrollFoot.style.width=B(F));!e&&x&&(w.height=B(v.offsetHeight+b));c=r.outerWidth();n[0].style.width=B(c);l.width=B(c);d=r.height()>k.clientHeight||"scroll"==m.css("overflow-y");e="padding"+(A.bScrollbarLeft?"Left":"Right");l[e]=d?b+"px":"0px";T&&
(q[0].style.width=B(c),u[0].style.width=B(c),u[0].style[e]=d?b+"px":"0px");r.children("colgroup").insertBefore(r.children("thead"));m.trigger("scroll");!a.bSorted&&!a.bFiltered||a._drawHold||(k.scrollTop=0)}}function N(a,b,c){for(var d=0,e=0,h=b.length,g,k;e<h;){g=b[e].firstChild;for(k=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,k,d):a(g,d),d++),g=g.nextSibling,k=c?k.nextSibling:null;e++}}function Ja(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,h=d.sX,g=d.sXInner,k=c.length,l=oa(a,"bVisible"),
n=f("th",a.nTHead),m=b.getAttribute("width"),p=b.parentNode,u=!1,q,t=a.oBrowser;d=t.bScrollOversize;(q=b.style.width)&&-1!==q.indexOf("%")&&(m=q);for(q=0;q<l.length;q++){var r=c[l[q]];null!==r.sWidth&&(r.sWidth=Jb(r.sWidthOrig,p),u=!0)}if(d||!u&&!h&&!e&&k==W(a)&&k==n.length)for(q=0;q<k;q++)l=ba(a,q),null!==l&&(c[l].sWidth=B(n.eq(q).width()));else{k=f(b).clone().css("visibility","hidden").removeAttr("id");k.find("tbody tr").remove();var v=f("<tr/>").appendTo(k.find("tbody"));k.find("thead, tfoot").remove();
k.append(f(a.nTHead).clone()).append(f(a.nTFoot).clone());k.find("tfoot th, tfoot td").css("width","");n=ua(a,k.find("thead")[0]);for(q=0;q<l.length;q++)r=c[l[q]],n[q].style.width=null!==r.sWidthOrig&&""!==r.sWidthOrig?B(r.sWidthOrig):"",r.sWidthOrig&&h&&f(n[q]).append(f("<div/>").css({width:r.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(q=0;q<l.length;q++)u=l[q],r=c[u],f(Kb(a,u)).clone(!1).append(r.sContentPadding).appendTo(v);f("[name]",k).removeAttr("name");r=f("<div/>").css(h||
e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(k).appendTo(p);h&&g?k.width(g):h?(k.css("width","auto"),k.removeAttr("width"),k.width()<p.clientWidth&&m&&k.width(p.clientWidth)):e?k.width(p.clientWidth):m&&k.width(m);for(q=e=0;q<l.length;q++)p=f(n[q]),g=p.outerWidth()-p.width(),p=t.bBounding?Math.ceil(n[q].getBoundingClientRect().width):p.outerWidth(),e+=p,c[l[q]].sWidth=B(p-g);b.style.width=B(e);r.remove()}m&&(b.style.width=B(m));!m&&!h||a._reszEvt||(b=function(){f(z).on("resize.DT-"+
a.sInstance,Sa(function(){aa(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0)}function Jb(a,b){if(!a)return 0;a=f("<div/>").css("width",B(a)).appendTo(b||y.body);b=a[0].offsetWidth;a.remove();return b}function Kb(a,b){var c=Lb(a,b);if(0>c)return null;var d=a.aoData[c];return d.nTr?d.anCells[b]:f("<td/>").html(I(a,c,b,"display"))[0]}function Lb(a,b){for(var c,d=-1,e=-1,h=0,g=a.aoData.length;h<g;h++)c=I(a,h,b,"display")+"",c=c.replace(bc,""),c=c.replace(/&nbsp;/g," "),c.length>d&&(d=c.length,e=h);return e}
function B(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function Y(a){var b=[],c=a.aoColumns;var d=a.aaSortingFixed;var e=f.isPlainObject(d);var h=[];var g=function(a){a.length&&!f.isArray(a[0])?h.push(a):f.merge(h,a)};f.isArray(d)&&g(d);e&&d.pre&&g(d.pre);g(a.aaSorting);e&&d.post&&g(d.post);for(a=0;a<h.length;a++){var k=h[a][0];g=c[k].aDataSort;d=0;for(e=g.length;d<e;d++){var l=g[d];var n=c[l].sType||"string";h[a]._idx===p&&(h[a]._idx=f.inArray(h[a][1],c[l].asSorting));
b.push({src:k,col:l,dir:h[a][1],index:h[a]._idx,type:n,formatter:q.ext.type.order[n+"-pre"]})}}return b}function rb(a){var b,c=[],d=q.ext.type.order,e=a.aoData,h=0,g=a.aiDisplayMaster;Ka(a);var k=Y(a);var f=0;for(b=k.length;f<b;f++){var n=k[f];n.formatter&&h++;Mb(a,n.col)}if("ssp"!=D(a)&&0!==k.length){f=0;for(b=g.length;f<b;f++)c[g[f]]=f;h===k.length?g.sort(function(a,b){var d,h=k.length,g=e[a]._aSortData,f=e[b]._aSortData;for(d=0;d<h;d++){var l=k[d];var m=g[l.col];var n=f[l.col];m=m<n?-1:m>n?1:0;
if(0!==m)return"asc"===l.dir?m:-m}m=c[a];n=c[b];return m<n?-1:m>n?1:0}):g.sort(function(a,b){var h,g=k.length,f=e[a]._aSortData,l=e[b]._aSortData;for(h=0;h<g;h++){var m=k[h];var n=f[m.col];var p=l[m.col];m=d[m.type+"-"+m.dir]||d["string-"+m.dir];n=m(n,p);if(0!==n)return n}n=c[a];p=c[b];return n<p?-1:n>p?1:0})}a.bSorted=!0}function Nb(a){var b=a.aoColumns,c=Y(a);a=a.oLanguage.oAria;for(var d=0,e=b.length;d<e;d++){var h=b[d];var g=h.asSorting;var k=h.sTitle.replace(/<.*?>/g,"");var f=h.nTh;f.removeAttribute("aria-sort");
h.bSortable&&(0<c.length&&c[0].col==d?(f.setAttribute("aria-sort","asc"==c[0].dir?"ascending":"descending"),h=g[c[0].index+1]||g[0]):h=g[0],k+="asc"===h?a.sSortAscending:a.sSortDescending);f.setAttribute("aria-label",k)}}function Za(a,b,c,d){var e=a.aaSorting,h=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===p&&(c=f.inArray(a[1],h));return c+1<h.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=f.inArray(b,J(e,"0")),-1!==c?(b=g(e[c],!0),null===
b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=h[b],e[c]._idx=b)):(e.push([b,h[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=h[b],e[0]._idx=b):(e.length=0,e.push([b,h[0]]),e[0]._idx=0);V(a);"function"==typeof d&&d(a)}function Qa(a,b,c,d){var e=a.aoColumns[c];$a(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(K(a,!0),setTimeout(function(){Za(a,c,b.shiftKey,d);"ssp"!==D(a)&&K(a,!1)},0)):Za(a,c,b.shiftKey,d))})}function Aa(a){var b=a.aLastSort,
c=a.oClasses.sSortColumn,d=Y(a),e=a.oFeatures,h;if(e.bSort&&e.bSortClasses){e=0;for(h=b.length;e<h;e++){var g=b[e].src;f(J(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3))}e=0;for(h=d.length;e<h;e++)g=d[e].src,f(J(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Mb(a,b){var c=a.aoColumns[b],d=q.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,ca(a,b)));for(var h,g=q.ext.type.order[c.sType+"-pre"],k=0,f=a.aoData.length;k<f;k++)if(c=a.aoData[k],c._aSortData||(c._aSortData=
[]),!c._aSortData[b]||d)h=d?e[k]:I(a,k,b,"sort"),c._aSortData[b]=g?g(h):h}function Ba(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:f.extend(!0,[],a.aaSorting),search:Fb(a.oPreviousSearch),columns:f.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:Fb(a.aoPreSearchCols[d])}})};A(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,b)}}function Ob(a,b,c){var d,
e,h=a.aoColumns;b=function(b){if(b&&b.time){var g=A(a,"aoStateLoadParams","stateLoadParams",[a,b]);if(-1===f.inArray(!1,g)&&(g=a.iStateDuration,!(0<g&&b.time<+new Date-1E3*g||b.columns&&h.length!==b.columns.length))){a.oLoadedState=f.extend(!0,{},b);b.start!==p&&(a._iDisplayStart=b.start,a.iInitDisplayStart=b.start);b.length!==p&&(a._iDisplayLength=b.length);b.order!==p&&(a.aaSorting=[],f.each(b.order,function(b,c){a.aaSorting.push(c[0]>=h.length?[0,c[1]]:c)}));b.search!==p&&f.extend(a.oPreviousSearch,
Gb(b.search));if(b.columns)for(d=0,e=b.columns.length;d<e;d++)g=b.columns[d],g.visible!==p&&(h[d].bVisible=g.visible),g.search!==p&&f.extend(a.aoPreSearchCols[d],Gb(g.search));A(a,"aoStateLoaded","stateLoaded",[a,b])}}c()};if(a.oFeatures.bStateSave){var g=a.fnStateLoadCallback.call(a.oInstance,a,b);g!==p&&b(g)}else c()}function Ca(a){var b=q.settings;a=f.inArray(a,J(b,"nTable"));return-1!==a?b[a]:null}function O(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+
d);if(b)z.console&&console.log&&console.log(c);else if(b=q.ext,b=b.sErrMode||b.errMode,a&&A(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function M(a,b,c,d){f.isArray(c)?f.each(c,function(c,d){f.isArray(d)?M(a,b,d[0],d[1]):M(a,b,d)}):(d===p&&(d=c),b[c]!==p&&(a[d]=b[c]))}function ab(a,b,c){var d;for(d in b)if(b.hasOwnProperty(d)){var e=b[d];f.isPlainObject(e)?(f.isPlainObject(a[d])||(a[d]={}),f.extend(!0,a[d],e)):c&&"data"!==d&&"aaData"!==
d&&f.isArray(e)?a[d]=e.slice():a[d]=e}return a}function $a(a,b,c){f(a).on("click.DT",b,function(b){f(a).blur();c(b)}).on("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).on("selectstart.DT",function(){return!1})}function E(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function A(a,b,c,d){var e=[];b&&(e=f.map(a[b].slice().reverse(),function(b,c){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=f.Event(c+".dt"),f(a.nTable).trigger(b,d),e.push(b.result));return e}function Wa(a){var b=a._iDisplayStart,
c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Ra(a,b){a=a.renderer;var c=q.ext.renderer[b];return f.isPlainObject(a)&&a[b]?c[a[b]]||c._:"string"===typeof a?c[a]||c._:c._}function D(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ka(a,b){var c=Pb.numbers_length,d=Math.floor(c/2);b<=c?a=Z(0,b):a<=d?(a=Z(0,c-2),a.push("ellipsis"),a.push(b-1)):(a>=b-1-d?a=Z(b-(c-2),b):(a=Z(a-d+2,a+d-1),a.push("ellipsis"),
a.push(b-1)),a.splice(0,0,"ellipsis"),a.splice(0,0,0));a.DT_el="span";return a}function Ha(a){f.each({num:function(b){return Da(b,a)},"num-fmt":function(b){return Da(b,a,bb)},"html-num":function(b){return Da(b,a,Ea)},"html-num-fmt":function(b){return Da(b,a,Ea,bb)}},function(b,c){C.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(C.type.search[b+a]=C.type.search.html)})}function Qb(a){return function(){var b=[Ca(this[q.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return q.ext.internal[a].apply(this,
b)}}var q=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new v(Ca(this[C.iApiIndex])):new v(this)};this.fnAddData=function(a,b){var c=this.api(!0);a=f.isArray(a)&&(f.isArray(a[0])||f.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===p||b)&&c.draw();return a.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===p||a?b.draw(!1):
(""!==d.sX||""!==d.sY)&&na(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===p||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0);a=d.rows(a);var e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===p||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,f){e=this.api(!0);null===b||b===p?
e.search(a,c,d,f):e.column(b).search(a,c,d,f);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==p){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==p||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==p?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),
[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){a=this.api(!0).page(a);(b===p||b)&&a.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===p||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return Ca(this[C.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=
function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===p||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===p||e)&&h.columns.adjust();(d===p||d)&&h.draw();return 0};this.fnVersionCheck=C.fnVersionCheck;var b=this,c=a===p,d=this.length;c&&(a={});this.oApi=this.internal=C.internal;for(var e in q.ext.internal)e&&(this[e]=Qb(e));this.each(function(){var e={},g=1<d?ab(e,a,!0):a,k=0,l;e=this.getAttribute("id");var n=!1,m=q.defaults,w=f(this);if("table"!=
this.nodeName.toLowerCase())O(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{jb(m);kb(m.column);L(m,m,!0);L(m.column,m.column,!0);L(m,f.extend(g,w.data()),!0);var u=q.settings;k=0;for(l=u.length;k<l;k++){var t=u[k];if(t.nTable==this||t.nTHead&&t.nTHead.parentNode==this||t.nTFoot&&t.nTFoot.parentNode==this){var v=g.bRetrieve!==p?g.bRetrieve:m.bRetrieve;if(c||v)return t.oInstance;if(g.bDestroy!==p?g.bDestroy:m.bDestroy){t.oInstance.fnDestroy();break}else{O(t,0,"Cannot reinitialise DataTable",
3);return}}if(t.sTableId==this.id){u.splice(k,1);break}}if(null===e||""===e)this.id=e="DataTables_Table_"+q.ext._unique++;var r=f.extend(!0,{},q.models.oSettings,{sDestroyWidth:w[0].style.width,sInstance:e,sTableId:e});r.nTable=this;r.oApi=b.internal;r.oInit=g;u.push(r);r.oInstance=1===b.length?b:w.dataTable();jb(g);Ga(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=f.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);g=ab(f.extend(!0,{},m),g);M(r.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));
M(r,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]);M(r.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],
["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);M(r.oLanguage,g,"fnInfoCallback");E(r,"aoDrawCallback",g.fnDrawCallback,"user");E(r,"aoServerParams",g.fnServerParams,"user");E(r,"aoStateSaveParams",g.fnStateSaveParams,"user");E(r,"aoStateLoadParams",g.fnStateLoadParams,"user");E(r,"aoStateLoaded",g.fnStateLoaded,"user");E(r,"aoRowCallback",g.fnRowCallback,"user");E(r,"aoRowCreatedCallback",g.fnCreatedRow,"user");E(r,"aoHeaderCallback",g.fnHeaderCallback,"user");E(r,"aoFooterCallback",g.fnFooterCallback,
"user");E(r,"aoInitComplete",g.fnInitComplete,"user");E(r,"aoPreDrawCallback",g.fnPreDrawCallback,"user");r.rowIdFn=U(g.rowId);lb(r);var x=r.oClasses;f.extend(x,q.ext.classes,g.oClasses);w.addClass(x.sTable);r.iInitDisplayStart===p&&(r.iInitDisplayStart=g.iDisplayStart,r._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(r.bDeferLoading=!0,e=f.isArray(g.iDeferLoading),r._iRecordsDisplay=e?g.iDeferLoading[0]:g.iDeferLoading,r._iRecordsTotal=e?g.iDeferLoading[1]:g.iDeferLoading);var y=r.oLanguage;
f.extend(!0,y,g.oLanguage);y.sUrl&&(f.ajax({dataType:"json",url:y.sUrl,success:function(a){Ga(a);L(m.oLanguage,a);f.extend(!0,y,a);ja(r)},error:function(){ja(r)}}),n=!0);null===g.asStripeClasses&&(r.asStripeClasses=[x.sStripeOdd,x.sStripeEven]);e=r.asStripeClasses;var z=w.children("tbody").find("tr").eq(0);-1!==f.inArray(!0,f.map(e,function(a,b){return z.hasClass(a)}))&&(f("tbody tr",this).removeClass(e.join(" ")),r.asDestroyStripes=e.slice());e=[];u=this.getElementsByTagName("thead");0!==u.length&&
(fa(r.aoHeader,u[0]),e=ua(r));if(null===g.aoColumns)for(u=[],k=0,l=e.length;k<l;k++)u.push(null);else u=g.aoColumns;k=0;for(l=u.length;k<l;k++)Ia(r,e?e[k]:null);nb(r,g.aoColumnDefs,u,function(a,b){ma(r,a,b)});if(z.length){var B=function(a,b){return null!==a.getAttribute("data-"+b)?b:null};f(z[0]).children("th, td").each(function(a,b){var c=r.aoColumns[a];if(c.mData===a){var d=B(b,"sort")||B(b,"order");b=B(b,"filter")||B(b,"search");if(null!==d||null!==b)c.mData={_:a+".display",sort:null!==d?a+".@data-"+
d:p,type:null!==d?a+".@data-"+d:p,filter:null!==b?a+".@data-"+b:p},ma(r,a)}})}var C=r.oFeatures;e=function(){if(g.aaSorting===p){var a=r.aaSorting;k=0;for(l=a.length;k<l;k++)a[k][1]=r.aoColumns[k].asSorting[0]}Aa(r);C.bSort&&E(r,"aoDrawCallback",function(){if(r.bSorted){var a=Y(r),b={};f.each(a,function(a,c){b[c.src]=c.dir});A(r,null,"order",[r,a,b]);Nb(r)}});E(r,"aoDrawCallback",function(){(r.bSorted||"ssp"===D(r)||C.bDeferRender)&&Aa(r)},"sc");a=w.children("caption").each(function(){this._captionSide=
f(this).css("caption-side")});var b=w.children("thead");0===b.length&&(b=f("<thead/>").appendTo(w));r.nTHead=b[0];b=w.children("tbody");0===b.length&&(b=f("<tbody/>").appendTo(w));r.nTBody=b[0];b=w.children("tfoot");0===b.length&&0<a.length&&(""!==r.oScroll.sX||""!==r.oScroll.sY)&&(b=f("<tfoot/>").appendTo(w));0===b.length||0===b.children().length?w.addClass(x.sNoFooter):0<b.length&&(r.nTFoot=b[0],fa(r.aoFooter,r.nTFoot));if(g.aaData)for(k=0;k<g.aaData.length;k++)R(r,g.aaData[k]);else(r.bDeferLoading||
"dom"==D(r))&&pa(r,f(r.nTBody).children("tr"));r.aiDisplay=r.aiDisplayMaster.slice();r.bInitialised=!0;!1===n&&ja(r)};g.bStateSave?(C.bStateSave=!0,E(r,"aoDrawCallback",Ba,"state_save"),Ob(r,g,e)):e()}});b=null;return this},C,t,x,cb={},Rb=/[\r\n\u2028]/g,Ea=/<.*?>/g,cc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,dc=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\|\$|\^|\-)/g,bb=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,P=function(a){return a&&!0!==a&&"-"!==a?!1:
!0},Sb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Tb=function(a,b){cb[b]||(cb[b]=new RegExp(Ua(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(cb[b],"."):a},db=function(a,b,c){var d="string"===typeof a;if(P(a))return!0;b&&d&&(a=Tb(a,b));c&&d&&(a=a.replace(bb,""));return!isNaN(parseFloat(a))&&isFinite(a)},Ub=function(a,b,c){return P(a)?!0:P(a)||"string"===typeof a?db(a.replace(Ea,""),b,c)?!0:null:null},J=function(a,b,c){var d=[],e=0,h=a.length;if(c!==
p)for(;e<h;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<h;e++)a[e]&&d.push(a[e][b]);return d},la=function(a,b,c,d){var e=[],h=0,g=b.length;if(d!==p)for(;h<g;h++)a[b[h]][c]&&e.push(a[b[h]][c][d]);else for(;h<g;h++)e.push(a[b[h]][c]);return e},Z=function(a,b){var c=[];if(b===p){b=0;var d=a}else d=b,b=a;for(a=b;a<d;a++)c.push(a);return c},Vb=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},ta=function(a){a:{if(!(2>a.length)){var b=a.slice().sort();for(var c=b[0],d=1,
e=b.length;d<e;d++){if(b[d]===c){b=!1;break a}c=b[d]}}b=!0}if(b)return a.slice();b=[];e=a.length;var h,g=0;d=0;a:for(;d<e;d++){c=a[d];for(h=0;h<g;h++)if(b[h]===c)continue a;b.push(c);g++}return b};q.util={throttle:function(a,b){var c=b!==p?b:200,d,e;return function(){var b=this,g=+new Date,f=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d=p;a.apply(b,f)},c)):(d=g,a.apply(b,f))}},escapeRegex:function(a){return a.replace(dc,"\\$1")}};var F=function(a,b,c){a[b]!==p&&(a[c]=a[b])},da=/\[.*?\]$/,
X=/\(\)$/,Ua=q.util.escapeRegex,ya=f("<div>")[0],$b=ya.textContent!==p,bc=/<.*?>/g,Sa=q.util.throttle,Wb=[],G=Array.prototype,ec=function(a){var b,c=q.settings,d=f.map(c,function(a,b){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase()){var e=f.inArray(a,d);return-1!==e?[c[e]]:null}if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?b=f(a):a instanceof f&&(b=a)}else return[];if(b)return b.map(function(a){e=f.inArray(this,
d);return-1!==e?c[e]:null}).toArray()};var v=function(a,b){if(!(this instanceof v))return new v(a,b);var c=[],d=function(a){(a=ec(a))&&c.push.apply(c,a)};if(f.isArray(a))for(var e=0,h=a.length;e<h;e++)d(a[e]);else d(a);this.context=ta(c);b&&f.merge(this,b);this.selector={rows:null,cols:null,opts:null};v.extend(this,this,Wb)};q.Api=v;f.extend(v.prototype,{any:function(){return 0!==this.count()},concat:G.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=
this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new v(b[a],this[a]):null},filter:function(a){var b=[];if(G.filter)b=G.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new v(this.context,b)},flatten:function(){var a=[];return new v(this.context,a.concat.apply(a,this.toArray()))},join:G.join,indexOf:G.indexOf||function(a,b){b=b||0;for(var c=this.length;b<c;b++)if(this[b]===
a)return b;return-1},iterator:function(a,b,c,d){var e=[],h,g,f=this.context,l,n=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);var m=0;for(h=f.length;m<h;m++){var q=new v(f[m]);if("table"===b){var u=c.call(q,f[m],m);u!==p&&e.push(u)}else if("columns"===b||"rows"===b)u=c.call(q,f[m],this[m],m),u!==p&&e.push(u);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){var t=this[m];"column-rows"===b&&(l=Fa(f[m],n.opts));var x=0;for(g=t.length;x<g;x++)u=t[x],u="cell"===b?c.call(q,f[m],u.row,
u.column,m,x):c.call(q,f[m],u,m,x,l),u!==p&&e.push(u)}}return e.length||d?(a=new v(f,a?e.concat.apply([],e):e),b=a.selector,b.rows=n.rows,b.cols=n.cols,b.opts=n.opts,a):this},lastIndexOf:G.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(G.map)b=G.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new v(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},
pop:G.pop,push:G.push,reduce:G.reduce||function(a,b){return mb(this,a,b,0,this.length,1)},reduceRight:G.reduceRight||function(a,b){return mb(this,a,b,this.length-1,-1,-1)},reverse:G.reverse,selector:null,shift:G.shift,slice:function(){return new v(this.context,this)},sort:G.sort,splice:G.splice,toArray:function(){return G.slice.call(this)},to$:function(){return f(this)},toJQuery:function(){return f(this)},unique:function(){return new v(this.context,ta(this))},unshift:G.unshift});v.extend=function(a,
b,c){if(c.length&&b&&(b instanceof v||b.__dt_wrapper)){var d,e=function(a,b,c){return function(){var d=b.apply(a,arguments);v.extend(d,d,c.methodExt);return d}};var h=0;for(d=c.length;h<d;h++){var g=c[h];b[g.name]="function"===g.type?e(a,g.val,g):"object"===g.type?{}:g.val;b[g.name].__dt_wrapper=!0;v.extend(a,b[g.name],g.propExt)}}};v.register=t=function(a,b){if(f.isArray(a))for(var c=0,d=a.length;c<d;c++)v.register(a[c],b);else{d=a.split(".");var e=Wb,h;a=0;for(c=d.length;a<c;a++){var g=(h=-1!==
d[a].indexOf("()"))?d[a].replace("()",""):d[a];a:{var k=0;for(var l=e.length;k<l;k++)if(e[k].name===g){k=e[k];break a}k=null}k||(k={name:g,val:{},methodExt:[],propExt:[],type:"object"},e.push(k));a===c-1?(k.val=b,k.type="function"===typeof b?"function":f.isPlainObject(b)?"object":"other"):e=h?k.methodExt:k.propExt}}};v.registerPlural=x=function(a,b,c){v.register(a,c);v.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof v?a.length?f.isArray(a[0])?new v(a.context,
a[0]):a[0]:p:a})};var fc=function(a,b){if("number"===typeof a)return[b[a]];var c=f.map(b,function(a,b){return a.nTable});return f(c).filter(a).map(function(a){a=f.inArray(this,c);return b[a]}).toArray()};t("tables()",function(a){return a?new v(fc(a,this.context)):this});t("table()",function(a){a=this.tables(a);var b=a.context;return b.length?new v(b[0]):a});x("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});x("tables().body()","table().body()",
function(){return this.iterator("table",function(a){return a.nTBody},1)});x("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});x("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});x("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});t("draw()",function(a){return this.iterator("table",function(b){"page"===
a?S(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),V(b,!1===a))})});t("page()",function(a){return a===p?this.page.info().page:this.iterator("table",function(b){Xa(b,a)})});t("page.info()",function(a){if(0===this.context.length)return p;a=this.context[0];var b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,
serverSide:"ssp"===D(a)}});t("page.len()",function(a){return a===p?0!==this.context.length?this.context[0]._iDisplayLength:p:this.iterator("table",function(b){Va(b,a)})});var Xb=function(a,b,c){if(c){var d=new v(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==D(a))V(a,b);else{K(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();va(a,[],function(c){qa(a);c=wa(a,c);for(var d=0,e=c.length;d<e;d++)R(a,c[d]);V(a,b);K(a,!1)})}};t("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});
t("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});t("ajax.reload()",function(a,b){return this.iterator("table",function(c){Xb(c,!1===b,a)})});t("ajax.url()",function(a){var b=this.context;if(a===p){if(0===b.length)return p;b=b[0];return b.ajax?f.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){f.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});t("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Xb(c,
!1===b,a)})});var eb=function(a,b,c,d,e){var h=[],g,k,l;var n=typeof b;b&&"string"!==n&&"function"!==n&&b.length!==p||(b=[b]);n=0;for(k=b.length;n<k;n++){var m=b[n]&&b[n].split&&!b[n].match(/[\[\(:]/)?b[n].split(","):[b[n]];var q=0;for(l=m.length;q<l;q++)(g=c("string"===typeof m[q]?f.trim(m[q]):m[q]))&&g.length&&(h=h.concat(g))}a=C.selector[a];if(a.length)for(n=0,k=a.length;n<k;n++)h=a[n](d,e,h);return ta(h)},fb=function(a){a||(a={});a.filter&&a.search===p&&(a.search=a.filter);return f.extend({search:"none",
order:"current",page:"all"},a)},gb=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Fa=function(a,b){var c=[],d=a.aiDisplay;var e=a.aiDisplayMaster;var h=b.search;var g=b.order;b=b.page;if("ssp"==D(a))return"removed"===h?[]:Z(0,e.length);if("current"==b)for(g=a._iDisplayStart,a=a.fnDisplayEnd();g<a;g++)c.push(d[g]);else if("current"==g||"applied"==g)if("none"==h)c=e.slice();else if("applied"==h)c=
d.slice();else{if("removed"==h){var k={};g=0;for(a=d.length;g<a;g++)k[d[g]]=null;c=f.map(e,function(a){return k.hasOwnProperty(a)?null:a})}}else if("index"==g||"original"==g)for(g=0,a=a.aoData.length;g<a;g++)"none"==h?c.push(g):(e=f.inArray(g,d),(-1===e&&"removed"==h||0<=e&&"applied"==h)&&c.push(g));return c},gc=function(a,b,c){var d;return eb("row",b,function(b){var e=Sb(b),g=a.aoData;if(null!==e&&!c)return[e];d||(d=Fa(a,c));if(null!==e&&-1!==f.inArray(e,d))return[e];if(null===b||b===p||""===b)return d;
if("function"===typeof b)return f.map(d,function(a){var c=g[a];return b(a,c._aData,c.nTr)?a:null});if(b.nodeName){e=b._DT_RowIndex;var k=b._DT_CellIndex;if(e!==p)return g[e]&&g[e].nTr===b?[e]:[];if(k)return g[k.row]&&g[k.row].nTr===b.parentNode?[k.row]:[];e=f(b).closest("*[data-dt-row]");return e.length?[e.data("dt-row")]:[]}if("string"===typeof b&&"#"===b.charAt(0)&&(e=a.aIds[b.replace(/^#/,"")],e!==p))return[e.idx];e=Vb(la(a.aoData,d,"nTr"));return f(e).filter(b).map(function(){return this._DT_RowIndex}).toArray()},
a,c)};t("rows()",function(a,b){a===p?a="":f.isPlainObject(a)&&(b=a,a="");b=fb(b);var c=this.iterator("table",function(c){return gc(c,a,b)},1);c.selector.rows=a;c.selector.opts=b;return c});t("rows().nodes()",function(){return this.iterator("row",function(a,b){return a.aoData[b].nTr||p},1)});t("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return la(a.aoData,b,"_aData")},1)});x("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){b=b.aoData[c];
return"search"===a?b._aFilterData:b._aSortData},1)});x("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){ea(b,c,a)})});x("rows().indexes()","row().index()",function(){return this.iterator("row",function(a,b){return b},1)});x("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var h=0,g=this[d].length;h<g;h++){var f=c[d].rowIdFn(c[d].aoData[this[d][h]]._aData);b.push((!0===a?"#":"")+f)}return new v(c,b)});x("rows().remove()",
"row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,h=e[c],g,f;e.splice(c,1);var l=0;for(g=e.length;l<g;l++){var n=e[l];var m=n.anCells;null!==n.nTr&&(n.nTr._DT_RowIndex=l);if(null!==m)for(n=0,f=m.length;n<f;n++)m[n]._DT_CellIndex.row=l}ra(b.aiDisplayMaster,c);ra(b.aiDisplay,c);ra(a[d],c,!1);0<b._iRecordsDisplay&&b._iRecordsDisplay--;Wa(b);c=b.rowIdFn(h._aData);c!==p&&delete b.aIds[c]});this.iterator("table",function(a){for(var b=0,d=a.aoData.length;b<d;b++)a.aoData[b].idx=
b});return this});t("rows.add()",function(a){var b=this.iterator("table",function(b){var c,d=[];var g=0;for(c=a.length;g<c;g++){var f=a[g];f.nodeName&&"TR"===f.nodeName.toUpperCase()?d.push(pa(b,f)[0]):d.push(R(b,f))}return d},1),c=this.rows(-1);c.pop();f.merge(c,b);return c});t("row()",function(a,b){return gb(this.rows(a,b))});t("row().data()",function(a){var b=this.context;if(a===p)return b.length&&this.length?b[0].aoData[this[0]]._aData:p;var c=b[0].aoData[this[0]];c._aData=a;f.isArray(a)&&c.nTr.id&&
Q(b[0].rowId)(a,c.nTr.id);ea(b[0],this[0],"data");return this});t("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});t("row.add()",function(a){a instanceof f&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?pa(b,a)[0]:R(b,a)});return this.row(b[0])});var hc=function(a,b,c,d){var e=[],h=function(b,c){if(f.isArray(b)||b instanceof f)for(var d=0,g=b.length;d<g;d++)h(b[d],c);else b.nodeName&&
"tr"===b.nodeName.toLowerCase()?e.push(b):(d=f("<tr><td/></tr>").addClass(c),f("td",d).addClass(c).html(b)[0].colSpan=W(a),e.push(d[0]))};h(c,d);b._details&&b._details.detach();b._details=f(e);b._detailsShow&&b._details.insertAfter(b.nTr)},hb=function(a,b){var c=a.context;c.length&&(a=c[0].aoData[b!==p?b:a[0]])&&a._details&&(a._details.remove(),a._detailsShow=p,a._details=p)},Yb=function(a,b){var c=a.context;c.length&&a.length&&(a=c[0].aoData[a[0]],a._details&&((a._detailsShow=b)?a._details.insertAfter(a.nTr):
a._details.detach(),ic(c[0])))},ic=function(a){var b=new v(a),c=a.aoData;b.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<J(c,"_details").length&&(b.on("draw.dt.DT_details",function(d,e){a===e&&b.rows({page:"current"}).eq(0).each(function(a){a=c[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),b.on("column-visibility.dt.DT_details",function(b,e,f,g){if(a===e)for(e=W(e),f=0,g=c.length;f<g;f++)b=c[f],b._details&&b._details.children("td[colspan]").attr("colspan",
e)}),b.on("destroy.dt.DT_details",function(d,e){if(a===e)for(d=0,e=c.length;d<e;d++)c[d]._details&&hb(b,d)}))};t("row().child()",function(a,b){var c=this.context;if(a===p)return c.length&&this.length?c[0].aoData[this[0]]._details:p;!0===a?this.child.show():!1===a?hb(this):c.length&&this.length&&hc(c[0],c[0].aoData[this[0]],a,b);return this});t(["row().child.show()","row().child().show()"],function(a){Yb(this,!0);return this});t(["row().child.hide()","row().child().hide()"],function(){Yb(this,!1);
return this});t(["row().child.remove()","row().child().remove()"],function(){hb(this);return this});t("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var jc=/^([^:]+):(name|visIdx|visible)$/,Zb=function(a,b,c,d,e){c=[];d=0;for(var f=e.length;d<f;d++)c.push(I(a,e[d],b));return c},kc=function(a,b,c){var d=a.aoColumns,e=J(d,"sName"),h=J(d,"nTh");return eb("column",b,function(b){var g=Sb(b);if(""===b)return Z(d.length);if(null!==
g)return[0<=g?g:d.length+g];if("function"===typeof b){var l=Fa(a,c);return f.map(d,function(c,d){return b(d,Zb(a,d,0,0,l),h[d])?d:null})}var n="string"===typeof b?b.match(jc):"";if(n)switch(n[2]){case "visIdx":case "visible":g=parseInt(n[1],10);if(0>g){var m=f.map(d,function(a,b){return a.bVisible?b:null});return[m[m.length+g]]}return[ba(a,g)];case "name":return f.map(e,function(a,b){return a===n[1]?b:null});default:return[]}if(b.nodeName&&b._DT_CellIndex)return[b._DT_CellIndex.column];g=f(h).filter(b).map(function(){return f.inArray(this,
h)}).toArray();if(g.length||!b.nodeName)return g;g=f(b).closest("*[data-dt-column]");return g.length?[g.data("dt-column")]:[]},a,c)};t("columns()",function(a,b){a===p?a="":f.isPlainObject(a)&&(b=a,a="");b=fb(b);var c=this.iterator("table",function(c){return kc(c,a,b)},1);c.selector.cols=a;c.selector.opts=b;return c});x("columns().header()","column().header()",function(a,b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});x("columns().footer()","column().footer()",function(a,
b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});x("columns().data()","column().data()",function(){return this.iterator("column-rows",Zb,1)});x("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});x("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return la(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});x("columns().nodes()",
"column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return la(a.aoData,e,"anCells",b)},1)});x("columns().visible()","column().visible()",function(a,b){var c=this,d=this.iterator("column",function(b,c){if(a===p)return b.aoColumns[c].bVisible;var d=b.aoColumns,e=d[c],h=b.aoData,n;if(a!==p&&e.bVisible!==a){if(a){var m=f.inArray(!0,J(d,"bVisible"),c+1);d=0;for(n=h.length;d<n;d++){var q=h[d].nTr;b=h[d].anCells;q&&q.insertBefore(b[c],b[m]||null)}}else f(J(b.aoData,"anCells",
c)).detach();e.bVisible=a}});a!==p&&this.iterator("table",function(d){ha(d,d.aoHeader);ha(d,d.aoFooter);d.aiDisplay.length||f(d.nTBody).find("td[colspan]").attr("colspan",W(d));Ba(d);c.iterator("column",function(c,d){A(c,null,"column-visibility",[c,d,a,b])});(b===p||b)&&c.columns.adjust()});return d});x("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?ca(b,c):c},1)});t("columns.adjust()",function(){return this.iterator("table",function(a){aa(a)},
1)});t("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return ba(c,b);if("fromData"===a||"toVisible"===a)return ca(c,b)}});t("column()",function(a,b){return gb(this.columns(a,b))});var lc=function(a,b,c){var d=a.aoData,e=Fa(a,c),h=Vb(la(d,e,"anCells")),g=f([].concat.apply([],h)),k,l=a.aoColumns.length,n,m,q,u,t,v;return eb("cell",b,function(b){var c="function"===typeof b;if(null===b||b===p||c){n=[];m=0;for(q=e.length;m<q;m++)for(k=
e[m],u=0;u<l;u++)t={row:k,column:u},c?(v=d[k],b(t,I(a,k,u),v.anCells?v.anCells[u]:null)&&n.push(t)):n.push(t);return n}if(f.isPlainObject(b))return b.column!==p&&b.row!==p&&-1!==f.inArray(b.row,e)?[b]:[];c=g.filter(b).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length||!b.nodeName)return c;v=f(b).closest("*[data-dt-row]");return v.length?[{row:v.data("dt-row"),column:v.data("dt-column")}]:[]},a,c)};t("cells()",function(a,b,c){f.isPlainObject(a)&&
(a.row===p?(c=a,a=null):(c=b,b=null));f.isPlainObject(b)&&(c=b,b=null);if(null===b||b===p)return this.iterator("table",function(b){return lc(b,a,fb(c))});var d=c?{page:c.page,order:c.order,search:c.search}:{},e=this.columns(b,d),h=this.rows(a,d),g,k,l,n;d=this.iterator("table",function(a,b){a=[];g=0;for(k=h[b].length;g<k;g++)for(l=0,n=e[b].length;l<n;l++)a.push({row:h[b][g],column:e[b][l]});return a},1);d=c&&c.selected?this.cells(d,c):d;f.extend(d.selector,{cols:b,rows:a,opts:c});return d});x("cells().nodes()",
"cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&a.anCells?a.anCells[c]:p},1)});t("cells().data()",function(){return this.iterator("cell",function(a,b,c){return I(a,b,c)},1)});x("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});x("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return I(b,c,d,a)},
1)});x("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,b,c){return{row:b,column:c,columnVisible:ca(a,c)}},1)});x("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){ea(b,c,a,d)})});t("cell()",function(a,b,c){return gb(this.cells(a,b,c))});t("cell().data()",function(a){var b=this.context,c=this[0];if(a===p)return b.length&&c.length?I(b[0],c[0].row,c[0].column):p;ob(b[0],c[0].row,c[0].column,a);ea(b[0],c[0].row,
"data",c[0].column);return this});t("order()",function(a,b){var c=this.context;if(a===p)return 0!==c.length?c[0].aaSorting:p;"number"===typeof a?a=[[a,b]]:a.length&&!f.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});t("order.listener()",function(a,b,c){return this.iterator("table",function(d){Qa(d,a,b,c)})});t("order.fixed()",function(a){if(!a){var b=this.context;b=b.length?b[0].aaSortingFixed:p;return f.isArray(b)?{pre:b}:
b}return this.iterator("table",function(b){b.aaSortingFixed=f.extend(!0,{},a)})});t(["columns().order()","column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];f.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});t("search()",function(a,b,c,d){var e=this.context;return a===p?0!==e.length?e[0].oPreviousSearch.sSearch:p:this.iterator("table",function(e){e.oFeatures.bFilter&&ia(e,f.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===
c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});x("columns().search()","column().search()",function(a,b,c,d){return this.iterator("column",function(e,h){var g=e.aoPreSearchCols;if(a===p)return g[h].sSearch;e.oFeatures.bFilter&&(f.extend(g[h],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),ia(e,e.oPreviousSearch,1))})});t("state()",function(){return this.context.length?this.context[0].oSavedState:null});t("state.clear()",function(){return this.iterator("table",
function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});t("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null});t("state.save()",function(){return this.iterator("table",function(a){Ba(a)})});q.versionCheck=q.fnVersionCheck=function(a){var b=q.version.split(".");a=a.split(".");for(var c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};q.isDataTable=q.fnIsDataTable=function(a){var b=f(a).get(0),c=!1;if(a instanceof
q.Api)return!0;f.each(q.settings,function(a,e){a=e.nScrollHead?f("table",e.nScrollHead)[0]:null;var d=e.nScrollFoot?f("table",e.nScrollFoot)[0]:null;if(e.nTable===b||a===b||d===b)c=!0});return c};q.tables=q.fnTables=function(a){var b=!1;f.isPlainObject(a)&&(b=a.api,a=a.visible);var c=f.map(q.settings,function(b){if(!a||a&&f(b.nTable).is(":visible"))return b.nTable});return b?new v(c):c};q.camelToHungarian=L;t("$()",function(a,b){b=this.rows(b).nodes();b=f(b);return f([].concat(b.filter(a).toArray(),
b.find(a).toArray()))});f.each(["on","one","off"],function(a,b){t(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0]=f.map(a[0].split(/\s/),function(a){return a.match(/\.dt\b/)?a:a+".dt"}).join(" ");var d=f(this.tables().nodes());d[b].apply(d,a);return this})});t("clear()",function(){return this.iterator("table",function(a){qa(a)})});t("settings()",function(){return new v(this.context,this.context)});t("init()",function(){var a=this.context;return a.length?a[0].oInit:null});t("data()",
function(){return this.iterator("table",function(a){return J(a.aoData,"_aData")}).flatten()});t("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,h=b.nTBody,g=b.nTHead,k=b.nTFoot,l=f(e);h=f(h);var n=f(b.nTableWrapper),m=f.map(b.aoData,function(a){return a.nTr}),p;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);a||(new v(b)).columns().visible(!0);n.off(".DT").find(":not(tbody *)").off(".DT");f(z).off(".DT-"+b.sInstance);
e!=g.parentNode&&(l.children("thead").detach(),l.append(g));k&&e!=k.parentNode&&(l.children("tfoot").detach(),l.append(k));b.aaSorting=[];b.aaSortingFixed=[];Aa(b);f(m).removeClass(b.asStripeClasses.join(" "));f("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);h.children().detach();h.append(m);g=a?"remove":"detach";l[g]();n[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),l.css("width",b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&&
h.children().each(function(a){f(this).addClass(b.asDestroyStripes[a%p])}));c=f.inArray(b,q.settings);-1!==c&&q.settings.splice(c,1)})});f.each(["column","row","cell"],function(a,b){t(b+"s().every()",function(a){var c=this.selector.opts,e=this;return this.iterator(b,function(d,f,k,l,n){a.call(e[b](f,"cell"===b?k:c,"cell"===b?c:p),f,k,l,n)})})});t("i18n()",function(a,b,c){var d=this.context[0];a=U(a)(d.oLanguage);a===p&&(a=b);c!==p&&f.isPlainObject(a)&&(a=a[c]!==p?a[c]:a._);return a.replace("%d",c)});
q.version="1.10.20";q.settings=[];q.models={};q.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};q.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};q.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,
sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};q.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,
bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}},
fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",
sNext:"Next",sPrevious:"Previous"},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:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:f.extend({},q.models.oSearch),sAjaxDataProp:"data",
sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};H(q.defaults);q.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};H(q.defaults.column);q.models.oSettings=
{oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},
aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,
aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:p,oAjaxData:p,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==D(this)?1*this._iRecordsTotal:
this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==D(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};q.ext=C={buttons:{},
classes:{},build:"bs4/dt-1.10.20",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:q.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:q.version};f.extend(C,{afnFiltering:C.search,aTypes:C.type.detect,ofnSearch:C.type.search,oSort:C.type.order,afnSortData:C.order,aoFeatures:C.feature,oApi:C.internal,oStdClasses:C.classes,oPagination:C.pager});
f.extend(q.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",
sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",
sJUIHeader:"",sJUIFooter:""});var Pb=q.ext.pager;f.extend(Pb,{simple:function(a,b){return["previous","next"]},full:function(a,b){return["first","previous","next","last"]},numbers:function(a,b){return[ka(a,b)]},simple_numbers:function(a,b){return["previous",ka(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ka(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ka(a,b),"last"]},_numbers:ka,numbers_length:7});f.extend(!0,q.ext.renderer,{pageButton:{_:function(a,b,
c,d,e,h){var g=a.oClasses,k=a.oLanguage.oPaginate,l=a.oLanguage.oAria.paginate||{},n,m,q=0,t=function(b,d){var p,r=g.sPageButtonDisabled,u=function(b){Xa(a,b.data.action,!0)};var w=0;for(p=d.length;w<p;w++){var v=d[w];if(f.isArray(v)){var x=f("<"+(v.DT_el||"div")+"/>").appendTo(b);t(x,v)}else{n=null;m=v;x=a.iTabIndex;switch(v){case "ellipsis":b.append('<span class="ellipsis">&#x2026;</span>');break;case "first":n=k.sFirst;0===e&&(x=-1,m+=" "+r);break;case "previous":n=k.sPrevious;0===e&&(x=-1,m+=
" "+r);break;case "next":n=k.sNext;e===h-1&&(x=-1,m+=" "+r);break;case "last":n=k.sLast;e===h-1&&(x=-1,m+=" "+r);break;default:n=v+1,m=e===v?g.sPageButtonActive:""}null!==n&&(x=f("<a>",{"class":g.sPageButton+" "+m,"aria-controls":a.sTableId,"aria-label":l[v],"data-dt-idx":q,tabindex:x,id:0===c&&"string"===typeof v?a.sTableId+"_"+v:null}).html(n).appendTo(b),$a(x,{action:v},u),q++)}}};try{var v=f(b).find(y.activeElement).data("dt-idx")}catch(mc){}t(f(b).empty(),d);v!==p&&f(b).find("[data-dt-idx="+
v+"]").focus()}}});f.extend(q.ext.type.detect,[function(a,b){b=b.oLanguage.sDecimal;return db(a,b)?"num"+b:null},function(a,b){if(a&&!(a instanceof Date)&&!cc.test(a))return null;b=Date.parse(a);return null!==b&&!isNaN(b)||P(a)?"date":null},function(a,b){b=b.oLanguage.sDecimal;return db(a,b,!0)?"num-fmt"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Ub(a,b)?"html-num"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Ub(a,b,!0)?"html-num-fmt"+b:null},function(a,b){return P(a)||"string"===
typeof a&&-1!==a.indexOf("<")?"html":null}]);f.extend(q.ext.type.search,{html:function(a){return P(a)?a:"string"===typeof a?a.replace(Rb," ").replace(Ea,""):""},string:function(a){return P(a)?a:"string"===typeof a?a.replace(Rb," "):a}});var Da=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Tb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};f.extend(C.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return P(a)?
"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return P(a)?"":"string"===typeof a?a.toLowerCase():a.toString?a.toString():""},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,b){return a<b?1:a>b?-1:0}});Ha("");f.extend(!0,q.ext.renderer,{header:{_:function(a,b,c,d){f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc:
c.sSortingClass))})},jqueryui:function(a,b,c,d){f("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(f("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc:c.sSortingClass),b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass("asc"==
k[e]?d.sSortJUIAsc:"desc"==k[e]?d.sSortJUIDesc:c.sSortingClassJUI))})}}});var ib=function(a){return"string"===typeof a?a.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):a};q.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return ib(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,
a)+f+(e||"")}}},text:function(){return{display:ib,filter:ib}}};f.extend(q.ext.internal,{_fnExternApiFunc:Qb,_fnBuildAjax:va,_fnAjaxUpdate:qb,_fnAjaxParameters:zb,_fnAjaxUpdateDraw:Ab,_fnAjaxDataSrc:wa,_fnAddColumn:Ia,_fnColumnOptions:ma,_fnAdjustColumnSizing:aa,_fnVisibleToColumnIndex:ba,_fnColumnIndexToVisible:ca,_fnVisbleColumns:W,_fnGetColumns:oa,_fnColumnTypes:Ka,_fnApplyColumnDefs:nb,_fnHungarianMap:H,_fnCamelToHungarian:L,_fnLanguageCompat:Ga,_fnBrowserDetect:lb,_fnAddData:R,_fnAddTr:pa,_fnNodeToDataIndex:function(a,
b){return b._DT_RowIndex!==p?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return f.inArray(c,a.aoData[b].anCells)},_fnGetCellData:I,_fnSetCellData:ob,_fnSplitObjNotation:Na,_fnGetObjectDataFn:U,_fnSetObjectDataFn:Q,_fnGetDataMaster:Oa,_fnClearTable:qa,_fnDeleteIndex:ra,_fnInvalidate:ea,_fnGetRowElements:Ma,_fnCreateTr:La,_fnBuildHead:pb,_fnDrawHead:ha,_fnDraw:S,_fnReDraw:V,_fnAddOptionsHtml:sb,_fnDetectHeader:fa,_fnGetUniqueThs:ua,_fnFeatureHtmlFilter:ub,_fnFilterComplete:ia,_fnFilterCustom:Db,
_fnFilterColumn:Cb,_fnFilter:Bb,_fnFilterCreateSearch:Ta,_fnEscapeRegex:Ua,_fnFilterData:Eb,_fnFeatureHtmlInfo:xb,_fnUpdateInfo:Hb,_fnInfoMacros:Ib,_fnInitialise:ja,_fnInitComplete:xa,_fnLengthChange:Va,_fnFeatureHtmlLength:tb,_fnFeatureHtmlPaginate:yb,_fnPageChange:Xa,_fnFeatureHtmlProcessing:vb,_fnProcessingDisplay:K,_fnFeatureHtmlTable:wb,_fnScrollDraw:na,_fnApplyToChildren:N,_fnCalculateColumnWidths:Ja,_fnThrottle:Sa,_fnConvertToWidth:Jb,_fnGetWidestNode:Kb,_fnGetMaxLenString:Lb,_fnStringToCss:B,
_fnSortFlatten:Y,_fnSort:rb,_fnSortAria:Nb,_fnSortListener:Za,_fnSortAttachListener:Qa,_fnSortingClasses:Aa,_fnSortData:Mb,_fnSaveState:Ba,_fnLoadState:Ob,_fnSettingsFromNode:Ca,_fnLog:O,_fnMap:M,_fnBindAction:$a,_fnCallbackReg:E,_fnCallbackFire:A,_fnLengthOverflow:Wa,_fnRenderer:Ra,_fnDataSource:D,_fnRowAttributes:Pa,_fnExtend:ab,_fnCalculateEnd:function(){}});f.fn.dataTable=q;q.$=f;f.fn.dataTableSettings=q.settings;f.fn.dataTableExt=q.ext;f.fn.DataTable=function(a){return f(this).dataTable(a).api()};
f.each(q,function(a,b){f.fn.DataTable[a]=b});return f.fn.dataTable});
/*!
DataTables Bootstrap 4 integration
©2011-2017 SpryMedia Ltd - datatables.net/license
*/
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<e;d++){var k=a[d];if(b.call(c,k,d,a))return{i:d,v:k}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);
$jscomp.polyfill=function(a,b,c,e){if(b){c=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var d=a[e];d in c||(c[d]={});c=c[d]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},"es6","es3");
(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);c&&c.fn.dataTable||(c=require("datatables.net")(b,c).$);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a,b,c,e){var d=a.fn.dataTable;a.extend(!0,d.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
renderer:"bootstrap"});a.extend(d.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});d.ext.renderer.pageButton.bootstrap=function(b,l,v,w,m,r){var k=new d.Api(b),x=b.oClasses,n=b.oLanguage.oPaginate,y=b.oLanguage.oAria.paginate||{},g,h,t=0,u=function(c,d){var e,l=function(b){b.preventDefault();
a(b.currentTarget).hasClass("disabled")||k.page()==b.data.action||k.page(b.data.action).draw("page")};var q=0;for(e=d.length;q<e;q++){var f=d[q];if(a.isArray(f))u(c,f);else{h=g="";switch(f){case "ellipsis":g="&#x2026;";h="disabled";break;case "first":g=n.sFirst;h=f+(0<m?"":" disabled");break;case "previous":g=n.sPrevious;h=f+(0<m?"":" disabled");break;case "next":g=n.sNext;h=f+(m<r-1?"":" disabled");break;case "last":g=n.sLast;h=f+(m<r-1?"":" disabled");break;default:g=f+1,h=m===f?"active":""}if(g){var p=
a("<li>",{"class":x.sPageButton+" "+h,id:0===v&&"string"===typeof f?b.sTableId+"_"+f:null}).append(a("<a>",{href:"#","aria-controls":b.sTableId,"aria-label":y[f],"data-dt-idx":t,tabindex:b.iTabIndex,"class":"page-link"}).html(g)).appendTo(c);b.oApi._fnBindAction(p,{action:f},l);t++}}}};try{var p=a(l).find(c.activeElement).data("dt-idx")}catch(z){}u(a(l).empty().html('<ul class="pagination"/>').children("ul"),w);p!==e&&a(l).find("[data-dt-idx="+p+"]").focus()};return d});

5
external_js/fontawesome/all.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,750 @@
/**
* MIT License
*
* Copyright (c) 2018 Daniel Compton
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* https://github.com/danielcompton/ip-range-check
*
* Build with: Browserify
*/
var ipRangeCheck;
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
ipRangeCheck = require("ip-range-check");
},{"ip-range-check":2}],2:[function(require,module,exports){
var ipaddr = require("ipaddr.js");
module.exports = check_many_cidrs;
function check_many_cidrs(addr, range) {
if (typeof (range) === "string") {
return check_single_cidr(addr, range)
}
else if (typeof (range) === "object") //list
{
var ip_is_in_range = false;
for (var i = 0; i < range.length; i++) {
if (check_single_cidr(addr, range[i])) {
ip_is_in_range = true;
break;
}
}
return ip_is_in_range;
}
}
function check_single_cidr(addr, cidr) {
try {
var parsed_addr = ipaddr.process(addr);
if (cidr.indexOf('/') === -1) {
var parsed_cidr_as_ip = ipaddr.process(cidr);
if ((parsed_addr.kind() === "ipv6") && (parsed_cidr_as_ip.kind() === "ipv6")){
return (parsed_addr.toNormalizedString() === parsed_cidr_as_ip.toNormalizedString())
}
return (parsed_addr.toString() == parsed_cidr_as_ip.toString())
}
else {
var parsed_range = ipaddr.parseCIDR(cidr);
return parsed_addr.match(parsed_range)
}
}
catch (e) {
return false
}
}
},{"ipaddr.js":3}],3:[function(require,module,exports){
(function() {
var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;
ipaddr = {};
root = this;
if ((typeof module !== "undefined" && module !== null) && module.exports) {
module.exports = ipaddr;
} else {
root['ipaddr'] = ipaddr;
}
matchCIDR = function(first, second, partSize, cidrBits) {
var part, shift;
if (first.length !== second.length) {
throw new Error("ipaddr: cannot match CIDR for objects with different lengths");
}
part = 0;
while (cidrBits > 0) {
shift = partSize - cidrBits;
if (shift < 0) {
shift = 0;
}
if (first[part] >> shift !== second[part] >> shift) {
return false;
}
cidrBits -= partSize;
part += 1;
}
return true;
};
ipaddr.subnetMatch = function(address, rangeList, defaultName) {
var k, len, rangeName, rangeSubnets, subnet;
if (defaultName == null) {
defaultName = 'unicast';
}
for (rangeName in rangeList) {
rangeSubnets = rangeList[rangeName];
if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {
rangeSubnets = [rangeSubnets];
}
for (k = 0, len = rangeSubnets.length; k < len; k++) {
subnet = rangeSubnets[k];
if (address.kind() === subnet[0].kind()) {
if (address.match.apply(address, subnet)) {
return rangeName;
}
}
}
}
return defaultName;
};
ipaddr.IPv4 = (function() {
function IPv4(octets) {
var k, len, octet;
if (octets.length !== 4) {
throw new Error("ipaddr: ipv4 octet count should be 4");
}
for (k = 0, len = octets.length; k < len; k++) {
octet = octets[k];
if (!((0 <= octet && octet <= 255))) {
throw new Error("ipaddr: ipv4 octet should fit in 8 bits");
}
}
this.octets = octets;
}
IPv4.prototype.kind = function() {
return 'ipv4';
};
IPv4.prototype.toString = function() {
return this.octets.join(".");
};
IPv4.prototype.toNormalizedString = function() {
return this.toString();
};
IPv4.prototype.toByteArray = function() {
return this.octets.slice(0);
};
IPv4.prototype.match = function(other, cidrRange) {
var ref;
if (cidrRange === void 0) {
ref = other, other = ref[0], cidrRange = ref[1];
}
if (other.kind() !== 'ipv4') {
throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one");
}
return matchCIDR(this.octets, other.octets, 8, cidrRange);
};
IPv4.prototype.SpecialRanges = {
unspecified: [[new IPv4([0, 0, 0, 0]), 8]],
broadcast: [[new IPv4([255, 255, 255, 255]), 32]],
multicast: [[new IPv4([224, 0, 0, 0]), 4]],
linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],
loopback: [[new IPv4([127, 0, 0, 0]), 8]],
carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],
"private": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],
reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]
};
IPv4.prototype.range = function() {
return ipaddr.subnetMatch(this, this.SpecialRanges);
};
IPv4.prototype.toIPv4MappedAddress = function() {
return ipaddr.IPv6.parse("::ffff:" + (this.toString()));
};
IPv4.prototype.prefixLengthFromSubnetMask = function() {
var cidr, i, k, octet, stop, zeros, zerotable;
zerotable = {
0: 8,
128: 7,
192: 6,
224: 5,
240: 4,
248: 3,
252: 2,
254: 1,
255: 0
};
cidr = 0;
stop = false;
for (i = k = 3; k >= 0; i = k += -1) {
octet = this.octets[i];
if (octet in zerotable) {
zeros = zerotable[octet];
if (stop && zeros !== 0) {
return null;
}
if (zeros !== 8) {
stop = true;
}
cidr += zeros;
} else {
return null;
}
}
return 32 - cidr;
};
return IPv4;
})();
ipv4Part = "(0?\\d+|0x[a-f0-9]+)";
ipv4Regexes = {
fourOctet: new RegExp("^" + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "$", 'i'),
longValue: new RegExp("^" + ipv4Part + "$", 'i')
};
ipaddr.IPv4.parser = function(string) {
var match, parseIntAuto, part, shift, value;
parseIntAuto = function(string) {
if (string[0] === "0" && string[1] !== "x") {
return parseInt(string, 8);
} else {
return parseInt(string);
}
};
if (match = string.match(ipv4Regexes.fourOctet)) {
return (function() {
var k, len, ref, results;
ref = match.slice(1, 6);
results = [];
for (k = 0, len = ref.length; k < len; k++) {
part = ref[k];
results.push(parseIntAuto(part));
}
return results;
})();
} else if (match = string.match(ipv4Regexes.longValue)) {
value = parseIntAuto(match[1]);
if (value > 0xffffffff || value < 0) {
throw new Error("ipaddr: address outside defined range");
}
return ((function() {
var k, results;
results = [];
for (shift = k = 0; k <= 24; shift = k += 8) {
results.push((value >> shift) & 0xff);
}
return results;
})()).reverse();
} else {
return null;
}
};
ipaddr.IPv6 = (function() {
function IPv6(parts, zoneId) {
var i, k, l, len, part, ref;
if (parts.length === 16) {
this.parts = [];
for (i = k = 0; k <= 14; i = k += 2) {
this.parts.push((parts[i] << 8) | parts[i + 1]);
}
} else if (parts.length === 8) {
this.parts = parts;
} else {
throw new Error("ipaddr: ipv6 part count should be 8 or 16");
}
ref = this.parts;
for (l = 0, len = ref.length; l < len; l++) {
part = ref[l];
if (!((0 <= part && part <= 0xffff))) {
throw new Error("ipaddr: ipv6 part should fit in 16 bits");
}
}
if (zoneId) {
this.zoneId = zoneId;
}
}
IPv6.prototype.kind = function() {
return 'ipv6';
};
IPv6.prototype.toString = function() {
return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');
};
IPv6.prototype.toRFC5952String = function() {
var bestMatchIndex, bestMatchLength, match, regex, string;
regex = /((^|:)(0(:|$)){2,})/g;
string = this.toNormalizedString();
bestMatchIndex = 0;
bestMatchLength = -1;
while ((match = regex.exec(string))) {
if (match[0].length > bestMatchLength) {
bestMatchIndex = match.index;
bestMatchLength = match[0].length;
}
}
if (bestMatchLength < 0) {
return string;
}
return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);
};
IPv6.prototype.toByteArray = function() {
var bytes, k, len, part, ref;
bytes = [];
ref = this.parts;
for (k = 0, len = ref.length; k < len; k++) {
part = ref[k];
bytes.push(part >> 8);
bytes.push(part & 0xff);
}
return bytes;
};
IPv6.prototype.toNormalizedString = function() {
var addr, part, suffix;
addr = ((function() {
var k, len, ref, results;
ref = this.parts;
results = [];
for (k = 0, len = ref.length; k < len; k++) {
part = ref[k];
results.push(part.toString(16));
}
return results;
}).call(this)).join(":");
suffix = '';
if (this.zoneId) {
suffix = '%' + this.zoneId;
}
return addr + suffix;
};
IPv6.prototype.toFixedLengthString = function() {
var addr, part, suffix;
addr = ((function() {
var k, len, ref, results;
ref = this.parts;
results = [];
for (k = 0, len = ref.length; k < len; k++) {
part = ref[k];
results.push(part.toString(16).padStart(4, '0'));
}
return results;
}).call(this)).join(":");
suffix = '';
if (this.zoneId) {
suffix = '%' + this.zoneId;
}
return addr + suffix;
};
IPv6.prototype.match = function(other, cidrRange) {
var ref;
if (cidrRange === void 0) {
ref = other, other = ref[0], cidrRange = ref[1];
}
if (other.kind() !== 'ipv6') {
throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one");
}
return matchCIDR(this.parts, other.parts, 16, cidrRange);
};
IPv6.prototype.SpecialRanges = {
unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],
linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],
multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],
loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],
uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],
ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],
rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],
rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],
'6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],
teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],
reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]
};
IPv6.prototype.range = function() {
return ipaddr.subnetMatch(this, this.SpecialRanges);
};
IPv6.prototype.isIPv4MappedAddress = function() {
return this.range() === 'ipv4Mapped';
};
IPv6.prototype.toIPv4Address = function() {
var high, low, ref;
if (!this.isIPv4MappedAddress()) {
throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4");
}
ref = this.parts.slice(-2), high = ref[0], low = ref[1];
return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);
};
IPv6.prototype.prefixLengthFromSubnetMask = function() {
var cidr, i, k, part, stop, zeros, zerotable;
zerotable = {
0: 16,
32768: 15,
49152: 14,
57344: 13,
61440: 12,
63488: 11,
64512: 10,
65024: 9,
65280: 8,
65408: 7,
65472: 6,
65504: 5,
65520: 4,
65528: 3,
65532: 2,
65534: 1,
65535: 0
};
cidr = 0;
stop = false;
for (i = k = 7; k >= 0; i = k += -1) {
part = this.parts[i];
if (part in zerotable) {
zeros = zerotable[part];
if (stop && zeros !== 0) {
return null;
}
if (zeros !== 16) {
stop = true;
}
cidr += zeros;
} else {
return null;
}
}
return 128 - cidr;
};
return IPv6;
})();
ipv6Part = "(?:[0-9a-f]+::?)+";
zoneIndex = "%[0-9a-z]{1,}";
ipv6Regexes = {
zoneIndex: new RegExp(zoneIndex, 'i'),
"native": new RegExp("^(::)?(" + ipv6Part + ")?([0-9a-f]+)?(::)?(" + zoneIndex + ")?$", 'i'),
transitional: new RegExp(("^((?:" + ipv6Part + ")|(?:::)(?:" + ipv6Part + ")?)") + (ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part) + ("(" + zoneIndex + ")?$"), 'i')
};
expandIPv6 = function(string, parts) {
var colonCount, lastColon, part, replacement, replacementCount, zoneId;
if (string.indexOf('::') !== string.lastIndexOf('::')) {
return null;
}
zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];
if (zoneId) {
zoneId = zoneId.substring(1);
string = string.replace(/%.+$/, '');
}
colonCount = 0;
lastColon = -1;
while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {
colonCount++;
}
if (string.substr(0, 2) === '::') {
colonCount--;
}
if (string.substr(-2, 2) === '::') {
colonCount--;
}
if (colonCount > parts) {
return null;
}
replacementCount = parts - colonCount;
replacement = ':';
while (replacementCount--) {
replacement += '0:';
}
string = string.replace('::', replacement);
if (string[0] === ':') {
string = string.slice(1);
}
if (string[string.length - 1] === ':') {
string = string.slice(0, -1);
}
parts = (function() {
var k, len, ref, results;
ref = string.split(":");
results = [];
for (k = 0, len = ref.length; k < len; k++) {
part = ref[k];
results.push(parseInt(part, 16));
}
return results;
})();
return {
parts: parts,
zoneId: zoneId
};
};
ipaddr.IPv6.parser = function(string) {
var addr, k, len, match, octet, octets, zoneId;
if (ipv6Regexes['native'].test(string)) {
return expandIPv6(string, 8);
} else if (match = string.match(ipv6Regexes['transitional'])) {
zoneId = match[6] || '';
addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);
if (addr.parts) {
octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];
for (k = 0, len = octets.length; k < len; k++) {
octet = octets[k];
if (!((0 <= octet && octet <= 255))) {
return null;
}
}
addr.parts.push(octets[0] << 8 | octets[1]);
addr.parts.push(octets[2] << 8 | octets[3]);
return {
parts: addr.parts,
zoneId: addr.zoneId
};
}
}
return null;
};
ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {
return this.parser(string) !== null;
};
ipaddr.IPv4.isValid = function(string) {
var e;
try {
new this(this.parser(string));
return true;
} catch (error1) {
e = error1;
return false;
}
};
ipaddr.IPv4.isValidFourPartDecimal = function(string) {
if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/)) {
return true;
} else {
return false;
}
};
ipaddr.IPv6.isValid = function(string) {
var addr, e;
if (typeof string === "string" && string.indexOf(":") === -1) {
return false;
}
try {
addr = this.parser(string);
new this(addr.parts, addr.zoneId);
return true;
} catch (error1) {
e = error1;
return false;
}
};
ipaddr.IPv4.parse = function(string) {
var parts;
parts = this.parser(string);
if (parts === null) {
throw new Error("ipaddr: string is not formatted like ip address");
}
return new this(parts);
};
ipaddr.IPv6.parse = function(string) {
var addr;
addr = this.parser(string);
if (addr.parts === null) {
throw new Error("ipaddr: string is not formatted like ip address");
}
return new this(addr.parts, addr.zoneId);
};
ipaddr.IPv4.parseCIDR = function(string) {
var maskLength, match, parsed;
if (match = string.match(/^(.+)\/(\d+)$/)) {
maskLength = parseInt(match[2]);
if (maskLength >= 0 && maskLength <= 32) {
parsed = [this.parse(match[1]), maskLength];
Object.defineProperty(parsed, 'toString', {
value: function() {
return this.join('/');
}
});
return parsed;
}
}
throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range");
};
ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {
var filledOctetCount, j, octets;
prefix = parseInt(prefix);
if (prefix < 0 || prefix > 32) {
throw new Error('ipaddr: invalid IPv4 prefix length');
}
octets = [0, 0, 0, 0];
j = 0;
filledOctetCount = Math.floor(prefix / 8);
while (j < filledOctetCount) {
octets[j] = 255;
j++;
}
if (filledOctetCount < 4) {
octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);
}
return new this(octets);
};
ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {
var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;
try {
cidr = this.parseCIDR(string);
ipInterfaceOctets = cidr[0].toByteArray();
subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();
octets = [];
i = 0;
while (i < 4) {
octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);
i++;
}
return new this(octets);
} catch (error1) {
error = error1;
throw new Error('ipaddr: the address does not have IPv4 CIDR format');
}
};
ipaddr.IPv4.networkAddressFromCIDR = function(string) {
var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;
try {
cidr = this.parseCIDR(string);
ipInterfaceOctets = cidr[0].toByteArray();
subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();
octets = [];
i = 0;
while (i < 4) {
octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));
i++;
}
return new this(octets);
} catch (error1) {
error = error1;
throw new Error('ipaddr: the address does not have IPv4 CIDR format');
}
};
ipaddr.IPv6.parseCIDR = function(string) {
var maskLength, match, parsed;
if (match = string.match(/^(.+)\/(\d+)$/)) {
maskLength = parseInt(match[2]);
if (maskLength >= 0 && maskLength <= 128) {
parsed = [this.parse(match[1]), maskLength];
Object.defineProperty(parsed, 'toString', {
value: function() {
return this.join('/');
}
});
return parsed;
}
}
throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range");
};
ipaddr.isValid = function(string) {
return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);
};
ipaddr.parse = function(string) {
if (ipaddr.IPv6.isValid(string)) {
return ipaddr.IPv6.parse(string);
} else if (ipaddr.IPv4.isValid(string)) {
return ipaddr.IPv4.parse(string);
} else {
throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format");
}
};
ipaddr.parseCIDR = function(string) {
var e;
try {
return ipaddr.IPv6.parseCIDR(string);
} catch (error1) {
e = error1;
try {
return ipaddr.IPv4.parseCIDR(string);
} catch (error1) {
e = error1;
throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format");
}
}
};
ipaddr.fromByteArray = function(bytes) {
var length;
length = bytes.length;
if (length === 4) {
return new ipaddr.IPv4(bytes);
} else if (length === 16) {
return new ipaddr.IPv6(bytes);
} else {
throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address");
}
};
ipaddr.process = function(string) {
var addr;
addr = this.parse(string);
if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {
return addr.toIPv4Address();
} else {
return addr;
}
};
}).call(this);
},{}]},{},[1]);

File diff suppressed because one or more lines are too long

2
external_js/jquery-3.4.1.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,164 +0,0 @@
/*!
DataTables 1.10.16
©2008-2017 SpryMedia Ltd - datatables.net/license
*/
(function(h){"function"===typeof define&&define.amd?define(["jquery"],function(E){return h(E,window,document)}):"object"===typeof exports?module.exports=function(E,G){E||(E=window);G||(G="undefined"!==typeof window?require("jquery"):require("jquery")(E));return h(G,E,E.document)}:h(jQuery,window,document)})(function(h,E,G,k){function X(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" "))c=e.replace(b[0],b[2].toLowerCase()),
d[c]=e,"o"===b[1]&&X(a[e])});a._hungarianMap=d}function I(a,b,c){a._hungarianMap||X(a);var d;h.each(b,function(e){d=a._hungarianMap[e];if(d!==k&&(c||b[d]===k))"o"===d.charAt(0)?(b[d]||(b[d]={}),h.extend(!0,b[d],b[e]),I(a[d],b[d],c)):b[d]=b[e]})}function Ca(a){var b=m.defaults.oLanguage,c=a.sZeroRecords;!a.sEmptyTable&&(c&&"No data available in table"===b.sEmptyTable)&&F(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&(c&&"Loading..."===b.sLoadingRecords)&&F(a,a,"sZeroRecords","sLoadingRecords");
a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&cb(a)}function db(a){A(a,"ordering","bSort");A(a,"orderMulti","bSortMulti");A(a,"orderClasses","bSortClasses");A(a,"orderCellsTop","bSortCellsTop");A(a,"order","aaSorting");A(a,"orderFixed","aaSortingFixed");A(a,"paging","bPaginate");A(a,"pagingType","sPaginationType");A(a,"pageLength","iDisplayLength");A(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":"");"boolean"===typeof a.scrollX&&(a.scrollX=
a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&I(m.models.oSearch,a[b])}function eb(a){A(a,"orderable","bSortable");A(a,"orderData","aDataSort");A(a,"orderSequence","asSorting");A(a,"orderDataType","sortDataType");var b=a.aDataSort;"number"===typeof b&&!h.isArray(b)&&(a.aDataSort=[b])}function fb(a){if(!m.__browser){var b={};m.__browser=b;var c=h("<div/>").css({position:"fixed",top:0,left:-1*h(E).scrollLeft(),height:1,width:1,overflow:"hidden"}).append(h("<div/>").css({position:"absolute",
top:1,left:1,width:100,overflow:"scroll"}).append(h("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,m.__browser);a.oScroll.iBarWidth=m.__browser.barWidth}function gb(a,b,c,d,e,f){var g,j=!1;c!==k&&(g=c,j=!0);for(;d!==
e;)a.hasOwnProperty(d)&&(g=j?b(g,a[d],d,a):a[d],j=!0,d+=f);return g}function Da(a,b){var c=m.defaults.column,d=a.aoColumns.length,c=h.extend({},m.models.oColumn,c,{nTh:b?b:G.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},m.models.oSearch,c[d]);ja(a,d,h(b).data())}function ja(a,b,c){var b=a.aoColumns[b],d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=
e.attr("width")||null;var f=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==k&&null!==c&&(eb(c),I(m.defaults.column,c),c.mDataProp!==k&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),h.extend(b,c),F(b,c,"sWidth","sWidthOrig"),c.iDataSort!==k&&(b.aDataSort=[c.iDataSort]),F(b,c,"aDataSort"));var g=b.mData,j=Q(g),i=b.mRender?Q(b.mRender):null,c=function(a){return"string"===
typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=h.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=j(a,b,k,c);return i&&b?i(d,b,a,c):d};b.fnSetData=function(a,b,c){return R(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=
d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function Y(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ea(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;(""!==b.sY||""!==b.sX)&&ka(a);r(a,null,"column-sizing",[a])}function Z(a,b){var c=la(a,"bVisible");return"number"===typeof c[b]?c[b]:null}function $(a,b){var c=
la(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null}function aa(a){var b=0;h.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==h(d.nTh).css("display")&&b++});return b}function la(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Fa(a){var b=a.aoColumns,c=a.aoData,d=m.ext.type.detect,e,f,g,j,i,h,l,q,t;e=0;for(f=b.length;e<f;e++)if(l=b[e],t=[],!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){g=0;for(j=d.length;g<j;g++){i=0;for(h=c.length;i<h;i++){t[i]===
k&&(t[i]=B(a,i,e,"type"));q=d[g](t[i],a);if(!q&&g!==d.length-1)break;if("html"===q)break}if(q){l.sType=q;break}}l.sType||(l.sType="string")}}function hb(a,b,c,d){var e,f,g,j,i,n,l=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){n=b[e];var q=n.targets!==k?n.targets:n.aTargets;h.isArray(q)||(q=[q]);f=0;for(g=q.length;f<g;f++)if("number"===typeof q[f]&&0<=q[f]){for(;l.length<=q[f];)Da(a);d(q[f],n)}else if("number"===typeof q[f]&&0>q[f])d(l.length+q[f],n);else if("string"===typeof q[f]){j=0;for(i=l.length;j<
i;j++)("_all"==q[f]||h(l[j].nTh).hasClass(q[f]))&&d(j,n)}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function M(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,{},m.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,j=0,i=g.length;j<i;j++)g[j].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==k&&(a.aIds[b]=f);(c||!a.oFeatures.bDeferRender)&&Ga(a,e,c,d);return e}function ma(a,b){var c;b instanceof h||(b=h(b));return b.map(function(b,e){c=Ha(a,e);return M(a,
c.data,e,c.cells)})}function B(a,b,c,d){var e=a.iDraw,f=a.aoColumns[c],g=a.aoData[b]._aData,j=f.sDefaultContent,i=f.fnGetData(g,d,{settings:a,row:b,col:c});if(i===k)return a.iDrawError!=e&&null===j&&(J(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),j;if((i===g||null===i)&&null!==j&&d!==k)i=j;else if("function"===typeof i)return i.call(g);return null===i&&"display"==d?"":i}function ib(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,
d,{settings:a,row:b,col:c})}function Ia(a){return h.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\\./g,".")})}function Q(a){if(h.isPlainObject(a)){var b={};h.each(a,function(a,c){c&&(b[a]=Q(c))});return function(a,c,f,g){var j=b[c]||b._;return j!==k?j(a,c,f,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,f,g){return a(b,c,f,g)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var c=function(a,
b,f){var g,j;if(""!==f){j=Ia(f);for(var i=0,n=j.length;i<n;i++){f=j[i].match(ba);g=j[i].match(U);if(f){j[i]=j[i].replace(ba,"");""!==j[i]&&(a=a[j[i]]);g=[];j.splice(0,i+1);j=j.join(".");if(h.isArray(a)){i=0;for(n=a.length;i<n;i++)g.push(c(a[i],b,j))}a=f[0].substring(1,f[0].length-1);a=""===a?g:g.join(a);break}else if(g){j[i]=j[i].replace(U,"");a=a[j[i]]();continue}if(null===a||a[j[i]]===k)return k;a=a[j[i]]}}return a};return function(b,e){return c(b,e,a)}}return function(b){return b[a]}}function R(a){if(h.isPlainObject(a))return R(a._);
if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var b=function(a,d,e){var e=Ia(e),f;f=e[e.length-1];for(var g,j,i=0,n=e.length-1;i<n;i++){g=e[i].match(ba);j=e[i].match(U);if(g){e[i]=e[i].replace(ba,"");a[e[i]]=[];f=e.slice();f.splice(0,i+1);g=f.join(".");if(h.isArray(d)){j=0;for(n=d.length;j<n;j++)f={},b(f,d[j],g),a[e[i]].push(f)}else a[e[i]]=d;return}j&&(e[i]=e[i].replace(U,
""),a=a[e[i]](d));if(null===a[e[i]]||a[e[i]]===k)a[e[i]]={};a=a[e[i]]}if(f.match(U))a[f.replace(U,"")](d);else a[f.replace(ba,"")]=d};return function(c,d){return b(c,d,a)}}return function(b,d){b[a]=d}}function Ja(a){return D(a.aoData,"_aData")}function na(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function oa(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===k&&a.splice(d,1)}function ca(a,b,c,d){var e=a.aoData[b],f,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);
c.innerHTML=B(a,b,d,"display")};if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=Ha(a,e,d,d===k?k:e._aData).data;else{var j=e.anCells;if(j)if(d!==k)g(j[d],d);else{c=0;for(f=j.length;c<f;c++)g(j[c],c)}}e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==k)g[d].sType=null;else{c=0;for(f=g.length;c<f;c++)g[c].sType=null;Ka(a,e)}}function Ha(a,b,c,d){var e=[],f=b.firstChild,g,j,i=0,n,l=a.aoColumns,q=a._rowReadObject,d=d!==k?d:q?{}:[],t=function(a,b){if("string"===typeof a){var c=a.indexOf("@");
-1!==c&&(c=a.substring(c+1),R(a)(d,b.getAttribute(c)))}},m=function(a){if(c===k||c===i)j=l[i],n=h.trim(a.innerHTML),j&&j._bAttrSrc?(R(j.mData._)(d,n),t(j.mData.sort,a),t(j.mData.type,a),t(j.mData.filter,a)):q?(j._setter||(j._setter=R(j.mData)),j._setter(d,n)):d[i]=n;i++};if(f)for(;f;){g=f.nodeName.toUpperCase();if("TD"==g||"TH"==g)m(f),e.push(f);f=f.nextSibling}else{e=b.anCells;f=0;for(g=e.length;f<g;f++)m(e[f])}if(b=b.firstChild?b:b.nTr)(b=b.getAttribute("id"))&&R(a.rowId)(d,b);return{data:d,cells:e}}
function Ga(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],j,i,n,l,q;if(null===e.nTr){j=c||G.createElement("tr");e.nTr=j;e.anCells=g;j._DT_RowIndex=b;Ka(a,e);l=0;for(q=a.aoColumns.length;l<q;l++){n=a.aoColumns[l];i=c?d[l]:G.createElement(n.sCellType);i._DT_CellIndex={row:b,column:l};g.push(i);if((!c||n.mRender||n.mData!==l)&&(!h.isPlainObject(n.mData)||n.mData._!==l+".display"))i.innerHTML=B(a,b,l,"display");n.sClass&&(i.className+=" "+n.sClass);n.bVisible&&!c?j.appendChild(i):!n.bVisible&&c&&i.parentNode.removeChild(i);
n.fnCreatedCell&&n.fnCreatedCell.call(a.oInstance,i,B(a,b,l),f,b,l)}r(a,"aoRowCreatedCallback",null,[j,f,b])}e.nTr.setAttribute("role","row")}function Ka(a,b){var c=b.nTr,d=b._aData;if(c){var e=a.rowIdFn(d);e&&(c.id=e);d.DT_RowClass&&(e=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?qa(b.__rowc.concat(e)):e,h(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&h(c).attr(d.DT_RowAttr);d.DT_RowData&&h(c).data(d.DT_RowData)}}function jb(a){var b,c,d,e,f,g=a.nTHead,j=a.nTFoot,i=0===
h("th, td",g).length,n=a.oClasses,l=a.aoColumns;i&&(e=h("<tr/>").appendTo(g));b=0;for(c=l.length;b<c;b++)f=l[b],d=h(f.nTh).addClass(f.sClass),i&&d.appendTo(e),a.oFeatures.bSort&&(d.addClass(f.sSortingClass),!1!==f.bSortable&&(d.attr("tabindex",a.iTabIndex).attr("aria-controls",a.sTableId),La(a,f.nTh,b))),f.sTitle!=d[0].innerHTML&&d.html(f.sTitle),Ma(a,"header")(a,d,f,n);i&&da(a.aoHeader,g);h(g).find(">tr").attr("role","row");h(g).find(">tr>th, >tr>td").addClass(n.sHeaderTH);h(j).find(">tr>th, >tr>td").addClass(n.sFooterTH);
if(null!==j){a=a.aoFooter[0];b=0;for(c=a.length;b<c;b++)f=l[b],f.nTf=a[b].cell,f.sClass&&h(f.nTf).addClass(f.sClass)}}function ea(a,b,c){var d,e,f,g=[],j=[],i=a.aoColumns.length,n;if(b){c===k&&(c=!1);d=0;for(e=b.length;d<e;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=i-1;0<=f;f--)!a.aoColumns[f].bVisible&&!c&&g[d].splice(f,1);j.push([])}d=0;for(e=g.length;d<e;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f++)if(n=i=1,j[d][f]===k){a.appendChild(g[d][f].cell);
for(j[d][f]=1;g[d+i]!==k&&g[d][f].cell==g[d+i][f].cell;)j[d+i][f]=1,i++;for(;g[d][f+n]!==k&&g[d][f].cell==g[d][f+n].cell;){for(c=0;c<i;c++)j[d+c][f+n]=1;n++}h(g[d][f].cell).attr("rowspan",i).attr("colspan",n)}}}}function N(a){var b=r(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,b))C(a,!1);else{var b=[],c=0,d=a.asStripeClasses,e=d.length,f=a.oLanguage,g=a.iInitDisplayStart,j="ssp"==y(a),i=a.aiDisplay;a.bDrawing=!0;g!==k&&-1!==g&&(a._iDisplayStart=j?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=
-1);var g=a._iDisplayStart,n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,C(a,!1);else if(j){if(!a.bDestroying&&!kb(a))return}else a.iDraw++;if(0!==i.length){f=j?a.aoData.length:n;for(j=j?0:g;j<f;j++){var l=i[j],q=a.aoData[l];null===q.nTr&&Ga(a,l);l=q.nTr;if(0!==e){var t=d[c%e];q._sRowStripe!=t&&(h(l).removeClass(q._sRowStripe).addClass(t),q._sRowStripe=t)}r(a,"aoRowCallback",null,[l,q._aData,c,j]);b.push(l);c++}}else c=f.sZeroRecords,1==a.iDraw&&"ajax"==y(a)?c=f.sLoadingRecords:
f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=h("<tr/>",{"class":e?d[0]:""}).append(h("<td />",{valign:"top",colSpan:aa(a),"class":a.oClasses.sRowEmpty}).html(c))[0];r(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ja(a),g,n,i]);r(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Ja(a),g,n,i]);d=h(a.nTBody);d.children().detach();d.append(h(b));r(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function S(a,b){var c=a.oFeatures,d=c.bFilter;
c.bSort&&lb(a);d?fa(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;N(a);a._drawHold=!1}function mb(a){var b=a.oClasses,c=h(a.nTable),c=h("<div/>").insertBefore(c),d=a.oFeatures,e=h("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,n,l,q,k=0;k<f.length;k++){g=null;j=f[k];if("<"==j){i=h("<div/>")[0];
n=f[k+1];if("'"==n||'"'==n){l="";for(q=2;f[k+q]!=n;)l+=f[k+q],q++;"H"==l?l=b.sJUIHeader:"F"==l&&(l=b.sJUIFooter);-1!=l.indexOf(".")?(n=l.split("."),i.id=n[0].substr(1,n[0].length-1),i.className=n[1]):"#"==l.charAt(0)?i.id=l.substr(1,l.length-1):i.className=l;k+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==j&&d.bPaginate&&d.bLengthChange)g=nb(a);else if("f"==j&&d.bFilter)g=ob(a);else if("r"==j&&d.bProcessing)g=pb(a);else if("t"==j)g=qb(a);else if("i"==j&&d.bInfo)g=rb(a);else if("p"==
j&&d.bPaginate)g=sb(a);else if(0!==m.ext.feature.length){i=m.ext.feature;q=0;for(n=i.length;q<n;q++)if(j==i[q].cFeature){g=i[q].fnInit(a);break}}g&&(i=a.aanFeatures,i[j]||(i[j]=[]),i[j].push(g),e.append(g))}c.replaceWith(e);a.nHolding=null}function da(a,b){var c=h(b).children("tr"),d,e,f,g,j,i,n,l,q,k;a.splice(0,a.length);f=0;for(i=c.length;f<i;f++)a.push([]);f=0;for(i=c.length;f<i;f++){d=c[f];for(e=d.firstChild;e;){if("TD"==e.nodeName.toUpperCase()||"TH"==e.nodeName.toUpperCase()){l=1*e.getAttribute("colspan");
q=1*e.getAttribute("rowspan");l=!l||0===l||1===l?1:l;q=!q||0===q||1===q?1:q;g=0;for(j=a[f];j[g];)g++;n=g;k=1===l?!0:!1;for(j=0;j<l;j++)for(g=0;g<q;g++)a[f+g][n+j]={cell:e,unique:k},a[f+g].nTr=d}e=e.nextSibling}}}function ra(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],da(c,b)));for(var b=0,e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function sa(a,b,c){r(a,"aoServerParams","serverParams",[b]);if(b&&h.isArray(b)){var d={},
e=/(.*?)\[\]$/;h.each(b,function(a,b){var c=b.name.match(e);c?(c=c[0],d[c]||(d[c]=[]),d[c].push(b.value)):d[b.name]=b.value});b=d}var f,g=a.ajax,j=a.oInstance,i=function(b){r(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(h.isPlainObject(g)&&g.data){f=g.data;var n=h.isFunction(f)?f(b,a):f,b=h.isFunction(f)&&n?n:h.extend(!0,b,n);delete g.data}n={data:b,success:function(b){var c=b.error||b.sError;c&&J(a,0,c);a.json=b;i(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c){var d=r(a,null,"xhr",
[a,null,a.jqXHR]);-1===h.inArray(!0,d)&&("parsererror"==c?J(a,0,"Invalid JSON response",1):4===b.readyState&&J(a,0,"Ajax error",7));C(a,!1)}};a.oAjaxData=b;r(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(j,a.sAjaxSource,h.map(b,function(a,b){return{name:b,value:a}}),i,a):a.sAjaxSource||"string"===typeof g?a.jqXHR=h.ajax(h.extend(n,{url:g||a.sAjaxSource})):h.isFunction(g)?a.jqXHR=g.call(j,b,i,a):(a.jqXHR=h.ajax(h.extend(n,g)),g.data=f)}function kb(a){return a.bAjaxDataGet?(a.iDraw++,C(a,
!0),sa(a,tb(a),function(b){ub(a,b)}),!1):!0}function tb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g,j=[],i,n,l,k=V(a);g=a._iDisplayStart;i=!1!==d.bPaginate?a._iDisplayLength:-1;var t=function(a,b){j.push({name:a,value:b})};t("sEcho",a.iDraw);t("iColumns",c);t("sColumns",D(b,"sName").join(","));t("iDisplayStart",g);t("iDisplayLength",i);var pa={draw:a.iDraw,columns:[],order:[],start:g,length:i,search:{value:e.sSearch,regex:e.bRegex}};for(g=0;g<c;g++)n=b[g],
l=f[g],i="function"==typeof n.mData?"function":n.mData,pa.columns.push({data:i,name:n.sName,searchable:n.bSearchable,orderable:n.bSortable,search:{value:l.sSearch,regex:l.bRegex}}),t("mDataProp_"+g,i),d.bFilter&&(t("sSearch_"+g,l.sSearch),t("bRegex_"+g,l.bRegex),t("bSearchable_"+g,n.bSearchable)),d.bSort&&t("bSortable_"+g,n.bSortable);d.bFilter&&(t("sSearch",e.sSearch),t("bRegex",e.bRegex));d.bSort&&(h.each(k,function(a,b){pa.order.push({column:b.col,dir:b.dir});t("iSortCol_"+a,b.col);t("sSortDir_"+
a,b.dir)}),t("iSortingCols",k.length));b=m.ext.legacy.ajax;return null===b?a.sAjaxSource?j:pa:b?j:pa}function ub(a,b){var c=ta(a,b),d=b.sEcho!==k?b.sEcho:b.draw,e=b.iTotalRecords!==k?b.iTotalRecords:b.recordsTotal,f=b.iTotalDisplayRecords!==k?b.iTotalDisplayRecords:b.recordsFiltered;if(d){if(1*d<a.iDraw)return;a.iDraw=1*d}na(a);a._iRecordsTotal=parseInt(e,10);a._iRecordsDisplay=parseInt(f,10);d=0;for(e=c.length;d<e;d++)M(a,c[d]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;N(a);a._bInitComplete||
ua(a,b);a.bAjaxDataGet=!0;C(a,!1)}function ta(a,b){var c=h.isPlainObject(a.ajax)&&a.ajax.dataSrc!==k?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===c?b.aaData||b[c]:""!==c?Q(c)(b):b}function ob(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,f=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',j=d.sSearch,j=j.match(/_INPUT_/)?j.replace("_INPUT_",g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),f=function(){var b=!this.value?
"":this.value;b!=e.sSearch&&(fa(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,N(a))},g=null!==a.searchDelay?a.searchDelay:"ssp"===y(a)?400:0,i=h("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",g?Na(f,g):f).on("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);h(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{i[0]!==G.activeElement&&i.val(e.sSearch)}catch(d){}});
return b[0]}function fa(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};Fa(a);if("ssp"!=y(a)){vb(a,b.sSearch,c,b.bEscapeRegex!==k?!b.bEscapeRegex:b.bRegex,b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<e.length;b++)wb(a,e[b].sSearch,b,e[b].bEscapeRegex!==k?!e[b].bEscapeRegex:e[b].bRegex,e[b].bSmart,e[b].bCaseInsensitive);xb(a)}else f(b);a.bFiltered=!0;r(a,null,"search",[a])}function xb(a){for(var b=
m.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<g;f++){for(var j=[],i=0,n=c.length;i<n;i++)e=c[i],d=a.aoData[e],b[f](a,d._aFilterData,e,d._aData,i)&&j.push(e);c.length=0;h.merge(c,j)}}function wb(a,b,c,d,e,f){if(""!==b){for(var g=[],j=a.aiDisplay,d=Oa(b,d,e,f),e=0;e<j.length;e++)b=a.aoData[j[e]]._aFilterData[c],d.test(b)&&g.push(j[e]);a.aiDisplay=g}}function vb(a,b,c,d,e,f){var d=Oa(b,d,e,f),f=a.oPreviousSearch.sSearch,g=a.aiDisplayMaster,j,e=[];0!==m.ext.search.length&&(c=!0);j=yb(a);if(0>=b.length)a.aiDisplay=
g.slice();else{if(j||c||f.length>b.length||0!==b.indexOf(f)||a.bSorted)a.aiDisplay=g.slice();b=a.aiDisplay;for(c=0;c<b.length;c++)d.test(a.aoData[b[c]]._sFilterRow)&&e.push(b[c]);a.aiDisplay=e}}function Oa(a,b,c,d){a=b?a:Pa(a);c&&(a="^(?=.*?"+h.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0))var b=a.match(/^"(.*)"$/),a=b?b[1]:a;return a.replace('"',"")}).join(")(?=.*?")+").*$");return RegExp(a,d?"i":"")}function yb(a){var b=a.aoColumns,c,d,e,f,g,j,i,h,l=m.ext.type.search;c=!1;
d=0;for(f=a.aoData.length;d<f;d++)if(h=a.aoData[d],!h._aFilterData){j=[];e=0;for(g=b.length;e<g;e++)c=b[e],c.bSearchable?(i=B(a,d,e,"filter"),l[c.sType]&&(i=l[c.sType](i)),null===i&&(i=""),"string"!==typeof i&&i.toString&&(i=i.toString())):i="",i.indexOf&&-1!==i.indexOf("&")&&(va.innerHTML=i,i=Wb?va.textContent:va.innerText),i.replace&&(i=i.replace(/[\r\n]/g,"")),j.push(i);h._aFilterData=j;h._sFilterRow=j.join(" ");c=!0}return c}function zb(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,
caseInsensitive:a.bCaseInsensitive}}function Ab(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function rb(a){var b=a.sTableId,c=a.aanFeatures.i,d=h("<div/>",{"class":a.oClasses.sInfo,id:!c?b+"_info":null});c||(a.aoDrawCallback.push({fn:Bb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),h(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Bb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+
1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),j=g?c.sInfo:c.sInfoEmpty;g!==f&&(j+=" "+c.sInfoFiltered);j+=c.sInfoPostFix;j=Cb(a,j);c=c.fnInfoCallback;null!==c&&(j=c.call(a.oInstance,a,d,e,f,g,j));h(b).html(j)}}function Cb(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,
f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/e)))}function ga(a){var b,c,d=a.iInitDisplayStart,e=a.aoColumns,f;c=a.oFeatures;var g=a.bDeferLoading;if(a.bInitialised){mb(a);jb(a);ea(a,a.aoHeader);ea(a,a.aoFooter);C(a,!0);c.bAutoWidth&&Ea(a);b=0;for(c=e.length;b<c;b++)f=e[b],f.sWidth&&(f.nTh.style.width=v(f.sWidth));r(a,null,"preInit",[a]);S(a);e=y(a);if("ssp"!=e||g)"ajax"==e?sa(a,[],function(c){var f=ta(a,c);for(b=0;b<f.length;b++)M(a,f[b]);a.iInitDisplayStart=
d;S(a);C(a,!1);ua(a,c)},a):(C(a,!1),ua(a))}else setTimeout(function(){ga(a)},200)}function ua(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&Y(a);r(a,null,"plugin-init",[a,b]);r(a,"aoInitComplete","init",[a,b])}function Qa(a,b){var c=parseInt(b,10);a._iDisplayLength=c;Ra(a);r(a,null,"length",[a,c])}function nb(a){for(var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=h.isArray(d[0]),f=e?d[0]:d,d=e?d[1]:d,e=h("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect}),g=0,j=f.length;g<j;g++)e[0][g]=
new Option("number"===typeof d[g]?a.fnFormatNumber(d[g]):d[g],f[g]);var i=h("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(i[0].id=c+"_length");i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));h("select",i).val(a._iDisplayLength).on("change.DT",function(){Qa(a,h(this).val());N(a)});h(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&h("select",i).val(d)});return i[0]}function sb(a){var b=a.sPaginationType,c=m.ext.pager[b],d="function"===typeof c,e=function(a){N(a)},
b=h("<div/>").addClass(a.oClasses.sPaging+b)[0],f=a.aanFeatures;d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,i=a._iDisplayLength,h=a.fnRecordsDisplay(),l=-1===i,b=l?0:Math.ceil(b/i),i=l?1:Math.ceil(h/i),h=c(b,i),k,l=0;for(k=f.p.length;l<k;l++)Ma(a,"pageButton")(a,f.p[l],l,h,b,i)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Sa(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===
e?d=0:"number"===typeof b?(d=b*e,d>f&&(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:J(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(r(a,null,"page",[a]),c&&N(a));return b}function pb(a){return h("<div/>",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function C(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",
b?"block":"none");r(a,null,"processing",[a,b])}function qb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),j=g.length?g[0]._captionSide:null,i=h(b[0].cloneNode(!1)),n=h(b[0].cloneNode(!1)),l=b.children("tfoot");l.length||(l=null);i=h("<div/>",{"class":f.sScrollWrapper}).append(h("<div/>",{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?!d?null:v(d):"100%"}).append(h("<div/>",
{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(i.removeAttr("id").css("margin-left",0).append("top"===j?g:null).append(b.children("thead"))))).append(h("<div/>",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:!d?null:v(d)}).append(b));l&&i.append(h("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?!d?null:v(d):"100%"}).append(h("<div/>",{"class":f.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",
0).append("bottom"===j?g:null).append(b.children("tfoot")))));var b=i.children(),k=b[0],f=b[1],t=l?b[2]:null;if(d)h(f).on("scroll.DT",function(){var a=this.scrollLeft;k.scrollLeft=a;l&&(t.scrollLeft=a)});h(f).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=k;a.nScrollBody=f;a.nScrollFoot=t;a.aoDrawCallback.push({fn:ka,sName:"scrolling"});return i[0]}function ka(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,b=b.iBarWidth,f=h(a.nScrollHead),g=f[0].style,j=f.children("div"),i=j[0].style,n=j.children("table"),
j=a.nScrollBody,l=h(j),q=j.style,t=h(a.nScrollFoot).children("div"),m=t.children("table"),o=h(a.nTHead),p=h(a.nTable),s=p[0],r=s.style,u=a.nTFoot?h(a.nTFoot):null,x=a.oBrowser,T=x.bScrollOversize,Xb=D(a.aoColumns,"nTh"),O,K,P,w,Ta=[],y=[],z=[],A=[],B,C=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};K=j.scrollHeight>j.clientHeight;if(a.scrollBarVis!==K&&a.scrollBarVis!==k)a.scrollBarVis=K,Y(a);else{a.scrollBarVis=K;p.children("thead, tfoot").remove();
u&&(P=u.clone().prependTo(p),O=u.find("tr"),P=P.find("tr"));w=o.clone().prependTo(p);o=o.find("tr");K=w.find("tr");w.find("th, td").removeAttr("tabindex");c||(q.width="100%",f[0].style.width="100%");h.each(ra(a,w),function(b,c){B=Z(a,b);c.style.width=a.aoColumns[B].sWidth});u&&H(function(a){a.style.width=""},P);f=p.outerWidth();if(""===c){r.width="100%";if(T&&(p.find("tbody").height()>j.offsetHeight||"scroll"==l.css("overflow-y")))r.width=v(p.outerWidth()-b);f=p.outerWidth()}else""!==d&&(r.width=
v(d),f=p.outerWidth());H(C,K);H(function(a){z.push(a.innerHTML);Ta.push(v(h(a).css("width")))},K);H(function(a,b){if(h.inArray(a,Xb)!==-1)a.style.width=Ta[b]},o);h(K).height(0);u&&(H(C,P),H(function(a){A.push(a.innerHTML);y.push(v(h(a).css("width")))},P),H(function(a,b){a.style.width=y[b]},O),h(P).height(0));H(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+z[b]+"</div>";a.style.width=Ta[b]},K);u&&H(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+
A[b]+"</div>";a.style.width=y[b]},P);if(p.outerWidth()<f){O=j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")?f+b:f;if(T&&(j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")))r.width=v(O-b);(""===c||""!==d)&&J(a,1,"Possible column misalignment",6)}else O="100%";q.width=v(O);g.width=v(O);u&&(a.nScrollFoot.style.width=v(O));!e&&T&&(q.height=v(s.offsetHeight+b));c=p.outerWidth();n[0].style.width=v(c);i.width=v(c);d=p.height()>j.clientHeight||"scroll"==l.css("overflow-y");e="padding"+
(x.bScrollbarLeft?"Left":"Right");i[e]=d?b+"px":"0px";u&&(m[0].style.width=v(c),t[0].style.width=v(c),t[0].style[e]=d?b+"px":"0px");p.children("colgroup").insertBefore(p.children("thead"));l.scroll();if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}}function H(a,b,c){for(var d=0,e=0,f=b.length,g,j;e<f;){g=b[e].firstChild;for(j=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,j,d):a(g,d),d++),g=g.nextSibling,j=c?j.nextSibling:null;e++}}function Ea(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,
e=d.sY,f=d.sX,g=d.sXInner,j=c.length,i=la(a,"bVisible"),n=h("th",a.nTHead),l=b.getAttribute("width"),k=b.parentNode,t=!1,m,o,p=a.oBrowser,d=p.bScrollOversize;(m=b.style.width)&&-1!==m.indexOf("%")&&(l=m);for(m=0;m<i.length;m++)o=c[i[m]],null!==o.sWidth&&(o.sWidth=Db(o.sWidthOrig,k),t=!0);if(d||!t&&!f&&!e&&j==aa(a)&&j==n.length)for(m=0;m<j;m++)i=Z(a,m),null!==i&&(c[i].sWidth=v(n.eq(m).width()));else{j=h(b).clone().css("visibility","hidden").removeAttr("id");j.find("tbody tr").remove();var s=h("<tr/>").appendTo(j.find("tbody"));
j.find("thead, tfoot").remove();j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());j.find("tfoot th, tfoot td").css("width","");n=ra(a,j.find("thead")[0]);for(m=0;m<i.length;m++)o=c[i[m]],n[m].style.width=null!==o.sWidthOrig&&""!==o.sWidthOrig?v(o.sWidthOrig):"",o.sWidthOrig&&f&&h(n[m]).append(h("<div/>").css({width:o.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(m=0;m<i.length;m++)t=i[m],o=c[t],h(Eb(a,t)).clone(!1).append(o.sContentPadding).appendTo(s);h("[name]",
j).removeAttr("name");o=h("<div/>").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(j).appendTo(k);f&&g?j.width(g):f?(j.css("width","auto"),j.removeAttr("width"),j.width()<k.clientWidth&&l&&j.width(k.clientWidth)):e?j.width(k.clientWidth):l&&j.width(l);for(m=e=0;m<i.length;m++)k=h(n[m]),g=k.outerWidth()-k.width(),k=p.bBounding?Math.ceil(n[m].getBoundingClientRect().width):k.outerWidth(),e+=k,c[i[m]].sWidth=v(k-g);b.style.width=v(e);o.remove()}l&&(b.style.width=
v(l));if((l||f)&&!a._reszEvt)b=function(){h(E).on("resize.DT-"+a.sInstance,Na(function(){Y(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0}function Db(a,b){if(!a)return 0;var c=h("<div/>").css("width",v(a)).appendTo(b||G.body),d=c[0].offsetWidth;c.remove();return d}function Eb(a,b){var c=Fb(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?h("<td/>").html(B(a,c,b,"display"))[0]:d.anCells[b]}function Fb(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=B(a,f,b,"display")+"",c=c.replace(Yb,
""),c=c.replace(/&nbsp;/g," "),c.length>d&&(d=c.length,e=f);return e}function v(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function V(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h.isPlainObject(b);var n=[];f=function(a){a.length&&!h.isArray(a[0])?n.push(a):h.merge(n,a)};h.isArray(b)&&f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;a<n.length;a++){i=n[a][0];f=e[i].aDataSort;b=0;for(c=f.length;b<c;b++)g=f[b],j=e[g].sType||
"string",n[a]._idx===k&&(n[a]._idx=h.inArray(n[a][1],e[g].asSorting)),d.push({src:i,col:g,dir:n[a][1],index:n[a]._idx,type:j,formatter:m.ext.type.order[j+"-pre"]})}return d}function lb(a){var b,c,d=[],e=m.ext.type.order,f=a.aoData,g=0,j,i=a.aiDisplayMaster,h;Fa(a);h=V(a);b=0;for(c=h.length;b<c;b++)j=h[b],j.formatter&&g++,Gb(a,j.col);if("ssp"!=y(a)&&0!==h.length){b=0;for(c=i.length;b<c;b++)d[i[b]]=b;g===h.length?i.sort(function(a,b){var c,e,g,j,i=h.length,k=f[a]._aSortData,m=f[b]._aSortData;for(g=
0;g<i;g++)if(j=h[g],c=k[j.col],e=m[j.col],c=c<e?-1:c>e?1:0,0!==c)return"asc"===j.dir?c:-c;c=d[a];e=d[b];return c<e?-1:c>e?1:0}):i.sort(function(a,b){var c,g,j,i,k=h.length,m=f[a]._aSortData,o=f[b]._aSortData;for(j=0;j<k;j++)if(i=h[j],c=m[i.col],g=o[i.col],i=e[i.type+"-"+i.dir]||e["string-"+i.dir],c=i(c,g),0!==c)return c;c=d[a];g=d[b];return c<g?-1:c>g?1:0})}a.bSorted=!0}function Hb(a){for(var b,c,d=a.aoColumns,e=V(a),a=a.oLanguage.oAria,f=0,g=d.length;f<g;f++){c=d[f];var j=c.asSorting;b=c.sTitle.replace(/<.*?>/g,
"");var i=c.nTh;i.removeAttribute("aria-sort");c.bSortable&&(0<e.length&&e[0].col==f?(i.setAttribute("aria-sort","asc"==e[0].dir?"ascending":"descending"),c=j[e[0].index+1]||j[0]):c=j[0],b+="asc"===c?a.sSortAscending:a.sSortDescending);i.setAttribute("aria-label",b)}}function Ua(a,b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===k&&(c=h.inArray(a[1],f));return c+1<f.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=h.inArray(b,
D(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);S(a);"function"==typeof d&&d(a)}function La(a,b,c,d){var e=a.aoColumns[c];Va(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(C(a,!0),setTimeout(function(){Ua(a,c,b.shiftKey,d);"ssp"!==y(a)&&C(a,!1)},0)):Ua(a,c,b.shiftKey,d))})}
function wa(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=V(a),e=a.oFeatures,f,g;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++)g=b[e].src,h(D(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3));e=0;for(f=d.length;e<f;e++)g=d[e].src,h(D(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Gb(a,b){var c=a.aoColumns[b],d=m.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,$(a,b)));for(var f,g=m.ext.type.order[c.sType+"-pre"],j=0,i=a.aoData.length;j<i;j++)if(c=a.aoData[j],
c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=d?e[j]:B(a,j,b,"sort"),c._aSortData[b]=g?g(f):f}function xa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:h.extend(!0,[],a.aaSorting),search:zb(a.oPreviousSearch),columns:h.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:zb(a.aoPreSearchCols[d])}})};r(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,
b)}}function Ib(a,b,c){var d,e,f=a.aoColumns,b=function(b){if(b&&b.time){var g=r(a,"aoStateLoadParams","stateLoadParams",[a,b]);if(-1===h.inArray(!1,g)&&(g=a.iStateDuration,!(0<g&&b.time<+new Date-1E3*g)&&!(b.columns&&f.length!==b.columns.length))){a.oLoadedState=h.extend(!0,{},b);b.start!==k&&(a._iDisplayStart=b.start,a.iInitDisplayStart=b.start);b.length!==k&&(a._iDisplayLength=b.length);b.order!==k&&(a.aaSorting=[],h.each(b.order,function(b,c){a.aaSorting.push(c[0]>=f.length?[0,c[1]]:c)}));b.search!==
k&&h.extend(a.oPreviousSearch,Ab(b.search));if(b.columns){d=0;for(e=b.columns.length;d<e;d++)g=b.columns[d],g.visible!==k&&(f[d].bVisible=g.visible),g.search!==k&&h.extend(a.aoPreSearchCols[d],Ab(g.search))}r(a,"aoStateLoaded","stateLoaded",[a,b])}}c()};if(a.oFeatures.bStateSave){var g=a.fnStateLoadCallback.call(a.oInstance,a,b);g!==k&&b(g)}else c()}function ya(a){var b=m.settings,a=h.inArray(a,D(b,"nTable"));return-1!==a?b[a]:null}function J(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+
" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+d);if(b)E.console&&console.log&&console.log(c);else if(b=m.ext,b=b.sErrMode||b.errMode,a&&r(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function F(a,b,c,d){h.isArray(c)?h.each(c,function(c,d){h.isArray(d)?F(a,b,d[0],d[1]):F(a,b,d)}):(d===k&&(d=c),b[c]!==k&&(a[d]=b[c]))}function Jb(a,b,c){var d,e;for(e in b)b.hasOwnProperty(e)&&(d=b[e],
h.isPlainObject(d)?(h.isPlainObject(a[e])||(a[e]={}),h.extend(!0,a[e],d)):a[e]=c&&"data"!==e&&"aaData"!==e&&h.isArray(d)?d.slice():d);return a}function Va(a,b,c){h(a).on("click.DT",b,function(b){a.blur();c(b)}).on("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).on("selectstart.DT",function(){return!1})}function z(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function r(a,b,c,d){var e=[];b&&(e=h.map(a[b].slice().reverse(),function(b){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=h.Event(c+
".dt"),h(a.nTable).trigger(b,d),e.push(b.result));return e}function Ra(a){var b=a._iDisplayStart,c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Ma(a,b){var c=a.renderer,d=m.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"===typeof c?d[c]||d._:d._}function y(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ha(a,b){var c=[],c=Kb.numbers_length,d=Math.floor(c/2);b<=c?c=W(0,b):a<=d?(c=W(0,
c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=W(b-(c-2),b):(c=W(a-d+2,a+d-1),c.push("ellipsis"),c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function cb(a){h.each({num:function(b){return za(b,a)},"num-fmt":function(b){return za(b,a,Wa)},"html-num":function(b){return za(b,a,Aa)},"html-num-fmt":function(b){return za(b,a,Aa,Wa)}},function(b,c){x.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(x.type.search[b+a]=x.type.search.html)})}function Lb(a){return function(){var b=
[ya(this[m.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return m.ext.internal[a].apply(this,b)}}var m=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new s(ya(this[x.iApiIndex])):new s(this)};this.fnAddData=function(a,b){var c=this.api(!0),d=h.isArray(a)&&(h.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===k||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing=
function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===k||a?b.draw(!1):(""!==d.sX||""!==d.sY)&&ka(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===k||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0),a=d.rows(a),e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===k||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};
this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===k?e.search(a,c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==k){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==k?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();
return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return ya(this[x.iApiIndex])};
this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===k||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===k||e)&&h.columns.adjust();(d===k||d)&&h.draw();return 0};this.fnVersionCheck=x.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=x.internal;for(var e in m.ext.internal)e&&(this[e]=Lb(e));this.each(function(){var e={},g=1<d?Jb(e,a,!0):
a,j=0,i,e=this.getAttribute("id"),n=!1,l=m.defaults,q=h(this);if("table"!=this.nodeName.toLowerCase())J(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{db(l);eb(l.column);I(l,l,!0);I(l.column,l.column,!0);I(l,h.extend(g,q.data()));var t=m.settings,j=0;for(i=t.length;j<i;j++){var o=t[j];if(o.nTable==this||o.nTHead.parentNode==this||o.nTFoot&&o.nTFoot.parentNode==this){var s=g.bRetrieve!==k?g.bRetrieve:l.bRetrieve;if(c||s)return o.oInstance;if(g.bDestroy!==k?g.bDestroy:l.bDestroy){o.oInstance.fnDestroy();
break}else{J(o,0,"Cannot reinitialise DataTable",3);return}}if(o.sTableId==this.id){t.splice(j,1);break}}if(null===e||""===e)this.id=e="DataTables_Table_"+m.ext._unique++;var p=h.extend(!0,{},m.models.oSettings,{sDestroyWidth:q[0].style.width,sInstance:e,sTableId:e});p.nTable=this;p.oApi=b.internal;p.oInit=g;t.push(p);p.oInstance=1===b.length?b:q.dataTable();db(g);g.oLanguage&&Ca(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=h.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);
g=Jb(h.extend(!0,{},l),g);F(p.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));F(p,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],
["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]);F(p.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);F(p.oLanguage,g,"fnInfoCallback");z(p,"aoDrawCallback",g.fnDrawCallback,"user");z(p,"aoServerParams",g.fnServerParams,"user");z(p,"aoStateSaveParams",g.fnStateSaveParams,"user");z(p,"aoStateLoadParams",g.fnStateLoadParams,"user");z(p,"aoStateLoaded",g.fnStateLoaded,"user");z(p,"aoRowCallback",
g.fnRowCallback,"user");z(p,"aoRowCreatedCallback",g.fnCreatedRow,"user");z(p,"aoHeaderCallback",g.fnHeaderCallback,"user");z(p,"aoFooterCallback",g.fnFooterCallback,"user");z(p,"aoInitComplete",g.fnInitComplete,"user");z(p,"aoPreDrawCallback",g.fnPreDrawCallback,"user");p.rowIdFn=Q(g.rowId);fb(p);var u=p.oClasses;h.extend(u,m.ext.classes,g.oClasses);q.addClass(u.sTable);p.iInitDisplayStart===k&&(p.iInitDisplayStart=g.iDisplayStart,p._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(p.bDeferLoading=
!0,e=h.isArray(g.iDeferLoading),p._iRecordsDisplay=e?g.iDeferLoading[0]:g.iDeferLoading,p._iRecordsTotal=e?g.iDeferLoading[1]:g.iDeferLoading);var v=p.oLanguage;h.extend(!0,v,g.oLanguage);v.sUrl&&(h.ajax({dataType:"json",url:v.sUrl,success:function(a){Ca(a);I(l.oLanguage,a);h.extend(true,v,a);ga(p)},error:function(){ga(p)}}),n=!0);null===g.asStripeClasses&&(p.asStripeClasses=[u.sStripeOdd,u.sStripeEven]);var e=p.asStripeClasses,x=q.children("tbody").find("tr").eq(0);-1!==h.inArray(!0,h.map(e,function(a){return x.hasClass(a)}))&&
(h("tbody tr",this).removeClass(e.join(" ")),p.asDestroyStripes=e.slice());e=[];t=this.getElementsByTagName("thead");0!==t.length&&(da(p.aoHeader,t[0]),e=ra(p));if(null===g.aoColumns){t=[];j=0;for(i=e.length;j<i;j++)t.push(null)}else t=g.aoColumns;j=0;for(i=t.length;j<i;j++)Da(p,e?e[j]:null);hb(p,g.aoColumnDefs,t,function(a,b){ja(p,a,b)});if(x.length){var w=function(a,b){return a.getAttribute("data-"+b)!==null?b:null};h(x[0]).children("th, td").each(function(a,b){var c=p.aoColumns[a];if(c.mData===
a){var d=w(b,"sort")||w(b,"order"),e=w(b,"filter")||w(b,"search");if(d!==null||e!==null){c.mData={_:a+".display",sort:d!==null?a+".@data-"+d:k,type:d!==null?a+".@data-"+d:k,filter:e!==null?a+".@data-"+e:k};ja(p,a)}}})}var T=p.oFeatures,e=function(){if(g.aaSorting===k){var a=p.aaSorting;j=0;for(i=a.length;j<i;j++)a[j][1]=p.aoColumns[j].asSorting[0]}wa(p);T.bSort&&z(p,"aoDrawCallback",function(){if(p.bSorted){var a=V(p),b={};h.each(a,function(a,c){b[c.src]=c.dir});r(p,null,"order",[p,a,b]);Hb(p)}});
z(p,"aoDrawCallback",function(){(p.bSorted||y(p)==="ssp"||T.bDeferRender)&&wa(p)},"sc");var a=q.children("caption").each(function(){this._captionSide=h(this).css("caption-side")}),b=q.children("thead");b.length===0&&(b=h("<thead/>").appendTo(q));p.nTHead=b[0];b=q.children("tbody");b.length===0&&(b=h("<tbody/>").appendTo(q));p.nTBody=b[0];b=q.children("tfoot");if(b.length===0&&a.length>0&&(p.oScroll.sX!==""||p.oScroll.sY!==""))b=h("<tfoot/>").appendTo(q);if(b.length===0||b.children().length===0)q.addClass(u.sNoFooter);
else if(b.length>0){p.nTFoot=b[0];da(p.aoFooter,p.nTFoot)}if(g.aaData)for(j=0;j<g.aaData.length;j++)M(p,g.aaData[j]);else(p.bDeferLoading||y(p)=="dom")&&ma(p,h(p.nTBody).children("tr"));p.aiDisplay=p.aiDisplayMaster.slice();p.bInitialised=true;n===false&&ga(p)};g.bStateSave?(T.bStateSave=!0,z(p,"aoDrawCallback",xa,"state_save"),Ib(p,g,e)):e()}});b=null;return this},x,s,o,u,Xa={},Mb=/[\r\n]/g,Aa=/<.*?>/g,Zb=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,$b=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)",
"g"),Wa=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi,L=function(a){return!a||!0===a||"-"===a?!0:!1},Nb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Ob=function(a,b){Xa[b]||(Xa[b]=RegExp(Pa(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(Xa[b],"."):a},Ya=function(a,b,c){var d="string"===typeof a;if(L(a))return!0;b&&d&&(a=Ob(a,b));c&&d&&(a=a.replace(Wa,""));return!isNaN(parseFloat(a))&&isFinite(a)},Pb=function(a,b,c){return L(a)?!0:!(L(a)||"string"===
typeof a)?null:Ya(a.replace(Aa,""),b,c)?!0:null},D=function(a,b,c){var d=[],e=0,f=a.length;if(c!==k)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<f;e++)a[e]&&d.push(a[e][b]);return d},ia=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!==k)for(;f<g;f++)a[b[f]][c]&&e.push(a[b[f]][c][d]);else for(;f<g;f++)e.push(a[b[f]][c]);return e},W=function(a,b){var c=[],d;b===k?(b=0,d=a):(d=b,b=a);for(var e=b;e<d;e++)c.push(e);return c},Qb=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);
return b},qa=function(a){var b;a:{if(!(2>a.length)){b=a.slice().sort();for(var c=b[0],d=1,e=b.length;d<e;d++){if(b[d]===c){b=!1;break a}c=b[d]}}b=!0}if(b)return a.slice();b=[];var e=a.length,f,g=0,d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b};m.util={throttle:function(a,b){var c=b!==k?b:200,d,e;return function(){var b=this,g=+new Date,j=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d=k;a.apply(b,j)},c)):(d=g,a.apply(b,j))}},escapeRegex:function(a){return a.replace($b,
"\\$1")}};var A=function(a,b,c){a[b]!==k&&(a[c]=a[b])},ba=/\[.*?\]$/,U=/\(\)$/,Pa=m.util.escapeRegex,va=h("<div>")[0],Wb=va.textContent!==k,Yb=/<.*?>/g,Na=m.util.throttle,Rb=[],w=Array.prototype,ac=function(a){var b,c,d=m.settings,e=h.map(d,function(a){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase())return b=h.inArray(a,e),-1!==b?[d[b]]:null;if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?c=h(a):a instanceof
h&&(c=a)}else return[];if(c)return c.map(function(){b=h.inArray(this,e);return-1!==b?d[b]:null}).toArray()};s=function(a,b){if(!(this instanceof s))return new s(a,b);var c=[],d=function(a){(a=ac(a))&&(c=c.concat(a))};if(h.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]);else d(a);this.context=qa(c);b&&h.merge(this,b);this.selector={rows:null,cols:null,opts:null};s.extend(this,this,Rb)};m.Api=s;h.extend(s.prototype,{any:function(){return 0!==this.count()},concat:w.concat,context:[],count:function(){return this.flatten().length},
each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new s(b[a],this[a]):null},filter:function(a){var b=[];if(w.filter)b=w.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new s(this.context,b)},flatten:function(){var a=[];return new s(this.context,a.concat.apply(a,this.toArray()))},join:w.join,indexOf:w.indexOf||function(a,b){for(var c=b||0,
d=this.length;c<d;c++)if(this[c]===a)return c;return-1},iterator:function(a,b,c,d){var e=[],f,g,j,h,n,l=this.context,m,o,u=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);g=0;for(j=l.length;g<j;g++){var r=new s(l[g]);if("table"===b)f=c.call(r,l[g],g),f!==k&&e.push(f);else if("columns"===b||"rows"===b)f=c.call(r,l[g],this[g],g),f!==k&&e.push(f);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){o=this[g];"column-rows"===b&&(m=Ba(l[g],u.opts));h=0;for(n=o.length;h<n;h++)f=o[h],f=
"cell"===b?c.call(r,l[g],f.row,f.column,g,h):c.call(r,l[g],f,g,h,m),f!==k&&e.push(f)}}return e.length||d?(a=new s(l,a?e.concat.apply([],e):e),b=a.selector,b.rows=u.rows,b.cols=u.cols,b.opts=u.opts,a):this},lastIndexOf:w.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(w.map)b=w.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new s(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},
pop:w.pop,push:w.push,reduce:w.reduce||function(a,b){return gb(this,a,b,0,this.length,1)},reduceRight:w.reduceRight||function(a,b){return gb(this,a,b,this.length-1,-1,-1)},reverse:w.reverse,selector:null,shift:w.shift,slice:function(){return new s(this.context,this)},sort:w.sort,splice:w.splice,toArray:function(){return w.slice.call(this)},to$:function(){return h(this)},toJQuery:function(){return h(this)},unique:function(){return new s(this.context,qa(this))},unshift:w.unshift});s.extend=function(a,
b,c){if(c.length&&b&&(b instanceof s||b.__dt_wrapper)){var d,e,f,g=function(a,b,c){return function(){var d=b.apply(a,arguments);s.extend(d,d,c.methodExt);return d}};d=0;for(e=c.length;d<e;d++)f=c[d],b[f.name]="function"===typeof f.val?g(a,f.val,f):h.isPlainObject(f.val)?{}:f.val,b[f.name].__dt_wrapper=!0,s.extend(a,b[f.name],f.propExt)}};s.register=o=function(a,b){if(h.isArray(a))for(var c=0,d=a.length;c<d;c++)s.register(a[c],b);else for(var e=a.split("."),f=Rb,g,j,c=0,d=e.length;c<d;c++){g=(j=-1!==
e[c].indexOf("()"))?e[c].replace("()",""):e[c];var i;a:{i=0;for(var n=f.length;i<n;i++)if(f[i].name===g){i=f[i];break a}i=null}i||(i={name:g,val:{},methodExt:[],propExt:[]},f.push(i));c===d-1?i.val=b:f=j?i.methodExt:i.propExt}};s.registerPlural=u=function(a,b,c){s.register(a,c);s.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof s?a.length?h.isArray(a[0])?new s(a.context,a[0]):a[0]:k:a})};o("tables()",function(a){var b;if(a){b=s;var c=this.context;if("number"===
typeof a)a=[c[a]];else var d=h.map(c,function(a){return a.nTable}),a=h(d).filter(a).map(function(){var a=h.inArray(this,d);return c[a]}).toArray();b=new b(a)}else b=this;return b});o("table()",function(a){var a=this.tables(a),b=a.context;return b.length?new s(b[0]):a});u("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});u("tables().body()","table().body()",function(){return this.iterator("table",function(a){return a.nTBody},1)});u("tables().header()",
"table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});u("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});u("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});o("draw()",function(a){return this.iterator("table",function(b){"page"===a?N(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),S(b,!1===a))})});o("page()",function(a){return a===
k?this.page.info().page:this.iterator("table",function(b){Sa(b,a)})});o("page.info()",function(){if(0===this.context.length)return k;var a=this.context[0],b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,serverSide:"ssp"===y(a)}});o("page.len()",function(a){return a===k?0!==this.context.length?this.context[0]._iDisplayLength:
k:this.iterator("table",function(b){Qa(b,a)})});var Sb=function(a,b,c){if(c){var d=new s(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==y(a))S(a,b);else{C(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();sa(a,[],function(c){na(a);for(var c=ta(a,c),d=0,e=c.length;d<e;d++)M(a,c[d]);S(a,b);C(a,!1)})}};o("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});o("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});o("ajax.reload()",function(a,
b){return this.iterator("table",function(c){Sb(c,!1===b,a)})});o("ajax.url()",function(a){var b=this.context;if(a===k){if(0===b.length)return k;b=b[0];return b.ajax?h.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){h.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});o("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Sb(c,!1===b,a)})});var Za=function(a,b,c,d,e){var f=[],g,j,i,n,l,m;i=typeof b;if(!b||"string"===i||"function"===
i||b.length===k)b=[b];i=0;for(n=b.length;i<n;i++){j=b[i]&&b[i].split&&!b[i].match(/[\[\(:]/)?b[i].split(","):[b[i]];l=0;for(m=j.length;l<m;l++)(g=c("string"===typeof j[l]?h.trim(j[l]):j[l]))&&g.length&&(f=f.concat(g))}a=x.selector[a];if(a.length){i=0;for(n=a.length;i<n;i++)f=a[i](d,e,f)}return qa(f)},$a=function(a){a||(a={});a.filter&&a.search===k&&(a.search=a.filter);return h.extend({search:"none",order:"current",page:"all"},a)},ab=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=
a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Ba=function(a,b){var c,d,e,f=[],g=a.aiDisplay;c=a.aiDisplayMaster;var j=b.search;d=b.order;e=b.page;if("ssp"==y(a))return"removed"===j?[]:W(0,c.length);if("current"==e){c=a._iDisplayStart;for(d=a.fnDisplayEnd();c<d;c++)f.push(g[c])}else if("current"==d||"applied"==d)f="none"==j?c.slice():"applied"==j?g.slice():h.map(c,function(a){return-1===h.inArray(a,g)?a:null});else if("index"==d||"original"==d){c=0;for(d=a.aoData.length;c<
d;c++)"none"==j?f.push(c):(e=h.inArray(c,g),(-1===e&&"removed"==j||0<=e&&"applied"==j)&&f.push(c))}return f};o("rows()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=$a(b),c=this.iterator("table",function(c){var e=b,f;return Za("row",a,function(a){var b=Nb(a);if(b!==null&&!e)return[b];f||(f=Ba(c,e));if(b!==null&&h.inArray(b,f)!==-1)return[b];if(a===null||a===k||a==="")return f;if(typeof a==="function")return h.map(f,function(b){var e=c.aoData[b];return a(b,e._aData,e.nTr)?b:null});
b=Qb(ia(c.aoData,f,"nTr"));if(a.nodeName){if(a._DT_RowIndex!==k)return[a._DT_RowIndex];if(a._DT_CellIndex)return[a._DT_CellIndex.row];b=h(a).closest("*[data-dt-row]");return b.length?[b.data("dt-row")]:[]}if(typeof a==="string"&&a.charAt(0)==="#"){var i=c.aIds[a.replace(/^#/,"")];if(i!==k)return[i.idx]}return h(b).filter(a).map(function(){return this._DT_RowIndex}).toArray()},c,e)},1);c.selector.rows=a;c.selector.opts=b;return c});o("rows().nodes()",function(){return this.iterator("row",function(a,
b){return a.aoData[b].nTr||k},1)});o("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return ia(a.aoData,b,"_aData")},1)});u("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){var d=b.aoData[c];return"search"===a?d._aFilterData:d._aSortData},1)});u("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){ca(b,c,a)})});u("rows().indexes()","row().index()",function(){return this.iterator("row",function(a,
b){return b},1)});u("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var h=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+h)}return new s(c,b)});u("rows().remove()","row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,h,i,n,l;e.splice(c,1);g=0;for(h=e.length;g<h;g++)if(i=e[g],l=i.anCells,null!==i.nTr&&(i.nTr._DT_RowIndex=g),null!==l){i=0;for(n=l.length;i<
n;i++)l[i]._DT_CellIndex.row=g}oa(b.aiDisplayMaster,c);oa(b.aiDisplay,c);oa(a[d],c,!1);0<b._iRecordsDisplay&&b._iRecordsDisplay--;Ra(b);c=b.rowIdFn(f._aData);c!==k&&delete b.aIds[c]});this.iterator("table",function(a){for(var c=0,d=a.aoData.length;c<d;c++)a.aoData[c].idx=c});return this});o("rows.add()",function(a){var b=this.iterator("table",function(b){var c,f,g,h=[];f=0;for(g=a.length;f<g;f++)c=a[f],c.nodeName&&"TR"===c.nodeName.toUpperCase()?h.push(ma(b,c)[0]):h.push(M(b,c));return h},1),c=this.rows(-1);
c.pop();h.merge(c,b);return c});o("row()",function(a,b){return ab(this.rows(a,b))});o("row().data()",function(a){var b=this.context;if(a===k)return b.length&&this.length?b[0].aoData[this[0]]._aData:k;b[0].aoData[this[0]]._aData=a;ca(b[0],this[0],"data");return this});o("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});o("row.add()",function(a){a instanceof h&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&
"TR"===a.nodeName.toUpperCase()?ma(b,a)[0]:M(b,a)});return this.row(b[0])});var bb=function(a,b){var c=a.context;if(c.length&&(c=c[0].aoData[b!==k?b:a[0]])&&c._details)c._details.remove(),c._detailsShow=k,c._details=k},Tb=function(a,b){var c=a.context;if(c.length&&a.length){var d=c[0].aoData[a[0]];if(d._details){(d._detailsShow=b)?d._details.insertAfter(d.nTr):d._details.detach();var e=c[0],f=new s(e),g=e.aoData;f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<D(g,
"_details").length&&(f.on("draw.dt.DT_details",function(a,b){e===b&&f.rows({page:"current"}).eq(0).each(function(a){a=g[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),f.on("column-visibility.dt.DT_details",function(a,b){if(e===b)for(var c,d=aa(b),f=0,h=g.length;f<h;f++)c=g[f],c._details&&c._details.children("td[colspan]").attr("colspan",d)}),f.on("destroy.dt.DT_details",function(a,b){if(e===b)for(var c=0,d=g.length;c<d;c++)g[c]._details&&bb(f,c)}))}}};o("row().child()",function(a,b){var c=this.context;
if(a===k)return c.length&&this.length?c[0].aoData[this[0]]._details:k;if(!0===a)this.child.show();else if(!1===a)bb(this);else if(c.length&&this.length){var d=c[0],c=c[0].aoData[this[0]],e=[],f=function(a,b){if(h.isArray(a)||a instanceof h)for(var c=0,k=a.length;c<k;c++)f(a[c],b);else a.nodeName&&"tr"===a.nodeName.toLowerCase()?e.push(a):(c=h("<tr><td/></tr>").addClass(b),h("td",c).addClass(b).html(a)[0].colSpan=aa(d),e.push(c[0]))};f(a,b);c._details&&c._details.detach();c._details=h(e);c._detailsShow&&
c._details.insertAfter(c.nTr)}return this});o(["row().child.show()","row().child().show()"],function(){Tb(this,!0);return this});o(["row().child.hide()","row().child().hide()"],function(){Tb(this,!1);return this});o(["row().child.remove()","row().child().remove()"],function(){bb(this);return this});o("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var bc=/^([^:]+):(name|visIdx|visible)$/,Ub=function(a,b,c,d,e){for(var c=
[],d=0,f=e.length;d<f;d++)c.push(B(a,e[d],b));return c};o("columns()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=$a(b),c=this.iterator("table",function(c){var e=a,f=b,g=c.aoColumns,j=D(g,"sName"),i=D(g,"nTh");return Za("column",e,function(a){var b=Nb(a);if(a==="")return W(g.length);if(b!==null)return[b>=0?b:g.length+b];if(typeof a==="function"){var e=Ba(c,f);return h.map(g,function(b,f){return a(f,Ub(c,f,0,0,e),i[f])?f:null})}var k=typeof a==="string"?a.match(bc):"";if(k)switch(k[2]){case "visIdx":case "visible":b=
parseInt(k[1],10);if(b<0){var m=h.map(g,function(a,b){return a.bVisible?b:null});return[m[m.length+b]]}return[Z(c,b)];case "name":return h.map(j,function(a,b){return a===k[1]?b:null});default:return[]}if(a.nodeName&&a._DT_CellIndex)return[a._DT_CellIndex.column];b=h(i).filter(a).map(function(){return h.inArray(this,i)}).toArray();if(b.length||!a.nodeName)return b;b=h(a).closest("*[data-dt-column]");return b.length?[b.data("dt-column")]:[]},c,f)},1);c.selector.cols=a;c.selector.opts=b;return c});u("columns().header()",
"column().header()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});u("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});u("columns().data()","column().data()",function(){return this.iterator("column-rows",Ub,1)});u("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});u("columns().cache()","column().cache()",
function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ia(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});u("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ia(a.aoData,e,"anCells",b)},1)});u("columns().visible()","column().visible()",function(a,b){var c=this.iterator("column",function(b,c){if(a===k)return b.aoColumns[c].bVisible;var f=b.aoColumns,g=f[c],j=b.aoData,i,n,l;if(a!==k&&g.bVisible!==a){if(a){var m=
h.inArray(!0,D(f,"bVisible"),c+1);i=0;for(n=j.length;i<n;i++)l=j[i].nTr,f=j[i].anCells,l&&l.insertBefore(f[c],f[m]||null)}else h(D(b.aoData,"anCells",c)).detach();g.bVisible=a;ea(b,b.aoHeader);ea(b,b.aoFooter);xa(b)}});a!==k&&(this.iterator("column",function(c,e){r(c,null,"column-visibility",[c,e,a,b])}),(b===k||b)&&this.columns.adjust());return c});u("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?$(b,c):c},1)});o("columns.adjust()",
function(){return this.iterator("table",function(a){Y(a)},1)});o("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return Z(c,b);if("fromData"===a||"toVisible"===a)return $(c,b)}});o("column()",function(a,b){return ab(this.columns(a,b))});o("cells()",function(a,b,c){h.isPlainObject(a)&&(a.row===k?(c=a,a=null):(c=b,b=null));h.isPlainObject(b)&&(c=b,b=null);if(null===b||b===k)return this.iterator("table",function(b){var d=a,e=$a(c),f=
b.aoData,g=Ba(b,e),j=Qb(ia(f,g,"anCells")),i=h([].concat.apply([],j)),l,n=b.aoColumns.length,m,o,u,s,r,v;return Za("cell",d,function(a){var c=typeof a==="function";if(a===null||a===k||c){m=[];o=0;for(u=g.length;o<u;o++){l=g[o];for(s=0;s<n;s++){r={row:l,column:s};if(c){v=f[l];a(r,B(b,l,s),v.anCells?v.anCells[s]:null)&&m.push(r)}else m.push(r)}}return m}if(h.isPlainObject(a))return[a];c=i.filter(a).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length||
!a.nodeName)return c;v=h(a).closest("*[data-dt-row]");return v.length?[{row:v.data("dt-row"),column:v.data("dt-column")}]:[]},b,e)});var d=this.columns(b,c),e=this.rows(a,c),f,g,j,i,n,l=this.iterator("table",function(a,b){f=[];g=0;for(j=e[b].length;g<j;g++){i=0;for(n=d[b].length;i<n;i++)f.push({row:e[b][g],column:d[b][i]})}return f},1);h.extend(l.selector,{cols:b,rows:a,opts:c});return l});u("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&
a.anCells?a.anCells[c]:k},1)});o("cells().data()",function(){return this.iterator("cell",function(a,b,c){return B(a,b,c)},1)});u("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});u("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return B(b,c,d,a)},1)});u("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,
b,c){return{row:b,column:c,columnVisible:$(a,c)}},1)});u("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){ca(b,c,a,d)})});o("cell()",function(a,b,c){return ab(this.cells(a,b,c))});o("cell().data()",function(a){var b=this.context,c=this[0];if(a===k)return b.length&&c.length?B(b[0],c[0].row,c[0].column):k;ib(b[0],c[0].row,c[0].column,a);ca(b[0],c[0].row,"data",c[0].column);return this});o("order()",function(a,b){var c=this.context;if(a===k)return 0!==
c.length?c[0].aaSorting:k;"number"===typeof a?a=[[a,b]]:a.length&&!h.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});o("order.listener()",function(a,b,c){return this.iterator("table",function(d){La(d,a,b,c)})});o("order.fixed()",function(a){if(!a){var b=this.context,b=b.length?b[0].aaSortingFixed:k;return h.isArray(b)?{pre:b}:b}return this.iterator("table",function(b){b.aaSortingFixed=h.extend(!0,{},a)})});o(["columns().order()",
"column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];h.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});o("search()",function(a,b,c,d){var e=this.context;return a===k?0!==e.length?e[0].oPreviousSearch.sSearch:k:this.iterator("table",function(e){e.oFeatures.bFilter&&fa(e,h.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});u("columns().search()","column().search()",function(a,
b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===k)return g[f].sSearch;e.oFeatures.bFilter&&(h.extend(g[f],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),fa(e,e.oPreviousSearch,1))})});o("state()",function(){return this.context.length?this.context[0].oSavedState:null});o("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});o("state.loaded()",function(){return this.context.length?
this.context[0].oLoadedState:null});o("state.save()",function(){return this.iterator("table",function(a){xa(a)})});m.versionCheck=m.fnVersionCheck=function(a){for(var b=m.version.split("."),a=a.split("."),c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};m.isDataTable=m.fnIsDataTable=function(a){var b=h(a).get(0),c=!1;if(a instanceof m.Api)return!0;h.each(m.settings,function(a,e){var f=e.nScrollHead?h("table",e.nScrollHead)[0]:null,g=e.nScrollFoot?
h("table",e.nScrollFoot)[0]:null;if(e.nTable===b||f===b||g===b)c=!0});return c};m.tables=m.fnTables=function(a){var b=!1;h.isPlainObject(a)&&(b=a.api,a=a.visible);var c=h.map(m.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable});return b?new s(c):c};m.camelToHungarian=I;o("$()",function(a,b){var c=this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){o(b+"()",function(){var a=Array.prototype.slice.call(arguments);
a[0]=h.map(a[0].split(/\s/),function(a){return!a.match(/\.dt\b/)?a+".dt":a}).join(" ");var d=h(this.tables().nodes());d[b].apply(d,a);return this})});o("clear()",function(){return this.iterator("table",function(a){na(a)})});o("settings()",function(){return new s(this.context,this.context)});o("init()",function(){var a=this.context;return a.length?a[0].oInit:null});o("data()",function(){return this.iterator("table",function(a){return D(a.aoData,"_aData")}).flatten()});o("destroy()",function(a){a=a||
!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,j=b.nTFoot,i=h(e),f=h(f),k=h(b.nTableWrapper),l=h.map(b.aoData,function(a){return a.nTr}),o;b.bDestroying=!0;r(b,"aoDestroyCallback","destroy",[b]);a||(new s(b)).columns().visible(!0);k.off(".DT").find(":not(tbody *)").off(".DT");h(E).off(".DT-"+b.sInstance);e!=g.parentNode&&(i.children("thead").detach(),i.append(g));j&&e!=j.parentNode&&(i.children("tfoot").detach(),i.append(j));
b.aaSorting=[];b.aaSortingFixed=[];wa(b);h(l).removeClass(b.asStripeClasses.join(" "));h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);f.children().detach();f.append(l);g=a?"remove":"detach";i[g]();k[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),i.css("width",b.sDestroyWidth).removeClass(d.sTable),(o=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a%o])}));c=h.inArray(b,m.settings);-1!==c&&m.settings.splice(c,
1)})});h.each(["column","row","cell"],function(a,b){o(b+"s().every()",function(a){var d=this.selector.opts,e=this;return this.iterator(b,function(f,g,h,i,n){a.call(e[b](g,"cell"===b?h:d,"cell"===b?d:k),g,h,i,n)})})});o("i18n()",function(a,b,c){var d=this.context[0],a=Q(a)(d.oLanguage);a===k&&(a=b);c!==k&&h.isPlainObject(a)&&(a=a[c]!==k?a[c]:a._);return a.replace("%d",c)});m.version="1.10.16";m.settings=[];m.models={};m.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};m.models.oRow=
{nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};m.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,
sWidthOrig:null};m.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,
this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+
"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},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:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({},m.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};
X(m.defaults);m.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};X(m.defaults.column);m.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,
bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],
aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,fnServerData:null,
aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,
b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};m.ext=x={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},
order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:m.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:m.version};h.extend(x,{afnFiltering:x.search,aTypes:x.type.detect,ofnSearch:x.type.search,oSort:x.type.order,afnSortData:x.order,aoFeatures:x.feature,oApi:x.internal,oStdClasses:x.classes,oPagination:x.pager});h.extend(m.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",
sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",
sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Kb=m.ext.pager;h.extend(Kb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ha(a,
b)]},simple_numbers:function(a,b){return["previous",ha(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ha(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ha(a,b),"last"]},_numbers:ha,numbers_length:7});h.extend(!0,m.ext.renderer,{pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},n,l,m=0,o=function(b,d){var k,s,u,r,v=function(b){Sa(a,b.data.action,true)};k=0;for(s=d.length;k<s;k++){r=d[k];if(h.isArray(r)){u=
h("<"+(r.DT_el||"div")+"/>").appendTo(b);o(u,r)}else{n=null;l="";switch(r){case "ellipsis":b.append('<span class="ellipsis">&#x2026;</span>');break;case "first":n=j.sFirst;l=r+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":n=j.sPrevious;l=r+(e>0?"":" "+g.sPageButtonDisabled);break;case "next":n=j.sNext;l=r+(e<f-1?"":" "+g.sPageButtonDisabled);break;case "last":n=j.sLast;l=r+(e<f-1?"":" "+g.sPageButtonDisabled);break;default:n=r+1;l=e===r?g.sPageButtonActive:""}if(n!==null){u=h("<a>",{"class":g.sPageButton+
" "+l,"aria-controls":a.sTableId,"aria-label":i[r],"data-dt-idx":m,tabindex:a.iTabIndex,id:c===0&&typeof r==="string"?a.sTableId+"_"+r:null}).html(n).appendTo(b);Va(u,{action:r},v);m++}}}},s;try{s=h(b).find(G.activeElement).data("dt-idx")}catch(u){}o(h(b).empty(),d);s!==k&&h(b).find("[data-dt-idx="+s+"]").focus()}}});h.extend(m.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return Ya(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&!Zb.test(a))return null;var b=Date.parse(a);
return null!==b&&!isNaN(b)||L(a)?"date":null},function(a,b){var c=b.oLanguage.sDecimal;return Ya(a,c,!0)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Pb(a,c)?"html-num"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Pb(a,c,!0)?"html-num-fmt"+c:null},function(a){return L(a)||"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);h.extend(m.ext.type.search,{html:function(a){return L(a)?a:"string"===typeof a?a.replace(Mb," ").replace(Aa,""):""},string:function(a){return L(a)?
a:"string"===typeof a?a.replace(Mb," "):a}});var za=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Ob(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};h.extend(x.type.order,{"date-pre":function(a){return Date.parse(a)||-Infinity},"html-pre":function(a){return L(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return L(a)?"":"string"===typeof a?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a,b){return a<
b?-1:a>b?1:0},"string-desc":function(a,b){return a<b?1:a>b?-1:0}});cb("");h.extend(!0,m.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);
h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]=="asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});var Vb=function(a){return"string"===typeof a?a.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,
"&quot;"):a};m.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return Vb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+f+(e||"")}}},text:function(){return{display:Vb}}};h.extend(m.ext.internal,{_fnExternApiFunc:Lb,_fnBuildAjax:sa,_fnAjaxUpdate:kb,_fnAjaxParameters:tb,_fnAjaxUpdateDraw:ub,
_fnAjaxDataSrc:ta,_fnAddColumn:Da,_fnColumnOptions:ja,_fnAdjustColumnSizing:Y,_fnVisibleToColumnIndex:Z,_fnColumnIndexToVisible:$,_fnVisbleColumns:aa,_fnGetColumns:la,_fnColumnTypes:Fa,_fnApplyColumnDefs:hb,_fnHungarianMap:X,_fnCamelToHungarian:I,_fnLanguageCompat:Ca,_fnBrowserDetect:fb,_fnAddData:M,_fnAddTr:ma,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==k?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:B,_fnSetCellData:ib,
_fnSplitObjNotation:Ia,_fnGetObjectDataFn:Q,_fnSetObjectDataFn:R,_fnGetDataMaster:Ja,_fnClearTable:na,_fnDeleteIndex:oa,_fnInvalidate:ca,_fnGetRowElements:Ha,_fnCreateTr:Ga,_fnBuildHead:jb,_fnDrawHead:ea,_fnDraw:N,_fnReDraw:S,_fnAddOptionsHtml:mb,_fnDetectHeader:da,_fnGetUniqueThs:ra,_fnFeatureHtmlFilter:ob,_fnFilterComplete:fa,_fnFilterCustom:xb,_fnFilterColumn:wb,_fnFilter:vb,_fnFilterCreateSearch:Oa,_fnEscapeRegex:Pa,_fnFilterData:yb,_fnFeatureHtmlInfo:rb,_fnUpdateInfo:Bb,_fnInfoMacros:Cb,_fnInitialise:ga,
_fnInitComplete:ua,_fnLengthChange:Qa,_fnFeatureHtmlLength:nb,_fnFeatureHtmlPaginate:sb,_fnPageChange:Sa,_fnFeatureHtmlProcessing:pb,_fnProcessingDisplay:C,_fnFeatureHtmlTable:qb,_fnScrollDraw:ka,_fnApplyToChildren:H,_fnCalculateColumnWidths:Ea,_fnThrottle:Na,_fnConvertToWidth:Db,_fnGetWidestNode:Eb,_fnGetMaxLenString:Fb,_fnStringToCss:v,_fnSortFlatten:V,_fnSort:lb,_fnSortAria:Hb,_fnSortListener:Ua,_fnSortAttachListener:La,_fnSortingClasses:wa,_fnSortData:Gb,_fnSaveState:xa,_fnLoadState:Ib,_fnSettingsFromNode:ya,
_fnLog:J,_fnMap:F,_fnBindAction:Va,_fnCallbackReg:z,_fnCallbackFire:r,_fnLengthOverflow:Ra,_fnRenderer:Ma,_fnDataSource:y,_fnRowAttributes:Ka,_fnCalculateEnd:function(){}});h.fn.dataTable=m;m.$=h;h.fn.dataTableSettings=m.settings;h.fn.dataTableExt=m.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()};h.each(m,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable});

File diff suppressed because one or more lines are too long

5
external_js/popper.min.js vendored Normal file

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,6 +1,6 @@
<!--
ClearURLs
Copyright (c) 2017-2019 Kevin Röbert
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
@@ -39,22 +39,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</style>
</head>
<body>
<nav class="navbar navbar-inverse">
<nav class="navbar-margin navbar navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<span class="navbar-brand">
<span class="pull-left"><img src="../img/clearurls.svg"
<span class="float-left"><img src="../img/clearurls.svg"
width="30" height="30" alt=""></span>
<span style="color: #FF7800;" class="pull-right" id="page_title"></span><br />
<span class="label label-warning pull-left small-version"
<span style="color: #FF7800;" class="float-right" id="page_title"></span><br />
<span class="badge badge-warning float-left small-version"
id="version"></span>
</span>
</div>
</div>
</nav>
<div class="row">
<div class="col-md-4 col-md-offset-4 text-center">
<div class="col-lg-4 offset-lg-4 text-center">
<h4 id="cleaning_tool_description"></h4>
<br />
@@ -79,7 +77,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="../browser-polyfill.js"></script>
<script src="../external_js/jquery-3.2.1.min.js"></script>
<script src="../external_js/jquery-3.4.1.min.js"></script>
<script src="../external_js/bootstrap.min.js"></script>
<script src="../core_js/cleaning_tool.js"></script>
<script src="../core_js/write_version.js"></script>

View File

@@ -1,6 +1,6 @@
<!--
ClearURLs
Copyright (c) 2017-2019 Kevin Röbert
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
@@ -29,36 +29,67 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="../css/bootstrap.min.css">
<link rel="stylesheet" href="../css/dataTables.bootstrap.min.css">
<link rel="stylesheet" href="../css/dataTables.min.css">
<link rel="stylesheet" type="text/css" href="../css/core.css">
<style>
td {
word-wrap: break-word;
max-width: 200px;
}
td {
word-wrap: break-word;
max-width: 200px;
}
.fileinput-button {
position: relative;
overflow: hidden;
display: inline-block;
}
.fileinput-button input {
position: absolute;
top: 0;
right: 0;
margin: 0;
opacity: 0;
-ms-filter: 'alpha(opacity=0)';
direction: ltr;
cursor: pointer;
}
</style>
</head>
<body>
<nav class="navbar navbar-inverse">
<nav class="navbar-margin navbar navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<span class="navbar-brand">
<span class="pull-left"><img src="../img/clearurls.svg"
<span class="float-left"><img src="../img/clearurls.svg"
width="30" height="30" alt=""></span>
<span style="color: #FF7800;" class="pull-right" id="page_title"></span><br />
<span class="label label-warning pull-left small-version"
<span style="color: #FF7800;" class="float-right" id="page_title"></span><br />
<span class="badge badge-warning float-left small-version"
id="version"></span>
</span>
</div>
</div>
</nav>
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="col-lg-10 offset-lg-1">
<p class="text-center">
<button type="button" id="reset_log_btn"
class="btn btn-danger" title="Reset the global log"></button>
class="btn btn-danger" title="Reset the global log">
</button>
<button type="button" id="export_log_btn"
class="btn btn-success" title="Export the global log">
<i class="fas fa-download"></i>
<span id="export_log_btn_text"></span>
</button>
<span id="import_log_btn"
class="btn btn-success fileinput-button" title="Import the global log">
<i class="fas fa-upload"></i>
<span id="import_log_btn_text"></span>
<input type="file" name="file" id="importLog"/>
</span>
</p>
<div class="table-responsive">
<table class="table table-striped table-bordered"
@@ -81,10 +112,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="../browser-polyfill.js"></script>
<script src="../external_js/jquery-3.2.1.min.js"></script>
<script src="../external_js/jquery-3.4.1.min.js"></script>
<script src="../external_js/bootstrap.min.js"></script>
<script src="../external_js/jquery.dataTables.min.js"></script>
<script src="../external_js/dataTables.bootstrap.min.js"></script>
<script src="../external_js/dataTables.min.js"></script>
<script src="../external_js/fontawesome/all.min.js"></script>
<script src="../core_js/log.js"></script>
<script src="../core_js/write_version.js"></script>
</body>

View File

@@ -1,6 +1,6 @@
<!--
ClearURLs
Copyright (c) 2017-2019 Kevin Röbert
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
@@ -27,40 +27,39 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="../css/bootstrap.min.css">
<link rel="stylesheet" href="../css/bootstrap-dialog.min.css">
<link rel="stylesheet" type="text/css" href="../css/switchButtons.css">
<link rel="stylesheet" type="text/css" href="../css/core.css">
</head>
<body>
<div id="body-popup">
<div class="container-fluid"
style="background: url('../img/img-noise-361x370.png');background-size: auto;">
style="background: url('../img/img-noise-361x370.png');background-size: auto;min-width: 200px;">
<div class="row">
<nav class="col-sm-1 navbar navbar-inverse">
<nav class="col-sm-1 navbar-margin navbar navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<span class="navbar-brand">
<span class="pull-left"><img src="../img/clearurls.svg"
<span class="float-left"><img src="../img/clearurls.svg"
width="30" height="30" alt=""></span>
<span style="color: #FF7800;" class="pull-right">
<span style="color: #FF7800;" class="float-right brand">
ClearURLs
</span><br />
<span class="label label-warning pull-left small-version"
<span class="badge badge-warning float-left small-version"
id="version"></span>
<a id="donate" target="_blank" href="https://www.paypal.me/KevinRoebert">
<span class="pull-right glyphicon glyphicon-heart"></span>
</a>
</span>
</span>
<a id="donate" target="_blank" href="https://www.paypal.me/KevinRoebert">
<i class="float-right fas fa-hand-holding-usd"></i>
</a>
</div>
</div>
</nav>
</div>
<div id="dialog"></div>
<div class="row" id="config_section">
<div class="row" id="references_section">
<div class="col-sm-1 text-center">
<a id="cleaning_tools" target="_blank"><span class="glyphicon glyphicon-wrench" style="font-size: 1.5em; margin-right: 1em;"></span></a>
<a id="settings" target="_blank"><span class="glyphicon glyphicon-cog" style="font-size: 1.5em"></span></a>
<a id="cleaning_tools" target="_blank"><span class="fas fa-tools" style="font-size: 1.5em; margin-right: 1em;"></span></a>
<a id="settings" target="_blank"><span class="fas fa-cog" style="font-size: 1.5em"></span></a>
</div>
</div>
<div class="row" id="config_section">
<div class="col-sm-1">
<h5><b id="configs_head"></b></h5>
<label class="switch">
@@ -96,36 +95,36 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<h5><b id="statistics_head"></b></h5>
<div class="progress">
<div class="progress-bar progress-bar-danger progress-bar-striped"
<div class="progress-bar bg-danger progress-bar-striped"
role="progressbar" style="width: 0%" id="progress_blocked"></div>
<div class="progress-bar progress-bar-info progress-bar-striped"
<div class="progress-bar bg-info progress-bar-striped"
role="progressbar" style="width: 100%" id="progress_non_blocked"></div>
</div>
<br>
<div>
<span class="pull-left" id="statistics_elements"></span>
<span class="pull-right text-info"
<span class="float-left" id="statistics_elements"></span>
<span class="float-right text-info"
id="statistics_total_elements"></span>
<div class="clearfix"></div>
</div>
<div>
<span class="pull-left" id="statistics_blocked"></span>
<span class="pull-right text-danger"
<span class="float-left" id="statistics_blocked"></span>
<span class="float-right text-danger"
id="statistics_value"></span>
<div class="clearfix"></div>
</div>
<div>
<span class="pull-left" id="statistics_percentage"></span>
<span class="pull-right text-success"
<span class="float-left" id="statistics_percentage"></span>
<span class="float-right text-success"
id="statistics_value_global_percentage"></span>
<div class="clearfix"></div>
</div>
<br />
<div class="text-center">
<button type="button" id="reset_counter_btn"
class="btn btn-danger btn-xs">
class="btn btn-danger btn-sm text-wrap">
</button>
<div class="clearfix"></div>
<br />
@@ -138,7 +137,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<h5><b id="rules_status_head"></b></h5>
<div class="text-center">
<a href="https://gitlab.com/KevinRoebert/ClearUrls/commits/master/data/data.min.json"
id="hashStatus" class="btn btn-primary btn-xs" target="_blank"></a>
id="hashStatus" class="btn btn-primary btn-sm text-wrap" target="_blank"></a>
</div>
<div class="clearfix"></div>
<br />
@@ -148,8 +147,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<div class="row" id="log_section">
<div class="col-sm-1">
<div class="text-center">
<a type="button" id="loggingPage" target="_blank"
class="btn btn-default btn-sm btn-block"></a>
<a id="loggingPage" target="_blank"
class="btn btn-default btn-sm btn-block text-wrap"></a>
</div>
</div>
</div>
@@ -159,9 +158,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script type="application/javascript" src="../browser-polyfill.js"></script>
<script src="../external_js/jquery-3.2.1.min.js"></script>
<script src="../external_js/jquery-3.4.1.min.js"></script>
<script src="../external_js/bootstrap.min.js"></script>
<script src="../external_js/bootstrap-dialog.min.js"></script>
<script src="../external_js/fontawesome/all.min.js"></script>
<script src="../core_js/popup.js"></script>
<script src="../core_js/write_version.js"></script>
</body>

View File

@@ -1,6 +1,6 @@
<!--
ClearURLs
Copyright (c) 2017-2019 Kevin Röbert
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
@@ -31,69 +31,133 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<link rel="stylesheet" href="../css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../css/switchButtons.css">
<link rel="stylesheet" type="text/css" href="../css/core.css">
<link rel="stylesheet" href="../css/pick-a-color-1.2.3.min.css">
<link rel="stylesheet" href="../css/bootstrap-colorpicker.min.css">
<style>
td {
word-wrap: break-word;
max-width: 200px;
}
.fileinput-button {
position: relative;
overflow: hidden;
display: inline-block;
}
.fileinput-button input {
position: absolute;
top: 0;
right: 0;
margin: 0;
opacity: 0;
-ms-filter: 'alpha(opacity=0)';
direction: ltr;
cursor: pointer;
}
</style>
</head>
<body>
<nav class="navbar navbar-inverse">
<nav class="navbar-margin navbar navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<span class="navbar-brand">
<span class="pull-left"><img src="../img/clearurls.svg"
<div class="navbar-brand">
<span class="float-left"><img src="../img/clearurls.svg"
width="30" height="30" alt=""></span>
<span style="color: #FF7800;" class="pull-right" id="page_title"></span><br />
<span class="label label-warning pull-left small-version"
<span style="color: #FF7800;" class="float-right" id="page_title"></span><br/>
<span class="badge badge-warning float-left small-version"
id="version"></span>
</span>
</div>
</div>
</nav>
<div class="row">
<div class="col-md-4 col-md-offset-4">
<div class="col-lg-4 offset-lg-4">
<p class="text-center">
<button type="button" id="reset_settings_btn"
class="btn btn-danger" title="Reset everything settings"></button>
<button type="button" id="export_settings_btn"
class="btn btn-success" title="Export the settings">
<i class="fas fa-download"></i>
<span id="export_settings_btn_text"></span>
</button>
<span id="import_settings_btn"
class="btn btn-success fileinput-button" title="Import the settings">
<i class="fas fa-upload"></i>
<span id="import_settings_btn_text"></span>
<input type="file" name="file" id="importSettings"/>
</span>
</p>
<br />
<p>
<label id="badged_color_label"></label><br />
<input type="text" id="badged_color" value="" name="badged_color" class="pick-a-color form-control">
</p>
<label id="badged_color_label"></label><br />
<div id="badged-color-picker" class="input-group">
<input type="text" class="form-control input-lg" value="" name="badged_color" id="badged_color">
<span class="input-group-append">
<span class="input-group-text colorpicker-input-addon"><i></i></span>
</span>
</div>
<br />
<br />
<p>
<label id="rule_url_label"></label><br />
<input type="url" id="rule_url" value="" name="rule_url" class="form-control" />
<input type="url" id="ruleURL" value="" name="ruleURL" class="form-control" />
</p>
<br />
<p>
<label id="hash_url_label"></label><br />
<input type="url" id="hash_url" value="" name="hash_url" class="form-control" />
<input type="url" id="hashURL" value="" name="hashURL" class="form-control" />
</p>
<br />
<p>
<label id="types_label"></label><br />
<input type="text" id="types" value="" name="types" class="form-control" />
<br />
</p>
<br />
<p>
<label id="logLimit_label"></label><br />
<input type="number" id="logLimit" value="" name="logLimit" class="form-control" min="-1">
</p>
<br />
<p>
<label id="domain_blocking_enabled" style="font-weight: bold;"></label><br />
<label class="switch">
<input type="checkbox" id="domainBlocking">
<span class="slider round"></span>
</label>
</p>
<p>
<label id="local_hosts_skipping" style="font-weight: bold;"></label><br />
<label class="switch">
<input type="checkbox" id="localHostsSkipping">
<span class="slider round"></span>
</label>
</p>
<p>
<label id="history_listener_enabled" style="font-weight: bold;"></label><br />
<label class="switch">
<input type="checkbox" id="historyListenerEnabled">
<span class="slider round"></span>
</label>
</p>
<p>
<label id="context_menu_enabled" style="font-weight: bold;"></label><br />
<label class="switch">
<input type="checkbox" id="contextMenuEnabled">
<span class="slider round"></span>
</label>
</p>
<br />
<p>
<label id="history_listener_enabled" style="font-weight: bold;"></label><br />
<label id="referral_marketing_enabled" style="font-weight: bold;"></label><br />
<label class="switch">
<input type="checkbox" id="historyListenerEnabled">
<input type="checkbox" id="referralMarketing">
<span class="slider round"></span>
</label>
</p>
<p>
<label id="ping_blocking_enabled" style="font-weight: bold;"></label><br />
<label class="switch">
<input type="checkbox" id="pingBlocking">
<span class="slider round"></span>
</label>
</p>
@@ -107,10 +171,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<!-- Optional JavaScript -->
<script src="../browser-polyfill.js"></script>
<script src="../external_js/jquery-3.2.1.min.js"></script>
<script src="../external_js/jquery-3.4.1.min.js"></script>
<script src="../external_js/popper.min.js"></script>
<script src="../external_js/bootstrap.min.js"></script>
<script src="../external_js/tinycolor-0.9.15.min.js"></script>
<script src="../external_js/pick-a-color-1.2.3.min.js"></script>
<script src="../external_js/bootstrap-colorpicker.min.js"></script>
<script src="../external_js/fontawesome/all.min.js"></script>
<script src="../core_js/settings.js"></script>
<script src="../core_js/write_version.js"></script>
</body>

View File

@@ -1,6 +1,6 @@
<!--
ClearURLs
Copyright (c) 2017-2019 Kevin Röbert
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
@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<!DOCTYPE html>
<html lang="en">
<head>
<title>This site or element was blocked by ClearURLs Add-on</title>
<title>This site was blocked by ClearURLs Add-on</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
@@ -52,27 +52,26 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<body>
<div class="container content">
<div class="row">
<div class="col-sm-10 col-sm-offset-1">
<h1 class="text-center">This site or element was blocked by <b>ClearURLs</b> Add-on</h1>
<div class="col-md-10 offset-md-1">
<h1 class="text-center" id="title"></h1>
<p class="text-center" id="body"></p>
<p class="text-center">
This site or element was blocked by <b>ClearURLs</b> Add-on, because we identify this site as an
advertising and/or tracking service.
<br>
To visit this site, you must temporarily deactivate the Add-on.
<a class="btn btn-warning" id="page"></a>
</p>
</div>
</div>
</div>
<footer class="navbar-fixed-bottom">
<div class="navbar-inverse text-center">
<small class="text-muted">Version 1.1.2.5</small>
</div>
<footer class="navbar navbar-dark bg-dark fixed-bottom">
<small class="text-muted">ClearURLs v.<span id="version"></span></small>
</footer>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="../external_js/jquery-3.2.1.min.js"></script>
<script src="../browser-polyfill.js"></script>
<script src="../external_js/jquery-3.4.1.min.js"></script>
<script src="../external_js/bootstrap.min.js"></script>
<script src="../core_js/siteBlockedAlert.js"></script>
<script src="../core_js/write_version.js"></script>
</body>
</html>

View File

@@ -1,14 +1,14 @@
{
"manifest_version": 2,
"name": "ClearURLs",
"version": "1.7.1",
"author": "Kevin R.",
"version": "1.12.0",
"author": "Kevin Röbert",
"description": "Remove tracking elements from URLs.",
"homepage_url": "https://gitlab.com/KevinRoebert/ClearUrls",
"default_locale": "en",
"applications": {
"gecko": {
"id": "{74145f27-f039-47ce-a470-a662b129930a}"
"id": "{74145f27-f039-47ce-a470-a662b129930a}"
}
},
"icons": {
@@ -52,28 +52,246 @@
"contextMenus",
"clipboardWrite",
"webNavigation",
"tabs"
"tabs",
"downloads"
],
"background": {
"scripts": [
"browser-polyfill.js",
"external_js/jquery-3.2.1.min.js",
"external_js/jquery-3.4.1.min.js",
"external_js/sha256.jquery.js",
"core_js/message_handler.js",
"core_js/tools.js",
"core_js/storage.js",
"clearurls.js",
"core_js/message_handler.js",
"external_js/ip-range-check.js",
"core_js/tools.js",
"core_js/pureCleaning.js",
"core_js/context_menu.js",
"core_js/historyListener.js"
"core_js/historyListener.js",
"clearurls.js",
"core_js/storage.js",
"core_js/watchdog.js"
]
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"matches": [
"<all_urls>"
],
"js": [
"browser-polyfill.js"
]
},
{
"all_frames": true,
"matches": [
"*://*.google.com/*",
"*://*.google.ad/*",
"*://*.google.ae/*",
"*://*.google.com.af/*",
"*://*.google.com.ag/*",
"*://*.google.com.ai/*",
"*://*.google.al/*",
"*://*.google.am/*",
"*://*.google.co.ao/*",
"*://*.google.com.ar/*",
"*://*.google.as/*",
"*://*.google.at/*",
"*://*.google.com.au/*",
"*://*.google.az/*",
"*://*.google.ba/*",
"*://*.google.com.bd/*",
"*://*.google.be/*",
"*://*.google.bf/*",
"*://*.google.bg/*",
"*://*.google.com.bh/*",
"*://*.google.bi/*",
"*://*.google.bj/*",
"*://*.google.com.bn/*",
"*://*.google.com.bo/*",
"*://*.google.com.br/*",
"*://*.google.bs/*",
"*://*.google.bt/*",
"*://*.google.co.bw/*",
"*://*.google.by/*",
"*://*.google.com.bz/*",
"*://*.google.ca/*",
"*://*.google.cd/*",
"*://*.google.cf/*",
"*://*.google.cg/*",
"*://*.google.ch/*",
"*://*.google.ci/*",
"*://*.google.co.ck/*",
"*://*.google.cl/*",
"*://*.google.cm/*",
"*://*.google.cn/*",
"*://*.google.com.co/*",
"*://*.google.co.cr/*",
"*://*.google.com.cu/*",
"*://*.google.cv/*",
"*://*.google.com.cy/*",
"*://*.google.cz/*",
"*://*.google.de/*",
"*://*.google.dj/*",
"*://*.google.dk/*",
"*://*.google.dm/*",
"*://*.google.com.do/*",
"*://*.google.dz/*",
"*://*.google.com.ec/*",
"*://*.google.ee/*",
"*://*.google.com.eg/*",
"*://*.google.es/*",
"*://*.google.com.et/*",
"*://*.google.fi/*",
"*://*.google.com.fj/*",
"*://*.google.fm/*",
"*://*.google.fr/*",
"*://*.google.ga/*",
"*://*.google.ge/*",
"*://*.google.gg/*",
"*://*.google.com.gh/*",
"*://*.google.com.gi/*",
"*://*.google.gl/*",
"*://*.google.gm/*",
"*://*.google.gp/*",
"*://*.google.gr/*",
"*://*.google.com.gt/*",
"*://*.google.gy/*",
"*://*.google.com.hk/*",
"*://*.google.hn/*",
"*://*.google.hr/*",
"*://*.google.ht/*",
"*://*.google.hu/*",
"*://*.google.co.id/*",
"*://*.google.ie/*",
"*://*.google.co.il/*",
"*://*.google.im/*",
"*://*.google.co.in/*",
"*://*.google.iq/*",
"*://*.google.is/*",
"*://*.google.it/*",
"*://*.google.je/*",
"*://*.google.com.jm/*",
"*://*.google.jo/*",
"*://*.google.co.jp/*",
"*://*.google.co.ke/*",
"*://*.google.com.kh/*",
"*://*.google.ki/*",
"*://*.google.kg/*",
"*://*.google.co.kr/*",
"*://*.google.com.kw/*",
"*://*.google.kz/*",
"*://*.google.la/*",
"*://*.google.com.lb/*",
"*://*.google.li/*",
"*://*.google.lk/*",
"*://*.google.co.ls/*",
"*://*.google.lt/*",
"*://*.google.lu/*",
"*://*.google.lv/*",
"*://*.google.com.ly/*",
"*://*.google.co.ma/*",
"*://*.google.md/*",
"*://*.google.me/*",
"*://*.google.mg/*",
"*://*.google.mk/*",
"*://*.google.ml/*",
"*://*.google.com.mm/*",
"*://*.google.mn/*",
"*://*.google.ms/*",
"*://*.google.com.mt/*",
"*://*.google.mu/*",
"*://*.google.mv/*",
"*://*.google.mw/*",
"*://*.google.com.mx/*",
"*://*.google.com.my/*",
"*://*.google.co.mz/*",
"*://*.google.com.na/*",
"*://*.google.com.nf/*",
"*://*.google.com.ng/*",
"*://*.google.com.ni/*",
"*://*.google.ne/*",
"*://*.google.nl/*",
"*://*.google.no/*",
"*://*.google.com.np/*",
"*://*.google.nr/*",
"*://*.google.nu/*",
"*://*.google.co.nz/*",
"*://*.google.com.om/*",
"*://*.google.com.pa/*",
"*://*.google.com.pe/*",
"*://*.google.com.pg/*",
"*://*.google.com.ph/*",
"*://*.google.com.pk/*",
"*://*.google.pl/*",
"*://*.google.pn/*",
"*://*.google.com.pr/*",
"*://*.google.ps/*",
"*://*.google.pt/*",
"*://*.google.com.py/*",
"*://*.google.com.qa/*",
"*://*.google.ro/*",
"*://*.google.ru/*",
"*://*.google.rw/*",
"*://*.google.com.sa/*",
"*://*.google.com.sb/*",
"*://*.google.sc/*",
"*://*.google.se/*",
"*://*.google.com.sg/*",
"*://*.google.sh/*",
"*://*.google.si/*",
"*://*.google.sk/*",
"*://*.google.com.sl/*",
"*://*.google.sn/*",
"*://*.google.so/*",
"*://*.google.sm/*",
"*://*.google.sr/*",
"*://*.google.st/*",
"*://*.google.com.sv/*",
"*://*.google.td/*",
"*://*.google.tg/*",
"*://*.google.co.th/*",
"*://*.google.com.tj/*",
"*://*.google.tk/*",
"*://*.google.tl/*",
"*://*.google.tm/*",
"*://*.google.tn/*",
"*://*.google.to/*",
"*://*.google.com.tr/*",
"*://*.google.tt/*",
"*://*.google.com.tw/*",
"*://*.google.co.tz/*",
"*://*.google.com.ua/*",
"*://*.google.co.ug/*",
"*://*.google.co.uk/*",
"*://*.google.com.uy/*",
"*://*.google.co.uz/*",
"*://*.google.com.vc/*",
"*://*.google.co.ve/*",
"*://*.google.vg/*",
"*://*.google.co.vi/*",
"*://*.google.com.vn/*",
"*://*.google.vu/*",
"*://*.google.ws/*",
"*://*.google.rs/*",
"*://*.google.co.za/*",
"*://*.google.co.zm/*",
"*://*.google.co.zw/*",
"*://*.google.cat/*"
],
"js": [
"core_js/google_link_fix.js"
],
"run_at": "document_end"
},
{
"all_frames": true,
"matches": [
"*://*.yandex.ru/*",
"*://*.yandex.com/*"
],
"js": [
"core_js/yandex_link_fix.js"
],
"run_at": "document_end"
}
],
"options_ui": {

9473
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -22,11 +22,12 @@
}
],
"dependencies": {
"twbs/bootstrap": "3.3.7",
"jquery/jquery": "3.2.1",
"orsozed/sha256.jquery.plugin": "1.0",
"DataTables/DataTables": "1.10.16",
"lauren/pick-a-color": "1.2.3"
"ip-range-check": "^0.2.0",
"jquery/jquery": "3.2.1",
"lauren/pick-a-color": "1.2.3",
"orsozed/sha256.jquery.plugin": "1.0",
"twbs/bootstrap": "3.3.7"
},
"bugs": {
"web": "https://gitlab.com/KevinRoebert/ClearUrls/issues/new"

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 890 KiB

After

Width:  |  Height:  |  Size: 890 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -1,7 +1,7 @@
<?php
/*
* ClearURLs
* Copyright (c) 2017-2019 Kevin Röbert
* 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