0.0
Low commit activity in last 3 years
A long-lived project that still receives updates
A simple helper for creating HTML calendars and tables. An example in a view: <%= HtmlSkeleton.new.calendar %> The calendar/table may be embelished by user supplied lambda's, e.g. for inserting link_to.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

 Project Readme

HtmlSkeleton

Gem Version Downloads GitHub Build Ruby Style Guide MIT License

HtmlSkeleton provides the frame for a calendar or a table, i.e. no loops are required to build up the HTML structure. Filling the skeleton is done via parameters and, in particular, with procs (Proc.new, lambda). See below Default Options.

Installation

As usual:

# Gemfile
gem "html_skeleton"

and run "bundle install".

Calendar

A simple helper for creating an HTML calendar. The "calendar" method will be available to your view templates.

Procs may be supplied to generate particular HTML-code for a day or the year. In the example below clicking a day triggers an action.

Examples

HtmlSkeleton.new.calendar                  # calendar for current year
HtmlSkeleton.new.calendar year: 2012       # calendar for year 2012
HtmlSkeleton.new.calendar year: 2012, month: 8  # calendar for August 2012

HtmlSkeleton.new.calendar {|date|
  link = "/#{controller_name}/toggle/#{@resource.id}?date=#{date}"
  style = @resource.holidays.include?(date.to_s) ?
           'font-weight:bold; color:red' : ''
  %Q{ <a style="#{style}" href="#{link}"> #{date.day.to_s} </a>}
}

Default Options

year:        DateTime.now.year,
title:       DateTime.now.year,
rows:        3,
calendar_class: 'skeleton',
day_names:   Date::DAYNAMES.dup,
month_names: Date::MONTHNAMES,
abbrev:      (0..1),
cell_proc:   block || ->(d) { d.day.to_s},
first_day_of_week: 1

Inspired by calendar_helper:

Table

A simple helper for creating an HTML table.

Table only takes care of the HTML tags and expects lambdas/strings to be supplied by the user.

Examples

rows = %w{a bb ccc}
cols = %w{1 22}
HtmlSkeleton.new.table(rows, cols) {|row, col|
  col == '1' ? '<td>bingo</td>' : '<td></td>'
}
HtmlSkeleton.new.table(@users, %w{email address},
  th_attribute: lambda { |col| col.name },
  legend: 'Users') { |row, col| "<td>#{ row.send(col) }</td>" }
stripes = %w{odd even}
proc = ->(row) { k = stripes.shift; stripes << k; %Q{class="#{k}"} }
HtmlSkeleton.new.table(@users, %w{email address},
            tr_attribute: proc,
            legend: 'Users') { |row, col|
  "<td>#{ row.send(col) }</td>"
}

Default Options

legend: nil,
col_legend:   ->(x) { x.to_s },
row_legend:   ->(x) { x.id },
th_attribute: ->(col) { nil },
tr_attribute: ->(row) { nil },
table_class:  'skeleton',
cell_proc:    block || ->(row, col) { "<td>#{row} #{col}</td>"}

Curious?

  • github.com/cthulhu666/easy_table
  • github.com/giniedp/fancygrid
  • github.com/hunterae/table-for
  • github.com/jgdavey/tabletastic
  • github.com/lunich/table_for
  • github.com/watu/table_builder
  • ruby-toolbox.com/projects/tableasy

Miscellaneous

Copyright (c) 2012-2025 Dittmar Krall (www.matiq.com), released under the MIT license.