Provides basic common view/template helpers across web applications and convenience modifications (monkey patching) to SimpleForm.
Add this line to your application's Gemfile:
gem 'webcore', :git => 'git://github.com/tmaly1980/webcore.git'
And then execute:
$ bundle
Simple mount the gem as an engine, and it'll automatically include it's helper, load dependencies, etc:
In your app's config/routes.rb:
mount Webcore::Engine, at: "/webcore"
In your app/controllers/application_controller.rb:
helper Webcore::ApplicationHelper
In your views, access these helpers:
Info-style:
<%= info(text) %>
Success:
<%= success(text) %>
Warning:
<%= warning(text) %>
Danger:
<%= danger(text) %>
"Jun 13"
post.created_at.strftime(format_mond)
"10/15/81"
post.created_at.strftime(format_mdy)
"10/15/1981"
post.created_at.strftime(format_mdyear)
Calculate age, show months if less than a year
age(dob)
Calculate age, show "Unknown age" if nil
age!(dob)
No, Yes (as boolean)
f.input(:field_name, collection: yesnobool)
No, Yes (as string)
f.input(:field_name, collection: yesno)
Blank ( - ), No, Yes
f.input(:field_name, collection: yesnoblank)
Generate list of months in format of "01 - January":
f.input(:month, collection: months)
Generate list of US states
f.input(:state, collection: states)
Convert array list to key-value hash for select dropdowns, ie ['Dogs','Cags'] => { "Dogs" => "Dogs", "Cats" => "Cats" }
array_to_hash(array)
Show a bootstrap-style progress bar:
<%= progress("Text", percent, id, hide) %>
Generate browser head title, based on @browser_title, @page_title or @currentSite.title
<%= browser_title %>
Generate bootstrap-style breadcrumbs bar, based on stack in @crumbs
Set:
@crumbs = { "Home"=>"/", "All Adoptables"=>"/adoptables", @adoptable.name =>nil }
Display:
<%= get_crumbs() %>
Outputs:
<ul class='breadcrumb'>
<li><a href='/'>Home</a></li>
<li><a href='/adoptables'>All Adoptables</a></li>
<li>Name</li>
</ul>
Settings (blue button with cog, url defaults to 'edit' action):
<%= settings_link(title, url, options) %>
Link with glyphicon (bootstrap or font-awesome if prefixed with fa-), optional text:
glink_to(glyph, title=nil, url=nil, [opts])
Bootstrap-style button with glyphicon:
gblink_to(glyph, title=nil, url=nil, [opts])
Bootstrap-style button:
blink_to(title=nil, url=nil, opts, button_class='primary')
Add button (green success button, with plus icon, defaults to 'new' action):
add_link(title=nil,url=nil,[options])
Edit button (orange warning, pen icon, defaults to 'edit' action):
edit_link(title='Edit',url,[options])
View button (default/white, page icon, defaults to 'view' action):
view_link(title='View', url, options)
Delete button (danger, trash icon, hidden form post with delete method)
delete_link(title='Delete',url, options)
User logout button (posts to /users/logout by default):
logout(title='Logout', url=nil, options)
Convenience generic accessors to name of current object and data (if show/edit) - for our buttons/etc
For NewsPost object/controller:
news_post:
thingVar
@news_post:
thingData
news post:
thing
News post:
ucfirstthing
News Post:
ucthing
News Posts:
ucthings
Font awesome icons:
fa('user')
Produces:
<i class='fa fa-user'></i>
Bootstrap glyphicon:
g('cog')
Produces:
<span class='glyphicon glyphicon-cog'></span>
Assumes context:
<%= simple_form_for(object) do |f| %>
Bootstrap-style title field (no label, placeholder only, large text):
f.title(:field_name, options)
Summary textarea (varchar, bold and double spaced)
f.summary(field='summary',options)
WYSIWYG editor content (redactor)
f.content(field='content',options)
Save button (bootstrap style, success style):
f.save(text='Save')
Success button (bootstrap/green)
f.success(text='Submit', options)
Blue/primary button:
f.primary(text='Submit',options)
Info (light blue) button:
f.info(text='Submit',options)
Warning (orange) button:
f.warning(text='Submit',options)
Danger (red) button (ie for delete):
f.danger(text='Submit', options)
Implement a bootstrap style form group with text/icon before and/oror after input field:
f.form_group(:hostname, :before => 'http://', :after => ".subdomain.com")
Set wrapper div class/attributes (instead of setting deeper 'wrapper_html'):
f.input(:field, :div => "col-md-6")
f.input(:field, :div => { class: "col-md-6", id: 'fieldContainer' })
Feel free to contribute!
The gem is available as open source under the terms of the MIT License.