diff --git a/src/players/DailyMotion.js b/src/players/DailyMotion.js index 3b6ddfa..8aad60c 100644 --- a/src/players/DailyMotion.js +++ b/src/players/DailyMotion.js @@ -6,7 +6,7 @@ import createSinglePlayer from '../singlePlayer' const SDK_URL = 'https://api.dmcdn.net/all.js' const SDK_GLOBAL = 'DM' const SDK_GLOBAL_READY = 'dmAsyncInit' -const MATCH_URL = /dailymotion\.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/ +const MATCH_URL = /^(?:(?:https?):)?(?:\/\/)?(?:www\.)?(?:(?:dailymotion\.com(?:\/embed)?\/video)|dai\.ly)\/([a-zA-Z0-9]+)(?:_[\w_-]+)?$/ export class DailyMotion extends Component { static displayName = 'DailyMotion' @@ -14,13 +14,9 @@ export class DailyMotion extends Component { static loopOnEnded = true callPlayer = callPlayer - parseId (url) { - const m = url.match(MATCH_URL) - return m[4] || m[2] - } load (url) { const { controls, config, onError, playing } = this.props - const id = this.parseId(url) + const [, id] = url.match(MATCH_URL) if (this.player) { this.player.load(id, { start: parseStartTime(url), diff --git a/test/players/DailyMotion.js b/test/players/DailyMotion.js index 8e695b6..560a491 100644 --- a/test/players/DailyMotion.js +++ b/test/players/DailyMotion.js @@ -30,10 +30,20 @@ testPlayerMethods(DailyMotion, { unmute: 'setMuted' }) +test('canPlay()', async t => { + t.true(DailyMotion.canPlay(TEST_URL)) + t.true(DailyMotion.canPlay('http://www.dailymotion.com/embed/video/x5s5r35')) + t.true(DailyMotion.canPlay('https://www.dailymotion.com/video/x5s5r35')) + t.true(DailyMotion.canPlay('https://dai.ly/x5s5r35')) + t.true(DailyMotion.canPlay('https://www.dailymotion.com/video/x5s5r35_test1234')) + t.true(DailyMotion.canPlay('http://dailymotion.com/embed/video/xq2cmn')) +}) + test('load()', async t => { class MockPlayer { constructor (container, options) { t.true(container === 'abc') + t.true(options.video === 'x5e9eog') t.pass() } }