Class: Inkpen::StickyToolbar

Inherits:
Object
  • Object
show all
Defined in:
lib/inkpen/sticky_toolbar.rb

Overview

PORO representing sticky toolbar configuration.

The StickyToolbar provides block and media insertion controls that remain fixed on screen. It’s separate from the text formatting toolbar and focused on inserting new content blocks.

Supports horizontal (bottom) and vertical (left/right) layouts.

Examples:

Basic bottom toolbar

sticky_toolbar = Inkpen::StickyToolbar.new(position: :bottom)

Custom buttons

sticky_toolbar = Inkpen::StickyToolbar.new(
  position: :bottom,
  buttons: [:table, :code_block, :image, :divider]
)

In editor helper

<%= inkpen_editor name: "post[body]",
    sticky_toolbar: Inkpen::StickyToolbar.new(position: :right) %>

See Also:

Author:

  • Nauman Tariq

Since:

  • 0.2.1

Constant Summary collapse

POSITIONS =

Valid toolbar positions.

Returns:

  • (Array<Symbol>)

Since:

  • 0.2.1

%i[bottom left right].freeze
BLOCK_BUTTONS =

Block insertion buttons.

Returns:

  • (Array<Symbol>)

Since:

  • 0.2.1

%i[table code_block blockquote horizontal_rule task_list].freeze
MEDIA_BUTTONS =

Media insertion buttons.

Returns:

  • (Array<Symbol>)

Since:

  • 0.2.1

%i[image youtube embed].freeze
WIDGET_BUTTONS =

Widget insertion buttons (opens modal picker).

Returns:

  • (Array<Symbol>)

Since:

  • 0.2.1

%i[widget].freeze
PRESET_BLOCKS =

Preset with block buttons only.

Returns:

  • (Array<Symbol>)

Since:

  • 0.2.1

BLOCK_BUTTONS.freeze
PRESET_MEDIA =

Preset with media buttons only.

Returns:

  • (Array<Symbol>)

Since:

  • 0.2.1

MEDIA_BUTTONS.freeze
PRESET_FULL =

Full preset with all buttons.

Returns:

  • (Array<Symbol>)

Since:

  • 0.2.1

(BLOCK_BUTTONS + MEDIA_BUTTONS + WIDGET_BUTTONS).freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(position: :bottom, buttons: nil, widget_types: nil, enabled: true) ⇒ StickyToolbar

Initialize a new sticky toolbar configuration.

Parameters:

  • position (Symbol) (defaults to: :bottom)

    toolbar position (:bottom, :left, :right)

  • buttons (Array<Symbol>, nil) (defaults to: nil)

    custom button list

  • widget_types (Array<String>, nil) (defaults to: nil)

    widget types for picker

  • enabled (Boolean) (defaults to: true)

    whether the sticky toolbar is enabled

Since:

  • 0.2.1



87
88
89
90
91
92
# File 'lib/inkpen/sticky_toolbar.rb', line 87

def initialize(position: :bottom, buttons: nil, widget_types: nil, enabled: true)
  @position = validate_position(position)
  @buttons = buttons || PRESET_FULL
  @widget_types = widget_types || default_widget_types
  @enabled = enabled
end

Instance Attribute Details

#buttonsArray<Symbol> (readonly)

Returns list of toolbar buttons.

Returns:

  • (Array<Symbol>)

    list of toolbar buttons



42
# File 'lib/inkpen/sticky_toolbar.rb', line 42

attr_reader :position, :buttons, :widget_types

#positionSymbol (readonly)

Returns toolbar position (:bottom, :left, :right).

Returns:

  • (Symbol)

    toolbar position (:bottom, :left, :right)



42
43
44
# File 'lib/inkpen/sticky_toolbar.rb', line 42

def position
  @position
end

#widget_typesObject (readonly)

Since:

  • 0.2.1



42
# File 'lib/inkpen/sticky_toolbar.rb', line 42

attr_reader :position, :buttons, :widget_types

Instance Method Details

#data_attributesHash

Generate data attributes for Stimulus controller.

Returns:

  • (Hash)

    data attributes hash

Since:

  • 0.2.1



126
127
128
129
130
131
132
133
# File 'lib/inkpen/sticky_toolbar.rb', line 126

def data_attributes
  {
    "inkpen--sticky-toolbar-position-value" => position.to_s,
    "inkpen--sticky-toolbar-buttons-value" => buttons.to_json,
    "inkpen--sticky-toolbar-widget-types-value" => widget_types.to_json,
    "inkpen--sticky-toolbar-vertical-value" => vertical?.to_s
  }
end

#enabled?Boolean

Check if the sticky toolbar is enabled.

Returns:

  • (Boolean)

    true if enabled

Since:

  • 0.2.1



99
100
101
# File 'lib/inkpen/sticky_toolbar.rb', line 99

def enabled?
  @enabled
end

#horizontal?Boolean

Check if toolbar uses horizontal layout (bottom).

Returns:

  • (Boolean)

    true if horizontal

Since:

  • 0.2.1



117
118
119
# File 'lib/inkpen/sticky_toolbar.rb', line 117

def horizontal?
  position == :bottom
end

#vertical?Boolean

Check if toolbar uses vertical layout (left or right).

Returns:

  • (Boolean)

    true if vertical

Since:

  • 0.2.1



108
109
110
# File 'lib/inkpen/sticky_toolbar.rb', line 108

def vertical?
  %i[left right].include?(position)
end