From c9e3f8b8d79d82e0ca9746f6a78b5f619b2a9a28 Mon Sep 17 00:00:00 2001 From: dorosh Date: Mon, 13 Feb 2017 14:53:44 +0200 Subject: [PATCH] Move django vars from js -add valid json into player context on backend -parse json on frontend and use js object as global var --- video_xblock/backends/base.py | 15 ++++++++++++ video_xblock/backends/brightcove.py | 2 ++ video_xblock/static/js/player_state.js | 32 +++++++++++++------------- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/video_xblock/backends/base.py b/video_xblock/backends/base.py index 6aece43f..9227ef6d 100644 --- a/video_xblock/backends/base.py +++ b/video_xblock/backends/base.py @@ -5,6 +5,7 @@ Base Video player plugin """ +import json import abc import re @@ -105,10 +106,24 @@ def metadata_fields(self): """ return [] + def _extra_context(self, context): + """ + Returns a context's dict with extra items. + """ + context['player_state_json'] = context['player_state'].copy() + context['player_state_json']['transcripts_object'] = json.loads( + context['player_state']['transcripts_object'] + ) + context['player_state_json'] = json.dumps(context['player_state_json']) + return context + def get_frag(self, **context): """ Returns a Fragment required to render video player on the client side. """ + + context = self._extra_context(context) + frag = Fragment() frag.add_css(self.resource_string( 'static/bower_components/video.js/dist/video-js.min.css' diff --git a/video_xblock/backends/brightcove.py b/video_xblock/backends/brightcove.py index 754ca76a..7540b001 100644 --- a/video_xblock/backends/brightcove.py +++ b/video_xblock/backends/brightcove.py @@ -321,6 +321,8 @@ def get_frag(self, **context): Because of this it doesn't use `super.get_frag()` """ + context = self._extra_context(context) + frag = Fragment( self.render_resource('static/html/brightcove.html', **context) ) diff --git a/video_xblock/static/js/player_state.js b/video_xblock/static/js/player_state.js index ffc61b7d..3a71709e 100644 --- a/video_xblock/static/js/player_state.js +++ b/video_xblock/static/js/player_state.js @@ -18,25 +18,25 @@ var domReady = function(callback) { document.addEventListener("DOMContentLoaded", callback); } }; + +var player_state_obj = JSON.parse('{{ player_state_json }}'); var player_state = { - volume: {{ player_state.volume }}, - currentTime: {{ player_state.current_time }}, - playbackRate: {{ player_state.playback_rate }}, - muted: {{ player_state.muted | yesno:'true,false' }}, - transcriptsEnabled: {{ player_state.transcripts_enabled | yesno:'true,false' }}, - captionsEnabled: {{ player_state.captions_enabled | yesno:'true,false' }}, - captionsLanguage: '{{ player_state.captions_language }}' + volume: player_state_obj.volume, + currentTime: player_state_obj.current_time, + playbackRate: player_state_obj.playback_rate, + muted: player_state_obj.muted, + transcriptsEnabled: player_state_obj.transcripts_enabled, + captionsEnabled: player_state_obj.captions_enabled, + captionsLanguage: player_state_obj.captions_language }; var xblockUsageId = window.location.hash.slice(1); -var transcripts = { // eslint-disable-line - {% for transcript in player_state.transcripts %} // eslint-disable-line - '{{transcript.lang}}': { // eslint-disable-line - 'label': '{{transcript.label}}', // eslint-disable-line - 'url': '{{transcript.url}}', // eslint-disable-line - }, // eslint-disable-line - {% endfor %} // eslint-disable-line -}; // eslint-disable-line - +var transcripts = {}; +player_state_obj.transcripts.forEach(function loop_transcript(transcript) { + transcripts[transcript.lang] = { + 'label': transcript.label, + 'url': transcript.url + } +}) /** Get transcript url for current caption language */ var getDownloadTranscriptUrl = function(player) { var downloadTranscriptUrl;