setup.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. 'use strict';
  2. exports.__esModule = true;
  3. exports.hasLoaded = exports.autoSetupTimeout = exports.autoSetup = undefined;
  4. var _dom = require('./utils/dom');
  5. var Dom = _interopRequireWildcard(_dom);
  6. var _events = require('./utils/events.js');
  7. var Events = _interopRequireWildcard(_events);
  8. var _document = require('global/document');
  9. var _document2 = _interopRequireDefault(_document);
  10. var _window = require('global/window');
  11. var _window2 = _interopRequireDefault(_window);
  12. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  13. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
  14. /**
  15. * @file setup.js - Functions for setting up a player without
  16. * user interaction based on the data-setup `attribute` of the video tag.
  17. *
  18. * @module setup
  19. */
  20. var _windowLoaded = false;
  21. var videojs = void 0;
  22. /**
  23. * Set up any tags that have a data-setup `attribute` when the player is started.
  24. */
  25. var autoSetup = function autoSetup() {
  26. // Protect against breakage in non-browser environments.
  27. if (!Dom.isReal()) {
  28. return;
  29. }
  30. // One day, when we stop supporting IE8, go back to this, but in the meantime...*hack hack hack*
  31. // var vids = Array.prototype.slice.call(document.getElementsByTagName('video'));
  32. // var audios = Array.prototype.slice.call(document.getElementsByTagName('audio'));
  33. // var mediaEls = vids.concat(audios);
  34. // Because IE8 doesn't support calling slice on a node list, we need to loop
  35. // through each list of elements to build up a new, combined list of elements.
  36. var vids = _document2['default'].getElementsByTagName('video');
  37. var audios = _document2['default'].getElementsByTagName('audio');
  38. var mediaEls = [];
  39. if (vids && vids.length > 0) {
  40. for (var i = 0, e = vids.length; i < e; i++) {
  41. mediaEls.push(vids[i]);
  42. }
  43. }
  44. if (audios && audios.length > 0) {
  45. for (var _i = 0, _e = audios.length; _i < _e; _i++) {
  46. mediaEls.push(audios[_i]);
  47. }
  48. }
  49. // Check if any media elements exist
  50. if (mediaEls && mediaEls.length > 0) {
  51. for (var _i2 = 0, _e2 = mediaEls.length; _i2 < _e2; _i2++) {
  52. var mediaEl = mediaEls[_i2];
  53. // Check if element exists, has getAttribute func.
  54. // IE seems to consider typeof el.getAttribute == 'object' instead of
  55. // 'function' like expected, at least when loading the player immediately.
  56. if (mediaEl && mediaEl.getAttribute) {
  57. // Make sure this player hasn't already been set up.
  58. if (mediaEl.player === undefined) {
  59. var options = mediaEl.getAttribute('data-setup');
  60. // Check if data-setup attr exists.
  61. // We only auto-setup if they've added the data-setup attr.
  62. if (options !== null) {
  63. // Create new video.js instance.
  64. videojs(mediaEl);
  65. }
  66. }
  67. // If getAttribute isn't defined, we need to wait for the DOM.
  68. } else {
  69. autoSetupTimeout(1);
  70. break;
  71. }
  72. }
  73. // No videos were found, so keep looping unless page is finished loading.
  74. } else if (!_windowLoaded) {
  75. autoSetupTimeout(1);
  76. }
  77. };
  78. /**
  79. * Wait until the page is loaded before running autoSetup. This will be called in
  80. * autoSetup if `hasLoaded` returns false.
  81. *
  82. * @param {number} wait
  83. * How long to wait in ms
  84. *
  85. * @param {videojs} [vjs]
  86. * The videojs library function
  87. */
  88. function autoSetupTimeout(wait, vjs) {
  89. if (vjs) {
  90. videojs = vjs;
  91. }
  92. _window2['default'].setTimeout(autoSetup, wait);
  93. }
  94. if (Dom.isReal() && _document2['default'].readyState === 'complete') {
  95. _windowLoaded = true;
  96. } else {
  97. /**
  98. * Listen for the load event on window, and set _windowLoaded to true.
  99. *
  100. * @listens load
  101. */
  102. Events.one(_window2['default'], 'load', function () {
  103. _windowLoaded = true;
  104. });
  105. }
  106. /**
  107. * check if the document has been loaded
  108. */
  109. var hasLoaded = function hasLoaded() {
  110. return _windowLoaded;
  111. };
  112. exports.autoSetup = autoSetup;
  113. exports.autoSetupTimeout = autoSetupTimeout;
  114. exports.hasLoaded = hasLoaded;