Add class Repubmark::Elems::CustomBlock

This commit is contained in:
Alex Kotov 2024-02-24 08:02:58 +04:00
parent c901f4070e
commit d40150fbc4
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
3 changed files with 50 additions and 0 deletions

View File

@ -25,6 +25,7 @@ require_relative 'repubmark/elems/canvas'
# Always inside Canvas
require_relative 'repubmark/elems/blockquote'
require_relative 'repubmark/elems/code_block'
require_relative 'repubmark/elems/custom_block'
require_relative 'repubmark/elems/figures'
require_relative 'repubmark/elems/iframe'
require_relative 'repubmark/elems/paragraph'

View File

@ -37,6 +37,13 @@ module Repubmark
nil
end
def custom
custom_block = CustomBlock.new self
@items << custom_block
yield custom_block
nil
end
def iframe(*args, **kwargs)
iframe = Iframe.new self, *args, **kwargs
@items << iframe

View File

@ -0,0 +1,42 @@
# frozen_string_literal: true
module Repubmark
module Elems
class CustomBlock < Base
FORMATS = %i[html gemtext].freeze
parents :Canvas
def initialize(parent)
super parent
@for = {}
end
#################
# Basic methods #
#################
def to_html
"<div>\n#{@for[:html].strip}\n</div>\n".freeze if @for[:html]
end
def to_gemtext
"#{@for[:gemtext].strip}\n".freeze if @for[:gemtext]
end
###################
# Builder methods #
###################
def for(format, str)
raise 'Invalid format' unless FORMATS.include? format
raise 'Format already configured' if @for.key? format
str = String(str).strip.freeze
return if str.empty?
@for[format] = str
end
end
end
end