Update upstream source from tag 'upstream/3.23'
Update to upstream version '3.23'
with Debian dir 0c48a89ca2e5dfd5b7b1f736a6f44f49e6f6882e
gregor herrmann
4 years ago
16 | 16 | * Graham Barr |
17 | 17 | * gregor herrmann |
18 | 18 | * Hao Wu |
19 | * James Waters | |
19 | 20 | * joatis |
20 | 21 | * Jon Jensen |
21 | 22 | * ktat |
0 | 0 | Revision history for Perl extension HTTP::BrowserDetect. |
1 | ||
2 | 3.23 2019-04-04 19:26:18Z | |
3 | - Add BingPreview to bot checker (GH#162) (James Waters) | |
4 | ||
5 | 3.22 2019-03-07 15:11:01Z | |
6 | - Add a u2f() method (GH#161) (Patrick Cronin and Olaf Alders) | |
7 | - Don't warn on fake UA strings. (GH#160) (Olaf Alders) | |
1 | 8 | |
2 | 9 | 3.21 2019-02-05 01:50:40Z |
3 | 10 | - Faster edge test (GH#158) (Marco Fontani) |
0 | This software is copyright (c) 2017 by Lee Semel. | |
0 | This software is copyright (c) 2019 by Lee Semel. | |
1 | 1 | |
2 | 2 | This is free software; you can redistribute it and/or modify it under |
3 | 3 | the same terms as the Perl 5 programming language system itself. |
11 | 11 | |
12 | 12 | --- The GNU General Public License, Version 1, February 1989 --- |
13 | 13 | |
14 | This software is Copyright (c) 2017 by Lee Semel. | |
14 | This software is Copyright (c) 2019 by Lee Semel. | |
15 | 15 | |
16 | 16 | This is free software, licensed under: |
17 | 17 | |
271 | 271 | |
272 | 272 | --- The Artistic License 1.0 --- |
273 | 273 | |
274 | This software is Copyright (c) 2017 by Lee Semel. | |
274 | This software is Copyright (c) 2019 by Lee Semel. | |
275 | 275 | |
276 | 276 | This is free software, licensed under: |
277 | 277 |
21 | 21 | t/03-language.t |
22 | 22 | t/04-random-order.t |
23 | 23 | t/05_robot.t |
24 | t/99_blank_ua.t | |
24 | t/99-warnings.t | |
25 | 25 | t/add-field.pl |
26 | 26 | t/make-more-useragents.pl |
27 | 27 | t/more-useragents.json |
28 | 28 | t/perlcriticrc |
29 | 29 | t/useragents.json |
30 | 30 | tidyall.ini |
31 | xt/author/pod-spell.t | |
31 | 32 | xt/author/pod-syntax.t |
32 | 33 | xt/author/synopsis.t |
33 | 34 | xt/author/tidyall.t |
42 | 42 | "Parallel::ForkManager" : "1.19", |
43 | 43 | "Perl::Critic" : "1.132", |
44 | 44 | "Perl::Tidy" : "20180220", |
45 | "Pod::Wordlist" : "0", | |
45 | 46 | "Test::CPAN::Changes" : "0.19", |
46 | 47 | "Test::Code::TidyAll" : "0.50", |
47 | 48 | "Test::More" : "0.96", |
48 | 49 | "Test::Pod" : "1.41", |
50 | "Test::Spelling" : "0.12", | |
49 | 51 | "Test::Synopsis" : "0", |
50 | 52 | "Test::Vars" : "0.014" |
51 | 53 | } |
89 | 91 | "web" : "https://github.com/oalders/http-browserdetect" |
90 | 92 | } |
91 | 93 | }, |
92 | "version" : "3.21", | |
94 | "version" : "3.23", | |
93 | 95 | "x_Dist_Zilla" : { |
94 | 96 | "perl" : { |
95 | 97 | "version" : "5.026001" |
217 | 219 | "class" : "Dist::Zilla::Plugin::ExecDir", |
218 | 220 | "name" : "@Author::OALDERS/ExecDir", |
219 | 221 | "version" : "6.012" |
222 | }, | |
223 | { | |
224 | "class" : "Dist::Zilla::Plugin::Test::PodSpelling", | |
225 | "config" : { | |
226 | "Dist::Zilla::Plugin::Test::PodSpelling" : { | |
227 | "directories" : [ | |
228 | "bin", | |
229 | "lib" | |
230 | ], | |
231 | "spell_cmd" : "", | |
232 | "stopwords" : [ | |
233 | "Alders", | |
234 | "Alders'", | |
235 | "AnnoCPAN", | |
236 | "Atsushi", | |
237 | "Cebrin", | |
238 | "Firebird", | |
239 | "Florian", | |
240 | "Heiko", | |
241 | "Iceweasel", | |
242 | "KHTML", | |
243 | "Kato", | |
244 | "Kurihara", | |
245 | "Latypoff", | |
246 | "McGregor", | |
247 | "Oatis", | |
248 | "Pelzer", | |
249 | "Purkis", | |
250 | "Rask", | |
251 | "RealPlayer", | |
252 | "Rifkin", | |
253 | "Ritter", | |
254 | "Smidsrod", | |
255 | "Sorcinelli", | |
256 | "UserAgent", | |
257 | "Voelker", | |
258 | "WAP", | |
259 | "WebKit", | |
260 | "WinNT", | |
261 | "Yoshiki", | |
262 | "adm", | |
263 | "ahrefs", | |
264 | "altavista", | |
265 | "aol", | |
266 | "apache", | |
267 | "applecoremedia", | |
268 | "askjeeves", | |
269 | "audrey", | |
270 | "avantgo", | |
271 | "baidu", | |
272 | "bingbot", | |
273 | "browsex", | |
274 | "dalvik", | |
275 | "ds", | |
276 | "dsi", | |
277 | "elinks", | |
278 | "facebook", | |
279 | "firefox", | |
280 | "galeon", | |
281 | "getright", | |
282 | "golib", | |
283 | "googleadsbot", | |
284 | "googleadsense", | |
285 | "googlebot", | |
286 | "googlebotimage", | |
287 | "googlebotnews", | |
288 | "googlebotvideo", | |
289 | "googlefavicon", | |
290 | "googlemobile", | |
291 | "icab", | |
292 | "ie", | |
293 | "indy", | |
294 | "infoseek", | |
295 | "iopener", | |
296 | "ios", | |
297 | "ipad", | |
298 | "iphone", | |
299 | "ipod", | |
300 | "ipsagent", | |
301 | "khtml", | |
302 | "kindlefire", | |
303 | "konqueror", | |
304 | "linkchecker", | |
305 | "linkexchange", | |
306 | "lotusnotes", | |
307 | "lycos", | |
308 | "macosx", | |
309 | "macppc", | |
310 | "merlynkline", | |
311 | "mj", | |
312 | "mozilla", | |
313 | "msn", | |
314 | "msnmobile", | |
315 | "msoffice", | |
316 | "nav", | |
317 | "navgold", | |
318 | "neoplanet", | |
319 | "netfront", | |
320 | "netscape", | |
321 | "nutch", | |
322 | "obigo", | |
323 | "phplib", | |
324 | "polaris", | |
325 | "ps", | |
326 | "psp", | |
327 | "pubsub", | |
328 | "puf", | |
329 | "realplayer", | |
330 | "rubylib", | |
331 | "seamonkey", | |
332 | "specialarchiver", | |
333 | "staroffice", | |
334 | "ucbrowser", | |
335 | "userAgent", | |
336 | "wap", | |
337 | "webkit", | |
338 | "webos", | |
339 | "webtv", | |
340 | "wget", | |
341 | "winnt", | |
342 | "winphone", | |
343 | "yandex", | |
344 | "yandexbot", | |
345 | "yandeximages" | |
346 | ], | |
347 | "wordlist" : "Pod::Wordlist" | |
348 | } | |
349 | }, | |
350 | "name" : "@Author::OALDERS/Test::PodSpelling", | |
351 | "version" : "2.007005" | |
220 | 352 | }, |
221 | 353 | { |
222 | 354 | "class" : "Dist::Zilla::Plugin::PodSyntaxTests", |
397 | 529 | } |
398 | 530 | }, |
399 | 531 | "name" : "@Author::OALDERS/Git::GatherDir", |
400 | "version" : "2.045" | |
532 | "version" : "2.046" | |
401 | 533 | }, |
402 | 534 | { |
403 | 535 | "class" : "Dist::Zilla::Plugin::CopyFilesFromRelease", |
433 | 565 | "changelog" : "Changes" |
434 | 566 | }, |
435 | 567 | "Dist::Zilla::Role::Git::Repo" : { |
436 | "git_version" : "2.20.1", | |
568 | "git_version" : "2.21.0", | |
437 | 569 | "repo_root" : "." |
438 | 570 | } |
439 | 571 | }, |
440 | 572 | "name" : "@Author::OALDERS/Git::Check", |
441 | "version" : "2.045" | |
573 | "version" : "2.046" | |
442 | 574 | }, |
443 | 575 | { |
444 | 576 | "class" : "Dist::Zilla::Plugin::Git::Contributors", |
445 | 577 | "config" : { |
446 | 578 | "Dist::Zilla::Plugin::Git::Contributors" : { |
447 | "git_version" : "2.20.1", | |
579 | "git_version" : "2.21.0", | |
448 | 580 | "include_authors" : 0, |
449 | 581 | "include_releaser" : 1, |
450 | 582 | "order_by" : "name", |
473 | 605 | "class" : "Dist::Zilla::Plugin::TravisCI::StatusBadge", |
474 | 606 | "name" : "@Author::OALDERS/TravisCI::StatusBadge", |
475 | 607 | "version" : "0.007" |
608 | }, | |
609 | { | |
610 | "class" : "Dist::Zilla::Plugin::CheckIssues", | |
611 | "name" : "@Author::OALDERS/CheckIssues", | |
612 | "version" : "0.010" | |
476 | 613 | }, |
477 | 614 | { |
478 | 615 | "class" : "Dist::Zilla::Plugin::ConfirmRelease", |
535 | 672 | "config" : { |
536 | 673 | "Dist::Zilla::Plugin::Git::Commit" : { |
537 | 674 | "add_files_in" : [], |
538 | "commit_msg" : "v%v%n%n%c" | |
675 | "commit_msg" : "v%V%n%n%c" | |
539 | 676 | }, |
540 | 677 | "Dist::Zilla::Role::Git::DirtyFiles" : { |
541 | 678 | "allow_dirty" : [ |
552 | 689 | "changelog" : "Changes" |
553 | 690 | }, |
554 | 691 | "Dist::Zilla::Role::Git::Repo" : { |
555 | "git_version" : "2.20.1", | |
692 | "git_version" : "2.21.0", | |
556 | 693 | "repo_root" : "." |
557 | 694 | }, |
558 | 695 | "Dist::Zilla::Role::Git::StringFormatter" : { |
560 | 697 | } |
561 | 698 | }, |
562 | 699 | "name" : "@Author::OALDERS/@Git::VersionManager/release snapshot", |
563 | "version" : "2.045" | |
700 | "version" : "2.046" | |
564 | 701 | }, |
565 | 702 | { |
566 | 703 | "class" : "Dist::Zilla::Plugin::Git::Tag", |
569 | 706 | "branch" : null, |
570 | 707 | "changelog" : "Changes", |
571 | 708 | "signed" : 0, |
572 | "tag" : "v3.21", | |
573 | "tag_format" : "v%v", | |
574 | "tag_message" : "v%v" | |
709 | "tag" : "v3.23", | |
710 | "tag_format" : "v%V", | |
711 | "tag_message" : "v%V" | |
575 | 712 | }, |
576 | 713 | "Dist::Zilla::Role::Git::Repo" : { |
577 | "git_version" : "2.20.1", | |
714 | "git_version" : "2.21.0", | |
578 | 715 | "repo_root" : "." |
579 | 716 | }, |
580 | 717 | "Dist::Zilla::Role::Git::StringFormatter" : { |
582 | 719 | } |
583 | 720 | }, |
584 | 721 | "name" : "@Author::OALDERS/@Git::VersionManager/Git::Tag", |
585 | "version" : "2.045" | |
722 | "version" : "2.046" | |
586 | 723 | }, |
587 | 724 | { |
588 | 725 | "class" : "Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional", |
624 | 761 | "changelog" : "Changes" |
625 | 762 | }, |
626 | 763 | "Dist::Zilla::Role::Git::Repo" : { |
627 | "git_version" : "2.20.1", | |
764 | "git_version" : "2.21.0", | |
628 | 765 | "repo_root" : "." |
629 | 766 | }, |
630 | 767 | "Dist::Zilla::Role::Git::StringFormatter" : { |
632 | 769 | } |
633 | 770 | }, |
634 | 771 | "name" : "@Author::OALDERS/@Git::VersionManager/post-release commit", |
635 | "version" : "2.045" | |
772 | "version" : "2.046" | |
636 | 773 | }, |
637 | 774 | { |
638 | 775 | "class" : "Dist::Zilla::Plugin::Git::Push", |
644 | 781 | "remotes_must_exist" : 1 |
645 | 782 | }, |
646 | 783 | "Dist::Zilla::Role::Git::Repo" : { |
647 | "git_version" : "2.20.1", | |
784 | "git_version" : "2.21.0", | |
648 | 785 | "repo_root" : "." |
649 | 786 | } |
650 | 787 | }, |
651 | 788 | "name" : "@Author::OALDERS/Git::Push", |
652 | "version" : "2.045" | |
789 | "version" : "2.046" | |
653 | 790 | }, |
654 | 791 | { |
655 | 792 | "class" : "Dist::Zilla::Plugin::Prereqs", |
661 | 798 | }, |
662 | 799 | "name" : "DevelopRequires", |
663 | 800 | "version" : "6.012" |
801 | }, | |
802 | { | |
803 | "class" : "Dist::Zilla::Plugin::StaticInstall", | |
804 | "config" : { | |
805 | "Dist::Zilla::Plugin::StaticInstall" : { | |
806 | "dry_run" : 0, | |
807 | "mode" : "on" | |
808 | } | |
809 | }, | |
810 | "name" : "StaticInstall", | |
811 | "version" : "0.012" | |
664 | 812 | }, |
665 | 813 | { |
666 | 814 | "class" : "Dist::Zilla::Plugin::FinderCode", |
733 | 881 | "Graham Barr <gbarr@pobox.com>", |
734 | 882 | "gregor herrmann <gregor+github@comodo.priv.at>", |
735 | 883 | "Hao Wu <hwu@intellisurvey.com>", |
884 | "James Waters <james@jcwaters.co.uk>", | |
736 | 885 | "joatis <joatis3@gmail.com>", |
737 | 886 | "Jon Jensen <jon@endpoint.com>", |
738 | 887 | "ktat <ktat.is@gmail.com>", |
756 | 905 | "yeahoffline <frank.gasser@gmail.com>" |
757 | 906 | ], |
758 | 907 | "x_generated_by_perl" : "v5.26.1", |
759 | "x_serialization_backend" : "Cpanel::JSON::XS version 4.04" | |
908 | "x_serialization_backend" : "Cpanel::JSON::XS version 4.04", | |
909 | "x_static_install" : 1 | |
760 | 910 | } |
761 | 911 |
38 | 38 | bugtracker: https://github.com/oalders/http-browserdetect/issues |
39 | 39 | homepage: https://github.com/oalders/http-browserdetect |
40 | 40 | repository: https://github.com/oalders/http-browserdetect.git |
41 | version: '3.21' | |
41 | version: '3.23' | |
42 | 42 | x_Dist_Zilla: |
43 | 43 | perl: |
44 | 44 | version: '5.026001' |
139 | 139 | class: Dist::Zilla::Plugin::ExecDir |
140 | 140 | name: '@Author::OALDERS/ExecDir' |
141 | 141 | version: '6.012' |
142 | - | |
143 | class: Dist::Zilla::Plugin::Test::PodSpelling | |
144 | config: | |
145 | Dist::Zilla::Plugin::Test::PodSpelling: | |
146 | directories: | |
147 | - bin | |
148 | - lib | |
149 | spell_cmd: '' | |
150 | stopwords: | |
151 | - Alders | |
152 | - "Alders'" | |
153 | - AnnoCPAN | |
154 | - Atsushi | |
155 | - Cebrin | |
156 | - Firebird | |
157 | - Florian | |
158 | - Heiko | |
159 | - Iceweasel | |
160 | - KHTML | |
161 | - Kato | |
162 | - Kurihara | |
163 | - Latypoff | |
164 | - McGregor | |
165 | - Oatis | |
166 | - Pelzer | |
167 | - Purkis | |
168 | - Rask | |
169 | - RealPlayer | |
170 | - Rifkin | |
171 | - Ritter | |
172 | - Smidsrod | |
173 | - Sorcinelli | |
174 | - UserAgent | |
175 | - Voelker | |
176 | - WAP | |
177 | - WebKit | |
178 | - WinNT | |
179 | - Yoshiki | |
180 | - adm | |
181 | - ahrefs | |
182 | - altavista | |
183 | - aol | |
184 | - apache | |
185 | - applecoremedia | |
186 | - askjeeves | |
187 | - audrey | |
188 | - avantgo | |
189 | - baidu | |
190 | - bingbot | |
191 | - browsex | |
192 | - dalvik | |
193 | - ds | |
194 | - dsi | |
195 | - elinks | |
196 | ||
197 | - firefox | |
198 | - galeon | |
199 | - getright | |
200 | - golib | |
201 | - googleadsbot | |
202 | - googleadsense | |
203 | - googlebot | |
204 | - googlebotimage | |
205 | - googlebotnews | |
206 | - googlebotvideo | |
207 | - googlefavicon | |
208 | - googlemobile | |
209 | - icab | |
210 | - ie | |
211 | - indy | |
212 | - infoseek | |
213 | - iopener | |
214 | - ios | |
215 | - ipad | |
216 | - iphone | |
217 | - ipod | |
218 | - ipsagent | |
219 | - khtml | |
220 | - kindlefire | |
221 | - konqueror | |
222 | - linkchecker | |
223 | - linkexchange | |
224 | - lotusnotes | |
225 | - lycos | |
226 | - macosx | |
227 | - macppc | |
228 | - merlynkline | |
229 | - mj | |
230 | - mozilla | |
231 | - msn | |
232 | - msnmobile | |
233 | - msoffice | |
234 | - nav | |
235 | - navgold | |
236 | - neoplanet | |
237 | - netfront | |
238 | - netscape | |
239 | - nutch | |
240 | - obigo | |
241 | - phplib | |
242 | - polaris | |
243 | - ps | |
244 | - psp | |
245 | - pubsub | |
246 | - puf | |
247 | - realplayer | |
248 | - rubylib | |
249 | - seamonkey | |
250 | - specialarchiver | |
251 | - staroffice | |
252 | - ucbrowser | |
253 | - userAgent | |
254 | - wap | |
255 | - webkit | |
256 | - webos | |
257 | - webtv | |
258 | - wget | |
259 | - winnt | |
260 | - winphone | |
261 | - yandex | |
262 | - yandexbot | |
263 | - yandeximages | |
264 | wordlist: Pod::Wordlist | |
265 | name: '@Author::OALDERS/Test::PodSpelling' | |
266 | version: '2.007005' | |
142 | 267 | - |
143 | 268 | class: Dist::Zilla::Plugin::PodSyntaxTests |
144 | 269 | name: '@Author::OALDERS/PodSyntaxTests' |
279 | 404 | Dist::Zilla::Plugin::Git::GatherDir: |
280 | 405 | include_untracked: 0 |
281 | 406 | name: '@Author::OALDERS/Git::GatherDir' |
282 | version: '2.045' | |
407 | version: '2.046' | |
283 | 408 | - |
284 | 409 | class: Dist::Zilla::Plugin::CopyFilesFromRelease |
285 | 410 | config: |
307 | 432 | allow_dirty_match: [] |
308 | 433 | changelog: Changes |
309 | 434 | Dist::Zilla::Role::Git::Repo: |
310 | git_version: 2.20.1 | |
435 | git_version: 2.21.0 | |
311 | 436 | repo_root: . |
312 | 437 | name: '@Author::OALDERS/Git::Check' |
313 | version: '2.045' | |
438 | version: '2.046' | |
314 | 439 | - |
315 | 440 | class: Dist::Zilla::Plugin::Git::Contributors |
316 | 441 | config: |
317 | 442 | Dist::Zilla::Plugin::Git::Contributors: |
318 | git_version: 2.20.1 | |
443 | git_version: 2.21.0 | |
319 | 444 | include_authors: 0 |
320 | 445 | include_releaser: 1 |
321 | 446 | order_by: name |
337 | 462 | class: Dist::Zilla::Plugin::TravisCI::StatusBadge |
338 | 463 | name: '@Author::OALDERS/TravisCI::StatusBadge' |
339 | 464 | version: '0.007' |
465 | - | |
466 | class: Dist::Zilla::Plugin::CheckIssues | |
467 | name: '@Author::OALDERS/CheckIssues' | |
468 | version: '0.010' | |
340 | 469 | - |
341 | 470 | class: Dist::Zilla::Plugin::ConfirmRelease |
342 | 471 | name: '@Author::OALDERS/ConfirmRelease' |
384 | 513 | config: |
385 | 514 | Dist::Zilla::Plugin::Git::Commit: |
386 | 515 | add_files_in: [] |
387 | commit_msg: v%v%n%n%c | |
516 | commit_msg: v%V%n%n%c | |
388 | 517 | Dist::Zilla::Role::Git::DirtyFiles: |
389 | 518 | allow_dirty: |
390 | 519 | - Changes |
398 | 527 | allow_dirty_match: [] |
399 | 528 | changelog: Changes |
400 | 529 | Dist::Zilla::Role::Git::Repo: |
401 | git_version: 2.20.1 | |
530 | git_version: 2.21.0 | |
402 | 531 | repo_root: . |
403 | 532 | Dist::Zilla::Role::Git::StringFormatter: |
404 | 533 | time_zone: local |
405 | 534 | name: '@Author::OALDERS/@Git::VersionManager/release snapshot' |
406 | version: '2.045' | |
535 | version: '2.046' | |
407 | 536 | - |
408 | 537 | class: Dist::Zilla::Plugin::Git::Tag |
409 | 538 | config: |
411 | 540 | branch: ~ |
412 | 541 | changelog: Changes |
413 | 542 | signed: 0 |
414 | tag: v3.21 | |
415 | tag_format: v%v | |
416 | tag_message: v%v | |
543 | tag: v3.23 | |
544 | tag_format: v%V | |
545 | tag_message: v%V | |
417 | 546 | Dist::Zilla::Role::Git::Repo: |
418 | git_version: 2.20.1 | |
547 | git_version: 2.21.0 | |
419 | 548 | repo_root: . |
420 | 549 | Dist::Zilla::Role::Git::StringFormatter: |
421 | 550 | time_zone: local |
422 | 551 | name: '@Author::OALDERS/@Git::VersionManager/Git::Tag' |
423 | version: '2.045' | |
552 | version: '2.046' | |
424 | 553 | - |
425 | 554 | class: Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional |
426 | 555 | config: |
452 | 581 | - (?^:^lib/.*\.pm$) |
453 | 582 | changelog: Changes |
454 | 583 | Dist::Zilla::Role::Git::Repo: |
455 | git_version: 2.20.1 | |
584 | git_version: 2.21.0 | |
456 | 585 | repo_root: . |
457 | 586 | Dist::Zilla::Role::Git::StringFormatter: |
458 | 587 | time_zone: local |
459 | 588 | name: '@Author::OALDERS/@Git::VersionManager/post-release commit' |
460 | version: '2.045' | |
589 | version: '2.046' | |
461 | 590 | - |
462 | 591 | class: Dist::Zilla::Plugin::Git::Push |
463 | 592 | config: |
466 | 595 | - origin |
467 | 596 | remotes_must_exist: 1 |
468 | 597 | Dist::Zilla::Role::Git::Repo: |
469 | git_version: 2.20.1 | |
598 | git_version: 2.21.0 | |
470 | 599 | repo_root: . |
471 | 600 | name: '@Author::OALDERS/Git::Push' |
472 | version: '2.045' | |
601 | version: '2.046' | |
473 | 602 | - |
474 | 603 | class: Dist::Zilla::Plugin::Prereqs |
475 | 604 | config: |
478 | 607 | type: requires |
479 | 608 | name: DevelopRequires |
480 | 609 | version: '6.012' |
610 | - | |
611 | class: Dist::Zilla::Plugin::StaticInstall | |
612 | config: | |
613 | Dist::Zilla::Plugin::StaticInstall: | |
614 | dry_run: 0 | |
615 | mode: on | |
616 | name: StaticInstall | |
617 | version: '0.012' | |
481 | 618 | - |
482 | 619 | class: Dist::Zilla::Plugin::FinderCode |
483 | 620 | name: ':InstallModules' |
535 | 672 | - 'Graham Barr <gbarr@pobox.com>' |
536 | 673 | - 'gregor herrmann <gregor+github@comodo.priv.at>' |
537 | 674 | - 'Hao Wu <hwu@intellisurvey.com>' |
675 | - 'James Waters <james@jcwaters.co.uk>' | |
538 | 676 | - 'joatis <joatis3@gmail.com>' |
539 | 677 | - 'Jon Jensen <jon@endpoint.com>' |
540 | 678 | - 'ktat <ktat.is@gmail.com>' |
558 | 696 | - 'yeahoffline <frank.gasser@gmail.com>' |
559 | 697 | x_generated_by_perl: v5.26.1 |
560 | 698 | x_serialization_backend: 'YAML::Tiny version 1.70' |
699 | x_static_install: 1 |
33 | 33 | "Test::Most" => 0, |
34 | 34 | "Test::NoWarnings" => 0 |
35 | 35 | }, |
36 | "VERSION" => "3.21", | |
36 | "VERSION" => "3.23", | |
37 | 37 | "test" => { |
38 | 38 | "TESTS" => "t/*.t" |
39 | 39 | } |
3 | 3 | |
4 | 4 | # VERSION |
5 | 5 | |
6 | version 3.21 | |
6 | version 3.23 | |
7 | 7 | |
8 | 8 | # SYNOPSIS |
9 | 9 | |
37 | 37 | print "MSIE\n" if $ua->ie; |
38 | 38 | print "Mobile\n" if $ua->mobile; |
39 | 39 | if ( $ua->browser_major(4) ) { |
40 | if ( $ua->browser_minor() > .5 ) { | |
40 | if ( $ua->browser_minor > .5 ) { | |
41 | 41 | # ...; |
42 | 42 | } |
43 | 43 | } |
44 | if ( $ua->browser_version() > 4.5 ) { | |
44 | if ( $ua->browser_version > 4.5 ) { | |
45 | 45 | # ...; |
46 | 46 | } |
47 | 47 | |
584 | 584 | been removed; please use HTTP::BrowserDetect->new() to pass the user |
585 | 585 | agent string. |
586 | 586 | |
587 | ## u2f() | |
588 | ||
589 | Returns true if this browser and version are known to support Universal Second | |
590 | Factor (U2F). This method will need future updates as more browsers fully | |
591 | support this standard. | |
592 | ||
587 | 593 | ## country() |
588 | 594 | |
589 | 595 | Returns the country string as it may be found in the user agent string. This |
860 | 866 | |
861 | 867 | # COPYRIGHT AND LICENSE |
862 | 868 | |
863 | This software is copyright (c) 2017 by Lee Semel. | |
869 | This software is copyright (c) 2019 by Lee Semel. | |
864 | 870 | |
865 | 871 | This is free software; you can redistribute it and/or modify it under |
866 | 872 | the same terms as the Perl 5 programming language system itself. |
36 | 36 | requires "Parallel::ForkManager" => "1.19"; |
37 | 37 | requires "Perl::Critic" => "1.132"; |
38 | 38 | requires "Perl::Tidy" => "20180220"; |
39 | requires "Pod::Wordlist" => "0"; | |
39 | 40 | requires "Test::CPAN::Changes" => "0.19"; |
40 | 41 | requires "Test::Code::TidyAll" => "0.50"; |
41 | 42 | requires "Test::More" => "0.96"; |
42 | 43 | requires "Test::Pod" => "1.41"; |
44 | requires "Test::Spelling" => "0.12"; | |
43 | 45 | requires "Test::Synopsis" => "0"; |
44 | 46 | requires "Test::Vars" => "0.014"; |
45 | 47 | }; |
3 | 3 | author = Olaf Alders <olaf@wundercounter.com> (current maintainer) |
4 | 4 | license = Perl_5 |
5 | 5 | copyright_holder = Lee Semel |
6 | copyright_year = 2017 | |
6 | copyright_year = 2019 | |
7 | 7 | main_module = lib/HTTP/BrowserDetect.pm |
8 | 8 | |
9 | 9 | [@Author::OALDERS] |
10 | 10 | -remove = MinimumPerl |
11 | 11 | -remove = Test::Perl::Critic |
12 | -remove = Test::PodSpelling | |
13 | 12 | -remove = PodCoverageTests |
13 | -remove = StaticInstall | |
14 | 14 | |
15 | 15 | [Prereqs / DevelopRequires] |
16 | 16 | Code::TidyAll::Plugin::UniqueLines = 0.000003 |
17 | ||
18 | [StaticInstall] | |
19 | mode = on |
4 | 4 | |
5 | 5 | package HTTP::BrowserDetect; |
6 | 6 | |
7 | our $VERSION = '3.21'; | |
7 | our $VERSION = '3.23'; | |
8 | 8 | |
9 | 9 | use vars qw(@ALL_TESTS); |
10 | 10 | |
929 | 929 | |
930 | 930 | $self->{browser} = $browser; |
931 | 931 | $self->{browser_string} = $browser_string || $BROWSER_NAMES{$browser} |
932 | if defined($browser); | |
932 | if defined $browser; | |
933 | 933 | |
934 | 934 | # Other random tests |
935 | 935 | |
957 | 957 | $self->{realplayer_version} = $1; |
958 | 958 | ( $self->{major}, $self->{minor} ) |
959 | 959 | = split( /\./, $self->{realplayer_version} ); |
960 | $self->{minor} = ".$self->{minor}" if defined( $self->{minor} ); | |
960 | $self->{minor} = ".$self->{minor}" if defined $self->{minor}; | |
961 | 961 | } |
962 | 962 | elsif ( $ua =~ /realplayer\s(\w+)/ ) { |
963 | 963 | $self->{realplayer_version} = $1; |
1059 | 1059 | $robot_fragment = 'msnbot'; |
1060 | 1060 | } |
1061 | 1061 | elsif (index( $ua, 'binglocalsearch' ) != -1 |
1062 | || index( $ua, 'bingbot' ) != -1 ) { | |
1062 | || index( $ua, 'bingbot' ) != -1 | |
1063 | || index( $ua, 'bingpreview' ) != -1 ) { | |
1063 | 1064 | $r = 'bingbot'; |
1064 | 1065 | $robot_tests->{bingbot} = 1; |
1065 | 1066 | $robot_fragment = 'bingbot'; |
1265 | 1266 | # This isn't all keyed on ids (yet) |
1266 | 1267 | $self->{robot_string} = $ROBOT_NAMES{$id} || $ROBOT_NAMES{$r}; |
1267 | 1268 | $robot_tests->{robot} = $r; |
1268 | $robot_fragment = $r if !defined($robot_fragment); | |
1269 | $robot_fragment = $r if !defined $robot_fragment; | |
1269 | 1270 | } |
1270 | 1271 | elsif ( $ua =~ /seek (?! mo (?: toolbar )? \s+ \d+\.\d+ )/x ) { |
1271 | 1272 | |
1313 | 1314 | $robot_tests->{robot_id} = 'unknown'; |
1314 | 1315 | } |
1315 | 1316 | |
1316 | if ( defined($robot_fragment) ) { | |
1317 | if ( defined $robot_fragment ) { | |
1317 | 1318 | |
1318 | 1319 | # Examine what surrounds the fragment; that leads us to the |
1319 | 1320 | # version and the string (if we haven't explicitly set one). |
1354 | 1355 | |
1355 | 1356 | # Set robot_string, if we don't already have an explictly set |
1356 | 1357 | # one |
1357 | if ( !defined( $self->{robot_string} ) ) { | |
1358 | if ( !defined $self->{robot_string} ) { | |
1358 | 1359 | $self->{robot_string} = $full_string; |
1359 | 1360 | } |
1360 | 1361 | } |
1721 | 1722 | |
1722 | 1723 | my $os_version = undef; |
1723 | 1724 | |
1724 | if ( !defined($os) ) { | |
1725 | if ( !defined $os ) { | |
1725 | 1726 | |
1726 | 1727 | # Nothing is going to work if we have no OS. Skip everything. |
1727 | 1728 | } |
1785 | 1786 | ### using a browser that needs some special method to determine |
1786 | 1787 | ### the version. |
1787 | 1788 | |
1788 | if ( defined($browser) && $browser eq 'opera' ) { | |
1789 | if ( defined $browser && $browser eq 'opera' ) { | |
1789 | 1790 | |
1790 | 1791 | # Opera has a 'compatible; ' section, but lies sometimes. It needs |
1791 | 1792 | # special handling. |
1842 | 1843 | if ( my ( $safari_build, $safari_minor ) = split /\./, $1 ) { |
1843 | 1844 | $major = int( $safari_build / 100 ); |
1844 | 1845 | $minor = int( $safari_build % 100 ); |
1845 | $beta = ".$safari_minor" if $safari_minor; | |
1846 | $beta = ".$safari_minor" if defined $safari_minor; | |
1846 | 1847 | } |
1847 | 1848 | } |
1848 | 1849 | elsif ( $ua =~ m{applewebkit\/([\d\.]{1,})}xi ) { |
1937 | 1938 | |
1938 | 1939 | # If we didn't match a browser-specific test, we look for |
1939 | 1940 | # '$browser/x.y.z' |
1940 | if ( !defined($major) and defined( $self->{browser_string} ) ) { | |
1941 | if ( !defined $major && defined $self->{browser_string} ) { | |
1941 | 1942 | my $version_index = index( $ua, lc "$self->{browser_string}/" ); |
1942 | 1943 | if ( $version_index != -1 ) { |
1943 | 1944 | my $version_str |
1951 | 1952 | } |
1952 | 1953 | |
1953 | 1954 | # If that didn't work, we try 'Version/x.y.z' |
1954 | if ( !defined($major) ) { | |
1955 | if ( !defined $major ) { | |
1955 | 1956 | if ( $ua =~ m{version/(\d+)\.(\d+)([\w.]*)} ) { |
1956 | 1957 | $major = $1; |
1957 | 1958 | $minor = $2; |
1961 | 1962 | |
1962 | 1963 | # If that didn't work, we start guessing. Just grab |
1963 | 1964 | # anything after a word and a slash. |
1964 | if ( !defined($major) ) { | |
1965 | if ( !defined $major ) { | |
1965 | 1966 | |
1966 | 1967 | ( $major, $minor, $beta ) = ( |
1967 | 1968 | $ua =~ m{ |
1978 | 1979 | } |
1979 | 1980 | |
1980 | 1981 | # If that didn't work, try even more generic. |
1981 | if ( !defined($major) ) { | |
1982 | if ( !defined $major ) { | |
1982 | 1983 | |
1983 | 1984 | if ( $ua =~ /[A-Za-z]+\/(\d+)\;/ ) { |
1984 | 1985 | $major = $1; |
1989 | 1990 | # If that didn't work, give up. |
1990 | 1991 | $major = 0 if !$major; |
1991 | 1992 | $minor = 0 if !$minor; |
1992 | $beta = undef if ( defined($beta) && $beta eq q{} ); | |
1993 | $beta = undef if ( defined $beta && $beta eq q{} ); | |
1993 | 1994 | |
1994 | 1995 | # Now set version tests |
1995 | 1996 | |
2005 | 2006 | if ( $major == 4 && ".$minor" >= .5 ) |
2006 | 2007 | || $major >= 5; |
2007 | 2008 | $version_tests->{navgold} = 1 |
2008 | if defined($beta) && ( index( $beta, 'gold' ) != -1 ); | |
2009 | if defined $beta && ( index( $beta, 'gold' ) != -1 ); | |
2009 | 2010 | $version_tests->{nav6} = 1 |
2010 | 2011 | if ( $major == 5 || $major == 6 ); # go figure |
2011 | 2012 | $version_tests->{nav6up} = 1 if $major >= 5; |
2039 | 2040 | $version_tests->{ie_compat_mode} |
2040 | 2041 | = ( $version_tests->{ie7} |
2041 | 2042 | && $tests->{trident} |
2042 | && $self->{engine_version} + 0 >= 4 ); | |
2043 | && defined $self->engine_version | |
2044 | && $self->engine_version >= 4 ); | |
2043 | 2045 | } |
2044 | 2046 | |
2045 | 2047 | if ( $browser_tests->{aol} ) { |
2430 | 2432 | sub robot_version { |
2431 | 2433 | my ($self) = @_; |
2432 | 2434 | my ( $major, $minor, $beta ) = $self->_robot_version; |
2433 | if ( defined($major) ) { | |
2434 | if ( defined($minor) ) { | |
2435 | if ( defined $major ) { | |
2436 | if ( defined $minor ) { | |
2435 | 2437 | return "$major$minor"; |
2436 | 2438 | } |
2437 | 2439 | else { |
2491 | 2493 | sub os_version { |
2492 | 2494 | my ($self) = @_; |
2493 | 2495 | my ( $major, $minor, $beta ) = $self->_os_version; |
2494 | if ( defined($major) ) { | |
2495 | return "$major$minor"; | |
2496 | return defined $major ? "$major$minor" : undef; | |
2497 | } | |
2498 | ||
2499 | sub os_major { | |
2500 | my ($self) = @_; | |
2501 | my ( $major, $minor, $beta ) = $self->_os_version; | |
2502 | return $major; | |
2503 | } | |
2504 | ||
2505 | sub os_minor { | |
2506 | my ($self) = @_; | |
2507 | my ( $major, $minor, $beta ) = $self->_os_version; | |
2508 | return $minor; | |
2509 | } | |
2510 | ||
2511 | sub os_beta { | |
2512 | my ($self) = @_; | |
2513 | my ( $major, $minor, $beta ) = $self->_os_version; | |
2514 | return $beta; | |
2515 | } | |
2516 | ||
2517 | sub _realplayer_version { | |
2518 | my ($self) = @_; | |
2519 | ||
2520 | $self->_init_version unless $self->{version_tests}; | |
2521 | return $self->{realplayer_version} || 0; | |
2522 | } | |
2523 | ||
2524 | sub realplayer_browser { | |
2525 | my ($self) = @_; | |
2526 | return defined( $self->{browser} ) && $self->{browser} eq 'realplayer'; | |
2527 | } | |
2528 | ||
2529 | sub gecko_version { | |
2530 | my ($self) = @_; | |
2531 | ||
2532 | if ( $self->gecko ) { | |
2533 | return $self->{engine_version}; | |
2496 | 2534 | } |
2497 | 2535 | else { |
2498 | 2536 | return undef; |
2499 | 2537 | } |
2500 | 2538 | } |
2501 | 2539 | |
2502 | sub os_major { | |
2503 | my ($self) = @_; | |
2504 | my ( $major, $minor, $beta ) = $self->_os_version; | |
2505 | return $major; | |
2506 | } | |
2507 | ||
2508 | sub os_minor { | |
2509 | my ($self) = @_; | |
2510 | my ( $major, $minor, $beta ) = $self->_os_version; | |
2511 | return $minor; | |
2512 | } | |
2513 | ||
2514 | sub os_beta { | |
2515 | my ($self) = @_; | |
2516 | my ( $major, $minor, $beta ) = $self->_os_version; | |
2517 | return $beta; | |
2518 | } | |
2519 | ||
2520 | sub _realplayer_version { | |
2521 | my ($self) = @_; | |
2522 | ||
2523 | $self->_init_version unless $self->{version_tests}; | |
2524 | return $self->{realplayer_version} || 0; | |
2525 | } | |
2526 | ||
2527 | sub realplayer_browser { | |
2528 | my ($self) = @_; | |
2529 | return defined( $self->{browser} ) && $self->{browser} eq 'realplayer'; | |
2530 | } | |
2531 | ||
2532 | sub gecko_version { | |
2533 | my ($self) = @_; | |
2534 | ||
2535 | if ( $self->gecko ) { | |
2536 | return $self->{engine_version}; | |
2537 | } | |
2538 | else { | |
2539 | return undef; | |
2540 | } | |
2541 | } | |
2542 | ||
2543 | 2540 | sub version { |
2544 | 2541 | my ($self) = @_; |
2545 | 2542 | $self->_init_version() unless $self->{version_tests}; |
2546 | 2543 | |
2547 | my $version = "$self->{major}$self->{minor}"; | |
2548 | return $version; | |
2544 | return defined $self->{major} ? "$self->{major}$self->{minor}" : undef; | |
2549 | 2545 | } |
2550 | 2546 | |
2551 | 2547 | sub major { |
2569 | 2565 | my ( $major, $minor ) = $self->_public; |
2570 | 2566 | |
2571 | 2567 | $minor ||= q{}; |
2572 | return "$major$minor"; | |
2568 | return defined $major ? "$major$minor" : undef; | |
2573 | 2569 | } |
2574 | 2570 | |
2575 | 2571 | sub public_major { |
2598 | 2594 | my ( $major, $minor ) = $self->_public; |
2599 | 2595 | $minor ||= q{}; |
2600 | 2596 | |
2601 | return "$major$minor"; | |
2597 | return defined $major ? "$major$minor" : undef; | |
2602 | 2598 | } |
2603 | 2599 | |
2604 | 2600 | sub browser_major { |
2662 | 2658 | # Special case for specific worm that uses a malformed user agent |
2663 | 2659 | return ( '1', '.2', undef ) if $ua =~ m{safari/12x}; |
2664 | 2660 | } |
2661 | ||
2662 | return ( undef, undef, undef ) unless defined $version; | |
2665 | 2663 | my ( $major, $minor ) = split /\./, $version; |
2666 | 2664 | my $beta; |
2667 | 2665 | $minor =~ s/(\D.*)// and $beta = $1; |
2754 | 2752 | } |
2755 | 2753 | } |
2756 | 2754 | |
2757 | return $self->{engine_version}; | |
2755 | return undef; | |
2758 | 2756 | } |
2759 | 2757 | |
2760 | 2758 | sub engine_major { |
2926 | 2924 | return keys %ROBOT_NAMES; |
2927 | 2925 | } |
2928 | 2926 | |
2927 | # The list of U2F supported browsers is expected to increase: | |
2928 | # https://www.bit-tech.net/news/tech/software/w3c-adopts-fidos-webauthn-standard/1/ | |
2929 | ||
2930 | sub u2f { | |
2931 | my $self = shift; | |
2932 | ||
2933 | # Chrome version 41 and up can U2F | |
2934 | return 1 | |
2935 | if $self->chrome | |
2936 | && $self->browser_major | |
2937 | && $self->browser_major >= 41; | |
2938 | ||
2939 | # Opera versions 40 and >= 42 can U2F | |
2940 | return 1 | |
2941 | if $self->opera | |
2942 | && $self->browser_major | |
2943 | && ( $self->browser_major == 40 | |
2944 | || $self->browser_major >= 42 ); | |
2945 | ||
2946 | return undef; | |
2947 | } | |
2948 | ||
2929 | 2949 | # These method are only used by the test suite. |
2930 | 2950 | sub _all_tests { |
2931 | 2951 | return @ALL_TESTS; |
2959 | 2979 | |
2960 | 2980 | =head1 VERSION |
2961 | 2981 | |
2962 | version 3.21 | |
2982 | version 3.23 | |
2963 | 2983 | |
2964 | 2984 | =head1 SYNOPSIS |
2965 | 2985 | |
2993 | 3013 | print "MSIE\n" if $ua->ie; |
2994 | 3014 | print "Mobile\n" if $ua->mobile; |
2995 | 3015 | if ( $ua->browser_major(4) ) { |
2996 | if ( $ua->browser_minor() > .5 ) { | |
3016 | if ( $ua->browser_minor > .5 ) { | |
2997 | 3017 | # ...; |
2998 | 3018 | } |
2999 | 3019 | } |
3000 | if ( $ua->browser_version() > 4.5 ) { | |
3020 | if ( $ua->browser_version > 4.5 ) { | |
3001 | 3021 | # ...; |
3002 | 3022 | } |
3003 | 3023 | |
3540 | 3560 | been removed; please use HTTP::BrowserDetect->new() to pass the user |
3541 | 3561 | agent string. |
3542 | 3562 | |
3563 | =head2 u2f() | |
3564 | ||
3565 | Returns true if this browser and version are known to support Universal Second | |
3566 | Factor (U2F). This method will need future updates as more browsers fully | |
3567 | support this standard. | |
3568 | ||
3543 | 3569 | =head2 country() |
3544 | 3570 | |
3545 | 3571 | Returns the country string as it may be found in the user agent string. This |
3832 | 3858 | |
3833 | 3859 | =head1 COPYRIGHT AND LICENSE |
3834 | 3860 | |
3835 | This software is copyright (c) 2017 by Lee Semel. | |
3861 | This software is copyright (c) 2019 by Lee Semel. | |
3836 | 3862 | |
3837 | 3863 | This is free software; you can redistribute it and/or modify it under |
3838 | 3864 | the same terms as the Perl 5 programming language system itself. |
18 | 18 | 'Parallel::ForkManager' => '1.19', |
19 | 19 | 'Perl::Critic' => '1.132', |
20 | 20 | 'Perl::Tidy' => '20180220', |
21 | 'Pod::Wordlist' => '0', | |
21 | 22 | 'Test::CPAN::Changes' => '0.19', |
22 | 23 | 'Test::Code::TidyAll' => '0.50', |
23 | 24 | 'Test::More' => '0.96', |
24 | 25 | 'Test::Pod' => '1.41', |
26 | 'Test::Spelling' => '0.12', | |
25 | 27 | 'Test::Synopsis' => '0', |
26 | 28 | 'Test::Vars' => '0.014' |
27 | 29 | } |
0 | #!/usr/bin/env perl | |
1 | ||
2 | use strict; | |
3 | use warnings; | |
4 | ||
5 | use HTTP::BrowserDetect (); | |
6 | use Test::FailWarnings; | |
7 | use Test::More; | |
8 | ||
9 | ok( my $ua = HTTP::BrowserDetect->new(undef), q{undef produces no warnings} ); | |
10 | ||
11 | subtest 'no warnings on fake MSIE' => sub { | |
12 | my $ua = HTTP::BrowserDetect->new( | |
13 | 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/F3E)'); | |
14 | is( $ua->engine_version, undef, 'undef browser_version' ); | |
15 | is( $ua->engine_major, undef, 'undef engine_major' ); | |
16 | is( $ua->engine_minor, undef, 'undef engine_minor' ); | |
17 | is( $ua->engine_beta, undef, 'undef engine_beta' ); | |
18 | }; | |
19 | ||
20 | done_testing(); |
0 | #!/usr/bin/env perl | |
1 | ||
2 | use strict; | |
3 | use warnings; | |
4 | ||
5 | use HTTP::BrowserDetect; | |
6 | use Test::More; | |
7 | use Test::FailWarnings; | |
8 | ||
9 | ok( my $ua = HTTP::BrowserDetect->new(undef), q{undef produces no warnings} ); | |
10 | ||
11 | done_testing(); |
3337 | 3337 | "os_string" : "WinVista", |
3338 | 3338 | "robot" : null |
3339 | 3339 | }, |
3340 | "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/F3E)" : { | |
3341 | "engine_beta" : null, | |
3342 | "engine_major" : null, | |
3343 | "engine_minor" : null, | |
3344 | "engine_version" : null, | |
3345 | "match" : [ | |
3346 | "ie", | |
3347 | "ie4up", | |
3348 | "ie55up", | |
3349 | "ie5up", | |
3350 | "ie7", | |
3351 | "trident", | |
3352 | "win32", | |
3353 | "windows", | |
3354 | "winnt", | |
3355 | "winvista" | |
3356 | ] | |
3357 | }, | |
3340 | 3358 | "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; HPDTDF; Tablet PC 2.0; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)" : { |
3341 | 3359 | "browser" : "ie", |
3342 | 3360 | "browser_major" : "7", |
10782 | 10800 | "os_string" : "Mac OS X", |
10783 | 10801 | "os_version" : "10.11", |
10784 | 10802 | "robot" : null |
10803 | }, | |
10804 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" : { | |
10805 | "match" : [ | |
10806 | "chrome", | |
10807 | "mac", | |
10808 | "macosx", | |
10809 | "webkit" | |
10810 | ], | |
10811 | "u2f" : 1 | |
10785 | 10812 | }, |
10786 | 10813 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1" : { |
10787 | 10814 | "browser" : "chrome", |
12752 | 12779 | "win32", |
12753 | 12780 | "win7", |
12754 | 12781 | "safari", |
12755 | "webkit" | |
12782 | "webkit", | |
12783 | "robot", | |
12784 | "bingbot" | |
12756 | 12785 | ], |
12757 | 12786 | "os" : "windows", |
12758 | 12787 | "os_string" : "Win7", |
12759 | "robot" : null | |
12788 | "robot" : "bingbot", | |
12789 | "robot_name" : "Bingbot" | |
12760 | 12790 | }, |
12761 | 12791 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML like Gecko) Chrome/13.0.782.112 Safari/535.1" : { |
12762 | 12792 | "browser" : "chrome", |
18397 | 18427 | "os_version" : "4.2", |
18398 | 18428 | "robot" : null |
18399 | 18429 | }, |
18430 | "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) GSA/65.0.225212226 Mobile/14F89 Safari/6" : { | |
18431 | "browser_major" : null, | |
18432 | "browser_minor" : null, | |
18433 | "browser_version" : null, | |
18434 | "match" : [ | |
18435 | "device", | |
18436 | "ios", | |
18437 | "iphone", | |
18438 | "mobile", | |
18439 | "safari", | |
18440 | "webkit" | |
18441 | ] | |
18442 | }, | |
18400 | 18443 | "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/10 Mobile/16A366 Safari/605.1.15 GAYL/2.0.8b1" : { |
18401 | 18444 | "browser_major" : 10, |
18402 | 18445 | "browser_minor" : null, |
20318 | 20361 | "robot_major" : "1", |
20319 | 20362 | "robot_minor" : ".8", |
20320 | 20363 | "robot_name" : "Apache Nutch", |
20321 | "robot_version" : "1.8" | |
20364 | "robot_version" : "1.8", | |
20365 | "u2f" : null | |
20322 | 20366 | }, |
20323 | 20367 | "visionutils/0.2" : { |
20324 | 20368 | "browser_major" : 0, |
0 | use strict; | |
1 | use warnings; | |
2 | use Test::More; | |
3 | ||
4 | # generated by Dist::Zilla::Plugin::Test::PodSpelling 2.007005 | |
5 | use Test::Spelling 0.12; | |
6 | use Pod::Wordlist; | |
7 | ||
8 | ||
9 | add_stopwords(<DATA>); | |
10 | all_pod_files_spelling_ok( qw( bin lib ) ); | |
11 | __DATA__ | |
12 | Alders | |
13 | Alders' | |
14 | Alexandr | |
15 | Alexey | |
16 | Andrew | |
17 | AnnoCPAN | |
18 | Anwar | |
19 | Aran | |
20 | Atsushi | |
21 | Balakrishnan | |
22 | Barr | |
23 | Bilodeau | |
24 | Blake | |
25 | BrowserDetect | |
26 | Cebrin | |
27 | Christopher | |
28 | Ciornii | |
29 | Daniel | |
30 | David | |
31 | Deltac | |
32 | Douglas | |
33 | Doye | |
34 | Findlay | |
35 | Firebird | |
36 | Florian | |
37 | Fontani | |
38 | Graham | |
39 | HTTP | |
40 | Hao | |
41 | Heiko | |
42 | Iceweasel | |
43 | Ihnen | |
44 | James | |
45 | Jensen | |
46 | Jon | |
47 | KHTML | |
48 | Kato | |
49 | Kimball | |
50 | Kollar | |
51 | Kurihara | |
52 | Latypoff | |
53 | Lee | |
54 | MFONTANI | |
55 | Marco | |
56 | Maros | |
57 | McGregor | |
58 | Mohammad | |
59 | Moise | |
60 | Nicolas | |
61 | Oatis | |
62 | Olaf | |
63 | Olivier | |
64 | Paul | |
65 | Pelzer | |
66 | Perlover | |
67 | Peter | |
68 | Purkis | |
69 | Ramanan | |
70 | Rask | |
71 | RealPlayer | |
72 | Rifkin | |
73 | Ritter | |
74 | Robin | |
75 | Ronald | |
76 | Semel | |
77 | Smidsrod | |
78 | Smidsrød | |
79 | Sorcinelli | |
80 | Stadie | |
81 | Surikov | |
82 | Thom | |
83 | UserAgent | |
84 | Uwe | |
85 | Voelker | |
86 | WAP | |
87 | Walsham | |
88 | Waters | |
89 | WebKit | |
90 | Wilson | |
91 | WinNT | |
92 | Wu | |
93 | Yoshiki | |
94 | adm | |
95 | ahrefs | |
96 | alexchorny | |
97 | altavista | |
98 | andrew | |
99 | aol | |
100 | apache | |
101 | applecoremedia | |
102 | askjeeves | |
103 | audrey | |
104 | avantgo | |
105 | baidu | |
106 | ben | |
107 | bingbot | |
108 | bluefeet | |
109 | browsex | |
110 | cho45 | |
111 | current | |
112 | dalvik | |
113 | daniel | |
114 | davidihnen | |
115 | doug | |
116 | ds | |
117 | dsi | |
118 | elinks | |
119 | ||
120 | firefox | |
121 | frank | |
122 | galeon | |
123 | gbarr | |
124 | getright | |
125 | golib | |
126 | googleadsbot | |
127 | googleadsense | |
128 | googlebot | |
129 | googlebotimage | |
130 | googlebotnews | |
131 | googlebotvideo | |
132 | googlefavicon | |
133 | googlemobile | |
134 | gregor | |
135 | hengst | |
136 | herrmann | |
137 | hwu | |
138 | icab | |
139 | ie | |
140 | indy | |
141 | info | |
142 | infoseek | |
143 | iopener | |
144 | ios | |
145 | ipad | |
146 | iphone | |
147 | ipod | |
148 | ipsagent | |
149 | james | |
150 | joatis | |
151 | joatis3 | |
152 | jon | |
153 | khtml | |
154 | kindlefire | |
155 | konqueror | |
156 | ktat | |
157 | lee | |
158 | lib | |
159 | linkchecker | |
160 | linkexchange | |
161 | lotusnotes | |
162 | lsaunders | |
163 | lycos | |
164 | macosx | |
165 | macppc | |
166 | maintainer | |
167 | maros | |
168 | merlynkline | |
169 | mj | |
170 | mohammad | |
171 | mozilla | |
172 | msn | |
173 | msnmobile | |
174 | msoffice | |
175 | nav | |
176 | navgold | |
177 | neoplanet | |
178 | netfront | |
179 | netscape | |
180 | nic | |
181 | notbenh | |
182 | nutch | |
183 | obigo | |
184 | olaf | |
185 | olivier | |
186 | paul | |
187 | perlover | |
188 | phplib | |
189 | polaris | |
190 | ps | |
191 | psp | |
192 | pubsub | |
193 | puf | |
194 | ramanan90 | |
195 | realplayer | |
196 | reneeb | |
197 | rkimball | |
198 | robin | |
199 | rubylib | |
200 | seamonkey | |
201 | specialarchiver | |
202 | staroffice | |
203 | surikov | |
204 | thom | |
205 | ucbrowser | |
206 | userAgent | |
207 | uwe | |
208 | viacheslav | |
209 | vti | |
210 | wap | |
211 | webkit | |
212 | webos | |
213 | webtv | |
214 | wget | |
215 | winnt | |
216 | winphone | |
217 | yandex | |
218 | yandexbot | |
219 | yandeximages | |
220 | yeahoffline |