Skip to content

Commit 79392ac

Browse files
committed
Player now builds, embeds and plays
1 parent 05430ee commit 79392ac

31 files changed

+243
-189
lines changed

.jshintignore

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
src/js/utils/jwplayer.underscore.js
2-
src/js/utils/jwplayer.backbone.js
1+
src/js/utils/backbone.events.js
2+
src/js/utils/underscore.js
3+
src/js/__*/*.js

.jshintrc

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"devel": true,
1010

1111
// A function can only take max 3 arguments
12-
"maxparams": 10,
12+
"maxparams": 99,
1313

1414
// Strings use single quotes instead of double
1515
"quotmark": "single",
@@ -22,5 +22,5 @@
2222
"unused": true,
2323

2424
// These variables are predefined
25-
"predef": ["define", "module", "_"]
25+
"predef": ["jwplayer", "define", "module", "_"]
2626
}

Gruntfile.js

+14-14
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,8 @@ module.exports = function(grunt) {
5454
overwrite: true,
5555
replacements:[
5656
{
57-
from : /jwplayer\.version = '(.*)'/,
58-
to : 'jwplayer.version = \'<%= pkg.version %>\''
59-
},
60-
{
61-
from : /jwplayer\.html5\.version = '(.*)'/,
62-
to : 'jwplayer.html5.version = \'<%= pkg.version %>\''
57+
from : /window.jwplayer\.version = '(.*)'/,
58+
to : 'window.jwplayer.version = \'<%= pkg.version %>\''
6359
}
6460
]
6561
}
@@ -98,8 +94,8 @@ module.exports = function(grunt) {
9894
tasks: ['jshint:all']
9995
},
10096
player: {
101-
files : '<%= concat.player.src %>',
102-
tasks: ['concat:player', 'replace:player', 'uglify:player']
97+
files : ['src/js/**/*.js', 'src/js/*.js'],
98+
tasks: ['build-js']
10399
},
104100
flash: {
105101
files : [
@@ -119,11 +115,11 @@ module.exports = function(grunt) {
119115
debug:true,
120116
entry: {
121117
// use prefix since it has reserved values (for example plugins)
122-
jwpacked : './src/js/jwplayer.js'
118+
jwplayer : './src/js/jwplayer.js'
123119
},
124120
output: {
125-
path: 'built/',
126-
filename: '[name].built.js'
121+
path: 'bin-debug/',
122+
filename: '[name].js'
127123
},
128124
resolve: {
129125
modulesDirectories: [
@@ -226,11 +222,15 @@ module.exports = function(grunt) {
226222
});
227223
});
228224

225+
grunt.registerTask('build-js', [
226+
'webpack',
227+
'replace',
228+
'uglify'
229+
]);
230+
229231
grunt.registerTask('default', [
230232
'clean',
231-
'concat',
232-
'replace',
233-
'uglify',
233+
'build-js',
234234
'flash:debug',
235235
'flash:release'
236236
]);

src/js/api/api.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ define([
55
'events/events',
66
'events/states',
77
'utils/helpers',
8+
'utils/css',
89
'underscore'
9-
], function(Embed, plugins, Instream, events, states, utils, _) {
10+
], function(Embed, plugins, Instream, events, states, utils, cssUtils, _) {
1011
var _instances = [],
1112
_uniqueIndex = 0;
1213

@@ -330,7 +331,7 @@ define([
330331

331332
// If sharing the DOM element, don't reset CSS
332333
if (!sharedDOM) {
333-
utils.clearCss('#' + _this.id);
334+
cssUtils.clearCss('#' + _this.id);
334335
}
335336

336337
var toDestroy = document.getElementById(_this.id);

src/js/controller/model.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ define([
33
'utils/stretching',
44
'playlist/playlist',
55
'providers/chooseprovider',
6+
'underscore',
67
'utils/eventdispatcher',
7-
'events/events'
8-
], function(utils, stretchingUtils, Playlist, chooseProvider, eventdispatcher, events) {
8+
'events/events',
9+
'events/states'
10+
], function(utils, stretchingUtils, Playlist, chooseProvider, _, eventdispatcher, events, states) {
911

1012
var Model = function(config, defaultProvider) {
1113
var _model = this,
@@ -51,7 +53,7 @@ define([
5153
_model.config = _parseConfig(utils.extend({}, _defaults, _cookies, config));
5254
utils.extend(_model, {
5355
id: config.id,
54-
state: events.state.IDLE,
56+
state: states.IDLE,
5557
duration: -1,
5658
position: 0,
5759
buffer: 0

src/js/embed/config.js

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ define([
66

77
var config = function (options) {
88

9+
options = options || {};
10+
911
var config = _.extend({}, {
1012
fallback: true, // enable download embedder
1113
width: 480,

src/js/embed/embed.js

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
define([
22
'utils/helpers',
3+
'utils/css',
34
'events/events',
45
'utils/scriptloader',
56
'playlist/loader',
67
'embed/config',
8+
'plugins/plugins',
79
'controller/player',
810
'underscore'
9-
], function(utils, events, scriptloader, PlaylistLoader, EmbedConfig, Html5Player, _) {
11+
], function(utils, cssUtils, events, scriptloader, PlaylistLoader, EmbedConfig, plugins, Html5Player, _) {
1012

11-
jwplayer.vid = document.createElement('video');
13+
var _css = cssUtils.css;
1214

1315
var Embed = function(playerApi) {
1416

@@ -18,7 +20,7 @@ define([
1820
_height = _config.height,
1921
_errorText = 'Error loading player: ',
2022
_oldContainer = document.getElementById(playerApi.id),
21-
_pluginloader = jwplayer.plugins.loadPlugins(playerApi.id, _config.plugins),
23+
_pluginloader = plugins.loadPlugins(playerApi.id, _config.plugins),
2224
_loader,
2325
_playlistLoading = false,
2426
_errorOccurred = false,
@@ -111,7 +113,7 @@ define([
111113
utils.emptyElement(_container);
112114

113115
// Volume option is tricky to remove, since it needs to be in the HTML5 player model.
114-
var playerConfigCopy = jwplayer.utils.extend({}, pluginConfigCopy);
116+
var playerConfigCopy = utils.extend({}, pluginConfigCopy);
115117
delete playerConfigCopy.volume;
116118
var html5player = new Html5Player(playerConfigCopy);
117119
playerApi.setPlayer(html5player, 'html5');
@@ -199,10 +201,10 @@ define([
199201
}
200202

201203
function _insertCSS() {
202-
utils.css('object.jwswf, .jwplayer:focus', {
204+
_css('object.jwswf, .jwplayer:focus', {
203205
outline: 'none'
204206
});
205-
utils.css('.jw-tab-focus:focus', {
207+
_css('.jw-tab-focus:focus', {
206208
outline: 'solid 2px #0B7EF4'
207209
});
208210
}
@@ -233,4 +235,4 @@ define([
233235

234236
return Embed;
235237

236-
})(jwplayer);
238+
});

src/js/jwplayer.js

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1-
/*global jwplayer:true*/
1+
if (!window.jwplayer) {
22

3-
jwplayer.version = 'X.Y.ZZZZ';
4-
define(['api/api'], function(Api) {
5-
window.jwplayer = function() {
6-
return Api.selectPlayer.apply(this, arguments);
7-
};
8-
});
3+
window.jwplayer = {};
4+
window.jwplayer.version = 'X.Y.ZZZZ';
95

6+
define(['api/api'], function (Api) {
7+
window.jwplayer = function () {
8+
return Api.selectPlayer.apply(this, arguments);
9+
};
10+
11+
window.jwplayer.version = 'X.Y.ZZZZ';
12+
window.jwplayer.vid = document.createElement('video');
13+
});
14+
}

src/js/playlist/playlist.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1-
define(['utils/helpers', 'utils/strings', 'utils/extensionmap', 'playlist/item', 'underscore'],
2-
function(utils, strings, extensionmap, PlaylistItem, _) {
1+
define([
2+
'providers/chooseprovider',
3+
'utils/helpers',
4+
'utils/strings',
5+
'utils/extensionmap',
6+
'playlist/item',
7+
'underscore'
8+
], function(chooseProvider, utils, strings, extensionmap, PlaylistItem, _) {
39

410
var Playlist = function (playlist) {
511
var _playlist = [];
@@ -49,7 +55,7 @@ function(utils, strings, extensionmap, PlaylistItem, _) {
4955

5056
// If type not included, we infer it from extension
5157
if (!type) {
52-
var extension = utils.extension(file);
58+
var extension = strings.extension(file);
5359
type = extensionmap.extType(extension);
5460
}
5561

@@ -76,7 +82,7 @@ function(utils, strings, extensionmap, PlaylistItem, _) {
7682
source.androidhls = true;
7783
}
7884

79-
if (jwplayer.html5.chooseProvider(source)) {
85+
if (chooseProvider(source)) {
8086
// We want sources of all the same type since they may be of different quality levels
8187
selectedType = selectedType || source.type;
8288

src/js/plugins/loader.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
define(['plugins/utils', 'utils/helpers', 'events/events', 'underscore', 'utils/scriptloader'], function(pluginUtils, helpers, events, _, scriptloader) {
1+
define([
2+
'plugins/utils',
3+
'utils/helpers',
4+
'events/events',
5+
'underscore',
6+
'utils/eventdispatcher',
7+
'utils/scriptloader'
8+
], function(pluginUtils, helpers, events, _, eventdispatcher, scriptloader) {
29

310
var _foreach = helpers.foreach;
411

@@ -9,7 +16,7 @@ define(['plugins/utils', 'utils/helpers', 'events/events', 'underscore', 'utils/
916
_pluginCount = _.size(_config),
1017
_pluginLoaded,
1118
_destroyed = false,
12-
_eventDispatcher = new events.eventdispatcher();
19+
_eventDispatcher = new eventdispatcher();
1320

1421

1522
_.extend(this, _eventDispatcher);

src/js/providers/html5.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
define([
2+
'utils/css',
23
'utils/helpers',
34
'utils/extensionmap',
5+
'utils/strings',
6+
'utils/stretching',
47
'underscore',
58
'events/events',
69
'events/states',
710
'utils/eventdispatcher',
811
'providers/default'
9-
], function(utils, extensionmap, _, events, states, eventdispatcher, DefaultProvider) {
12+
], function(cssUtils, utils, extensionmap, strings, stretchUtils, _, events, states, eventdispatcher, DefaultProvider) {
1013

1114
var clearInterval = window.clearInterval,
1215
_isIE = utils.isMSIE(),
@@ -649,20 +652,20 @@ define([
649652
// the pause event to be fired. This causes audio files to
650653
// become unplayable. Hence the video tag is always kept
651654
// visible on Android devices.
652-
utils.css.style(_container, {
655+
cssUtils.style(_container, {
653656
visibility: 'visible',
654657
opacity: 1
655658
});
656659
} else {
657-
utils.css.style(_container, {
660+
cssUtils.style(_container, {
658661
visibility: '',
659662
opacity: 0
660663
});
661664
}
662665
};
663666

664667
this.resize = function(width, height, stretching) {
665-
return utils.stretch(stretching,
668+
return stretchUtils.stretch(stretching,
666669
_videotag,
667670
width, height,
668671
_videotag.videoWidth, _videotag.videoHeight);
@@ -768,7 +771,7 @@ define([
768771
return false;
769772
}
770773

771-
var extension = utils.extension(file);
774+
var extension = strings.extension(file);
772775
type = type || extensionmap.extType(extension);
773776

774777
// HLS not sufficiently supported on Android devices; should fail over automatically.

src/js/utils/css.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,10 @@ define([
9595
_updateStyleAttributes(cssRules, styles);
9696

9797
if (_cssBlock !== null && !immediate) {
98-
elements.__cssRules = _.extend(elements.__cssRules, cssRules);
98+
if (!elements.__cssRules) {
99+
elements.__cssRules = {};
100+
}
101+
_.extend(elements.__cssRules, cssRules);
99102
if (_.indexOf(_cssBlock.elements, elements) < 0) {
100103
_cssBlock.elements.push(elements);
101104
}
@@ -275,7 +278,7 @@ define([
275278
if (typeof element === 'string') {
276279
_css(element, style);
277280
} else {
278-
_css.style(element, style);
281+
_style(element, style);
279282
}
280283
};
281284

src/js/utils/eventdispatcher.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
define(['underscore'], function(_) {
1+
define(['utils/backbone.events', 'underscore'], function(Events, _) {
22

33
var GLOBAL_EVENT = 'GLOBAL_EVENT';
44

55
var eventdispatcher = function (_id, _debug) {
66

7-
var obj = _.extend({}, jwplayer.utils.Events);
7+
var obj = _.extend({}, Events);
88

99
/** Clears all event listeners **/
1010
this.resetEventListeners = obj.off;

src/js/utils/helpers.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
define(['utils/strings', 'events/events', 'underscore'], function(strings, Events, _) {
22

3-
var _version = jwplayer.version;
3+
var _version = window.jwplayer.version;
44

55
/*jshint maxparams:5*/
66
var utils = {};
@@ -717,7 +717,7 @@ define(['utils/strings', 'events/events', 'underscore'], function(strings, Event
717717
top: 0,
718718
bottom: 0
719719
};
720-
if (!element || !DOCUMENT.body.contains(element)) {
720+
if (!element || !document.body.contains(element)) {
721721
return bounds;
722722
}
723723
if (element.getBoundingClientRect) {

src/js/utils/stretching.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
define(['utils/css'], function(utils) {
1+
define(['utils/css'], function(cssUtils) {
22
/*jshint maxparams:6*/
33

44
/** Stretching options **/
@@ -27,7 +27,7 @@ define(['utils/css'], function(utils) {
2727
}
2828
value = 'translate(' + xoffset + 'px, ' + yoffset + 'px)';
2929
}
30-
utils.transform(domelement, value);
30+
cssUtils.transform(domelement, value);
3131
};
3232

3333
/**
@@ -123,12 +123,12 @@ define(['utils/css'], function(utils) {
123123
}
124124
style.width = elementWidth;
125125
style.height = elementHeight;
126-
utils.scale(domelement, xscale, yscale, 0, 0);
126+
scale(domelement, xscale, yscale, 0, 0);
127127
} else {
128128
scale = false;
129-
utils.transform(domelement);
129+
cssUtils.transform(domelement);
130130
}
131-
utils.css.style(domelement, style);
131+
cssUtils.style(domelement, style);
132132
} else {
133133
domelement.className = domelement.className.replace(/\s*jw(none|exactfit|uniform|fill)/g, '') +
134134
' ' + stretchClass;

0 commit comments

Comments
 (0)