ui_bibz 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +44 -0
  3. data/.travis.yml +13 -0
  4. data/Gemfile +15 -0
  5. data/Gemfile.lock +171 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.md +728 -0
  8. data/README.rdoc +0 -0
  9. data/Rakefile +34 -0
  10. data/config/locales/en.yml +14 -0
  11. data/config/locales/fr.yml +14 -0
  12. data/doc/images/alert.png +0 -0
  13. data/doc/images/breadcrumb.png +0 -0
  14. data/doc/images/button.png +0 -0
  15. data/doc/images/button_dropdown.png +0 -0
  16. data/doc/images/button_group.png +0 -0
  17. data/doc/images/button_link.png +0 -0
  18. data/doc/images/button_split_dropdown.png +0 -0
  19. data/doc/images/glyph.png +0 -0
  20. data/doc/images/list.png +0 -0
  21. data/doc/images/nav.png +0 -0
  22. data/doc/images/panel.png +0 -0
  23. data/doc/images/table.png +0 -0
  24. data/doc/images/table_pagination_per_page.png +0 -0
  25. data/doc/images/table_panel.png +0 -0
  26. data/doc/images/table_search_field.png +0 -0
  27. data/doc/images/ui-bibz-logo-without-border.gif +0 -0
  28. data/doc/images/ui-bibz-logo.gif +0 -0
  29. data/lib/tasks/ui_bibz_tasks.rake +4 -0
  30. data/lib/ui_bibz/concerns/models/searchable.rb +93 -0
  31. data/lib/ui_bibz/helpers/meta_helper.rb +27 -0
  32. data/lib/ui_bibz/helpers/ui_helper.rb +108 -0
  33. data/lib/ui_bibz/helpers/utils_helper.rb +9 -0
  34. data/lib/ui_bibz/rails/engine.rb +39 -0
  35. data/lib/ui_bibz/ui/alert.rb +67 -0
  36. data/lib/ui_bibz/ui/breadcrumb/breadcrumb.rb +54 -0
  37. data/lib/ui_bibz/ui/breadcrumb/components/breadcrumb_link.rb +62 -0
  38. data/lib/ui_bibz/ui/button/button.rb +65 -0
  39. data/lib/ui_bibz/ui/button/button_dropdown.rb +56 -0
  40. data/lib/ui_bibz/ui/button/button_group.rb +62 -0
  41. data/lib/ui_bibz/ui/button/button_link.rb +66 -0
  42. data/lib/ui_bibz/ui/button/button_split_dropdown.rb +80 -0
  43. data/lib/ui_bibz/ui/component.rb +137 -0
  44. data/lib/ui_bibz/ui/dropdown/components/dropdown_list.rb +73 -0
  45. data/lib/ui_bibz/ui/dropdown/dropdown.rb +101 -0
  46. data/lib/ui_bibz/ui/glyph.rb +92 -0
  47. data/lib/ui_bibz/ui/grid/components/col.rb +74 -0
  48. data/lib/ui_bibz/ui/grid/components/row.rb +32 -0
  49. data/lib/ui_bibz/ui/grid/grid.rb +108 -0
  50. data/lib/ui_bibz/ui/jumbotron.rb +58 -0
  51. data/lib/ui_bibz/ui/label.rb +58 -0
  52. data/lib/ui_bibz/ui/list/components/list.rb +105 -0
  53. data/lib/ui_bibz/ui/list/list_group.rb +78 -0
  54. data/lib/ui_bibz/ui/nav/components/nav_link.rb +68 -0
  55. data/lib/ui_bibz/ui/nav/nav.rb +65 -0
  56. data/lib/ui_bibz/ui/panel.rb +101 -0
  57. data/lib/ui_bibz/ui/table/components/actions.rb +44 -0
  58. data/lib/ui_bibz/ui/table/components/column.rb +34 -0
  59. data/lib/ui_bibz/ui/table/components/columns.rb +16 -0
  60. data/lib/ui_bibz/ui/table/components/store.rb +67 -0
  61. data/lib/ui_bibz/ui/table/components/table_action.rb +21 -0
  62. data/lib/ui_bibz/ui/table/table.rb +146 -0
  63. data/lib/ui_bibz/ui/table/table_pagination.rb +29 -0
  64. data/lib/ui_bibz/ui/table/table_pagination_per_page.rb +53 -0
  65. data/lib/ui_bibz/ui/table/table_panel.rb +66 -0
  66. data/lib/ui_bibz/ui/table/table_search_field.rb +62 -0
  67. data/lib/ui_bibz/ui/table/ux/actionable.rb +59 -0
  68. data/lib/ui_bibz/ui/table/ux/paginable.rb +35 -0
  69. data/lib/ui_bibz/ui/table/ux/searchable.rb +47 -0
  70. data/lib/ui_bibz/ui/table/ux/sortable.rb +93 -0
  71. data/lib/ui_bibz/ui/ui.rb +14 -0
  72. data/lib/ui_bibz/utils/internationalization.rb +30 -0
  73. data/lib/ui_bibz/version.rb +3 -0
  74. data/lib/ui_bibz.rb +60 -0
  75. data/test/dummy/README.rdoc +28 -0
  76. data/test/dummy/Rakefile +6 -0
  77. data/test/dummy/app/assets/images/.keep +0 -0
  78. data/test/dummy/app/assets/javascripts/application.js +13 -0
  79. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  80. data/test/dummy/app/controllers/application_controller.rb +5 -0
  81. data/test/dummy/app/controllers/concerns/.keep +0 -0
  82. data/test/dummy/app/helpers/application_helper.rb +2 -0
  83. data/test/dummy/app/mailers/.keep +0 -0
  84. data/test/dummy/app/models/.keep +0 -0
  85. data/test/dummy/app/models/concerns/.keep +0 -0
  86. data/test/dummy/app/models/user.rb +5 -0
  87. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  88. data/test/dummy/bin/bundle +3 -0
  89. data/test/dummy/bin/rails +4 -0
  90. data/test/dummy/bin/rake +4 -0
  91. data/test/dummy/bin/setup +29 -0
  92. data/test/dummy/config/application.rb +26 -0
  93. data/test/dummy/config/boot.rb +5 -0
  94. data/test/dummy/config/database.yml +25 -0
  95. data/test/dummy/config/environment.rb +5 -0
  96. data/test/dummy/config/environments/development.rb +41 -0
  97. data/test/dummy/config/environments/production.rb +79 -0
  98. data/test/dummy/config/environments/test.rb +42 -0
  99. data/test/dummy/config/initializers/assets.rb +11 -0
  100. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  101. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  102. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  103. data/test/dummy/config/initializers/inflections.rb +16 -0
  104. data/test/dummy/config/initializers/mime_types.rb +4 -0
  105. data/test/dummy/config/initializers/session_store.rb +3 -0
  106. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  107. data/test/dummy/config/locales/en.yml +23 -0
  108. data/test/dummy/config/routes.rb +57 -0
  109. data/test/dummy/config/secrets.yml +22 -0
  110. data/test/dummy/config.ru +4 -0
  111. data/test/dummy/db/migrate/20150123191721_user.rb +4 -0
  112. data/test/dummy/db/migrate/20150123191805_create_users.rb +12 -0
  113. data/test/dummy/db/schema.rb +25 -0
  114. data/test/dummy/lib/assets/.keep +0 -0
  115. data/test/dummy/log/.keep +0 -0
  116. data/test/dummy/public/404.html +67 -0
  117. data/test/dummy/public/422.html +67 -0
  118. data/test/dummy/public/500.html +66 -0
  119. data/test/dummy/public/favicon.ico +0 -0
  120. data/test/dummy/test/fixtures/users.yml +13 -0
  121. data/test/dummy/test/models/user_test.rb +7 -0
  122. data/test/factories/user.rb +8 -0
  123. data/test/store_test.rb +46 -0
  124. data/test/support/factory_girl.rb +6 -0
  125. data/test/test_helper.rb +23 -0
  126. data/test/ui/button_test.rb +56 -0
  127. data/test/ui/component_test.rb +21 -0
  128. data/test/ui/dropdown_test.rb +18 -0
  129. data/test/ui/glyph_test.rb +23 -0
  130. data/test/ui/grid_test.rb +46 -0
  131. data/test/ui/list_group_test.rb +28 -0
  132. data/test/ui/nav_test.rb +27 -0
  133. data/test/ui/panel_test.rb +52 -0
  134. data/test/ui/table_test.rb +178 -0
  135. data/test/ui_bibz_test.rb +13 -0
  136. data/test/ui_helper_test.rb +44 -0
  137. data/ui_bibz.gemspec +36 -0
  138. data/vendor/assets/javascripts/ui_bibz.js.coffee +24 -0
  139. data/vendor/assets/stylesheets/ui_bibz.sass +46 -0
  140. metadata +398 -0
data/README.md ADDED
@@ -0,0 +1,728 @@
1
+ ![Ui Bibz logo](doc/images/ui-bibz-logo-without-border.gif)
2
+
3
+ [![Build Status](https://travis-ci.org/thooams/Ui-Bibz.svg)](https://travis-ci.org/thooams/Ui-Bibz)
4
+ [![Code Climate](https://codeclimate.com/github/thooams/Ui-Bibz/badges/gpa.svg)](https://codeclimate.com/github/thooams/Ui-Bibz)
5
+ [![Test Coverage](https://codeclimate.com/github/thooams/Ui-Bibz/badges/coverage.svg)](https://codeclimate.com/github/thooams/Ui-Bibz)
6
+
7
+ This project rocks and uses MIT-LICENSE.
8
+
9
+ # UiBibz
10
+ > Ui Bibz est un [framework d'interface](http://fr.wikipedia.org/wiki/Framework_d%27interface)
11
+ > permettant de construire une interface très rapidement et simplement
12
+ > à l'aide de Ruby on Rails 4 et de Boostrap 3.
13
+
14
+ Ui Bibz charge la librairie [boostrap](http://getbootstrap.com/) et
15
+ [awesomefont](http://fontawesome.io/).
16
+
17
+ **NB** : [HAML](http://haml.info/) est utilisé pour présenter les exemples de chaque élément.
18
+ Vous pouvez bien entendu utiliser l'interpréteur ERB dans votre application Rails.
19
+
20
+ Tous les composants du framework Ui Bibz comportent des *options* et des *html_options*.
21
+ Ces éléments sont basés sur l'élément ```Component```.
22
+ Un ```component``` accepte un contenu par variable ou par block.
23
+ ex :
24
+
25
+ ### Component
26
+
27
+
28
+ L'élément ```component``` accepte dans content et block :
29
+
30
+ * le contenu
31
+
32
+ L'élément ```component``` accepte en option les arguments :
33
+
34
+ * [state](#state-values)
35
+ * [glyph](#glyph-arguments)
36
+ * [status](#status-values)
37
+ * class
38
+
39
+
40
+ L'élément ```component``` accepte en html_option les arguments :
41
+
42
+ * class
43
+ * data
44
+ * ...
45
+
46
+ Ex :
47
+ ```ruby
48
+ Component.new 'Exemple', { state: :success }, { class: 'exemple' }
49
+ # ou
50
+ Component.new { state: :success }, { class: 'exemple' } do
51
+ 'Exemple'
52
+ end
53
+ ```
54
+
55
+ Signature :
56
+
57
+ ```ruby
58
+ Component.new content = nil, options = nil, html_options = nil, &block
59
+ ```
60
+
61
+ **NB** : Pour des raisons de simplicité d'écriture, l'argument ```class``` est présent
62
+ dans ```options``` et ```html_options```.
63
+
64
+
65
+ ## Installation
66
+
67
+ Ajouter la gem dans Rails :
68
+
69
+ ```ruby
70
+ gem "ui_bibz", '~> 0.9.0'
71
+ ```
72
+
73
+ Lancer la command suivante :
74
+
75
+ ```console
76
+ bundle install
77
+ ```
78
+
79
+ Placer la ligne suivante dans ```/app/views/layouts/application.rb```
80
+ ```ruby
81
+ = ui_bibz_meta_links
82
+ ```
83
+
84
+ Exemple :
85
+ ```ruby
86
+ !!!
87
+ %html
88
+ %head
89
+ ...
90
+ = ui_bibz_meta_links
91
+ ...
92
+ %body
93
+ ```
94
+
95
+
96
+ ## Utilisation
97
+
98
+ ### Alert
99
+
100
+ ![alert](doc/images/alert.png)
101
+
102
+ L'élément ```notify``` accepte en option les arguments :
103
+
104
+ * [state](#state-values)
105
+ * [glyph](#glyph-arguments)
106
+
107
+ ```ruby
108
+ = notify 'toto', state: :info, glyph: 'eye'
109
+ ```
110
+
111
+ ### Breadcrumb (fil d'ariane)
112
+
113
+ ![breadcrumb](doc/images/breadcrumb.png)
114
+
115
+ L'élément ```breadcrumb``` accepte en option les arguments :
116
+
117
+ * [status](#status-values)
118
+ * [glyph](#glyph-arguments)
119
+ * url
120
+
121
+ L'élément ```link``` est un [component](#component).
122
+
123
+ ```ruby
124
+ = breadcrumb do |b|
125
+ - b.link 'toto', url: '#toto', glyph: 'home'
126
+ - b.link 'momo', url: '#momo'
127
+ - b.link 'nono', status: :active
128
+ ```
129
+
130
+ ### Buttons (Boutons)
131
+
132
+ #### Button
133
+
134
+ ![button](doc/images/button.png)
135
+
136
+ L'élément ```button``` accepte en option les arguments :
137
+
138
+ * [state](#state-values)
139
+ * [status](#status-values)
140
+ * [glyph](#glyph-arguments)
141
+ * [size](#size-values)
142
+
143
+ ```ruby
144
+ = button 'Button', { state: :danger, size: :xs, glyph: 'star' } , { class: 'my-button' }
145
+ ```
146
+
147
+ #### Button Dropdown
148
+
149
+ L'élément ```button_dropdown``` accepte pour options les mêmes arguments que l'élément
150
+ [dropdown](#dropdown).
151
+
152
+ ![button_link](doc/images/button_dropdown.png)
153
+ ```ruby
154
+ = button_dropdown 'Button Dropdown' do |bd|
155
+ - bd.list link_to 'toto', '#'
156
+ - bd.list 'header', type: :header
157
+ - bd.list link_to 'momo', '#'
158
+ - bd.list '---'
159
+ - bd.list link_to 'lolo', '#'
160
+ ```
161
+
162
+ #### Button group
163
+
164
+ ![button_group](doc/images/button_group.png)
165
+
166
+ L'élément ```button_group``` accepte pour options les arguments :
167
+
168
+ * position (:vertical, :horizontal)
169
+ * [size](#size-values)
170
+
171
+ L'élément ```list```accepte pour options les arguments :
172
+
173
+ * [status](#status-values)
174
+ * [state](#state-values)
175
+
176
+ ```ruby
177
+ = button_group position: :vertical, size: :xs do
178
+ = button 'toto', status: :active
179
+ = button 'momo'
180
+ = button 'lolo'
181
+
182
+ = button_group do
183
+ = button 'toto', status: :active
184
+ = button 'momo'
185
+ = button 'lolo'
186
+ = button_dropdown 'Button Dropdown' do |bd|
187
+ - bd.list 'header', type: :header
188
+ - bd.list link_to 'momo', '#'
189
+ - bd.list '---'
190
+ - bd.list link_to 'lolo', '#'
191
+ ```
192
+
193
+ #### Button Link (Lien Bouton)
194
+
195
+ L'élément ```button_link```accepte pour options les arguments :
196
+
197
+ ![button_link](doc/images/button_link.png)
198
+ ```ruby
199
+ = button_link 'Button', { url: '#button', state: :primary, glyph: 'star' }, { class: 'my-button' }
200
+ ```
201
+
202
+ #### Button Split Dropdown
203
+
204
+ L'élément ```button_split_dropdown```accepte pour options les mêmes arguments
205
+ que l'élément [dropdown](#dropdown).
206
+
207
+
208
+ ![button_group](doc/images/button_split_dropdown.png)
209
+ ```ruby
210
+ = button_split_dropdown 'Dropdown', state: :primary do |d|
211
+ - d.list do
212
+ = link_to 'toto', "#"
213
+ - d.list 'header', type: :header
214
+ - d.list link_to 'momo', '#'
215
+ - d.list '---'
216
+ - d.list link_to 'lolo', '#'
217
+ ```
218
+
219
+ ### Dropdown
220
+
221
+ L'élément ```dropdown```accepte pour options les arguments :
222
+
223
+ * [state](#state-values)
224
+ * [status](#status-values)
225
+ * position (:left, :right)
226
+
227
+ L'élément ```list``` est un [component](#component) qui accepte pour options les arguments :
228
+
229
+ * type (:header)
230
+ * [glyph](#glyph-arguments)
231
+
232
+ ```ruby
233
+ = dropdown 'Dropdown', state: :success do |d|
234
+ - d.list do
235
+ = link_to 'toto', "#"
236
+ - d.list 'header', type: :header
237
+ - d.list link_to 'momo', '#'
238
+ - d.list '---'
239
+ - d.list link_to 'lolo', '#'
240
+ ```
241
+
242
+ Pour ajouter une ligne séparatrice, il suffit d'insérer 3 "-" à la suite
243
+ ex :
244
+ ```
245
+ ...
246
+ d.list '--'
247
+ ...
248
+ ```
249
+
250
+ ### Glyph
251
+
252
+ ![glyph](doc/images/glyph.png)
253
+
254
+ Les glyphs utilisés proviennent de [Font Awesome](http://fontawesome.io/).
255
+ L'élément ```glyph``` accepte pour options les arguments :
256
+
257
+ * size
258
+ * type
259
+
260
+ ```ruby
261
+ = glyph 'star', { size: 3, type: 'fw' }, class: 'star-exemple'
262
+ ou
263
+ = glyph { name: 'star', size: 3, type: 'fw' }
264
+ ```
265
+
266
+ ### Panel
267
+
268
+ ![panel](doc/images/panel.png)
269
+
270
+ L'élément ```panel``` accepte pour options les arguments :
271
+
272
+ * [state](#state)
273
+ * tap (true) : permet de créer un header, body et footer
274
+
275
+ Les éléments ```header```, ```body```,```footer``` sont des éléments [component](#component).
276
+ Exemple :
277
+
278
+ ```ruby
279
+ = panel 'danger'
280
+ # ou
281
+ = panel state: :danger do
282
+ = 'toto'
283
+ # ou
284
+ = panel({ tap: true, state: :danger }, { class: 'exemple' }) |p|
285
+ - p.header 'toto', glyph: 'eye'
286
+ - p.body class: 'my-body' do
287
+ = 'toto'
288
+ - p.footer 'toto'
289
+ ```
290
+
291
+ ### Table
292
+
293
+ ![table](doc/images/table.png)
294
+
295
+ L'élément ```table``` est un tableau composé d'une recherche, une pagination et un trie de colonnes intégré.
296
+ Le tableau est compatible [I18n](http://guides.rubyonrails.org/i18n.html).
297
+ Le tableau contient pour chaque ligne un bouton dropdown action avec par défaut
298
+ ces 3 actions : voir, éditer, supprimer. Toute les colonnes sont présentent et
299
+ affichées par défaut.
300
+
301
+ La table doit contenir un store. Ce store est créé dans le controlleur avec la
302
+ méthode ```table_search_pagination```.
303
+ La méthode ```table_search_pagination``` contient 3 arguments :
304
+
305
+ * params
306
+ * session
307
+ * args (optionel)
308
+
309
+ Exemple :
310
+ ```ruby
311
+ # app/controllers/document_controller.rb
312
+ @documents = Document.table_search_pagination(params, session)
313
+ ```
314
+
315
+ Dans le model, insérer la méthode ```searchable_attributes``` afin de pouvoir
316
+ faire une recherche sur les attributs souhaités.
317
+
318
+ Exemple :
319
+ ```ruby
320
+ # app/models/document.rb
321
+ searchable_attributes :name_fr, :name_en
322
+ ```
323
+
324
+ Un champ recherche est disponible dans la vue :
325
+ ![table_search_field](doc/images/table_search_field.png)
326
+
327
+ ```ruby
328
+ = table_search_field store: @documents
329
+ ```
330
+
331
+ Une pagination est disponible dans la vue :
332
+
333
+ ```ruby
334
+ = table_pagination store: @documents
335
+ ```
336
+
337
+ Un champs select par page est disponible dans la vue :
338
+
339
+ ![table_search_field](doc/images/table_pagination_per_page.png)
340
+
341
+ ```ruby
342
+ = table_pagination_per_page store: @documents
343
+ ```
344
+
345
+ #### Simple Example table
346
+
347
+ Dans le **controlleur**, insérer la méthode ```table_search_pagination```.
348
+ La méthode ```table_search_pagination``` contient 3 arguments :
349
+
350
+ * params
351
+ * session
352
+ * args
353
+
354
+ Exemple :
355
+ ```ruby
356
+ # app/controllers/document_controller.rb
357
+ @documents = Document.table_search_pagination(params, session)
358
+ ```
359
+
360
+ Dans le **model**, insérer la méthode ```searchable_attributes``` afin de pouvoir
361
+ faire une recherche pour les attributs souhaités.
362
+
363
+ Exemple :
364
+ ```ruby
365
+ # app/models/document.rb
366
+ searchable_attributes :name_fr, :name_en
367
+ ```
368
+
369
+ Dans la **vue**, insérer la méthode ```table``` qui peut contenir plusieurs arguments :
370
+
371
+ * store (ex: @documents)
372
+ * paginable (true, false)
373
+ * sortable (true, false)
374
+
375
+ Une table comporte des **colonnes** et des **actions**.
376
+
377
+ Exemple :
378
+ ```ruby
379
+ # app/views/documents/index.html.haml
380
+ = table store: @documents
381
+ ```
382
+
383
+ Les actions par défauts peuvent être modifiées (voir exemple complexe) :
384
+
385
+ * edit
386
+ * view
387
+ * delete
388
+
389
+ Elles sont intégrées à l'intérieur d'un bouton [dropdown](#dropdown).
390
+
391
+ Exemple :
392
+ ```ruby
393
+ # app/views/documents/index.html.haml
394
+ = table store: @documents do |g|
395
+ - g.actions do
396
+ = link_action 'Show', documents_path(:id), glyph: 'eye'
397
+ = link_action 'Edit', edit_document_path(:id), glyph: 'pencil'
398
+ = link_action 'Delete', documents_path(:id), method: :delete, glyph: 'trash', data: { confirm: 'Are you sure?' }
399
+ = link_action "---"
400
+ = link_action 'Duplicate', duplicate_document_path(:id), glyph: 'files-o'
401
+ = link_action 'Alert', alert_document_path(:id), glyph: 'bell'
402
+ ```
403
+
404
+ L'ajout de colonnes à travers la méthode ```add``` contient plusieurs arguments :
405
+
406
+ * name (nom de la colonne)
407
+ * data_index (le nom de l'attribut)
408
+ * count (utilise la méthode count sur l'élément)
409
+ * date_format (formate l'affichage de la date en utilisant la méthode ```strftime``` ex: '%Y/%M/%D')
410
+ * format (formate les élements de la colone en utilisant **lambda**)
411
+ * link (ajoute un lien où l'expression ```:id``` est parsé et remplacé par l'entier correspondant)
412
+ * sort (permet de trier sur des champs )
413
+ * custom_sort (indique que le tableau sera triéé d'une manière personnalisée)
414
+
415
+ ```ruby
416
+ # app/views/documents/index.html.haml
417
+ = table store: @documents do |g|
418
+ - g.columns do |c|
419
+ - c.add { name: '#', data_index: 'id' }
420
+ - c.add { name: 'Name fr', data_index: 'name_fr', link: edit_document_path(:id)}
421
+ - c.add { data_index: 'name_en' }
422
+ - c.add { name: 'Hotline', data_index: 'hotline_access', format: lambda{ |records, record| glyph(record.icon) }}
423
+ - c.add { name: 'Updated at', data_index: 'updated_at', date_format: '%Y' }
424
+ ```
425
+
426
+ #### Complex Example table
427
+
428
+ Si on souhaite voir apparaître des liasions avec d'autres tables il faut pour
429
+ cela :
430
+
431
+ Dans le controlleur, insérer la méthode ```table_search_pagination``` en ajoutant
432
+ un ```includes``` juste avant.
433
+
434
+ Exemple :
435
+ ```ruby
436
+ # app/controllers/document_controller.rb
437
+ @documents = Document.includes(:users).table_search_pagination(params, session)
438
+ ```
439
+
440
+ Dans la vue, insérer la méthod ```table```.
441
+ NB: On peut créer ces propres méthodes comme ```user_name``` dans notre model "Document" et
442
+ l'utiliser dans le data_index.
443
+
444
+ ```ruby
445
+ # app/views/documents/index.html.haml
446
+ = table store: @documents do |g|
447
+ - g.columns do |c|
448
+ - c.add { name: 'Users', data_index: 'user_name', sort: "user.name" }
449
+ ```
450
+
451
+
452
+ #### Ultra Complex Example table
453
+
454
+ Si l'on souhaite, par exemple, dénombrer des utilisateurs qui ont un lien non
455
+ direct avec les documents.
456
+ Imaginons par exemple qu'un utilisateur à des produits et que
457
+ ces produits contiennent plusieurs documents. On souhaite compter le nombre
458
+ d'utilisateurs par document.
459
+
460
+ On peut ajouter des arguments dans la méthode ```table_search_pagination```
461
+ qui vont permettre de faire des jointures.
462
+
463
+ Exemple :
464
+ ```ruby
465
+ # app/controllers/document_controller.rb
466
+ arguments = { sortable: {
467
+ column: 'users',
468
+ count: true,
469
+ joins: "LEFT OUTER JOIN documents_products ON documents_products.document_id = documents.id
470
+ LEFT OUTER JOIN products ON products.id = documents_products.product_id
471
+ LEFT OUTER JOIN products_users ON products_users.product_id = products.id
472
+ LEFT OUTER JOIN users ON users.id = products_users.user_id"
473
+ } }
474
+
475
+ @documents = Document.includes(:users).table_search_pagination(params, session,
476
+ arguments)
477
+ ```
478
+
479
+ Ici l'argument sortable signifie que l'on souhaite s'interresser à la
480
+ fonctionnalité de trie.
481
+ Pour celà il faut :
482
+
483
+ * définir le nom de la colonne triéé à travers l'argument ```column:``` (string)
484
+ * définir si le traitement se fait sur le comptage avec l'argument ```count:```
485
+ (boolean)
486
+ * définir la jointure avec l'argument ```joins:``` (string, array, hash)
487
+
488
+ Dans la vue :
489
+
490
+ ```ruby
491
+ # app/views/documents/index.html.haml
492
+ = table store: @documents do |g|
493
+ - g.columns do |c|
494
+ - c.add({ name: 'Users', data_index: 'users', count: true, custom_sort: true })
495
+ ```
496
+
497
+ #### table I18n
498
+
499
+ La table est utilisable avec I18n. Les traductions
500
+ s'executent par ordre d'importance dans cet ordre précis pour la colonne "name_fr" par exemple.
501
+
502
+ 1. ui_biz.table.headers.document.name_fr
503
+ 2. ui_biz.table.headers.defaults.name_fr
504
+ 3. activerecord.attributes.document.name_fr
505
+ 4. activerecord.attributes.defaults.name_fr
506
+
507
+ Le placeholder du champ recherche est utilisable et traduisible avec les attributs activerecord dans le fichier locale.
508
+
509
+ Exemple :
510
+
511
+ ```ruby
512
+ # config/locales/fr.yml
513
+ ...
514
+ activerecord:
515
+ models:
516
+ user: 'Utilisateur'
517
+ attributes:
518
+ defaults:
519
+ name_fr: 'Nom fr'
520
+ ...
521
+ ```
522
+
523
+ ### Table Panel
524
+
525
+ ![table_panel](doc/images/table_panel.png)
526
+
527
+ Le composant ```table_panel``` est un tableau dans un panel.
528
+
529
+ ```ruby
530
+ = table_panel store: @users
531
+ #ou
532
+ = table_panel({ store: @users, tap: true, glyph: 'home', state: :danger }) do |g|
533
+ - g.columns do |cls|
534
+ - cls.column name: '#', data_index: 'id'
535
+ - cls.column name: 'Username', data_index: 'username', link: edit_user_path(:id)
536
+ - cls.column name: 'Name', data_index: 'name'
537
+ - cls.column name: 'Email', data_index: 'email'
538
+ - cls.column name: 'Role', data_index: 'role_name', sort: 'roles.name'
539
+ - g.actions do |acs|
540
+ - acs.action 'Toto', url: edit_user_path(:id), glyph: 'pencil'
541
+ - acs.action "---"
542
+ - acs.action 'momo', url: user_path(:id), glyph: 'eye'
543
+
544
+ ```
545
+
546
+ ### List
547
+
548
+ ![list](doc/images/list.png)
549
+
550
+ Par défaut une liste à pour tag ```<li>```. Mais elle peut se transformer en lien ```<a>```
551
+ à travers l'option ```type:```. Par défaut le tag ```<li>``` est présent.
552
+
553
+ ```ruby
554
+ = list_group type: :link do |lg|
555
+ - lg.list 'Momo', { state: :success, glyph: 'home' }, { href: '#Momo' }
556
+ - lg.list({ tap: true, status: :active }, { href: '#Toto' }) do |l|
557
+ - l.header 'My title'
558
+ - l.body 'My title'
559
+ # ou
560
+ = list_group do |lg|
561
+ - lg.list 'Momo', glyph: 'home', badge: 2
562
+ - lg.list 'Toto'
563
+ ```
564
+
565
+ ### Nav
566
+
567
+ ![nav](doc/images/nav.png)
568
+
569
+ Par défaut la navigation comporte des onglets "tab".
570
+ L'élément ```nav``` accepte en option les arguments :
571
+
572
+ * type (:pills, :tabs)
573
+ * position (:justified, :stacked)
574
+ * tap (true)
575
+
576
+ L'élement link est un [component](#component).
577
+
578
+ ```ruby
579
+ = nav(type: :pills, position: :justified, tap: true) do |d|
580
+ d.link 'Test', url: '#test', badge: 6
581
+ d.link 'Test2', url: '#test2', status: :active
582
+ ```
583
+
584
+ ### Label
585
+
586
+ ### Row
587
+
588
+ Le composant row génére une div avec la class row.
589
+
590
+ ```ruby
591
+ = row class: 'toto' do
592
+ = content
593
+ # => <div class='row toto'>content</div>
594
+ ```
595
+
596
+ ### Col
597
+
598
+ L'élément ```col``` est un [composant](#composant) qui accèpte en arguments :
599
+
600
+ * num
601
+ * offset
602
+ * size
603
+
604
+ ou
605
+
606
+ * un tableau de hashes avec les arguments ```num```, ```offset``` et ```size``` à l'intérieur.
607
+
608
+ Ces paramètres génèrent les classes qui seront insérées dans la div avec la classe
609
+ col.
610
+
611
+
612
+ ```ruby
613
+ = col({num: 2, size: :lg}, class: 'test') do
614
+ = content
615
+
616
+ # => <div class='col-lg-2 test'>content</div>
617
+
618
+ # ou
619
+ = col([{ offset: 1, size: :xs}, { num: 3}], class: 'test') do
620
+ = content
621
+
622
+ # => <div class='col-xs-offset-1 col-md-3 test'>content</div>
623
+ ```
624
+
625
+ ### Grid
626
+
627
+ Une grid est un composant qui est composé de 5 vues :
628
+
629
+ * top
630
+ * right
631
+ * bottom
632
+ * left
633
+ * center
634
+
635
+ La vue **center** est obligatoire.
636
+ Une vue à pour arguments :
637
+
638
+ * position (:top, :left, :bottom, :right, :center)
639
+ * num (1..12) 12 étant le nombre limite de colonnes utilisable dans boostrap.
640
+
641
+ L'argument ```position``` détermine la position de la vue et l'argument ```num``` determine
642
+ le nombre de colonnes occupées par la vue.
643
+
644
+ ```ruby
645
+ = grid do |g|
646
+ - g.view num: 3, position: :left do
647
+ = list_group(type: :link) do |lg|
648
+ - lg.list 'Link 1', { url: '#link1' }
649
+ - lg.list 'Link 2', { url: '#link1', status: :active }
650
+ - lg.list 'Link 1', { url: '#link1' }
651
+ - lg.list 'Link 3', { url: '#link1' }
652
+ - lg.list 'Link 4', { url: '#link1' }
653
+ - g.view({ position: :top}) do
654
+ = button_group(type: :toolbar) do
655
+ = button 'option 1'
656
+ = button 'option 2'
657
+ = button 'option 3'
658
+ - g.view position: :center do
659
+ = table store: @users, type: :bordered
660
+ - g.view position: :bottom do
661
+ = 'bottom'
662
+
663
+ = grid do |g|
664
+ - g.view num: 5, position: :left do
665
+ = 'left'
666
+ - g.view position: :right do
667
+ = 'right'
668
+ - g.view({ position: :top}, { class: 'success'}) do
669
+ = 'top'
670
+ - g.view position: :center do
671
+ = 'center'
672
+ - g.view position: :bottom do
673
+ = 'bottom'
674
+ ```
675
+
676
+ ### Arguments and Values
677
+
678
+ #### Status values
679
+ * :active
680
+ * :disable
681
+
682
+ #### Size values
683
+ * :xs
684
+ * :sm
685
+ * :lg
686
+
687
+ #### State values
688
+ * :default
689
+ * :primary
690
+ * :info
691
+ * :success
692
+ * :warning
693
+ * :danger
694
+
695
+ #### Glyph arguments
696
+ * name
697
+ * size
698
+ * type
699
+
700
+ # Plus de détails
701
+
702
+ Pour plus d'informations, vous pouvez accéder à la documentation rdoc en
703
+ générant cette dernière :
704
+
705
+ ```
706
+ rake rdoc
707
+ ```
708
+
709
+ # Conflits
710
+
711
+ Certaines méthodes dans le helper peuvent être en conflit avec d'autres
712
+ librairies. Le cas échéant, vous pouvez utiliser directement la librairie UiBibz
713
+ comme ci-dessous.
714
+
715
+ Exemple :
716
+
717
+ ```ruby
718
+ UiBibz::Ui::Panel.new('Exemple', { state: :success }, { class: 'exemple'}).render
719
+ # au lieu de
720
+ panel 'Exemple', { state: :success }, { class: 'exemple' }
721
+ ```
722
+
723
+ # A faire :
724
+
725
+ * progress bar
726
+ * media
727
+ ...
728
+
data/README.rdoc ADDED
File without changes