Class: Inkpen::MarkdownMode
- Inherits:
-
Object
- Object
- Inkpen::MarkdownMode
- Defined in:
- lib/inkpen/markdown_mode.rb
Overview
PORO representing markdown mode configuration.
MarkdownMode enables switching between WYSIWYG, raw markdown, and split view editing modes. When enabled, a mode toggle appears allowing users to edit content as markdown source.
Constant Summary collapse
- MODES =
Valid editing modes.
%i[wysiwyg markdown split].freeze
- TOGGLE_PLACEMENTS =
Valid placements for the mode toggle.
%i[top inline].freeze
- DEFAULT_SYNC_DELAY =
Default sync delay in milliseconds for split view.
300
Instance Attribute Summary collapse
-
#default_mode ⇒ Symbol
readonly
The default editing mode.
-
#enabled ⇒ Boolean
readonly
Whether markdown mode is enabled.
- #keyboard_shortcuts ⇒ Object readonly
-
#show_toggle ⇒ Boolean
readonly
Whether to show the mode toggle button.
-
#sync_delay ⇒ Integer
readonly
Debounce delay for split view sync (ms).
-
#toggle_placement ⇒ Symbol
readonly
Where to place the mode toggle (:top, :inline).
-
#toolbar_button ⇒ Boolean
readonly
Whether to show markdown toggle button in main toolbar.
Instance Method Summary collapse
-
#data_attributes ⇒ Hash
Generate data attributes for Stimulus controller.
-
#enabled? ⇒ Boolean
Check if markdown mode is enabled.
-
#initialize(enabled: false, default_mode: :wysiwyg, show_toggle: true, toggle_placement: :top, toolbar_button: false, sync_delay: DEFAULT_SYNC_DELAY, keyboard_shortcuts: true) ⇒ MarkdownMode
constructor
Initialize a new markdown mode configuration.
-
#inline_toggle? ⇒ Boolean
Check if toggle should render inline with fixed toolbar.
-
#markdown_default? ⇒ Boolean
Check if the default mode is markdown.
-
#split_default? ⇒ Boolean
Check if the default mode is split view.
-
#to_config ⇒ Hash
Convert to configuration hash for JavaScript.
-
#to_json(*args) ⇒ String
Convert to JSON representation.
-
#wysiwyg_default? ⇒ Boolean
Check if the default mode is WYSIWYG.
Constructor Details
#initialize(enabled: false, default_mode: :wysiwyg, show_toggle: true, toggle_placement: :top, toolbar_button: false, sync_delay: DEFAULT_SYNC_DELAY, keyboard_shortcuts: true) ⇒ MarkdownMode
Initialize a new markdown mode configuration.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/inkpen/markdown_mode.rb', line 83 def initialize( enabled: false, default_mode: :wysiwyg, show_toggle: true, toggle_placement: :top, toolbar_button: false, sync_delay: DEFAULT_SYNC_DELAY, keyboard_shortcuts: true ) @enabled = enabled @default_mode = validate_mode(default_mode) @show_toggle = show_toggle @toggle_placement = validate_toggle_placement(toggle_placement) @toolbar_button = @sync_delay = sync_delay.to_i @keyboard_shortcuts = keyboard_shortcuts end |
Instance Attribute Details
#default_mode ⇒ Symbol (readonly)
Returns the default editing mode.
70 71 72 |
# File 'lib/inkpen/markdown_mode.rb', line 70 def default_mode @default_mode end |
#enabled ⇒ Boolean (readonly)
Returns whether markdown mode is enabled.
70 |
# File 'lib/inkpen/markdown_mode.rb', line 70 attr_reader :default_mode, :show_toggle, :toggle_placement, :toolbar_button, :sync_delay, :keyboard_shortcuts |
#keyboard_shortcuts ⇒ Object (readonly)
70 |
# File 'lib/inkpen/markdown_mode.rb', line 70 attr_reader :default_mode, :show_toggle, :toggle_placement, :toolbar_button, :sync_delay, :keyboard_shortcuts |
#show_toggle ⇒ Boolean (readonly)
Returns whether to show the mode toggle button.
70 |
# File 'lib/inkpen/markdown_mode.rb', line 70 attr_reader :default_mode, :show_toggle, :toggle_placement, :toolbar_button, :sync_delay, :keyboard_shortcuts |
#sync_delay ⇒ Integer (readonly)
Returns debounce delay for split view sync (ms).
70 |
# File 'lib/inkpen/markdown_mode.rb', line 70 attr_reader :default_mode, :show_toggle, :toggle_placement, :toolbar_button, :sync_delay, :keyboard_shortcuts |
#toggle_placement ⇒ Symbol (readonly)
Returns where to place the mode toggle (:top, :inline).
70 |
# File 'lib/inkpen/markdown_mode.rb', line 70 attr_reader :default_mode, :show_toggle, :toggle_placement, :toolbar_button, :sync_delay, :keyboard_shortcuts |
#toolbar_button ⇒ Boolean (readonly)
Returns whether to show markdown toggle button in main toolbar.
70 |
# File 'lib/inkpen/markdown_mode.rb', line 70 attr_reader :default_mode, :show_toggle, :toggle_placement, :toolbar_button, :sync_delay, :keyboard_shortcuts |
Instance Method Details
#data_attributes ⇒ Hash
Generate data attributes for Stimulus controller.
151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/inkpen/markdown_mode.rb', line 151 def data_attributes { "inkpen--editor-markdown-enabled-value" => enabled?.to_s, "inkpen--editor-markdown-mode-value" => default_mode.to_s, "inkpen--editor-markdown-show-toggle-value" => show_toggle.to_s, "inkpen--editor-markdown-toggle-placement-value" => toggle_placement.to_s, "inkpen--editor-markdown-toolbar-button-value" => .to_s, "inkpen--editor-markdown-sync-delay-value" => sync_delay.to_s, "inkpen--editor-markdown-shortcuts-value" => keyboard_shortcuts.to_s } end |
#enabled? ⇒ Boolean
Check if markdown mode is enabled.
106 107 108 |
# File 'lib/inkpen/markdown_mode.rb', line 106 def enabled? @enabled end |
#inline_toggle? ⇒ Boolean
Check if toggle should render inline with fixed toolbar.
142 143 144 |
# File 'lib/inkpen/markdown_mode.rb', line 142 def inline_toggle? toggle_placement == :inline end |
#markdown_default? ⇒ Boolean
Check if the default mode is markdown.
124 125 126 |
# File 'lib/inkpen/markdown_mode.rb', line 124 def markdown_default? default_mode == :markdown end |
#split_default? ⇒ Boolean
Check if the default mode is split view.
133 134 135 |
# File 'lib/inkpen/markdown_mode.rb', line 133 def split_default? default_mode == :split end |
#to_config ⇒ Hash
Convert to configuration hash for JavaScript.
168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/inkpen/markdown_mode.rb', line 168 def to_config { enabled: enabled?, defaultMode: default_mode.to_s, showToggle: show_toggle, togglePlacement: toggle_placement.to_s, toolbarButton: , syncDelay: sync_delay, keyboardShortcuts: keyboard_shortcuts } end |
#to_json(*args) ⇒ String
Convert to JSON representation.
185 186 187 |
# File 'lib/inkpen/markdown_mode.rb', line 185 def to_json(*args) to_config.to_json(*args) end |
#wysiwyg_default? ⇒ Boolean
Check if the default mode is WYSIWYG.
115 116 117 |
# File 'lib/inkpen/markdown_mode.rb', line 115 def wysiwyg_default? default_mode == :wysiwyg end |