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