diff options
Diffstat (limited to 'assets/js/views/clip-line.js')
| -rw-r--r-- | assets/js/views/clip-line.js | 82 |
1 files changed, 46 insertions, 36 deletions
diff --git a/assets/js/views/clip-line.js b/assets/js/views/clip-line.js index 2c06c48..5201cb2 100644 --- a/assets/js/views/clip-line.js +++ b/assets/js/views/clip-line.js @@ -1,22 +1,24 @@ ClipPlay.Views.ClipLine = Marionette.View.extend({ type: '', // 'start' or 'stop' - + initialize: function(options) { this.setElement(options.el); - + this.type = options.type; - + this.sample_view = options.sample_view; - + this.listenTo(this.model, 'change:duration', this.on_duration_change); var start_or_stop = this.type; this.listenTo(this.model, 'change:' + start_or_stop, this.on_start_or_stop_change); this.listenTo(this.sample_view, 'change:position:selected-bar', this.on_selected_bar_position_change); - + this.initialize_drag_handles(); + this.on_start_or_stop_change(); + this.initialize_bounds(); }, - - + + initialize_drag_handles: function() { this.$el.draggable({ axis: 'x', @@ -24,21 +26,29 @@ ClipPlay.Views.ClipLine = Marionette.View.extend({ scroll: false, containment: 'parent' }); - + var that = this; - + this.$el.on('drag', function(e, ui) { that.on_clip_drag(e, ui); }); }, - - + + initialize_time_values: function() { this.set_seek_point(); this.render_time(); }, - - + + initialize_bounds: function(){ + if (this.type === 'start') { + this.$el.css('left', this.model.get('start') + 'px'); + } + if (this.type === 'stop') { + this.$el.css('left', this.model.get('stop') + 'px'); + } + }, + render_time: function() { var time; if (this.type === 'start') { @@ -47,61 +57,61 @@ ClipPlay.Views.ClipLine = Marionette.View.extend({ else if (this.type === 'stop') { time = this.model.stop_in_minutes_and_seconds(); } - + var time_string = time.minutes + ':' + time.seconds; this.$('.js-time').text(time_string); }, - - + + // percentage_progress // - // Get a percentage value from a clip-line that represents its + // Get a percentage value from a clip-line that represents its // position within the progress bar. // percentage_progress: function() { var container = this.$el.parents('.progress-bar'); var position_in_pixels = this.$el.position().left; - + var percentage = (position_in_pixels / container.width()) * 100; - + return percentage; }, - - + + // seek_point // - // Get the number of seconds after the start of the video that is + // Get the number of seconds after the start of the video that is // represented by this clip line. // seek_point: function() { var progress = this.percentage_progress(); - + return (progress * this.model.get('duration')) / 100; }, - - + + set_seek_point: function() { this.model.set(this.type, this.seek_point()); }, - - + + on_clip_drag: function(e, ui) { this.set_seek_point(); }, - - + + on_duration_change: function() { this.initialize_time_values(); this.trigger_seek_point_change(); }, - - + + on_start_or_stop_change: function() { this.render_time(); this.trigger_seek_point_change(); }, - - + + on_selected_bar_position_change: function(params) { if (this.type === 'start') { this.$el.css('left', params.position + 'px'); @@ -111,12 +121,12 @@ ClipPlay.Views.ClipLine = Marionette.View.extend({ this.$el.css('left', left_position + 'px'); } }, - - + + trigger_seek_point_change: function() { var start_or_stop = this.type; this.sample_view.trigger('change:seek:clip-line-' + start_or_stop, { position: this.$el.position().left }); } -});
\ No newline at end of file +}); |
