Class: Eggshell::Bundles::Basic::ListBlocks
- Inherits:
-
Object
- Object
- Eggshell::Bundles::Basic::ListBlocks
- Includes:
- Eggshell::BlockHandler, Eggshell::BlockHandler::BlockParams, Eggshell::BlockHandler::HtmlUtils
- Defined in:
- lib/eggshell/bundles/basics.rb
Constant Summary collapse
- START_LIST =
/^(ol|ul|dl)[(.]/
- START_LIST_SHORT =
/^\s*([#>-])/
Constants included from Eggshell::BlockHandler::HtmlUtils
Eggshell::BlockHandler::HtmlUtils::HASH_HTML_ESCAPE
Constants included from Eggshell::BlockHandler::BlockParams
Eggshell::BlockHandler::BlockParams::ATTRIBUTES, Eggshell::BlockHandler::BlockParams::CLASS, Eggshell::BlockHandler::BlockParams::ID, Eggshell::BlockHandler::BlockParams::KEYS, Eggshell::BlockHandler::BlockParams::STYLE
Constants included from Eggshell::BlockHandler
Eggshell::BlockHandler::COLLECT, Eggshell::BlockHandler::COLLECT_RAW, Eggshell::BlockHandler::DONE, Eggshell::BlockHandler::RETRY
Instance Method Summary collapse
- #can_handle(line) ⇒ Object
- #continue_with(line) ⇒ Object
- #equal?(handler, type) ⇒ Boolean
-
#initialize ⇒ ListBlocks
constructor
A new instance of ListBlocks.
- #process(type, args, lines, out, call_depth = 0) ⇒ Object
Methods included from Eggshell::BlockHandler::HtmlUtils
#attrib_string, #create_tag, #css_string, #html_escape, #inject_attribs
Methods included from Eggshell::BlockHandler::BlockParams
#get_block_params, #set_block_params
Methods included from Eggshell::BlockHandler
#current_type, #reset, #set_processor
Methods included from Eggshell::BaseHandler
Constructor Details
#initialize ⇒ ListBlocks
Returns a new instance of ListBlocks.
339 340 341 |
# File 'lib/eggshell/bundles/basics.rb', line 339 def initialize @block_types = ['ul', 'ol', 'dl'] end |
Instance Method Details
#can_handle(line) ⇒ Object
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 |
# File 'lib/eggshell/bundles/basics.rb', line 346 def can_handle(line) match = START_LIST.match(line) if match @block_type = match[1] return BH::COLLECT end match = START_LIST_SHORT.match(line) if match if match[1] == '>' @block_type = 'dl' else @block_type = match[1] == '-' ? 'ul' : 'ol' end return BH::COLLECT end return BH::RETRY end |
#continue_with(line) ⇒ Object
366 367 368 369 370 371 372 |
# File 'lib/eggshell/bundles/basics.rb', line 366 def continue_with(line) if line == nil || line == "" || !START_LIST_SHORT.match(line) return BH::RETRY else return BH::COLLECT end end |
#equal?(handler, type) ⇒ Boolean
436 437 438 |
# File 'lib/eggshell/bundles/basics.rb', line 436 def equal?(handler, type) self.class == handler.class && (type == 'ol' || type == 'ul') end |
#process(type, args, lines, out, call_depth = 0) ⇒ Object
TODO:
support ability to add attributes to sub-lists (maybe ‘[-#] @(.…)’)
375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 |
# File 'lib/eggshell/bundles/basics.rb', line 375 def process(type, args, lines, out, call_depth = 0) if type == 'dl' # @todo else order_stack = [] otype_stack = [] last = nil first_type = nil if lines[0] && !lines[0].match(/[-#]/) line = lines.shift end lines.each do |line_obj| line = nil indent = 0 if line_obj.is_a?(Eggshell::Line) line = line_obj.line indent = line_obj.indent_lvl else line = line_obj end ltype = line[0] == '-' ? 'ul' : 'ol' line = line[1..line.length].strip if order_stack.length == 0 # use the given type to start; infer for sub-lists order_stack << create_tag(type, get_block_params(type, args[0])) otype_stack << type # @todo make sure that previous item was a list # remove closing li to enclose sublist elsif indent > (otype_stack.length-1) && order_stack.length > 0 last = order_stack[-1] last = last[0...last.length-5] order_stack[-1] = last order_stack << "#{"\t"*indent}<#{ltype}>" otype_stack << ltype elsif indent < (otype_stack.length-1) count = otype_stack.length - 1 while count > indent ltype = otype_stack.pop order_stack << "#{"\t"*count}</#{ltype}>\n#{"\t"*(count-1)}</li>" count -= 1 end end order_stack << "#{"\t"*indent}<li>#{line}</li>" end # close nested lists d = otype_stack.length c = 1 otype_stack.reverse.each do |ltype| ident = d - c order_stack << "#{"\t" * ident}</#{ltype}>\n#{ident-1 >= 0 ? "\t"*(ident-1) : ''}#{c == d ? '' : "</li>"}" c += 1 end out << @eggshell.(order_stack.join("\n")) end end |