ui_bibz 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +44 -0
- data/.travis.yml +13 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +171 -0
- data/MIT-LICENSE +20 -0
- data/README.md +728 -0
- data/README.rdoc +0 -0
- data/Rakefile +34 -0
- data/config/locales/en.yml +14 -0
- data/config/locales/fr.yml +14 -0
- data/doc/images/alert.png +0 -0
- data/doc/images/breadcrumb.png +0 -0
- data/doc/images/button.png +0 -0
- data/doc/images/button_dropdown.png +0 -0
- data/doc/images/button_group.png +0 -0
- data/doc/images/button_link.png +0 -0
- data/doc/images/button_split_dropdown.png +0 -0
- data/doc/images/glyph.png +0 -0
- data/doc/images/list.png +0 -0
- data/doc/images/nav.png +0 -0
- data/doc/images/panel.png +0 -0
- data/doc/images/table.png +0 -0
- data/doc/images/table_pagination_per_page.png +0 -0
- data/doc/images/table_panel.png +0 -0
- data/doc/images/table_search_field.png +0 -0
- data/doc/images/ui-bibz-logo-without-border.gif +0 -0
- data/doc/images/ui-bibz-logo.gif +0 -0
- data/lib/tasks/ui_bibz_tasks.rake +4 -0
- data/lib/ui_bibz/concerns/models/searchable.rb +93 -0
- data/lib/ui_bibz/helpers/meta_helper.rb +27 -0
- data/lib/ui_bibz/helpers/ui_helper.rb +108 -0
- data/lib/ui_bibz/helpers/utils_helper.rb +9 -0
- data/lib/ui_bibz/rails/engine.rb +39 -0
- data/lib/ui_bibz/ui/alert.rb +67 -0
- data/lib/ui_bibz/ui/breadcrumb/breadcrumb.rb +54 -0
- data/lib/ui_bibz/ui/breadcrumb/components/breadcrumb_link.rb +62 -0
- data/lib/ui_bibz/ui/button/button.rb +65 -0
- data/lib/ui_bibz/ui/button/button_dropdown.rb +56 -0
- data/lib/ui_bibz/ui/button/button_group.rb +62 -0
- data/lib/ui_bibz/ui/button/button_link.rb +66 -0
- data/lib/ui_bibz/ui/button/button_split_dropdown.rb +80 -0
- data/lib/ui_bibz/ui/component.rb +137 -0
- data/lib/ui_bibz/ui/dropdown/components/dropdown_list.rb +73 -0
- data/lib/ui_bibz/ui/dropdown/dropdown.rb +101 -0
- data/lib/ui_bibz/ui/glyph.rb +92 -0
- data/lib/ui_bibz/ui/grid/components/col.rb +74 -0
- data/lib/ui_bibz/ui/grid/components/row.rb +32 -0
- data/lib/ui_bibz/ui/grid/grid.rb +108 -0
- data/lib/ui_bibz/ui/jumbotron.rb +58 -0
- data/lib/ui_bibz/ui/label.rb +58 -0
- data/lib/ui_bibz/ui/list/components/list.rb +105 -0
- data/lib/ui_bibz/ui/list/list_group.rb +78 -0
- data/lib/ui_bibz/ui/nav/components/nav_link.rb +68 -0
- data/lib/ui_bibz/ui/nav/nav.rb +65 -0
- data/lib/ui_bibz/ui/panel.rb +101 -0
- data/lib/ui_bibz/ui/table/components/actions.rb +44 -0
- data/lib/ui_bibz/ui/table/components/column.rb +34 -0
- data/lib/ui_bibz/ui/table/components/columns.rb +16 -0
- data/lib/ui_bibz/ui/table/components/store.rb +67 -0
- data/lib/ui_bibz/ui/table/components/table_action.rb +21 -0
- data/lib/ui_bibz/ui/table/table.rb +146 -0
- data/lib/ui_bibz/ui/table/table_pagination.rb +29 -0
- data/lib/ui_bibz/ui/table/table_pagination_per_page.rb +53 -0
- data/lib/ui_bibz/ui/table/table_panel.rb +66 -0
- data/lib/ui_bibz/ui/table/table_search_field.rb +62 -0
- data/lib/ui_bibz/ui/table/ux/actionable.rb +59 -0
- data/lib/ui_bibz/ui/table/ux/paginable.rb +35 -0
- data/lib/ui_bibz/ui/table/ux/searchable.rb +47 -0
- data/lib/ui_bibz/ui/table/ux/sortable.rb +93 -0
- data/lib/ui_bibz/ui/ui.rb +14 -0
- data/lib/ui_bibz/utils/internationalization.rb +30 -0
- data/lib/ui_bibz/version.rb +3 -0
- data/lib/ui_bibz.rb +60 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/mailers/.keep +0 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/models/user.rb +5 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -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/bin/setup +29 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +57 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/migrate/20150123191721_user.rb +4 -0
- data/test/dummy/db/migrate/20150123191805_create_users.rb +12 -0
- data/test/dummy/db/schema.rb +25 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/test/fixtures/users.yml +13 -0
- data/test/dummy/test/models/user_test.rb +7 -0
- data/test/factories/user.rb +8 -0
- data/test/store_test.rb +46 -0
- data/test/support/factory_girl.rb +6 -0
- data/test/test_helper.rb +23 -0
- data/test/ui/button_test.rb +56 -0
- data/test/ui/component_test.rb +21 -0
- data/test/ui/dropdown_test.rb +18 -0
- data/test/ui/glyph_test.rb +23 -0
- data/test/ui/grid_test.rb +46 -0
- data/test/ui/list_group_test.rb +28 -0
- data/test/ui/nav_test.rb +27 -0
- data/test/ui/panel_test.rb +52 -0
- data/test/ui/table_test.rb +178 -0
- data/test/ui_bibz_test.rb +13 -0
- data/test/ui_helper_test.rb +44 -0
- data/ui_bibz.gemspec +36 -0
- data/vendor/assets/javascripts/ui_bibz.js.coffee +24 -0
- data/vendor/assets/stylesheets/ui_bibz.sass +46 -0
- metadata +398 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
include UiBibz::Helpers
|
4
|
+
class ComponentTest < ActionView::TestCase
|
5
|
+
|
6
|
+
test 'create complex component' do
|
7
|
+
actual = UiBibz::Ui::Component.new('New component', { status: :active, glyph: 'add' }, { class: 'new-class' }).render
|
8
|
+
expected = '<i class="glyph fa fa-add"></i> New component'
|
9
|
+
|
10
|
+
assert_equal expected, actual
|
11
|
+
end
|
12
|
+
|
13
|
+
test 'create complex component with block' do
|
14
|
+
actual = UiBibz::Ui::Component.new(status: :active) do
|
15
|
+
"New content"
|
16
|
+
end.render
|
17
|
+
expected = 'New content'
|
18
|
+
|
19
|
+
assert_equal expected, actual
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include UiBibz::Helpers
|
3
|
+
class DropdownTest < ActionView::TestCase
|
4
|
+
|
5
|
+
test 'Dropdown' do
|
6
|
+
actual = UiBibz::Ui::Dropdown.new("Dropdown", type: :dropup, state: :success).tap do |d|
|
7
|
+
d.list 'toto'
|
8
|
+
d.list 'header', type: :header
|
9
|
+
d.list 'momo'
|
10
|
+
d.list '---'
|
11
|
+
d.list 'lolo'
|
12
|
+
end.render
|
13
|
+
expected = "<div class=\"dropup\"><button class=\"btn btn-success dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-expanded=\"false\">Dropdown <span class=\"caret\"></span></button><ul class=\"dropdown-menu dropdown-menu-left\" role=\"menu\"><li role=\"presentation\">toto</li><li class=\"dropdown-header\" role=\"presentation\">header</li><li role=\"presentation\">momo</li><li class=\"divider\" role=\"presentation\"></li><li role=\"presentation\">lolo</li></ul></div>"
|
14
|
+
|
15
|
+
assert_equal expected, actual
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
include UiBibz::Helpers
|
4
|
+
class GlyphTest < ActionView::TestCase
|
5
|
+
|
6
|
+
test 'create glyph with a name' do
|
7
|
+
actual = UiBibz::Ui::Glyph.new('add').render
|
8
|
+
expected = '<i class="glyph fa fa-add"></i>'
|
9
|
+
assert_equal expected, actual
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'create glyph with hash' do
|
13
|
+
actual = UiBibz::Ui::Glyph.new({ name: 'add', size: 3, type: 'li'}).render
|
14
|
+
expected = '<i class="glyph fa fa-add fa-3x fa-li"></i>'
|
15
|
+
assert_equal expected, actual
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'create glyph with name and hash' do
|
19
|
+
actual = UiBibz::Ui::Glyph.new('add', { size: 3, type: 'li' }).render
|
20
|
+
expected = '<i class="glyph fa fa-add fa-3x fa-li"></i>'
|
21
|
+
assert_equal expected, actual
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include UiBibz::Helpers
|
3
|
+
class GridTest < ActionView::TestCase
|
4
|
+
|
5
|
+
test 'row' do
|
6
|
+
actual = UiBibz::Ui::Row.new() do
|
7
|
+
'test'
|
8
|
+
end.render
|
9
|
+
expected = "<div class=\"row\">test</div>"
|
10
|
+
|
11
|
+
assert_equal expected, actual
|
12
|
+
end
|
13
|
+
|
14
|
+
test 'col with simple arg' do
|
15
|
+
actual = UiBibz::Ui::Col.new({ size: :lg, num: 1}) do
|
16
|
+
'test'
|
17
|
+
end.render
|
18
|
+
expected = "<div class=\"col-lg-1\">test</div>"
|
19
|
+
|
20
|
+
assert_equal expected, actual
|
21
|
+
end
|
22
|
+
|
23
|
+
test 'col with multiple args' do
|
24
|
+
actual = UiBibz::Ui::Col.new([{ size: :lg, num: 1, offset: 2}, { num: 1 }], class: 'test') do
|
25
|
+
'test'
|
26
|
+
end.render
|
27
|
+
expected = "<div class=\"test col-lg-1 col-offset-2 col-md-1\">test</div>"
|
28
|
+
|
29
|
+
assert_equal expected, actual
|
30
|
+
end
|
31
|
+
|
32
|
+
test 'grid' do
|
33
|
+
actual = UiBibz::Ui::Grid.new().tap do |g|
|
34
|
+
g.view position: :left do
|
35
|
+
'left'
|
36
|
+
end
|
37
|
+
g.view 'center', position: :center
|
38
|
+
g.view 'right', position: :right
|
39
|
+
g.view 'bottom', position: :bottom
|
40
|
+
end.render
|
41
|
+
expected = "<div class=\"grid row\"><div class=\"col grid-left col-md-1\">left</div><div class=\"col grid-center col-md-10\">center</div><div class=\"col grid-right col-md-1\">right</div><div class=\"col grid-bottom col-md-12\">bottom</div></div>"
|
42
|
+
|
43
|
+
assert_equal expected, actual
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include UiBibz::Helpers
|
3
|
+
class ListGroupTest < ActionView::TestCase
|
4
|
+
|
5
|
+
test 'list_group with link' do
|
6
|
+
actual = UiBibz::Ui::ListGroup.new(type: :link).tap do |lg|
|
7
|
+
lg.list 'Momo', { state: :success, url: '#momo' }
|
8
|
+
lg.list({ tap: true, active: true, url: '#toto' }) do |l|
|
9
|
+
l.header 'My title'
|
10
|
+
l.body 'My body'
|
11
|
+
end
|
12
|
+
end.render
|
13
|
+
expected = "<div class=\"list-group\"><a href=\"#momo\" class=\"list-group-item-success list-group-item\">Momo</a><a type=\"link\" href=\"#toto\" class=\"list-group-item\"><h4 class=\"list-group-item-heading\">My title</h4><p class=\"list-group-item-text\">My body</p></a></div>"
|
14
|
+
|
15
|
+
assert_equal expected, actual
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'list_group' do
|
19
|
+
actual = UiBibz::Ui::ListGroup.new().tap do |lg|
|
20
|
+
lg.list 'Lulu'
|
21
|
+
lg.list 'Toto'
|
22
|
+
end.render
|
23
|
+
expected = "<ul class=\"list-group\"><li class=\"list-group-item\">Lulu</li><li class=\"list-group-item\">Toto</li></ul>"
|
24
|
+
|
25
|
+
assert_equal expected, actual
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/test/ui/nav_test.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include UiBibz::Helpers
|
3
|
+
class NavTest < ActionView::TestCase
|
4
|
+
|
5
|
+
test 'Nav with tab' do
|
6
|
+
actual = UiBibz::Ui::Nav.new().tap do |n|
|
7
|
+
n.link 'Home', status: :active, url: "#Home", selector: 'home'
|
8
|
+
n.link 'Profile', url: "#profile", selector: 'profile'
|
9
|
+
n.link 'Messages', url: "#messages", selector: 'messages'
|
10
|
+
end.render
|
11
|
+
expected = "<ul class=\"nav nav-tabs\"><li class=\"active\" role=\"presentation\"><a aria-controls=\"home\" role=\"tab\" data-toggle=\"tab\" href=\"#Home\">Home</a></li><li role=\"presentation\"><a aria-controls=\"profile\" role=\"tab\" data-toggle=\"tab\" href=\"#profile\">Profile</a></li><li role=\"presentation\"><a aria-controls=\"messages\" role=\"tab\" data-toggle=\"tab\" href=\"#messages\">Messages</a></li></ul>"
|
12
|
+
|
13
|
+
assert_equal expected, actual
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'Nav with pills' do
|
17
|
+
actual = UiBibz::Ui::Nav.new(type: :pills, position: :justified).tap do |n|
|
18
|
+
n.link 'Home', status: :active, url: "#Home", selector: 'home'
|
19
|
+
n.link 'Profile', url: "#profile", selector: 'profile', badge: 16
|
20
|
+
n.link 'Messages', url: "#messages", selector: 'messages', status: :disabled
|
21
|
+
end.render
|
22
|
+
expected = "<ul class=\"nav nav-pills nav-justified\"><li class=\"active\" role=\"presentation\"><a href=\"#Home\">Home</a></li><li role=\"presentation\"><a href=\"#profile\">Profile<span class=\"badge\">16</span></a></li><li class=\"disabled\" role=\"presentation\"><a href=\"#messages\">Messages</a></li></ul>"
|
23
|
+
|
24
|
+
assert_equal expected, actual
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include UiBibz::Helpers
|
3
|
+
class PanelTest < ActionView::TestCase
|
4
|
+
|
5
|
+
setup do
|
6
|
+
@content = 'Example'
|
7
|
+
end
|
8
|
+
|
9
|
+
test 'simple panel' do
|
10
|
+
actual = UiBibz::Ui::Panel.new(@content).render
|
11
|
+
expected = "<div class=\"panel-default panel\"><div class=\"panel-body\">#{ @content }</div></div>"
|
12
|
+
|
13
|
+
assert_equal expected, actual
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'simple panel with block' do
|
17
|
+
actual = UiBibz::Ui::Panel.new do
|
18
|
+
@content
|
19
|
+
end.render
|
20
|
+
expected = "<div class=\"panel-default panel\"><div class=\"panel-body\">#{ @content }</div></div>"
|
21
|
+
|
22
|
+
assert_equal expected, actual
|
23
|
+
end
|
24
|
+
|
25
|
+
test 'simple panel with tap' do
|
26
|
+
actual = UiBibz::Ui::Panel.new().tap do |p|
|
27
|
+
p.body @content
|
28
|
+
end.render
|
29
|
+
expected = "<div class=\"panel-default panel\"><div class=\"panel-body\">#{ @content }</div></div>"
|
30
|
+
|
31
|
+
assert_equal expected, actual
|
32
|
+
end
|
33
|
+
|
34
|
+
test 'complex panel with tap' do
|
35
|
+
actual = UiBibz::Ui::Panel.new({state: :danger}, { class: 'example'}).tap do |p|
|
36
|
+
p.header 'header', class: 'header-example'
|
37
|
+
p.body class: 'body-example' do
|
38
|
+
@content
|
39
|
+
end
|
40
|
+
p.footer do
|
41
|
+
"footer"
|
42
|
+
end
|
43
|
+
end.render
|
44
|
+
expected = "<div class=\"example panel-danger panel\">\
|
45
|
+
<div class=\"header-example panel-heading\">header</div>\
|
46
|
+
<div class=\"body-example panel-body\">#{ @content }</div>\
|
47
|
+
<div class=\"panel-footer\">footer</div></div>"
|
48
|
+
|
49
|
+
assert_equal expected, actual
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require "ui_bibz/ui/table/components/store"
|
3
|
+
require "ui_bibz/ui/table/ux/paginable"
|
4
|
+
require "ui_bibz/ui/table/ux/searchable"
|
5
|
+
require "ui_bibz/ui/table/ux/sortable"
|
6
|
+
require "ui_bibz/ui/table/ux/actionable"
|
7
|
+
include UiBibz::Helpers
|
8
|
+
class TableTest < ActionView::TestCase
|
9
|
+
|
10
|
+
setup do
|
11
|
+
create_list(:user, 25)
|
12
|
+
params = {
|
13
|
+
controller: 'users',
|
14
|
+
action: 'index',
|
15
|
+
sort: 'users.name_fr',
|
16
|
+
direction: 'asc',
|
17
|
+
search: 'Name fr',
|
18
|
+
per_page: 2,
|
19
|
+
page: 1
|
20
|
+
}
|
21
|
+
@users = User.table_search_pagination(params, session)
|
22
|
+
@store = UiBibz::Ui::Store.new @users
|
23
|
+
end
|
24
|
+
|
25
|
+
test 'table search field' do
|
26
|
+
actual = UiBibz::Ui::TableSearchField.new({ store: @users}).render
|
27
|
+
expected = "<form action=\"/users\" accept-charset=\"UTF-8\" method=\"get\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /><div class=\"input-group input-group-sm table-search-field\"><span class=\"input-group-addon\"><i class=\"glyph fa fa-search\"></i></span><input type=\"search\" value=\"Name fr\" name=\"search\" class=\"form-control\" placeholder=\"Search by name_fr and name_en...\" /><span class=\"clear-search-btn input-group-addon\"><i class=\"glyph fa fa-times-circle\"></i></span></div></form>"
|
28
|
+
|
29
|
+
assert_equal expected, actual
|
30
|
+
end
|
31
|
+
|
32
|
+
test 'table pagination' do
|
33
|
+
actual = UiBibz::Ui::TablePagination.new({ store: @users}).render
|
34
|
+
expected = "<ul class=\"pagination pagination\"><li class=\"prev disabled\"><span>← Previous</span></li> <li class=\"active\"><span>1</span></li> <li><a rel=\"next\" href=\"/users?page=2\">2</a></li> <li><a href=\"/users?page=3\">3</a></li> <li><a href=\"/users?page=4\">4</a></li> <li><a href=\"/users?page=5\">5</a></li> <li><a href=\"/users?page=6\">6</a></li> <li><a href=\"/users?page=7\">7</a></li> <li><a href=\"/users?page=8\">8</a></li> <li><a href=\"/users?page=9\">9</a></li> <li class=\"disabled\"><span>…</span></li> <li><a href=\"/users?page=12\">12</a></li> <li><a href=\"/users?page=13\">13</a></li> <li class=\"next\"><a rel=\"next\" href=\"/users?page=2\">Next →</a></li></ul>"
|
35
|
+
|
36
|
+
assert_equal expected, actual
|
37
|
+
end
|
38
|
+
|
39
|
+
test 'table non sortable' do
|
40
|
+
options = { sortable: false }
|
41
|
+
actual = UiBibz::Ui::Sortable.new(@store, options).header(@store.columns.list.first)
|
42
|
+
expected = "Id"
|
43
|
+
|
44
|
+
assert_equal expected, actual
|
45
|
+
end
|
46
|
+
|
47
|
+
test 'table sortable' do
|
48
|
+
options = { sortable: true }
|
49
|
+
actual = UiBibz::Ui::Sortable.new(@store, options).header(@store.columns.list.first)
|
50
|
+
expected = "<a class=\"dropup\" href=\"/users?direction=asc&search=Name+fr&sort=users.id\">Id</a>"
|
51
|
+
|
52
|
+
assert_equal expected, actual
|
53
|
+
end
|
54
|
+
|
55
|
+
test 'table non paginable' do
|
56
|
+
options = { paginable: false }
|
57
|
+
pagination = UiBibz::Ui::Paginable.new(@store, options)
|
58
|
+
actual = pagination.render if pagination.paginable?
|
59
|
+
expected = nil
|
60
|
+
|
61
|
+
assert_equal expected, actual
|
62
|
+
end
|
63
|
+
|
64
|
+
test 'table paginable' do
|
65
|
+
options = { paginable: true }
|
66
|
+
pagination = UiBibz::Ui::Paginable.new(@store, options)
|
67
|
+
actual = pagination.render if pagination.paginable?
|
68
|
+
expected = "<div><ul class=\"pagination pagination\"><li class=\"prev disabled\"><span>← Previous</span></li> <li class=\"active\"><span>1</span></li> <li><a rel=\"next\" href=\"/users?page=2\">2</a></li> <li><a href=\"/users?page=3\">3</a></li> <li><a href=\"/users?page=4\">4</a></li> <li><a href=\"/users?page=5\">5</a></li> <li><a href=\"/users?page=6\">6</a></li> <li><a href=\"/users?page=7\">7</a></li> <li><a href=\"/users?page=8\">8</a></li> <li><a href=\"/users?page=9\">9</a></li> <li class=\"disabled\"><span>…</span></li> <li><a href=\"/users?page=12\">12</a></li> <li><a href=\"/users?page=13\">13</a></li> <li class=\"next\"><a rel=\"next\" href=\"/users?page=2\">Next →</a></li></ul><form action=\"/users\" accept-charset=\"UTF-8\" method=\"get\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /><div class=\"table-pagination-per-page\">Displaying User <b>1 - 2</b> of <b>25</b> in total | Per page: <select name=\"per_page\" id=\"per_page\" class=\"form-control\"><option value=\"25\">25</option>
|
69
|
+
<option value=\"50\">50</option>
|
70
|
+
<option value=\"100\">100</option></select></div></form><br class=\"clear\" /></div>"
|
71
|
+
|
72
|
+
assert_equal expected, actual
|
73
|
+
end
|
74
|
+
|
75
|
+
test 'table non searchable' do
|
76
|
+
options = { searchable: false }
|
77
|
+
actual = UiBibz::Ui::Searchable.new(@store, options).render
|
78
|
+
expected = "<div><div class=\"title\">Users list</div><br class=\"clear\" /></div>"
|
79
|
+
|
80
|
+
assert_equal expected, actual
|
81
|
+
end
|
82
|
+
|
83
|
+
test 'table non searchable with a title and glyph' do
|
84
|
+
options = { searchable: false, glyph: 'toto', title: 'Title list' }
|
85
|
+
actual = UiBibz::Ui::Searchable.new(@store, options).render
|
86
|
+
expected = "<div><div class=\"title\"><i class=\"glyph fa fa-toto\"></i>Title list</div><br class=\"clear\" /></div>"
|
87
|
+
|
88
|
+
assert_equal expected, actual
|
89
|
+
end
|
90
|
+
|
91
|
+
test 'table searchable' do
|
92
|
+
options = { searchable: true }
|
93
|
+
actual = UiBibz::Ui::Searchable.new(@store, options).render
|
94
|
+
expected = "<div><div class=\"title\">Users list</div><div class=\"input-group input-group-sm table-search-field\"><span class=\"input-group-addon\"><i class=\"glyph fa fa-search\"></i></span><input type=\"search\" value=\"Name fr\" name=\"search\" class=\"form-control\" placeholder=\"Search by name_fr and name_en...\" /><span class=\"clear-search-btn input-group-addon\"><i class=\"glyph fa fa-times-circle\"></i></span></div><br class=\"clear\" /></div>"
|
95
|
+
|
96
|
+
assert_equal expected, actual
|
97
|
+
end
|
98
|
+
|
99
|
+
test 'table actionable header' do
|
100
|
+
options = { actionable: true }
|
101
|
+
action = UiBibz::Ui::Actionable.new(@store, options)
|
102
|
+
actual = action.header []
|
103
|
+
expected = ["<th class=\"action\"></th>"]
|
104
|
+
|
105
|
+
assert_equal expected, actual
|
106
|
+
end
|
107
|
+
|
108
|
+
test 'table actionable body' do
|
109
|
+
options = { actionable: true }
|
110
|
+
action = UiBibz::Ui::Actionable.new(@store, options)
|
111
|
+
actual = action.body @store.records.first, []
|
112
|
+
expected = ["<td><div class=\"btn-group-xs dropdown\"><button class=\"btn btn-default dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-expanded=\"false\"><i class=\"glyph fa fa-ellipsis-v fa-fw\"></i> Actions <span class=\"caret\"></span></button><ul class=\"dropdown-menu dropdown-menu-right\" role=\"menu\"></ul></div></td>"]
|
113
|
+
|
114
|
+
|
115
|
+
assert_equal expected, actual
|
116
|
+
end
|
117
|
+
|
118
|
+
test 'table actionable inject_url' do
|
119
|
+
options = { actionable: true }
|
120
|
+
action = UiBibz::Ui::Actionable.new(@store, options)
|
121
|
+
actual = action.inject_url 'http://localhost/users/id/test', @store.records.first
|
122
|
+
expected = "http://localhost/users/1/test"
|
123
|
+
|
124
|
+
assert_equal expected, actual
|
125
|
+
end
|
126
|
+
|
127
|
+
test 'table non actionable header' do
|
128
|
+
options = { actionable: false }
|
129
|
+
action = UiBibz::Ui::Actionable.new(@store, options)
|
130
|
+
actual = action.header []
|
131
|
+
expected = []
|
132
|
+
|
133
|
+
assert_equal expected, actual
|
134
|
+
end
|
135
|
+
|
136
|
+
test 'table non actionable body' do
|
137
|
+
options = { actionable: false }
|
138
|
+
action = UiBibz::Ui::Actionable.new(@store, options)
|
139
|
+
actual = action.body @store.records.first, []
|
140
|
+
expected = []
|
141
|
+
|
142
|
+
assert_equal expected, actual
|
143
|
+
end
|
144
|
+
|
145
|
+
test 'simple table_panel' do
|
146
|
+
actual = UiBibz::Ui::TablePanel.new(store: @users, tap: true).render
|
147
|
+
end
|
148
|
+
|
149
|
+
test 'complex table_panel' do
|
150
|
+
actual = UiBibz::Ui::TablePanel.new({ store: @users, tap: true }, { class: 'toto' }).tap do |pane|
|
151
|
+
pane.header 'Test header'
|
152
|
+
pane.body class: 'ui' do
|
153
|
+
'Test body'
|
154
|
+
end
|
155
|
+
end.render
|
156
|
+
end
|
157
|
+
|
158
|
+
test 'complex table_panel with custom actions' do
|
159
|
+
actual = UiBibz::Ui::TablePanel.new({ store: @users, tap: true }, { class: 'toto'}).tap do |pane|
|
160
|
+
pane.header 'Test header'
|
161
|
+
pane.body cls: 'ui' do
|
162
|
+
'Test body'
|
163
|
+
end
|
164
|
+
pane.columns do |c|
|
165
|
+
c.column({ name: '#', data_index: 'id' })
|
166
|
+
c.column({ name: 'Name fr', data_index: 'name_fr', link: edit_user_path(:id), order: 2 })
|
167
|
+
c.column({ name: 'Name en', data_index: 'name_en', order: 1 })
|
168
|
+
c.column({ name: 'Name en', data_index: 'name_en', format: lambda{ |records, record| "name #{ record.id}"}})
|
169
|
+
end
|
170
|
+
pane.actions do |a|
|
171
|
+
a.action 'toto', url: users_path(:id), glyph: 'eye'
|
172
|
+
a.action '---'
|
173
|
+
a.action 'momo', url: users_path(:id), glyph: 'home'
|
174
|
+
end
|
175
|
+
end.render
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
include UiBibz::Helpers
|
4
|
+
class UiHelperTest < ActionView::TestCase
|
5
|
+
|
6
|
+
test 'breadcrumb' do
|
7
|
+
actual = breadcrumb do |b|
|
8
|
+
b.link 'Home', url: '#home', glyph: 'home'
|
9
|
+
b.link 'Toto', { url: '#toto', status: :active }
|
10
|
+
end
|
11
|
+
expected = "<ol class=\"breadcrumb\"><li><a href=\"#home\"><i class=\"glyph fa fa-home\"></i> Home</a></li><li class=\"active\"><a href=\"#toto\">Toto</a></li></ol>"
|
12
|
+
|
13
|
+
assert_equal expected, actual
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'alert' do
|
17
|
+
actual = notify 'toto'
|
18
|
+
expected = "<div class=\"alert-info alert\" role=\"alert\">toto</div>"
|
19
|
+
|
20
|
+
assert_equal expected, actual
|
21
|
+
end
|
22
|
+
|
23
|
+
test 'label' do
|
24
|
+
actual = lab 'toto', state: :success, glyph: 'pencil'
|
25
|
+
expected = "<span class=\"label-success label\"><i class=\"glyph fa fa-pencil\"></i> toto</span>"
|
26
|
+
|
27
|
+
assert_equal expected, actual
|
28
|
+
end
|
29
|
+
|
30
|
+
test 'jumbotron with full_width' do
|
31
|
+
actual = jumbotron 'toto', full_width: true
|
32
|
+
expected = "<div class=\"jumbotron\"><div class=\"container\">toto</div></div>"
|
33
|
+
|
34
|
+
assert_equal expected, actual
|
35
|
+
end
|
36
|
+
|
37
|
+
test 'jumbotron' do
|
38
|
+
actual = jumbotron 'toto'
|
39
|
+
expected = "<div class=\"jumbotron\">toto</div>"
|
40
|
+
|
41
|
+
assert_equal expected, actual
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/ui_bibz.gemspec
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
|
3
|
+
# Maintain your gem's version:
|
4
|
+
require "ui_bibz/version"
|
5
|
+
|
6
|
+
# Describe your gem and declare its dependencies:
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "ui_bibz"
|
9
|
+
s.version = UiBibz::VERSION
|
10
|
+
s.authors = ["Thooams"]
|
11
|
+
s.email = ["thooams@gmail.com"]
|
12
|
+
s.homepage = "https://github.com/thooams/ui-bibz"
|
13
|
+
s.summary = "A Rails plugin with Boostrap framework..."
|
14
|
+
s.description = "A Rails plugin with Boostrap framework..."
|
15
|
+
s.license = "MIT"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
# rails
|
23
|
+
s.add_dependency 'rails', '~> 4.2.0'
|
24
|
+
s.add_dependency 'will_paginate', '~> 3.0.6'
|
25
|
+
s.add_dependency 'will_paginate-bootstrap'
|
26
|
+
s.add_dependency 'will-paginate-i18n'
|
27
|
+
s.add_dependency 'haml'
|
28
|
+
s.add_dependency 'haml-rails'
|
29
|
+
s.add_dependency 'sass-rails', '~> 5.0.1'
|
30
|
+
|
31
|
+
s.add_development_dependency "minitest"
|
32
|
+
s.add_development_dependency "sqlite3"
|
33
|
+
s.add_development_dependency "factory_girl_rails", "~> 4.0"
|
34
|
+
s.add_development_dependency "codeclimate-test-reporter"
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# For turbolink
|
2
|
+
$(document).on 'ready page:load', ->
|
3
|
+
|
4
|
+
# Submit form when per_page select changing
|
5
|
+
$('.table-pagination-per-page select').change () ->
|
6
|
+
$(this).parents('form').submit()
|
7
|
+
|
8
|
+
# Clear search
|
9
|
+
$('.table-search-field .clear-search-btn').click () ->
|
10
|
+
$(this).prev().val('')
|
11
|
+
$(this).parents('form').submit()
|
12
|
+
|
13
|
+
# Resize search field
|
14
|
+
$('.table-panel input[type=search]').blur ->
|
15
|
+
$parent = $(this).parent()
|
16
|
+
$parent.removeClass('has-value') if $(this).val() == ''
|
17
|
+
$parent.removeClass('is-focused')
|
18
|
+
|
19
|
+
$('.table-panel input[type=search]').focus ->
|
20
|
+
$(this).parent().addClass('is-focused has-value')
|
21
|
+
|
22
|
+
$('.table-panel input[type=search]').each ->
|
23
|
+
$(this).parent().addClass('has-value') if $(this).val() != ''
|
24
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
.table-panel
|
2
|
+
.action
|
3
|
+
width: 92px
|
4
|
+
.panel-heading
|
5
|
+
background-color: #f5f5f5
|
6
|
+
.title
|
7
|
+
float: left
|
8
|
+
font-size: 20px
|
9
|
+
.has-value
|
10
|
+
width: 400px !important
|
11
|
+
.input-group
|
12
|
+
width: 300px
|
13
|
+
transition: width .5s ease-in-out
|
14
|
+
float: right
|
15
|
+
.panel-table, .panel-body
|
16
|
+
overflow-x: auto
|
17
|
+
.panel-footer
|
18
|
+
padding: 10px 10px
|
19
|
+
.pagination
|
20
|
+
margin: 0
|
21
|
+
.table-pagination-per-page
|
22
|
+
float: right
|
23
|
+
select
|
24
|
+
width: 75px
|
25
|
+
display: inline-block
|
26
|
+
|
27
|
+
.table-hover>tbody>tr:hover
|
28
|
+
td:last-child .dropdown
|
29
|
+
display: block
|
30
|
+
|
31
|
+
.table-hover>tbody>tr
|
32
|
+
td:last-child
|
33
|
+
height: 39px
|
34
|
+
.dropdown
|
35
|
+
display: none
|
36
|
+
|
37
|
+
.table-search-field
|
38
|
+
.clear-search-btn
|
39
|
+
cursor: pointer
|
40
|
+
.glyph
|
41
|
+
margin: 0
|
42
|
+
|
43
|
+
.table
|
44
|
+
.action
|
45
|
+
width: 92px
|
46
|
+
|