Commit 3a099970 by Victor Shnayder

Merge remote-tracking branch 'origin/master' into feature/victor/inputtypes-refactor

parents 7fcf02a0 e4c49f3a
...@@ -247,7 +247,8 @@ class CourseDescriptor(SequenceDescriptor): ...@@ -247,7 +247,8 @@ class CourseDescriptor(SequenceDescriptor):
@property @property
def start_date_text(self): def start_date_text(self):
return time.strftime("%b %d, %Y", self.start) displayed_start = self._try_parse_time('advertised_start') or self.start
return time.strftime("%b %d, %Y", displayed_start)
# An extra property is used rather than the wiki_slug/number because # An extra property is used rather than the wiki_slug/number because
# there are courses that change the number for different runs. This allows # there are courses that change the number for different runs. This allows
......
...@@ -355,6 +355,34 @@ div.video { ...@@ -355,6 +355,34 @@ div.video {
} }
} }
a.quality_control {
background: url(../images/hd.png) center no-repeat;
border-right: 1px solid #000;
@include box-shadow(1px 0 0 #555, inset 1px 0 0 #555);
color: #797979;
display: block;
float: left;
line-height: 46px; //height of play pause buttons
margin-left: 0;
padding: 0 lh(.5);
text-indent: -9999px;
@include transition();
width: 30px;
&:hover {
background-color: #444;
color: #fff;
text-decoration: none;
}
&.active {
background-color: #F44;
color: #0ff;
text-decoration: none;
}
}
a.hide-subtitles { a.hide-subtitles {
background: url('../images/cc.png') center no-repeat; background: url('../images/cc.png') center no-repeat;
color: #797979; color: #797979;
......
...@@ -22,7 +22,7 @@ class @VideoCaption extends Subview ...@@ -22,7 +22,7 @@ class @VideoCaption extends Subview
""" """
@$('.video-controls .secondary-controls').append """ @$('.video-controls .secondary-controls').append """
<a href="#" class="hide-subtitles" title="Turn off captions">Captions</a> <a href="#" class="hide-subtitles" title="Turn off captions">Captions</a>
""" """#"
@$('.subtitles').css maxHeight: @$('.video-wrapper').height() - 5 @$('.subtitles').css maxHeight: @$('.video-wrapper').height() - 5
@fetchCaption() @fetchCaption()
...@@ -144,7 +144,7 @@ class @VideoCaption extends Subview ...@@ -144,7 +144,7 @@ class @VideoCaption extends Subview
@el.removeClass('closed') @el.removeClass('closed')
@scrollCaption() @scrollCaption()
$.cookie('hide_captions', hide_captions, expires: 3650, path: '/') $.cookie('hide_captions', hide_captions, expires: 3650, path: '/')
captionHeight: -> captionHeight: ->
if @el.hasClass('fullscreen') if @el.hasClass('fullscreen')
$(window).height() - @$('.video-controls').height() $(window).height() - @$('.video-controls').height()
......
...@@ -16,7 +16,7 @@ class @VideoControl extends Subview ...@@ -16,7 +16,7 @@ class @VideoControl extends Subview
<a href="#" class="add-fullscreen" title="Fill browser">Fill Browser</a> <a href="#" class="add-fullscreen" title="Fill browser">Fill Browser</a>
</div> </div>
</div> </div>
""" """#"
unless onTouchBasedDevice() unless onTouchBasedDevice()
@$('.video_control').addClass('play').html('Play') @$('.video_control').addClass('play').html('Play')
......
...@@ -9,6 +9,7 @@ class @VideoPlayer extends Subview ...@@ -9,6 +9,7 @@ class @VideoPlayer extends Subview
bind: -> bind: ->
$(@control).bind('play', @play) $(@control).bind('play', @play)
.bind('pause', @pause) .bind('pause', @pause)
$(@qualityControl).bind('changeQuality', @handlePlaybackQualityChange)
$(@caption).bind('seek', @onSeek) $(@caption).bind('seek', @onSeek)
$(@speedControl).bind('speedChange', @onSpeedChange) $(@speedControl).bind('speedChange', @onSpeedChange)
$(@progressSlider).bind('seek', @onSeek) $(@progressSlider).bind('seek', @onSeek)
...@@ -25,6 +26,7 @@ class @VideoPlayer extends Subview ...@@ -25,6 +26,7 @@ class @VideoPlayer extends Subview
render: -> render: ->
@control = new VideoControl el: @$('.video-controls') @control = new VideoControl el: @$('.video-controls')
@qualityControl = new VideoQualityControl el: @$('.secondary-controls')
@caption = new VideoCaption @caption = new VideoCaption
el: @el el: @el
youtubeId: @video.youtubeId('1.0') youtubeId: @video.youtubeId('1.0')
...@@ -41,10 +43,12 @@ class @VideoPlayer extends Subview ...@@ -41,10 +43,12 @@ class @VideoPlayer extends Subview
rel: 0 rel: 0
showinfo: 0 showinfo: 0
enablejsapi: 1 enablejsapi: 1
modestbranding: 1
videoId: @video.youtubeId() videoId: @video.youtubeId()
events: events:
onReady: @onReady onReady: @onReady
onStateChange: @onStateChange onStateChange: @onStateChange
onPlaybackQualityChange: @onPlaybackQualityChange
@caption.hideCaptions(@['video'].hide_captions) @caption.hideCaptions(@['video'].hide_captions)
addToolTip: -> addToolTip: ->
...@@ -53,7 +57,7 @@ class @VideoPlayer extends Subview ...@@ -53,7 +57,7 @@ class @VideoPlayer extends Subview
my: 'top right' my: 'top right'
at: 'top center' at: 'top center'
onReady: => onReady: (event) =>
unless onTouchBasedDevice() unless onTouchBasedDevice()
$('.video-load-complete:first').data('video').player.play() $('.video-load-complete:first').data('video').player.play()
...@@ -68,6 +72,13 @@ class @VideoPlayer extends Subview ...@@ -68,6 +72,13 @@ class @VideoPlayer extends Subview
when YT.PlayerState.ENDED when YT.PlayerState.ENDED
@onEnded() @onEnded()
onPlaybackQualityChange: (event, value) =>
quality = @player.getPlaybackQuality()
@qualityControl.onQualityChange(quality)
handlePlaybackQualityChange: (event, value) =>
@player.setPlaybackQuality(value)
onUnstarted: => onUnstarted: =>
@control.pause() @control.pause()
@caption.pause() @caption.pause()
......
class @VideoQualityControl extends Subview
initialize: ->
@quality = null;
bind: ->
@$('.quality_control').click @toggleQuality
render: ->
@el.append """
<a href="#" class="quality_control" title="HD">HD</a>
"""#"
onQualityChange: (value) ->
@quality = value
if @quality in ['hd720', 'hd1080', 'highres']
@el.addClass('active')
else
@el.removeClass('active')
toggleQuality: (event) =>
event.preventDefault()
if @quality in ['hd720', 'hd1080', 'highres']
newQuality = 'large'
else
newQuality = 'hd720'
$(@).trigger('changeQuality', newQuality)
\ No newline at end of file
...@@ -17,7 +17,7 @@ class @VideoVolumeControl extends Subview ...@@ -17,7 +17,7 @@ class @VideoVolumeControl extends Subview
<div class="volume-slider"></div> <div class="volume-slider"></div>
</div> </div>
</div> </div>
""" """#"
@slider = @$('.volume-slider').slider @slider = @$('.volume-slider').slider
orientation: "vertical" orientation: "vertical"
range: "min" range: "min"
......
...@@ -136,6 +136,14 @@ ...@@ -136,6 +136,14 @@
margin-bottom: 15px; margin-bottom: 15px;
} }
h4 {
font-size: 1.0em;
font-family: $sans-serif;
font-weight: 700;
margin-top: 25px;
margin-bottom: 10px;
}
ul { ul {
padding-left: 50px; padding-left: 50px;
} }
......
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-35248639-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
...@@ -21,20 +21,9 @@ ...@@ -21,20 +21,9 @@
<meta name="path_prefix" content="${MITX_ROOT_URL}"> <meta name="path_prefix" content="${MITX_ROOT_URL}">
% if not course: % if not course:
<script type="text/javascript"> <%include file="google_analytics.html" />
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-35248639-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
% endif % endif
</head> </head>
<body class="<%block name='bodyclass'/>"> <body class="<%block name='bodyclass'/>">
......
...@@ -7,7 +7,12 @@ ...@@ -7,7 +7,12 @@
<%inherit file="../main.html" /> <%inherit file="../main.html" />
<%block name="headextra">
<%include file="../google_analytics.html" />
</%block>
<%block name="js_extra"> <%block name="js_extra">
% if not registered: % if not registered:
%if user.is_authenticated(): %if user.is_authenticated():
## If the user is authenticated, clicking the enroll button just submits a form ## If the user is authenticated, clicking the enroll button just submits a form
......
<%namespace name='static' file='../static_content.html'/> <%namespace name='static' file='../static_content.html'/>
<%inherit file="../main.html" /> <%inherit file="../main.html" />
<%block name="title"><title>Jobs</title></%block> <%block name="title"><title>Jobs</title></%block>
...@@ -50,12 +49,79 @@ ...@@ -50,12 +49,79 @@
<p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a></p> <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a></p>
</div> </div>
</article> </article>
<article id="learning-designer" class="job">
<div class="inner-wrapper">
<h3>Learning Designer/Interaction Learning Designer </h3>
<p>The Learning Designer will work as part of the content and development team to plan, develop and deliver highly engaging and media rich online courses. The learning designer will be a flexible thinker, able to determine and apply sound pedagogical strategies to unique situations and a diverse set of academic disciplines. This is a 6-12 months contract opportunity.</p>
<h4>Specific Responsibilities include: </h4>
<ul>
<li>Work with producers, product developers and course staff on implementing instructional design approaches in the development of media and other course materials. </li>
<li>Articulate learning objectives and align them to content design strategy and assessments. </li>
<li>Write effective instructional text, and audio and video scripts. </li>
<li>Coordinate workflows with video and content development team</li>
<li>Identify best practices and share these with the course staff and faculty as needed. </li>
<li>Create course communication style guides. Train and coach teaching staff on best practices for communication and discussion management. </li>
<li>Develop use case guides as needed on the use of edX courseware and new technologies. </li>
<li>Serve as a liaison to instructional design teams located at X universities. </li>
<li>Design peer review processes to be used by learners in selected courses. </li>
<li>Ability to apply game-based learning theory and design into selected courses as appropriate.</li>
<li>Use learning analytics and metrics to inform course design and revision process. </li>
<li>Work closely with the Content Research Director on articulating best practices for MOOC teaching and learning and course design.</li>
<li>Assist in the development of pilot courses used for sponsored research initiatives. </li>
</ul>
<h4>Qualifications:</h4>
<p>Master's Degree in Educational Technology, Instructional Design or related field. Experience in higher education with additional experience in a start-up or research environment desirable. Excellent interpersonal and communication (written and verbal), project management, problem-solving and time management skills. The ability to be flexible with projects and to work on multiple courses essential. Ability to meet deadlines and manage expectations of constituents. Capacity to develop new and relevant technology skills. &nbsp;Experience using game theory design and learning analytics to inform instructional design decisions and strategy.</p>
<h4>Technical Skills:</h4>
<p>Video and screencasting experience. LMS Platform experience, xml, HTML, CSS, Adobe Design Suite, Camtasia or Captivate experience. Experience with web 2.0 collaboration tools.</p>
<p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a></p>
</div>
</article>
<article id="production-coordinator" class="job">
<div class="inner-wrapper">
<h3>Production Coordinator</h3>
<p>The Production Coordinator supports video editors and course staff in all video related tasks, such as ingesting footage, transcoding, tracking live dates, transcriptions, organizing project deliverables and archiving completed projects.</p>
<h4>Primary responsibilities:</h4>
<ul>
<li>organize, track, and manage video and associated assets across the video workflow</li>
<li>manage project data and spreadsheets</li>
<li>route incoming source footage, and apply metadata tags</li>
<li>run encoding/transcoding jobs </li>
<li>prepare and process associated video assets, such as slides and image files</li>
<li>manage the transcription process </li>
<ul type="circle">
<li>traffic files among project staff and video transcription services</li>
<li>coordinate transcript reviews with course staff</li>
<li>integrate transcripts in course pages</li>
</ul>
<li>other video-related tasks as assigned.</li>
</ul>
<br/>
<h4>Qualifications</h4>
<p>The ideal candidate for the Production Coordinator position will have</p>
<ul>
<li>relentless attention to detail</li>
<li>ability to communicate and collaborate effectively across the organization</li>
<li>knowledge and understanding of digital media production tools and processes</li>
<li>experience with compression techniques, image processing, and presentation software preferred</li>
<li>proficiency with standard office applications </li>
<ul type="circle">
<li>spreadsheets</li>
<li>word processing</li>
<li>presentation</li>
</ul>
<li>experience with web publishing, e.g., HTML, XML, CSS, a plus</li>
</ul>
<p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a></p>
</div>
</article>
</section> </section>
<section class="jobs-sidebar"> <section class="jobs-sidebar">
<h2>Positions</h2> <h2>Positions</h2>
<nav> <nav>
<a href="#content-engineer">EdX Content Engineer</a> <a href="#content-engineer">EdX Content Engineer</a>
<a href="#platform-developer">Platform Developer</a> <a href="#platform-developer">Platform Developer</a>
<a href="#learning-designer">Learning Designer</a>
<a href="#production-coordinator">Production Coordinator</a>
</nav> </nav>
<h2>How to Apply</h2> <h2>How to Apply</h2>
<p>E-mail your resume, coverletter and any other materials to <a href="mailto:jobs@edx.org">jobs@edx.org</a></p> <p>E-mail your resume, coverletter and any other materials to <a href="mailto:jobs@edx.org">jobs@edx.org</a></p>
......
...@@ -50,4 +50,5 @@ pygraphviz ...@@ -50,4 +50,5 @@ pygraphviz
-r repo-requirements.txt -r repo-requirements.txt
pil pil
nltk nltk
dogstatsd-python dogstatsd-python
\ No newline at end of file MySQL-python
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment