diff --git a/app/assets/javascripts/player/abstract_player.js.coffee b/app/assets/javascripts/player/abstract_player.js.coffee index 48776e6..864b85b 100644 --- a/app/assets/javascripts/player/abstract_player.js.coffee +++ b/app/assets/javascripts/player/abstract_player.js.coffee @@ -14,6 +14,7 @@ class AsciiIo.AbstractPlayer hud: @options.hud rendererClass: @options.rendererClass snapshot: @options.snapshot + containerWidth: @options.containerWidth createVT: -> throw 'not implemented' diff --git a/app/assets/javascripts/player/views/player_view.js.coffee b/app/assets/javascripts/player/views/player_view.js.coffee index b4d4065..fe0b834 100644 --- a/app/assets/javascripts/player/views/player_view.js.coffee +++ b/app/assets/javascripts/player/views/player_view.js.coffee @@ -4,6 +4,7 @@ class AsciiIo.PlayerView extends Backbone.View initialize: (options) -> @createRendererView() + @setupClipping() @createHudView() if options.hud @showLoadingOverlay() @@ -17,6 +18,14 @@ class AsciiIo.PlayerView extends Backbone.View @rendererView.afterInsertedToDom() @rendererView.renderSnapshot @options.snapshot + setupClipping: -> + if @options.containerWidth + rendererWidth = @rendererView.$el.outerWidth() + min = Math.min(@options.containerWidth, rendererWidth) + @rightClipWidth = rendererWidth - min + else + @rightClipWidth = 0 + createHudView: -> @hudView = new AsciiIo.HudView(cols: @options.cols) @@ -39,14 +48,19 @@ class AsciiIo.PlayerView extends Backbone.View onSeekClicked: (percent) -> @trigger 'seek-clicked', percent + showOverlay: (html) -> + element = $(html) + element.css('margin-right': "#{@rightClipWidth}px") if @rightClipWidth + @$el.append(element) + showLoadingOverlay: -> - @$el.append('
') + @showOverlay('
') hideLoadingOverlay: -> @$('.loading').remove() showPlayOverlay: -> - @$el.append('
') + @showOverlay('
') hidePlayOverlay: -> @$('.start-prompt').remove() diff --git a/app/helpers/asciicasts_helper.rb b/app/helpers/asciicasts_helper.rb index 24b98a2..66dbfeb 100644 --- a/app/helpers/asciicasts_helper.rb +++ b/app/helpers/asciicasts_helper.rb @@ -20,6 +20,7 @@ module AsciicastsHelper speed: (options[:speed] || params[:speed] || 1).to_f, benchmark: !!params[:bm], asciicast_id: asciicast.id, + container_width: params[:container_width], renderer_class: renderer_class, auto_play: options.key?(:auto_play) ? !!options[:auto_play] : false, hud: options.key?(:hud) ? !!options[:hud] : true, diff --git a/app/views/asciicasts/_player.html.erb b/app/views/asciicasts/_player.html.erb index 74e3360..9ee9d43 100644 --- a/app/views/asciicasts/_player.html.erb +++ b/app/views/asciicasts/_player.html.erb @@ -9,6 +9,7 @@ speed: <%= speed %>, benchmark: <%= benchmark %>, model: new AsciiIo.Asciicast({ id: <%= asciicast_id %> }), + containerWidth: <%= container_width || 'null' %>, rendererClass: <%= renderer_class.html_safe %>, autoPlay: <%= auto_play %>, hud: <%= hud %>, diff --git a/app/views/asciicasts/show.js.erb b/app/views/asciicasts/show.js.erb index b3975a0..32dd830 100644 --- a/app/views/asciicasts/show.js.erb +++ b/app/views/asciicasts/show.js.erb @@ -19,16 +19,18 @@ referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } - window.addEventListener("message", receiveSize, false); - var scriptTag = document.getElementById("asciicast-<%= @asciicast.id %>"); + if (scriptTag) { + window.addEventListener("message", receiveSize, false); var container = document.createElement('div'); container.className = 'asciicast'; container.style.display = 'block'; container.style.float = 'none'; container.style.overflow = 'hidden'; - container.innerHTML = ''; + container.style.padding = '0'; insertAfter(scriptTag, container); + var containerWidth = container.offsetWidth; + container.innerHTML = ''; } })();