bootstrap-component-helper 0.2.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +39 -0
- data/Rakefile +14 -0
- data/app/helpers/bootstrap/base_helper.rb +60 -0
- data/app/helpers/bootstrap/component_helper.rb +570 -0
- data/app/helpers/bootstrap/image_helper.rb +38 -0
- data/app/helpers/bootstrap/tab_helper.rb +107 -0
- data/app/helpers/bootstrap/table_helper.rb +203 -0
- data/app/helpers/bootstrap/typography_helper.rb +109 -0
- data/lib/bootstrap-component-helper.rb +10 -0
- data/lib/bootstrap/component_helper/engine.rb +11 -0
- data/lib/bootstrap/component_helper/version.rb +5 -0
- data/lib/generators/bootstrap/component_helper/install/install_generator.rb +40 -0
- data/lib/generators/bootstrap/component_helper/install/templates/index.css.scss +7 -0
- data/lib/generators/bootstrap/component_helper/install/templates/index.js +3 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/images/favicon.ico +0 -0
- data/test/dummy/app/assets/javascripts/application.js +17 -0
- data/test/dummy/app/assets/javascripts/bootstrap_component_helper/index.js +3 -0
- data/test/dummy/app/assets/javascripts/holder.js +658 -0
- data/test/dummy/app/assets/javascripts/prettify.js +376 -0
- data/test/dummy/app/assets/stylesheets/application.css +156 -0
- data/test/dummy/app/assets/stylesheets/bootstrap_component_helper/index.css.scss +7 -0
- data/test/dummy/app/assets/stylesheets/prettify.css +55 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/home_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/order.rb +2 -0
- data/test/dummy/app/views/home/_flash.html.erb +43 -0
- data/test/dummy/app/views/home/_image.html.erb +64 -0
- data/test/dummy/app/views/home/_list.html.erb +106 -0
- data/test/dummy/app/views/home/_modal.html.erb +230 -0
- data/test/dummy/app/views/home/_navbar.html.erb +34 -0
- data/test/dummy/app/views/home/_progressbar.html.erb +47 -0
- data/test/dummy/app/views/home/_tab.html.erb +118 -0
- data/test/dummy/app/views/home/_table.html.erb +212 -0
- data/test/dummy/app/views/home/_thumbnails.html.erb +84 -0
- data/test/dummy/app/views/home/_typographic.html.erb +52 -0
- data/test/dummy/app/views/home/index.html.erb +108 -0
- data/test/dummy/app/views/layouts/application.html.erb +66 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +17 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +27 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +28 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +36 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.bootstrap.yml +18 -0
- data/test/dummy/config/locales/en.yml +14 -0
- data/test/dummy/config/routes.rb +7 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20131006012048_create_orders.rb +12 -0
- data/test/dummy/db/schema.rb +25 -0
- data/test/dummy/db/seeds.rb +3 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +18302 -0
- data/test/dummy/log/test.log +1145 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/0bcc8f0683a417e2802dca2e2526013808c5c34c/application.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/0bcc8f0683a417e2802dca2e2526013808c5c34c/components.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_accordion.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_close.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_code.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_hero-unit.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_labels-badges.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_layouts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_media.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_reset.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_responsive-1200px-min.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_responsive-767px-max.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_responsive-768px-979px.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_responsive-navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_sprites.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_type.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/7eab2e6517a6682722eebb4a5df7152eb329b310/responsive.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/84409d58037c135b28739dd3324e312869e235c7/index.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/c4d7e8313a08850ac1c2652d326bf93cea20578b/bootstrap-responsive.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/c4d7e8313a08850ac1c2652d326bf93cea20578b/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/03dd2dfd114c5240ab978a5bce1565fd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/07ce016699b0337b14f97412576ddf9b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1482cdaf91da4a3e74c2fee962e57266 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/14a3b97c693d6129681bb6c9e63e79b4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/16033f0fe45a392c87dc5f38f59e29e2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/17fd81b14984c81c41a5c231cd905bcc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/186b967c502a9346f6b379dfb06fe14f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1dc9e3618cee425126b555221e90226f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/262f97b1f0dd574bfff7cc8ecbb9f72e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/264e074302048cb000f909f2919a0c9a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/29c2f0fd8e3c5f4dcd1332efa4a0371d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2a61f06ae5cf5f6f1d43645b9b219453 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2e18e960f308cca4a1fdb77359d01a6c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2eee36c2ad21295c7e21e18c150d874b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/302cf2e7263ec807edde7ea7f3b65c03 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3c8c07d37685b45615255078c41e3ce0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3d2aeae465a641db34a3cea9ba300375 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3e27ccb3d43c940c257f6271a634069e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3ed026ca41b91b839c4dee2c2cc51849 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/41dc3aa765e6d4c4a686f88efbd6c68e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/41f5ea237dc91ead6f4231e2147f5404 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/46fc0f6e8d72a05f2eea42eaed662e5d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/470718a7ca39bcb2f1dc6053ffc682c0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4a3201209795b8621efba2e0ce121a6a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4ed14f9f7b1d5af357ddef644208340e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/516cdb0fc494c1a008f5630ee3f83ed9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/52e41d2cb37819e3cbe438707c4693c0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/536039d2b9042f61449290e282854f4d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/54857feec0db8fabd9e5bc2c6870cf5f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/54cc1257b927751b13f0369969e17440 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/61ad5207a209b9787578645a6950698a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/630cd0d8a55d825eaba0a90cda91122f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/698c4f478493aa93e94a2c32cdd5f1cc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/69e06cba85ef043450b628947462887c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6d1b20df06d073df2627c4df640473c2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6fca826ec75b904f60239bb708e38805 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/700827acd727b6fc8361f454c68a5cd7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/754683dc7fa0bebc9ff776512a463c80 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/76bde91ae4ac1605f8b2abe1dd436efa +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/779fd39741d5f4364f4453e6d9db3a8c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7a7d275aba66d0cd4498b2a7d2cc1d33 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7b28ddacb7b45a6b7022eb766e2f9c62 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7ee5964945e32a33395fd4a8b52901f8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/805a755d6887dd3f251ee8d671113a55 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/833fa0f8ca6eda2934d5875796ac0ddb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/85f13ec6dfd4e1c1d6d4faf5579367e4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8816657a272738b50d9f339f83602b2b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8ab512c9b33ac90e699b73469d71f061 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8bd5ee2e9abbe312a72a1cec2ea714a7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8d55d8baa9ba44e3a712be2608138977 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8d675d1f43c56b8b3fb27598f691101f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8f2292d2f2a219537aa2eff8577b38f5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8fd90c230c6244605a4c7b4bbcf41a21 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9689835f50540dff6e5d5107069dc71d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9c9f438defd3bed7797b13c64eea90c0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a19b51f4929c5dcbda2aa927080241c1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a202a5609c41454fcc67a0317b10da90 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a5b779be5a68643653ca723bce23c62c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a899e19256a0845205636938010c6fe5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ac722b83b79d24471fa10acb05d4f095 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ae0e5ab1590ad2f8651e7f29ab089d0f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b56d14052881f9f2fd665749410513dc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b6ff3a15ed2b320aa100de615d6acaa0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ba7837a3356c8c0f9d2d4dddd2db4ee2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bad2a2d10a1446e9b1eebb24bb7976ad +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bcca522c6302f184f12fe0e8a7d7e71a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c13fc73ceafa45876a901b3e775b83ae +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c72afec6ec61c0d8e5e664998b2d6dd5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d1ca5d34c1109f4451c3f675fd522bed +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d1e7f297ee2aaac3167da0b6b6575b49 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d66f7358aa43217d389251a399669d37 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d8d6bcff066ae30f590880ff044badf2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d90eaeee0ba225714c425461bbfa529d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d9d7f35a4e51c382aed08175c1dd6292 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/db5ddc82768b144533c161a80bdeee2d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dbb0a1624b85d0f9d4eaec08c03b8797 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dc4f2c66b13e09c13320f6f21bb7ec6a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dc664a988f31db3737b14c54d193732b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dd7a16eba4646a5a23bb7e5f906abbd3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e030a7845a28abd00581260c4e8afdcd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e256294192259b5603b8dc971d9d6a11 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e66f24418617ac4a7ee71d67f7545ce3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e69c8095136c028e535371ef3123cbd1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ec8a4c9e797155e9996a35bb7f7d7673 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f88b0e4100827602fa8c4f78b5e7dab3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f8d0320de120c037ea5d3943c8b76d0c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fde3d3c8658f07dd5aef16cc104c05c9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ff8ea5d6d7296abe74b47835195461a1 +0 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/helpers/bootstrap_component_helper_test.rb +92 -0
- data/test/unit/helpers/bootstrap_image_helper_test.rb +37 -0
- data/test/unit/helpers/bootstrap_tab_helper_test.rb +28 -0
- data/test/unit/helpers/bootstrap_typography_helper_test.rb +16 -0
- metadata +549 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
module Bootstrap
|
2
|
+
module ImageHelper
|
3
|
+
|
4
|
+
# Public: Rounded image helper. Use it as the same as image_tag.
|
5
|
+
def r_image_tag(source, options = {})
|
6
|
+
image_tag(source, merge_predef_class('img-rounded', options))
|
7
|
+
end
|
8
|
+
|
9
|
+
# Public: Circle image helper. Use it as the same as image_tag.
|
10
|
+
def c_image_tag(source, options = {})
|
11
|
+
image_tag(source, merge_predef_class('img-circle', options))
|
12
|
+
end
|
13
|
+
|
14
|
+
# public: Polaroid image helper. Use it as the same as image_tag.
|
15
|
+
def p_image_tag(source, options = {})
|
16
|
+
image_tag(source, merge_predef_class('img-polaroid', options))
|
17
|
+
end
|
18
|
+
|
19
|
+
# Public: Bootstrap icons helpers by Glyphicons.
|
20
|
+
#
|
21
|
+
# names - icon names, passed in one by one.
|
22
|
+
#
|
23
|
+
# Examples
|
24
|
+
#
|
25
|
+
# glyph_icon(:plus)
|
26
|
+
# # => <i class="icon-plus"></i>
|
27
|
+
#
|
28
|
+
# glyph_icon(:align_justify, :white)
|
29
|
+
# # => <i class="icon-align-justify icon-white"></i>
|
30
|
+
#
|
31
|
+
# glyph_icon(%w(plus white))
|
32
|
+
#
|
33
|
+
# Returns an i tag with icon classes.
|
34
|
+
def glyph_icon(*names)
|
35
|
+
content_tag :i, nil, class: names.flatten.map { |name| "icon-#{name.to_s.gsub('_', '-')}" }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module Bootstrap
|
2
|
+
module TabHelper
|
3
|
+
class Tabs
|
4
|
+
attr_reader :tabs, :default_index, :options, :template, :inline, :stacked,
|
5
|
+
:index, :id, :type, :position, :align, :content_options
|
6
|
+
|
7
|
+
def initialize(template,
|
8
|
+
index: 0,
|
9
|
+
inline: false,
|
10
|
+
stacked: false,
|
11
|
+
id: 'tabs',
|
12
|
+
type: 'tabs',
|
13
|
+
position: 'top',
|
14
|
+
align: 'left',
|
15
|
+
content_options: {},
|
16
|
+
**options)
|
17
|
+
@default_index = index
|
18
|
+
@inline = inline
|
19
|
+
@stacked = stacked
|
20
|
+
@id = id
|
21
|
+
@type = type
|
22
|
+
@position = position
|
23
|
+
@align = align
|
24
|
+
@content_options = content_options
|
25
|
+
@options = options
|
26
|
+
@template = template
|
27
|
+
@tabs = {}
|
28
|
+
end
|
29
|
+
|
30
|
+
# tab label and content of tabs
|
31
|
+
#
|
32
|
+
# label - label of tab
|
33
|
+
# options -
|
34
|
+
# disabled - true, false default: false
|
35
|
+
# clickable - true, false default: true
|
36
|
+
# other options that can be accpted by li
|
37
|
+
# pane_options -
|
38
|
+
# every option that can be accepted by div
|
39
|
+
def tab(label, disabled: false, pane_options: {}, **options, &block)
|
40
|
+
tabs[label] = { disabled: disabled, pane_options: pane_options,
|
41
|
+
options: options, content: block }
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_s
|
45
|
+
tab_wrapper_options = { style: "display: #{inline ? 'inline-block' : 'block'};",
|
46
|
+
class: " tabbable tabs-#{position}" }
|
47
|
+
|
48
|
+
template.div(tab_wrapper_options) do
|
49
|
+
tab_content = ''
|
50
|
+
tab_content << template.nav(options.merge!(type: type, stacked: stacked)) do |item|
|
51
|
+
tabs.keys.each_with_index do |k, i|
|
52
|
+
li_options = (i == default_index.to_i) ? { class: "active" } : {}
|
53
|
+
item.add(render_label(type, k, "#{id}-tab-#{i}", tabs[k]), li_options)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
tab_content << template.div(template.merge_predef_class('tab-content', content_options)) do
|
58
|
+
tab_panes = ''
|
59
|
+
tabs.values.each_with_index do |v, i|
|
60
|
+
tab_panes << render_content(i == default_index.to_i, "#{id}-tab-#{i}", v)
|
61
|
+
|
62
|
+
end
|
63
|
+
tab_panes.html_safe
|
64
|
+
end
|
65
|
+
|
66
|
+
tab_content.html_safe
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
def render_label(type, title, link_id, tab)
|
73
|
+
tab_class = tab[:disabled] ? ' disabled' : ''
|
74
|
+
tab[:options].merge!(data: { toggle: type.singularize })
|
75
|
+
|
76
|
+
template.link_to(title.html_safe, "##{link_id}",
|
77
|
+
template.merge_predef_class(tab_class, tab[:options]))
|
78
|
+
end
|
79
|
+
|
80
|
+
def render_content(active, link_id, tab)
|
81
|
+
pane_class = " tab-pane #{active ? 'active' : ''}"
|
82
|
+
tab[:pane_options][:id] = link_id
|
83
|
+
|
84
|
+
template.div(template.merge_predef_class(pane_class, tab[:pane_options])) do
|
85
|
+
template.capture(&tab[:content]) if tab[:content]
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Show Tabs
|
91
|
+
# options:
|
92
|
+
# index: show which tab default
|
93
|
+
# type: pills, tabs default: tabs
|
94
|
+
# position: below, left, right direction of tab
|
95
|
+
# align: left, right. the alignment of tab, NOT AVAILABLE NOW
|
96
|
+
# inline: true ,false default: false
|
97
|
+
# stacked: true, false default: false
|
98
|
+
# content_options
|
99
|
+
# every option that can be accepted by tab content div
|
100
|
+
def tabs(options = {}, &block)
|
101
|
+
new_tabs = Tabs.new(self, options)
|
102
|
+
capture(new_tabs, &block) if block_given?
|
103
|
+
new_tabs.to_s
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,203 @@
|
|
1
|
+
module Bootstrap
|
2
|
+
module TableHelper
|
3
|
+
|
4
|
+
class Row
|
5
|
+
attr_reader :columns, :options, :template
|
6
|
+
|
7
|
+
def initialize(template, options = {})
|
8
|
+
@template = template
|
9
|
+
@options = options
|
10
|
+
@columns = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def column(width: nil, align: 'left', text: nil, tag: :td, **options, &block)
|
14
|
+
if width && width.to_i <= 12 && width.to_i > 0
|
15
|
+
template.merge_predef_class("span#{width.to_i}", options)
|
16
|
+
end
|
17
|
+
|
18
|
+
columns << {
|
19
|
+
options: options,
|
20
|
+
align: align,
|
21
|
+
text: text,
|
22
|
+
tag: tag,
|
23
|
+
content: block
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def header(tag: :th, **options, &block)
|
28
|
+
if block_given?
|
29
|
+
column(options.merge!(tag: tag)) do
|
30
|
+
template.capture(&block)
|
31
|
+
end
|
32
|
+
else
|
33
|
+
column(options.merge!(tag: tag))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_s
|
38
|
+
template.content_tag(:tr, nil, options) do
|
39
|
+
tr_content = ''
|
40
|
+
columns.each do |c|
|
41
|
+
column_options = c[:options]
|
42
|
+
column_options[:style] ||= ''
|
43
|
+
column_options[:style] << "text-align: #{c[:align]};"
|
44
|
+
|
45
|
+
tr_content << template.content_tag(c[:tag], nil, column_options) do
|
46
|
+
if c[:content]
|
47
|
+
template.capture(&c[:content])
|
48
|
+
else
|
49
|
+
c[:text]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
tr_content.html_safe
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
class Table
|
61
|
+
attr_reader :headers, :columns, :rows, :options, :default_row_options,
|
62
|
+
:template, :caption, :caption_options, :collection, :type, :show_header
|
63
|
+
|
64
|
+
def initialize(template,
|
65
|
+
default_row_options: {},
|
66
|
+
collection: [],
|
67
|
+
caption: nil,
|
68
|
+
caption_options: {},
|
69
|
+
type: 'hover',
|
70
|
+
show_header: true,
|
71
|
+
**options)
|
72
|
+
@template = template
|
73
|
+
@type = type
|
74
|
+
@default_row_options = default_row_options
|
75
|
+
@options = options
|
76
|
+
@collection = collection
|
77
|
+
@caption = caption
|
78
|
+
@caption_options = caption_options
|
79
|
+
@show_header = show_header
|
80
|
+
@headers = []
|
81
|
+
@rows = []
|
82
|
+
@columns = []
|
83
|
+
@cust_header = false
|
84
|
+
end
|
85
|
+
|
86
|
+
# options
|
87
|
+
# width - 1~12
|
88
|
+
# method - object's method, use send(method) to get value
|
89
|
+
# align - text alignment: left, center and right
|
90
|
+
# header_options - options of header
|
91
|
+
def column(method: nil, header_options: {}, **options, &block)
|
92
|
+
if show_header && !@cust_header
|
93
|
+
|
94
|
+
text = if method
|
95
|
+
collection.try(:model).try(:human_attribute_name, method)
|
96
|
+
end
|
97
|
+
|
98
|
+
header(header_options.reverse_merge!(width: options[:width],
|
99
|
+
align: options[:align],
|
100
|
+
text: text))
|
101
|
+
end
|
102
|
+
|
103
|
+
columns << { method: method, options: options, content: block }
|
104
|
+
end
|
105
|
+
|
106
|
+
def row(options = {}, &block)
|
107
|
+
new_row = Row.new(template, options.reverse_merge!(default_row_options))
|
108
|
+
template.capture(new_row, &block)
|
109
|
+
rows << new_row
|
110
|
+
end
|
111
|
+
|
112
|
+
def header_row(&block)
|
113
|
+
if @cust_header == false
|
114
|
+
@cust_header = true
|
115
|
+
headers.clear
|
116
|
+
end
|
117
|
+
|
118
|
+
new_row = Row.new(template)
|
119
|
+
template.capture(new_row, &block)
|
120
|
+
headers << new_row
|
121
|
+
end
|
122
|
+
|
123
|
+
def to_s
|
124
|
+
table_class = 'table'
|
125
|
+
type.split(' ').each do |table_type|
|
126
|
+
table_class << " table-#{table_type}"
|
127
|
+
end
|
128
|
+
|
129
|
+
template.merge_predef_class(table_class, options)
|
130
|
+
template.content_tag(:table, nil, options) do
|
131
|
+
content = ''
|
132
|
+
content << template.content_tag('caption', caption, caption_options) if caption
|
133
|
+
|
134
|
+
if show_header && headers.any?
|
135
|
+
content << template.content_tag('thead') do
|
136
|
+
header_content = ''
|
137
|
+
headers.each do |h|
|
138
|
+
header_content << h.to_s
|
139
|
+
end
|
140
|
+
header_content.html_safe
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
content << template.content_tag(:tbody) do
|
145
|
+
tbody_content = ''
|
146
|
+
if collection && collection.any?
|
147
|
+
collection.each_with_index do |o, i|
|
148
|
+
row(default_row_options) do |r|
|
149
|
+
columns.each do |c|
|
150
|
+
column_options = c[:options].dup
|
151
|
+
|
152
|
+
text = if c[:method] && o.respond_to?(c[:method])
|
153
|
+
o.send(c[:method])
|
154
|
+
end
|
155
|
+
|
156
|
+
if c[:content]
|
157
|
+
r.column(column_options.merge!(text: text)) do
|
158
|
+
template.capture(o, i, &c[:content])
|
159
|
+
end
|
160
|
+
else
|
161
|
+
r.column(column_options.merge!(text: text))
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
rows.each do |r|
|
169
|
+
tbody_content << r.to_s
|
170
|
+
end
|
171
|
+
|
172
|
+
tbody_content.html_safe
|
173
|
+
end
|
174
|
+
|
175
|
+
content.html_safe
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
private
|
181
|
+
|
182
|
+
def header(options = {})
|
183
|
+
headers << Row.new(template) if headers.empty?
|
184
|
+
headers.last.header(options)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
# Show bootstrap style table
|
189
|
+
#
|
190
|
+
# options: Hash
|
191
|
+
# caption: caption of table.
|
192
|
+
# caption_options: caption's options
|
193
|
+
# collection: the collection for generating table.
|
194
|
+
# type: bootstrap table type, a string is splited by spaces. default: 'hover'
|
195
|
+
# for example: 'hover striped', 'hover fluid bordered'...
|
196
|
+
# other options can be accepted by table
|
197
|
+
def table(options={})
|
198
|
+
table = Table.new(self, options)
|
199
|
+
yield table
|
200
|
+
table.to_s
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
module Bootstrap
|
2
|
+
module TypographyHelper
|
3
|
+
|
4
|
+
# Internal: List class that represents a ul, li list with Bootstrap styles.
|
5
|
+
#
|
6
|
+
# template - ActionView::Template instance.
|
7
|
+
# li_options - Default options of all li tags. ( default: {} )
|
8
|
+
# type - Type of the list, can be unordered, ordered or unstyled.
|
9
|
+
# ( default: 'unordered' )
|
10
|
+
# options - Options can be accepted by ol or ul.
|
11
|
+
class List
|
12
|
+
|
13
|
+
attr_reader :collection, :options, :template, :li_options, :type
|
14
|
+
|
15
|
+
def initialize(templte, li_options: {}, type: 'unordered', **options)
|
16
|
+
@template = templte
|
17
|
+
@type = type
|
18
|
+
@options = options
|
19
|
+
@li_options = li_options
|
20
|
+
@collection = []
|
21
|
+
end
|
22
|
+
|
23
|
+
def add(content_or_options = nil, options = {})
|
24
|
+
content_or_options, options = '', content_or_options if content_or_options.is_a?(Hash)
|
25
|
+
|
26
|
+
collection << {options: options, content: content_or_options}
|
27
|
+
end
|
28
|
+
|
29
|
+
alias_method :<<, :add
|
30
|
+
|
31
|
+
def to_s
|
32
|
+
tag = (type == 'ordered') ? 'ol' : 'ul'
|
33
|
+
unstyled_class = (type == 'unstyled') ? 'unstyled ' : ''
|
34
|
+
|
35
|
+
template.content_tag(tag, nil, template.merge_predef_class(unstyled_class, options)) do
|
36
|
+
tag_content = ''
|
37
|
+
|
38
|
+
collection.each do |obj|
|
39
|
+
tag_content << template.content_tag('li', nil, obj[:options].reverse_merge(li_options)) do
|
40
|
+
obj[:content].html_safe
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
tag_content.html_safe
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Typography
|
50
|
+
# Headings not implemented
|
51
|
+
# Lead not implemented
|
52
|
+
# Small not implemented
|
53
|
+
# Bold not implemented
|
54
|
+
# Italics not implemented
|
55
|
+
# muted, text-warning, text-error, text-info, text-success not implemented
|
56
|
+
# Abbreviations not implemented
|
57
|
+
# Addresses not implemented
|
58
|
+
# Blockquotes not implemented
|
59
|
+
|
60
|
+
# Lists
|
61
|
+
############################################################################
|
62
|
+
|
63
|
+
# Public: Bootstrap Typography List, wraps List class to generate ul or ol
|
64
|
+
# tags with html options.
|
65
|
+
#
|
66
|
+
# options - options can be accepted by ul or ol.
|
67
|
+
# :type - unordered, ordered, unstyled.
|
68
|
+
# ( default: 'unordered' )
|
69
|
+
# :li_options - common li options in ul ( default: {} )
|
70
|
+
# other options can be accepted by ul or ol.
|
71
|
+
# block - yield with List object, used to add li tags into ul or ol.
|
72
|
+
# Also can add nested lists.
|
73
|
+
#
|
74
|
+
# Examples
|
75
|
+
#
|
76
|
+
# = list(type: 'ordered') do |i|
|
77
|
+
# - i.add('line 1')
|
78
|
+
# - i.add('line 2')
|
79
|
+
# - i.add(link_to('line 3', hello_world_path), class: "li-class")
|
80
|
+
# - i.add 'line 4' + list(type: 'unstyled') do |nested_li|
|
81
|
+
# - nested_li.add('line 4.1')
|
82
|
+
# - nested_li.add('line 4.2')
|
83
|
+
# # => <ol>
|
84
|
+
# <li>line 1</li>
|
85
|
+
# <li>line 2</li>
|
86
|
+
# <li class="li-class">
|
87
|
+
# <a href="/hello_world">line 3</a>
|
88
|
+
# </li>
|
89
|
+
# <li>
|
90
|
+
# line 4
|
91
|
+
# <ul class="unstyled">
|
92
|
+
# <li>line 4.1</li>
|
93
|
+
# <li>line 4.2</li>
|
94
|
+
# </ul>
|
95
|
+
# </li>
|
96
|
+
# </ol>
|
97
|
+
#
|
98
|
+
#
|
99
|
+
# Returns html content of the list.
|
100
|
+
def list(options = {}, &block)
|
101
|
+
builder = List.new(self, options)
|
102
|
+
capture(builder, &block) if block_given?
|
103
|
+
builder.to_s
|
104
|
+
end
|
105
|
+
|
106
|
+
# Inline not implemented
|
107
|
+
# Description not implemented
|
108
|
+
end
|
109
|
+
end
|