Rev 153 | Rev 159 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 153 | Rev 158 | ||
|---|---|---|---|
| Line 368... | Line 368... | ||
| 368 | <div class="analysis"> |
368 | <div class="analysis"> |
| 369 | <table> |
369 | <table> |
| 370 | <tr> |
370 | <tr> |
| 371 | <th><?php echo tr('Display'); ?>:</th> |
371 | <th><?php echo tr('Display'); ?>:</th> |
| 372 | <td><script type="text/javascript"> |
372 | <td><script type="text/javascript"> |
| - | 373 | var _addEventListener = jsx.dom.addEventListener; |
|
| 373 | var runAsync = jsx.dom.timeout.runAsync; |
374 | var _runAsync = jsx.dom.timeout.runAsync; |
| 374 | var ID_SCREEN_DIM = 'screenDim'; |
375 | var ID_SCREEN_DIM = 'screenDim'; |
| 375 | var ID_AVAIL_DIM = 'availDim'; |
376 | var ID_AVAIL_DIM = 'availDim'; |
| 376 | var ID_INNER_DIM = 'innerDim'; |
377 | var ID_INNER_DIM = 'innerDim'; |
| - | 378 | var TEXT_NOT_AVAILABLE = "<?php echo tr('N/A'); ?>"; |
|
| 377 | 379 | ||
| 378 | var dim = (function () {
|
380 | var dim = (function () {
|
| 379 | var screenInfo = jsx.dom.window.screenInfo; |
381 | var screenInfo = jsx.dom.window.screenInfo; |
| 380 | 382 | ||
| 381 | return {
|
383 | return {
|
| Line 402... | Line 404... | ||
| 402 | } |
404 | } |
| 403 | }; |
405 | }; |
| 404 | }()); |
406 | }()); |
| 405 | 407 | ||
| 406 | (function () {
|
408 | (function () {
|
| 407 | - | ||
| 408 | var screenDimText = dim.getScreenText(); |
409 | var screenDimText = dim.getScreenText(); |
| 409 | var availDimText = dim.getAvailText(); |
410 | var availDimText = dim.getAvailText(); |
| 410 | var innerDimText = dim.getInnerText(); |
411 | var innerDimText = dim.getInnerText(); |
| 411 | var colorDepthText = dim.getColorDepthText(); |
412 | var colorDepthText = dim.getColorDepthText(); |
| 412 | var displayInfo = (screenDimText || availDimText || innerDimText || colorDepthText) |
413 | var displayInfo = (screenDimText || availDimText || innerDimText || colorDepthText) |
| 413 | ? (screenDimText ? '<span id="' + ID_SCREEN_DIM + '">' + screenDimText + '<\/span> <?php echo tr('pixels'); ?>' : "") |
414 | ? (screenDimText ? '<span id="' + ID_SCREEN_DIM + '">' + screenDimText + '<\/span> <?php echo tr('pixels'); ?>' : "") |
| 414 | + (availDimText ? ' (<span id="' + ID_AVAIL_DIM + '">' + availDimText + "<\/span>" : "") |
415 | + (availDimText ? ' (<span id="' + ID_AVAIL_DIM + '">' + availDimText + "<\/span>" : "") |
| 415 | + (innerDimText ? '<span id="' + ID_INNER_DIM + '">' + innerDimText + "<\/span>)" : "") |
416 | + (innerDimText ? '<span id="' + ID_INNER_DIM + '">' + innerDimText + "<\/span>)" : "") |
| 416 | + (colorDepthText ? ' × <span id="colorDepth">' + colorDepthText + "<\/span>" : "") |
417 | + (colorDepthText ? ' × <span id="colorDepth">' + colorDepthText + "<\/span>" : "") |
| 417 | : "<?php echo tr('N/A'); ?>"; |
418 | : TEXT_NOT_AVAILABLE; |
| 418 | 419 | ||
| 419 | /* FIXME: Convert HTML to text, update whole title text */ |
420 | /* FIXME: Convert HTML to text, update whole title text */ |
| 420 | document.write('<span>' + displayInfo + '<\/span>');
|
421 | document.write('<span>' + displayInfo + '<\/span>');
|
| 421 | 422 | ||
| 422 | var oColorDepth; |
423 | var oColorDepth; |
| 423 | runAsync(function () {
|
424 | var tColor = _runAsync(function () {
|
| 424 | if (typeof oColorDepth == "undefined") |
425 | if (typeof oColorDepth == "undefined") |
| 425 | {
|
426 | {
|
| 426 | oColorDepth = document.getElementById("colorDepth");
|
427 | oColorDepth = document.getElementById("colorDepth");
|
| 427 | } |
428 | } |
| 428 | 429 | ||
| 429 | if (oColorDepth) |
430 | if (oColorDepth) |
| 430 | {
|
431 | {
|
| 431 | var colorDepthText = dim.getColorDepthText(); |
432 | var colorDepthText = dim.getColorDepthText(); |
| 432 | /* FIXME: Also update title attribute value */ |
433 | <?php /* FIXME: Also update title attribute value */ ?> |
| 433 | if (oColorDepth.innerHTML != colorDepthText) |
434 | if (oColorDepth.innerHTML != colorDepthText) |
| 434 | {
|
435 | {
|
| 435 | oColorDepth.innerHTML = colorDepthText; |
436 | oColorDepth.innerHTML = colorDepthText; |
| 436 | } |
437 | } |
| 437 | } |
438 | } |
| 438 | 439 | ||
| 439 | this.run(); |
440 | tColor = this.run(); |
| 440 | }, 1000); |
441 | }, 1000); |
| - | 442 | ||
| - | 443 | _addEventListener(document, "unload", function () {
|
|
| - | 444 | tColor.unset(); |
|
| - | 445 | tColor = null; |
|
| - | 446 | }); |
|
| 441 | }()); |
447 | }()); |
| 442 | </script><noscript><?php echo tr('N/A'); ?></noscript></td> |
448 | </script><noscript><?php echo tr('N/A'); ?></noscript></td> |
| 443 | </tr> |
449 | </tr> |
| 444 | <tr> |
450 | <tr> |
| 445 | <th><?php echo tr('User Agent'); ?>:</th> |
451 | <th><?php echo tr('User Agent'); ?>:</th> |
| Line 447... | Line 453... | ||
| 447 | (function () {
|
453 | (function () {
|
| 448 | var ua = navigator.userAgent; |
454 | var ua = navigator.userAgent; |
| 449 | document.write('<span id="ua" title="' + ua + '">' + ua + '<\/span>');
|
455 | document.write('<span id="ua" title="' + ua + '">' + ua + '<\/span>');
|
| 450 | 456 | ||
| 451 | var oUA; |
457 | var oUA; |
| 452 | runAsync(function () {
|
458 | var tUA = _runAsync(function () {
|
| 453 | if (typeof oUA == "undefined") |
459 | if (typeof oUA == "undefined") |
| 454 | {
|
460 | {
|
| 455 | oUA = document.getElementById("ua");
|
461 | oUA = document.getElementById("ua");
|
| 456 | } |
462 | } |
| 457 | 463 | ||
| Line 462... | Line 468... | ||
| 462 | if (oUA.innerHTML != ua) |
468 | if (oUA.innerHTML != ua) |
| 463 | {
|
469 | {
|
| 464 | oUA.innerHTML = ua; |
470 | oUA.innerHTML = ua; |
| 465 | } |
471 | } |
| 466 | 472 | ||
| 467 | /* Converts CREs */ |
473 | <?php /* Converts CREs */ ?> |
| 468 | var oUAhtml = oUA.innerHTML |
474 | var oUAhtml = oUA.innerHTML |
| 469 | if (oUA.title != oUAhtml) |
475 | if (oUA.title != oUAhtml) |
| 470 | {
|
476 | {
|
| 471 | oUA.title = oUAhtml; |
477 | oUA.title = oUAhtml; |
| 472 | } |
478 | } |
| 473 | } |
479 | } |
| 474 | 480 | ||
| 475 | this.run(); |
481 | tUA = this.run(); |
| 476 | }, 1000); |
482 | }, 1000); |
| - | 483 | ||
| - | 484 | _addEventListener(document, "unload", function () {
|
|
| - | 485 | tUA.unset(); |
|
| - | 486 | tUA = null; |
|
| - | 487 | }); |
|
| 477 | }()); |
488 | }()); |
| 478 | </script><noscript><?php echo tr('N/A'); ?></noscript></td> |
489 | </script><noscript><?php echo tr('N/A'); ?></noscript></td> |
| 479 | </tr> |
490 | </tr> |
| 480 | <tr> |
491 | <tr> |
| 481 | <th><?php echo tr('Features'); ?>:</th> |
492 | <th><?php echo tr('Features'); ?>:</th> |
| 482 | <td><script type="text/javascript"> |
493 | <td><script type="text/javascript"> |
| 483 | var fullscreen = jsx.dom.window.fullscreen; |
494 | var fullscreen = jsx.dom.window.fullscreen; |
| 484 | 495 | ||
| - | 496 | jsx.dom.geolocation = {
|
|
| - | 497 | getText: function (position) {
|
|
| - | 498 | var coords = position.coords; |
|
| - | 499 | var latitude = coords.latitude; |
|
| - | 500 | var longitude = coords.longitude; |
|
| - | 501 | var altitude = coords.altitude; |
|
| - | 502 | var altitudeAccuracy = coords.altitudeAccuracy; |
|
| - | 503 | var speed = coords.speed; |
|
| - | 504 | var heading = coords.heading; |
|
| - | 505 | ||
| - | 506 | return [ |
|
| - | 507 | "<?php echo tr('Latitude:'); ?> " + (latitude != null ? latitude + "°" : TEXT_NOT_AVAILABLE), |
|
| - | 508 | "<?php echo tr('Longitude:'); ?> " + (longitude != null ? longitude + "°" : TEXT_NOT_AVAILABLE), |
|
| - | 509 | "<?php echo tr('Lat/Lng Accuracy:'); ?> " + coords.accuracy + " m", |
|
| - | 510 | "<?php echo tr('Altitude:'); ?> " + (altitude != null ? altitude + " m": TEXT_NOT_AVAILABLE), |
|
| - | 511 | "<?php echo tr('Alt. Accuracy:'); ?> " + (altitudeAccuracy != null ? altitudeAccuracy + " m": TEXT_NOT_AVAILABLE), |
|
| - | 512 | "<?php echo tr('Speed:'); ?> " + (speed != null && !isNaN(speed) ? speed + " m∕s": TEXT_NOT_AVAILABLE), |
|
| - | 513 | "<?php echo tr('Heading:'); ?> " + (heading != null && !isNaN(heading) ? heading + "°" : TEXT_NOT_AVAILABLE) |
|
| - | 514 | ].join("\n");
|
|
| - | 515 | }, |
|
| - | 516 | ||
| - | 517 | show: function (position) {
|
|
| - | 518 | window.alert("<?php echo tr('Your current coordinates on Terra'); ?>\n\n" + this.getText(position));
|
|
| - | 519 | } |
|
| - | 520 | }; |
|
| - | 521 | ||
| 485 | (function () {
|
522 | (function () {
|
| 486 | function getFeatures () |
523 | function getFeatures () |
| 487 | {
|
524 | {
|
| 488 | var features = []; |
525 | var features = []; |
| 489 | if (typeof document.cookie != "undefined") |
526 | if (typeof document.cookie != "undefined") |
| Line 491... | Line 528... | ||
| 491 | var cookiesText = "<?php echo tr('Cookies'); ?>" |
528 | var cookiesText = "<?php echo tr('Cookies'); ?>" |
| 492 | if (navigator.cookieEnabled) |
529 | if (navigator.cookieEnabled) |
| 493 | {
|
530 | {
|
| 494 | if (document.cookie) |
531 | if (document.cookie) |
| 495 | {
|
532 | {
|
| - | 533 | var cookies = document.cookie; |
|
| - | 534 | cookies = cookies.split(/\s*;\s*/); |
|
| 496 | features.push(cookiesText); |
535 | features.push('<a href="#" title="'
|
| - | 536 | + cookies.join(" ")
|
|
| - | 537 | + '"' |
|
| - | 538 | + ' onclick="window.alert(\'<?php echo tr('Cookies for'); ?> ' + document.domain + '\\n\\n' + cookies.join("\\n") + '\'); return false">' + cookiesText + '<\/a>'); |
|
| 497 | } |
539 | } |
| 498 | else |
540 | else |
| 499 | {
|
541 | {
|
| 500 | features.push('<span class="unavailable"'
|
542 | features.push('<span class="unavailable"'
|
| 501 | + ' title="<?php echo tr('Cookies supported, but no data for this site'); ?>"' |
543 | + ' title="<?php echo tr('Cookies supported, but no data for this site'); ?>"' |
| Line 520... | Line 562... | ||
| 520 | features.push("<?php echo tr('Gamepad'); ?>");
|
562 | features.push("<?php echo tr('Gamepad'); ?>");
|
| 521 | } |
563 | } |
| 522 | 564 | ||
| 523 | if (navigator.geolocation) |
565 | if (navigator.geolocation) |
| 524 | {
|
566 | {
|
| 525 | features.push("<?php echo tr('Geolocation'); ?>");
|
567 | features.push('<a href="#" title="<?php echo tr('Get location'); ?>"'
|
| - | 568 | + ' onclick="navigator.geolocation.getCurrentPosition('
|
|
| - | 569 | + 'function (position) { jsx.dom.geolocation.show(position); }); return false"'
|
|
| - | 570 | + '><?php echo tr('Geolocation'); ?><\/a>'); |
|
| 526 | } |
571 | } |
| 527 | 572 | ||
| 528 | if (typeof navigator.javaEnabled != "undefined" && navigator.javaEnabled()) |
573 | if (typeof navigator.javaEnabled != "undefined" && navigator.javaEnabled()) |
| 529 | {
|
574 | {
|
| 530 | features.push("Java");
|
575 | features.push("Java");
|
| Line 558... | Line 603... | ||
| 558 | return features.join(" • ");
|
603 | return features.join(" • ");
|
| 559 | } |
604 | } |
| 560 | 605 | ||
| 561 | function stripTags (s) |
606 | function stripTags (s) |
| 562 | {
|
607 | {
|
| 563 | return s.replace(/<[^>]+>/g, "") |
608 | return s.replace(/<[^>]+>/g, ""); |
| 564 | } |
609 | } |
| 565 | 610 | ||
| 566 | var sFeatures = getFeatures(); |
611 | var sFeatures = getFeatures(); |
| 567 | document.write('<span id="features" title="'
|
612 | document.write('<span id="features" title="' + stripTags(sFeatures) + '">' + sFeatures + '<\/span>');
|
| 568 | + stripTags(sFeatures) + '">' + sFeatures |
- | |
| 569 | + '<\/span>'); |
- | |
| 570 | 613 | ||
| 571 | var oFeatures; |
614 | var oFeatures; |
| 572 | var oFeaturesHtml; |
615 | var oFeaturesHtml; |
| 573 | var tFeatures = runAsync(function () {
|
616 | var tFeatures = _runAsync(function () {
|
| 574 | if (typeof oFeatures == "undefined") |
617 | if (typeof oFeatures == "undefined") |
| 575 | {
|
618 | {
|
| 576 | oFeatures = document.getElementById("features");
|
619 | oFeatures = document.getElementById("features");
|
| 577 | } |
620 | } |
| 578 | 621 | ||
| Line 606... | Line 649... | ||
| 606 | 649 | ||
| 607 | tFeatures = this.run(); |
650 | tFeatures = this.run(); |
| 608 | }, 1000); |
651 | }, 1000); |
| 609 | }()); |
652 | }()); |
| 610 | 653 | ||
| - | 654 | _addEventListener(document, "unload", function () {
|
|
| - | 655 | tFeatures.unset(); |
|
| - | 656 | tFeatures = null; |
|
| - | 657 | }); |
|
| - | 658 | ||
| 611 | var windowText = "<?php echo tr("Window"); ?>"; |
659 | var windowText = "<?php echo tr("Window"); ?>"; |
| 612 | </script><noscript><?php echo tr('N/A'); ?></noscript></td> |
660 | </script><noscript><?php echo tr('N/A'); ?></noscript></td> |
| 613 | </tr> |
661 | </tr> |
| 614 | </table> |
662 | </table> |
| 615 | </div> |
663 | </div> |
| Line 638... | Line 686... | ||
| 638 | onkeyup="if (event.keyCode == 13) { this.onclick(); }"
|
686 | onkeyup="if (event.keyCode == 13) { this.onclick(); }"
|
| 639 | ><span class="text"><script type="text/javascript"> |
687 | ><span class="text"><script type="text/javascript"> |
| 640 | var cmd3; |
688 | var cmd3; |
| 641 | if (fullscreen.isSupportedBy(document.documentElement)) |
689 | if (fullscreen.isSupportedBy(document.documentElement)) |
| 642 | {
|
690 | {
|
| 643 | jsx.dom.addEventListener(window, "load", function () {
|
691 | _addEventListener(window, "load", function () {
|
| 644 | if (typeof cmd3 == "undefined") |
692 | if (typeof cmd3 == "undefined") |
| 645 | {
|
693 | {
|
| 646 | cmd3 = jsx.dom.getElementById("cmd3");
|
694 | cmd3 = jsx.dom.getElementById("cmd3");
|
| 647 | } |
695 | } |
| 648 | 696 | ||
| Line 661... | Line 709... | ||
| 661 | var oInnerDim; |
709 | var oInnerDim; |
| 662 | var _gEBI = jsx.dom.getElementById; |
710 | var _gEBI = jsx.dom.getElementById; |
| 663 | var previousIsFullscreen; |
711 | var previousIsFullscreen; |
| 664 | var oldHandler; |
712 | var oldHandler; |
| 665 | 713 | ||
| 666 | jsx.dom.addEventListener(window, "resize", function () {
|
714 | _addEventListener(window, "resize", function () {
|
| 667 | /* FIXME: Also update title attribute value */ |
715 | <?php /* FIXME: Also update title attribute value */ ?> |
| 668 | if (typeof oScreenDim == "undefined") oScreenDim = _gEBI(ID_SCREEN_DIM); |
716 | if (typeof oScreenDim == "undefined") oScreenDim = _gEBI(ID_SCREEN_DIM); |
| 669 | if (oScreenDim) oScreenDim.innerHTML = dim.getScreenText(); |
717 | if (oScreenDim) oScreenDim.innerHTML = dim.getScreenText(); |
| 670 | 718 | ||
| 671 | if (typeof oAvailDim == "undefined") oAvailDim = _gEBI(ID_AVAIL_DIM); |
719 | if (typeof oAvailDim == "undefined") oAvailDim = _gEBI(ID_AVAIL_DIM); |
| 672 | if (oAvailDim) oAvailDim.innerHTML = dim.getAvailText(); |
720 | if (oAvailDim) oAvailDim.innerHTML = dim.getAvailText(); |
| Line 734... | Line 782... | ||
| 734 | </div> |
782 | </div> |
| 735 | </div> |
783 | </div> |
| 736 | </div> |
784 | </div> |
| 737 | </div> |
785 | </div> |
| 738 | </body> |
786 | </body> |
| 739 | </html> |
787 | </html> |
| 740 | 788 | ||