Class: Presently::DisplayView
- Inherits:
-
Live::View
- Object
- Live::View
- Presently::DisplayView
- Defined in:
- lib/presently/display_view.rb
Overview
The audience-facing display view that renders the current slide full-screen.
Connects to the PresentationController as a listener and updates whenever the slide changes. Pushes the current state on WebSocket reconnect.
Instance Method Summary collapse
-
#bind(page) ⇒ Object
Bind this view to a page and register as a listener.
-
#close ⇒ Object
Close this view and unregister as a listener.
-
#handle(event) ⇒ Object
Handle an event from the client.
-
#initialize(id = Live::Element.unique_id, data = {}, controller: nil) ⇒ DisplayView
constructor
Initialize a new display view.
-
#render(builder) ⇒ Object
Render the display view.
-
#slide_changed! ⇒ Object
Called by the controller when the slide changes.
Constructor Details
#initialize(id = Live::Element.unique_id, data = {}, controller: nil) ⇒ DisplayView
Initialize a new display view.
19 20 21 22 23 |
# File 'lib/presently/display_view.rb', line 19 def initialize(id = Live::Element.unique_id, data = {}, controller: nil) super(id, data) @controller = controller @slide_renderer = SlideRenderer.new(css_class: "slide current", templates: controller&.templates) end |
Instance Method Details
#bind(page) ⇒ Object
Bind this view to a page and register as a listener. Immediately pushes the current state to the client.
28 29 30 31 32 |
# File 'lib/presently/display_view.rb', line 28 def bind(page) super @controller.add_listener(self) self.update! end |
#close ⇒ Object
Close this view and unregister as a listener.
35 36 37 38 |
# File 'lib/presently/display_view.rb', line 35 def close @controller.remove_listener(self) super end |
#handle(event) ⇒ Object
Handle an event from the client.
47 48 49 50 51 52 53 54 |
# File 'lib/presently/display_view.rb', line 47 def handle(event) case event.dig(:detail, :action) when "next" @controller.advance! when "previous" @controller.retreat! end end |
#render(builder) ⇒ Object
Render the display view.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/presently/display_view.rb', line 58 def render(builder) = @controller. return unless builder.tag(:div, class: "display", data: {transition: .transition}) do builder.tag(:div, class: "slide-container") do @slide_renderer.render(builder, ) end builder.tag(:div, class: "slide-counter") do builder.text("#{@controller.current_index + 1} / #{@controller.}") end end end |
#slide_changed! ⇒ Object
Called by the controller when the slide changes.
41 42 43 |
# File 'lib/presently/display_view.rb', line 41 def self.update! end |