wallaby 5.0.1 → 5.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (350) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -3
  3. data/app/assets/images/wallaby/404.png +0 -0
  4. data/app/assets/images/wallaby/422.png +0 -0
  5. data/app/assets/images/wallaby/500.png +0 -0
  6. data/app/assets/javascripts/wallaby/application.js +1 -15
  7. data/app/assets/javascripts/wallaby/auto_select.js +77 -0
  8. data/app/assets/javascripts/wallaby/base.js +17 -0
  9. data/app/assets/javascripts/wallaby/setup.js.erb +60 -0
  10. data/app/assets/stylesheets/wallaby/application.scss +1 -51
  11. data/app/assets/stylesheets/wallaby/base/_layout.scss +257 -9
  12. data/app/assets/stylesheets/wallaby/base/_layout_desktop.scss +53 -0
  13. data/app/assets/stylesheets/wallaby/base/_mixins.scss +119 -0
  14. data/app/assets/stylesheets/wallaby/base/_override.scss +10 -0
  15. data/app/assets/stylesheets/wallaby/base/_vars.scss +72 -2
  16. data/app/assets/stylesheets/wallaby/base.scss +27 -0
  17. data/app/assets/stylesheets/wallaby/components/_auto_select.scss +119 -0
  18. data/app/assets/stylesheets/wallaby/components/_auto_select_desktop.scss +7 -0
  19. data/app/assets/stylesheets/wallaby/components/_color_square.scss +8 -0
  20. data/app/assets/stylesheets/wallaby/components/_filters.scss +14 -0
  21. data/app/assets/stylesheets/wallaby/components/_links.scss +25 -0
  22. data/app/assets/stylesheets/wallaby/components/_pagination.scss +35 -91
  23. data/app/assets/stylesheets/wallaby/components/_query.scss +101 -0
  24. data/app/assets/stylesheets/wallaby/components/_text.scss +6 -6
  25. data/app/assets/stylesheets/wallaby/pages/_error.scss +108 -0
  26. data/app/assets/stylesheets/wallaby/pages/_form.scss +40 -0
  27. data/app/assets/stylesheets/wallaby/pages/_index.scss +193 -0
  28. data/app/assets/stylesheets/wallaby/pages/_index_desktop.scss +22 -0
  29. data/app/assets/stylesheets/wallaby/pages/_show.scss +21 -0
  30. data/app/controllers/wallaby/abstract_resources_controller.rb +334 -0
  31. data/app/controllers/wallaby/application_controller.rb +45 -15
  32. data/app/controllers/wallaby/base_controller.rb +30 -0
  33. data/app/controllers/wallaby/resources_controller.rb +2 -131
  34. data/app/controllers/wallaby/secure_controller.rb +38 -24
  35. data/app/routes/wallaby/resources_router.rb +40 -43
  36. data/app/security/ability.rb +4 -28
  37. data/app/views/layouts/wallaby/application.html.erb +11 -6
  38. data/app/views/layouts/wallaby/error.html.erb +26 -4
  39. data/app/views/wallaby/error.html.erb +11 -0
  40. data/app/views/wallaby/error.json.jbuilder +8 -0
  41. data/app/views/wallaby/{shared → resources}/_flash_messages.html.erb +0 -0
  42. data/app/views/wallaby/resources/_footer.html.erb +1 -0
  43. data/app/views/wallaby/resources/_form.html.erb +2 -2
  44. data/app/views/wallaby/resources/_header.html.erb +38 -0
  45. data/app/views/wallaby/resources/_imodal.html.erb +13 -0
  46. data/app/views/wallaby/resources/_index_actions.html.erb +4 -1
  47. data/app/views/wallaby/resources/_index_filters.html.erb +23 -0
  48. data/app/views/wallaby/resources/_index_pagination.html.erb +63 -0
  49. data/app/views/wallaby/resources/_index_query.html.erb +23 -0
  50. data/app/views/wallaby/resources/_logo.html.erb +1 -0
  51. data/app/views/wallaby/resources/_navs.html.erb +9 -0
  52. data/app/views/wallaby/resources/_resource_actions.html.erb +3 -3
  53. data/app/views/wallaby/resources/{shared/_resource_nav.html.erb → _resource_navs.html.erb} +6 -6
  54. data/app/views/wallaby/resources/_title.html.erb +1 -0
  55. data/app/views/wallaby/resources/_user_menu.html.erb +5 -0
  56. data/app/views/wallaby/resources/bad_request.json.jbuilder +7 -0
  57. data/app/views/wallaby/resources/edit.html.erb +16 -12
  58. data/app/views/wallaby/resources/form/_belongs_to.html.erb +63 -12
  59. data/app/views/wallaby/resources/form/_bigint.html.erb +10 -1
  60. data/app/views/wallaby/resources/form/_bigserial.html.erb +18 -0
  61. data/app/views/wallaby/resources/form/_binary.html.erb +11 -2
  62. data/app/views/wallaby/resources/form/_bit.html.erb +10 -1
  63. data/app/views/wallaby/resources/form/_bit_varying.html.erb +10 -1
  64. data/app/views/wallaby/resources/form/_blob.html.erb +21 -0
  65. data/app/views/wallaby/resources/form/_boolean.html.erb +9 -0
  66. data/app/views/wallaby/resources/form/_box.html.erb +21 -0
  67. data/app/views/wallaby/resources/form/_cidr.html.erb +13 -1
  68. data/app/views/wallaby/resources/form/_circle.html.erb +21 -0
  69. data/app/views/wallaby/resources/form/_citext.html.erb +11 -2
  70. data/app/views/wallaby/resources/form/_color.html.erb +11 -2
  71. data/app/views/wallaby/resources/form/_date.html.erb +12 -3
  72. data/app/views/wallaby/resources/form/_daterange.html.erb +14 -5
  73. data/app/views/wallaby/resources/form/_datetime.html.erb +12 -3
  74. data/app/views/wallaby/resources/form/_decimal.html.erb +10 -1
  75. data/app/views/wallaby/resources/form/_dropdown.html.erb +18 -0
  76. data/app/views/wallaby/resources/form/_email.html.erb +9 -0
  77. data/app/views/wallaby/resources/form/_file.html.erb +21 -0
  78. data/app/views/wallaby/resources/form/_float.html.erb +10 -1
  79. data/app/views/wallaby/resources/form/_has_and_belongs_to_many.html.erb +53 -7
  80. data/app/views/wallaby/resources/form/_has_many.html.erb +52 -7
  81. data/app/views/wallaby/resources/form/_has_one.html.erb +10 -2
  82. data/app/views/wallaby/resources/form/_hstore.html.erb +12 -5
  83. data/app/views/wallaby/resources/form/_inet.html.erb +13 -1
  84. data/app/views/wallaby/resources/form/_int4range.html.erb +11 -2
  85. data/app/views/wallaby/resources/form/_int8range.html.erb +11 -2
  86. data/app/views/wallaby/resources/form/_integer.html.erb +10 -1
  87. data/app/views/wallaby/resources/form/_json.html.erb +13 -6
  88. data/app/views/wallaby/resources/form/_jsonb.html.erb +13 -6
  89. data/app/views/wallaby/resources/form/_line.html.erb +21 -0
  90. data/app/views/wallaby/resources/form/_longblob.html.erb +21 -0
  91. data/app/views/wallaby/resources/form/_longtext.html.erb +30 -0
  92. data/app/views/wallaby/resources/form/_lseg.html.erb +21 -0
  93. data/app/views/wallaby/resources/form/_ltree.html.erb +17 -1
  94. data/app/views/wallaby/resources/form/_macaddr.html.erb +13 -1
  95. data/app/views/wallaby/resources/form/_markdown.html.erb +29 -0
  96. data/app/views/wallaby/resources/form/_mediumblob.html.erb +21 -0
  97. data/app/views/wallaby/resources/form/_mediumtext.html.erb +30 -0
  98. data/app/views/wallaby/resources/form/_money.html.erb +10 -1
  99. data/app/views/wallaby/resources/form/_numrange.html.erb +11 -2
  100. data/app/views/wallaby/resources/form/_password.html.erb +14 -1
  101. data/app/views/wallaby/resources/form/_path.html.erb +17 -0
  102. data/app/views/wallaby/resources/form/_point.html.erb +11 -2
  103. data/app/views/wallaby/resources/form/_polygon.html.erb +17 -0
  104. data/app/views/wallaby/resources/form/_serial.html.erb +18 -0
  105. data/app/views/wallaby/resources/form/_sti.html.erb +18 -0
  106. data/app/views/wallaby/resources/form/_string.html.erb +14 -1
  107. data/app/views/wallaby/resources/form/_text.html.erb +11 -2
  108. data/app/views/wallaby/resources/form/_time.html.erb +12 -3
  109. data/app/views/wallaby/resources/form/_tinyblob.html.erb +21 -0
  110. data/app/views/wallaby/resources/form/_tinytext.html.erb +30 -0
  111. data/app/views/wallaby/resources/form/_tsrange.html.erb +14 -5
  112. data/app/views/wallaby/resources/form/_tstzrange.html.erb +14 -5
  113. data/app/views/wallaby/resources/form/_tsvector.html.erb +9 -0
  114. data/app/views/wallaby/resources/form/_unsigned_bigint.html.erb +18 -0
  115. data/app/views/wallaby/resources/form/_unsigned_decimal.html.erb +18 -0
  116. data/app/views/wallaby/resources/form/_unsigned_float.html.erb +18 -0
  117. data/app/views/wallaby/resources/form/_unsigned_integer.html.erb +18 -0
  118. data/app/views/wallaby/resources/form/_uuid.html.erb +10 -1
  119. data/app/views/wallaby/resources/form/_xml.html.erb +11 -5
  120. data/app/views/wallaby/resources/form.json.jbuilder +5 -0
  121. data/app/views/wallaby/{core → resources}/home.html.erb +1 -1
  122. data/app/views/wallaby/resources/index/_belongs_to.html.erb +5 -1
  123. data/app/views/wallaby/resources/index/_bigint.html.erb +4 -0
  124. data/app/views/wallaby/resources/index/_bigserial.html.erb +5 -0
  125. data/app/views/wallaby/resources/index/_binary.html.erb +5 -1
  126. data/app/views/wallaby/resources/index/_bit.html.erb +4 -0
  127. data/app/views/wallaby/resources/index/_bit_varying.html.erb +4 -0
  128. data/app/views/wallaby/resources/index/_blob.html.erb +5 -0
  129. data/app/views/wallaby/resources/index/_boolean.html.erb +5 -1
  130. data/app/views/wallaby/resources/index/_box.html.erb +16 -0
  131. data/app/views/wallaby/resources/index/_cidr.html.erb +5 -1
  132. data/app/views/wallaby/resources/index/_circle.html.erb +16 -0
  133. data/app/views/wallaby/resources/index/_citext.html.erb +5 -1
  134. data/app/views/wallaby/resources/index/_color.html.erb +6 -1
  135. data/app/views/wallaby/resources/index/_date.html.erb +4 -0
  136. data/app/views/wallaby/resources/index/_daterange.html.erb +5 -1
  137. data/app/views/wallaby/resources/index/_datetime.html.erb +5 -1
  138. data/app/views/wallaby/resources/index/_decimal.html.erb +4 -0
  139. data/app/views/wallaby/resources/index/_email.html.erb +4 -0
  140. data/app/views/wallaby/resources/index/_float.html.erb +4 -0
  141. data/app/views/wallaby/resources/index/_has_and_belongs_to_many.html.erb +6 -2
  142. data/app/views/wallaby/resources/index/_has_many.html.erb +6 -2
  143. data/app/views/wallaby/resources/index/_has_one.html.erb +5 -1
  144. data/app/views/wallaby/resources/index/_hstore.html.erb +6 -2
  145. data/app/views/wallaby/resources/index/_inet.html.erb +5 -1
  146. data/app/views/wallaby/resources/index/_int4range.html.erb +4 -0
  147. data/app/views/wallaby/resources/index/_int8range.html.erb +4 -0
  148. data/app/views/wallaby/resources/index/_integer.html.erb +4 -0
  149. data/app/views/wallaby/resources/index/_json.html.erb +5 -2
  150. data/app/views/wallaby/resources/index/_jsonb.html.erb +5 -2
  151. data/app/views/wallaby/resources/index/_line.html.erb +16 -0
  152. data/app/views/wallaby/resources/index/_longblob.html.erb +5 -0
  153. data/app/views/wallaby/resources/index/_longtext.html.erb +16 -0
  154. data/app/views/wallaby/resources/index/_lseg.html.erb +16 -0
  155. data/app/views/wallaby/resources/index/_ltree.html.erb +5 -1
  156. data/app/views/wallaby/resources/index/_macaddr.html.erb +4 -0
  157. data/app/views/wallaby/resources/index/_mediumblob.html.erb +5 -0
  158. data/app/views/wallaby/resources/index/_mediumtext.html.erb +16 -0
  159. data/app/views/wallaby/resources/index/_money.html.erb +4 -0
  160. data/app/views/wallaby/resources/index/_numrange.html.erb +4 -0
  161. data/app/views/wallaby/resources/index/_password.html.erb +9 -0
  162. data/app/views/wallaby/resources/index/_path.html.erb +16 -0
  163. data/app/views/wallaby/resources/index/_point.html.erb +4 -0
  164. data/app/views/wallaby/resources/index/_polygon.html.erb +16 -0
  165. data/app/views/wallaby/resources/index/_raw.html.erb +9 -0
  166. data/app/views/wallaby/resources/index/_serial.html.erb +5 -0
  167. data/app/views/wallaby/resources/index/_sti.html.erb +16 -0
  168. data/app/views/wallaby/resources/index/_string.html.erb +5 -1
  169. data/app/views/wallaby/resources/index/_text.html.erb +5 -1
  170. data/app/views/wallaby/resources/index/_time.html.erb +4 -0
  171. data/app/views/wallaby/resources/index/_tinyblob.html.erb +5 -0
  172. data/app/views/wallaby/resources/index/_tinytext.html.erb +16 -0
  173. data/app/views/wallaby/resources/index/_tsrange.html.erb +5 -1
  174. data/app/views/wallaby/resources/index/_tstzrange.html.erb +5 -1
  175. data/app/views/wallaby/resources/index/_tsvector.html.erb +5 -1
  176. data/app/views/wallaby/resources/index/_unsigned_bigint.html.erb +5 -0
  177. data/app/views/wallaby/resources/index/_unsigned_decimal.html.erb +5 -0
  178. data/app/views/wallaby/resources/index/_unsigned_float.html.erb +5 -0
  179. data/app/views/wallaby/resources/index/_unsigned_integer.html.erb +5 -0
  180. data/app/views/wallaby/resources/index/_uuid.html.erb +5 -1
  181. data/app/views/wallaby/resources/index/_xml.html.erb +5 -1
  182. data/app/views/wallaby/resources/index.csv.erb +26 -0
  183. data/app/views/wallaby/resources/index.html.erb +47 -59
  184. data/app/views/wallaby/resources/index.json.jbuilder +5 -0
  185. data/app/views/wallaby/resources/new.html.erb +12 -11
  186. data/app/views/wallaby/resources/show/_belongs_to.html.erb +5 -1
  187. data/app/views/wallaby/resources/show/_bigint.html.erb +4 -0
  188. data/app/views/wallaby/resources/show/_bigserial.html.erb +5 -0
  189. data/app/views/wallaby/resources/show/_binary.html.erb +5 -1
  190. data/app/views/wallaby/resources/show/_bit.html.erb +4 -0
  191. data/app/views/wallaby/resources/show/_bit_varying.html.erb +4 -0
  192. data/app/views/wallaby/resources/show/_blob.html.erb +5 -0
  193. data/app/views/wallaby/resources/show/_boolean.html.erb +5 -1
  194. data/app/views/wallaby/resources/show/_box.html.erb +9 -0
  195. data/app/views/wallaby/resources/show/_cidr.html.erb +5 -1
  196. data/app/views/wallaby/resources/show/_circle.html.erb +9 -0
  197. data/app/views/wallaby/resources/show/_citext.html.erb +4 -0
  198. data/app/views/wallaby/resources/show/_color.html.erb +6 -1
  199. data/app/views/wallaby/resources/show/_date.html.erb +4 -0
  200. data/app/views/wallaby/resources/show/_daterange.html.erb +4 -0
  201. data/app/views/wallaby/resources/show/_datetime.html.erb +4 -0
  202. data/app/views/wallaby/resources/show/_decimal.html.erb +4 -0
  203. data/app/views/wallaby/resources/show/_email.html.erb +4 -0
  204. data/app/views/wallaby/resources/show/_float.html.erb +4 -0
  205. data/app/views/wallaby/resources/show/_has_and_belongs_to_many.html.erb +6 -2
  206. data/app/views/wallaby/resources/show/_has_many.html.erb +6 -2
  207. data/app/views/wallaby/resources/show/_has_one.html.erb +5 -1
  208. data/app/views/wallaby/resources/show/_hstore.html.erb +4 -0
  209. data/app/views/wallaby/resources/show/_image.html.erb +9 -0
  210. data/app/views/wallaby/resources/show/_inet.html.erb +5 -1
  211. data/app/views/wallaby/resources/show/_int4range.html.erb +4 -0
  212. data/app/views/wallaby/resources/show/_int8range.html.erb +4 -0
  213. data/app/views/wallaby/resources/show/_integer.html.erb +4 -0
  214. data/app/views/wallaby/resources/show/_json.html.erb +4 -0
  215. data/app/views/wallaby/resources/show/_jsonb.html.erb +4 -0
  216. data/app/views/wallaby/resources/show/_line.html.erb +9 -0
  217. data/app/views/wallaby/resources/show/_longblob.html.erb +5 -0
  218. data/app/views/wallaby/resources/show/_longtext.html.erb +5 -0
  219. data/app/views/wallaby/resources/show/_lseg.html.erb +9 -0
  220. data/app/views/wallaby/resources/show/_ltree.html.erb +4 -0
  221. data/app/views/wallaby/resources/show/_macaddr.html.erb +4 -0
  222. data/app/views/wallaby/resources/show/_mediumblob.html.erb +5 -0
  223. data/app/views/wallaby/resources/show/_mediumtext.html.erb +5 -0
  224. data/app/views/wallaby/resources/show/_money.html.erb +4 -0
  225. data/app/views/wallaby/resources/show/_numrange.html.erb +4 -0
  226. data/app/views/wallaby/resources/show/_password.html.erb +9 -0
  227. data/app/views/wallaby/resources/show/_path.html.erb +9 -0
  228. data/app/views/wallaby/resources/show/_point.html.erb +4 -0
  229. data/app/views/wallaby/resources/show/_polygon.html.erb +9 -0
  230. data/app/views/wallaby/resources/show/_raw.html.erb +9 -0
  231. data/app/views/wallaby/resources/show/_serial.html.erb +5 -0
  232. data/app/views/wallaby/resources/show/_sti.html.erb +5 -0
  233. data/app/views/wallaby/resources/show/_string.html.erb +4 -0
  234. data/app/views/wallaby/resources/show/_text.html.erb +4 -0
  235. data/app/views/wallaby/resources/show/_time.html.erb +4 -0
  236. data/app/views/wallaby/resources/show/_tinyblob.html.erb +5 -0
  237. data/app/views/wallaby/resources/show/_tinytext.html.erb +5 -0
  238. data/app/views/wallaby/resources/show/_tsrange.html.erb +4 -0
  239. data/app/views/wallaby/resources/show/_tstzrange.html.erb +4 -0
  240. data/app/views/wallaby/resources/show/_tsvector.html.erb +4 -0
  241. data/app/views/wallaby/resources/show/_unsigned_bigint.html.erb +5 -0
  242. data/app/views/wallaby/resources/show/_unsigned_decimal.html.erb +5 -0
  243. data/app/views/wallaby/resources/show/_unsigned_float.html.erb +5 -0
  244. data/app/views/wallaby/resources/show/_unsigned_integer.html.erb +5 -0
  245. data/app/views/wallaby/resources/show/_uuid.html.erb +4 -0
  246. data/app/views/wallaby/resources/show/_xml.html.erb +4 -0
  247. data/app/views/wallaby/resources/show.html.erb +14 -24
  248. data/app/views/wallaby/resources/show.json.jbuilder +5 -0
  249. data/config/brakeman.ignore +26 -0
  250. data/config/locales/wallaby.en.yml +91 -0
  251. data/config/massa.yml +45 -0
  252. data/config/rails_best_practices.yml +42 -0
  253. data/config/routes.rb +29 -23
  254. data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/association_builder.rb +39 -0
  255. data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/polymorphic_builder.rb +44 -0
  256. data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/sti_builder.rb +42 -0
  257. data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder.rb +41 -94
  258. data/lib/adaptors/wallaby/active_record/model_decorator/title_field_finder.rb +24 -14
  259. data/lib/adaptors/wallaby/active_record/model_decorator.rb +118 -64
  260. data/lib/adaptors/wallaby/active_record/model_finder.rb +44 -15
  261. data/lib/adaptors/wallaby/active_record/model_pagination_provider.rb +30 -0
  262. data/lib/adaptors/wallaby/active_record/model_service_provider/normalizer.rb +42 -0
  263. data/lib/adaptors/wallaby/active_record/model_service_provider/permitter.rb +64 -0
  264. data/lib/adaptors/wallaby/active_record/model_service_provider/querier/transformer.rb +70 -0
  265. data/lib/adaptors/wallaby/active_record/model_service_provider/querier.rb +102 -0
  266. data/lib/adaptors/wallaby/active_record/model_service_provider/validator.rb +29 -0
  267. data/lib/adaptors/wallaby/active_record/model_service_provider.rb +137 -0
  268. data/lib/adaptors/wallaby/active_record.rb +4 -1
  269. data/lib/decorators/wallaby/abstract_resource_decorator.rb +74 -0
  270. data/lib/decorators/wallaby/resource_decorator.rb +5 -76
  271. data/lib/errors/wallaby/model_not_found.rb +5 -1
  272. data/lib/errors/wallaby/not_found.rb +4 -0
  273. data/lib/errors/wallaby/resource_not_found.rb +5 -1
  274. data/lib/forms/wallaby/form_builder.rb +42 -19
  275. data/lib/helpers/wallaby/application_helper.rb +34 -24
  276. data/lib/helpers/wallaby/base_helper.rb +52 -0
  277. data/lib/helpers/wallaby/form_helper.rb +40 -16
  278. data/lib/helpers/wallaby/index_helper.rb +59 -0
  279. data/lib/helpers/wallaby/links_helper.rb +150 -81
  280. data/lib/helpers/wallaby/resources_helper.rb +41 -46
  281. data/lib/helpers/wallaby/secure_helper.rb +36 -19
  282. data/lib/helpers/wallaby/styling_helper.rb +53 -44
  283. data/lib/interfaces/wallaby/mode.rb +19 -12
  284. data/lib/interfaces/wallaby/model_decorator.rb +176 -50
  285. data/lib/interfaces/wallaby/model_finder.rb +7 -3
  286. data/lib/interfaces/wallaby/model_pagination_provider.rb +104 -0
  287. data/lib/interfaces/wallaby/model_service_provider.rb +71 -0
  288. data/lib/paginators/wallaby/abstract_resource_paginator.rb +23 -0
  289. data/lib/paginators/wallaby/resource_paginator.rb +6 -0
  290. data/lib/parsers/wallaby/parser.rb +32 -0
  291. data/lib/responders/wallaby/abstract_responder.rb +68 -0
  292. data/lib/responders/wallaby/resources_responder.rb +6 -0
  293. data/lib/servicers/wallaby/abstract_model_servicer.rb +48 -0
  294. data/lib/servicers/wallaby/model_servicer.rb +5 -0
  295. data/lib/services/wallaby/link_options_normalizer.rb +16 -0
  296. data/lib/services/wallaby/lookup_context_wrapper.rb +23 -30
  297. data/lib/services/wallaby/map/mode_mapper.rb +19 -0
  298. data/lib/services/wallaby/map/model_class_collector.rb +41 -0
  299. data/lib/services/wallaby/map/model_class_mapper.rb +24 -0
  300. data/lib/services/wallaby/map.rb +76 -39
  301. data/lib/services/wallaby/partial_renderer.rb +60 -0
  302. data/lib/services/wallaby/prefixes_builder.rb +54 -0
  303. data/lib/services/wallaby/sorting/hash_builder.rb +16 -0
  304. data/lib/services/wallaby/sorting/link_builder.rb +45 -0
  305. data/lib/services/wallaby/sorting/next_builder.rb +54 -0
  306. data/lib/services/wallaby/url_for.rb +36 -0
  307. data/lib/tree/wallaby/node.rb +17 -0
  308. data/lib/utils/wallaby/utils.rb +67 -22
  309. data/lib/wallaby/configuration/features.rb +12 -0
  310. data/lib/wallaby/configuration/metadata.rb +12 -0
  311. data/lib/wallaby/configuration/models.rb +27 -12
  312. data/lib/wallaby/configuration/pagination.rb +12 -0
  313. data/lib/wallaby/configuration/security.rb +55 -24
  314. data/lib/wallaby/configuration.rb +38 -19
  315. data/lib/wallaby/engine.rb +84 -39
  316. data/lib/wallaby/version.rb +1 -1
  317. data/lib/wallaby.rb +22 -3
  318. metadata +200 -55
  319. data/app/assets/javascripts/wallaby/form.js +0 -8
  320. data/app/assets/stylesheets/wallaby/base/_functions.scss +0 -0
  321. data/app/assets/stylesheets/wallaby/base/_normalize.scss +0 -0
  322. data/app/assets/stylesheets/wallaby/base/_reset.scss +0 -0
  323. data/app/assets/stylesheets/wallaby/components/_forms.scss +0 -53
  324. data/app/assets/stylesheets/wallaby/components/_nav.scss +0 -19
  325. data/app/assets/stylesheets/wallaby/components/_tables.scss +0 -78
  326. data/app/assets/stylesheets/wallaby/form.scss +0 -11
  327. data/app/controllers/wallaby/core_controller.rb +0 -28
  328. data/app/views/layouts/wallaby/_footer.html.erb +0 -2
  329. data/app/views/layouts/wallaby/_header.html.erb +0 -57
  330. data/app/views/layouts/wallaby/_navs.html.erb +0 -1
  331. data/app/views/wallaby/errors/access_denied.html.erb +0 -1
  332. data/app/views/wallaby/errors/not_authenticated.html.erb +0 -1
  333. data/app/views/wallaby/errors/not_found.html.erb +0 -6
  334. data/app/views/wallaby/errors/unprocessable_entity.erb +0 -1
  335. data/config/locales/en.yml +0 -29
  336. data/lib/adaptors/wallaby/active_record/model_operator/normalizer.rb +0 -44
  337. data/lib/adaptors/wallaby/active_record/model_operator/permitter.rb +0 -50
  338. data/lib/adaptors/wallaby/active_record/model_operator/querier.rb +0 -47
  339. data/lib/adaptors/wallaby/active_record/model_operator/validator.rb +0 -16
  340. data/lib/adaptors/wallaby/active_record/model_operator.rb +0 -82
  341. data/lib/errors/wallaby/deprecated.rb +0 -4
  342. data/lib/errors/wallaby/operation_not_found.rb +0 -4
  343. data/lib/handlers/wallaby/cached_compiled_erb.rb +0 -14
  344. data/lib/helpers/wallaby/core_helper.rb +0 -50
  345. data/lib/helpers/wallaby/paginatable_helper.rb +0 -9
  346. data/lib/helpers/wallaby/sorting_helper.rb +0 -43
  347. data/lib/interfaces/wallaby/model_operator.rb +0 -31
  348. data/lib/services/wallaby/decorator_finder.rb +0 -16
  349. data/lib/services/wallaby/model_servicer.rb +0 -38
  350. data/lib/services/wallaby/servicer_finder.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 97bd9fc25767069f94fd6d5dd0a594bfd068a8bf
4
- data.tar.gz: 5462ca0cd790f6bfc5d01d13a4e3da7d5c72cd15
3
+ metadata.gz: 918ba41ac5ba7f6971332674647888cc6f989126
4
+ data.tar.gz: 44c4f9006a6628ea19d26134d1fa9d8acd1e1511
5
5
  SHA512:
6
- metadata.gz: f105ad40cbaa96f3f143a0f8c7aa4075e55f1b1fe2e38a0b99d2cd4e811d83aeafff524e934dd3f377b7b7cba9cadbf76751d1d37febb2389ae7b84f7f51ecde
7
- data.tar.gz: 7f0f06a3c6291364a99e68a81b7f5d59d6dd560126205c4f999fe018c34566fffe57cbdabd5f638cd652ca06c6d5e86e43efd8b566ac2e2a4881c195fdc4cf62
6
+ metadata.gz: dfddc7545545924c353c5c41a000ed5f9a97c986c9713898c13c0e82abbec0df36652445aa38540241ca8c08c7f937c917b6d43449764c99c55639a74fe49465
7
+ data.tar.gz: 0170cdf8218bb7881a5fa56fb8605520f2e1358b9719e0296825f9f063021af0b9f6c8feb63c2eb8407b203a6a4f0a0ecdd4f7a9554d4d16c368a091744d14a6
data/Rakefile CHANGED
@@ -14,10 +14,8 @@ RDoc::Task.new(:rdoc) do |rdoc|
14
14
  rdoc.rdoc_files.include('lib/**/*.rb')
15
15
  end
16
16
 
17
- APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
17
+ APP_RAKEFILE = File.expand_path('../spec/dummy/Rakefile', __FILE__)
18
18
  load 'rails/tasks/engine.rake'
19
-
20
-
21
19
  load 'rails/tasks/statistics.rake'
22
20
 
23
21
  Bundler::GemHelper.install_tasks
Binary file
Binary file
Binary file
@@ -1,15 +1 @@
1
- //= require jquery
2
- //= require jquery_ujs
3
- //= require bootstrap-sprockets
4
- jQuery(function ($) {
5
- $('[data-toggle="tooltip"]').tooltip({ html: true })
6
-
7
- $('.search-form').each(function () {
8
- var $this = $(this)
9
- $(this).find('input:visible').on('focus', function () {
10
- $this.addClass('focus')
11
- }).on('blur', function () {
12
- $this.removeClass('focus')
13
- })
14
- })
15
- })
1
+ //= require wallaby/base
@@ -0,0 +1,77 @@
1
+ 'use strict';
2
+
3
+ jQuery.fn.extend({
4
+ auto_select: function (typeahead_options, engine_options) {
5
+ var $this = jQuery(this),
6
+ $input = jQuery('div input', this),
7
+ $template = jQuery('<li><input type="hidden" /><a href="javascript:,"></a></li>'),
8
+ name = $input.attr('name'),
9
+ multiple = $input.attr('multiple');
10
+
11
+ var recreate_typeahead = function () {
12
+ var data = $this.data(),
13
+ options = jQuery.extend({
14
+ highlight: true,
15
+ hint: true,
16
+ minLength: 1
17
+ }, typeahead_options || {}),
18
+ source_options = {
19
+ name: data.source,
20
+ display: 'label',
21
+ source: new Bloodhound(jQuery.extend({
22
+ remote: {
23
+ url: data.url,
24
+ wildcard: data.wildcard
25
+ },
26
+ queryTokenizer: Bloodhound.tokenizers.whitespace,
27
+ datumTokenizer: Bloodhound.tokenizers.whitespace
28
+ }, engine_options || {}))
29
+ };
30
+ $input.typeahead('destroy')
31
+ $input.typeahead(options, source_options);
32
+ };
33
+ $this.off('reload.auto_select')
34
+ .on('reload.auto_select', recreate_typeahead)
35
+ .trigger('reload.auto_select');
36
+
37
+ var disable_typeahead_on_single_selection = function () {
38
+ $input.prop('disabled', !multiple && $this.find('a').length === 1);
39
+ $this.find('.auto_select__count span').text($this.find('a').length);
40
+ };
41
+ $this.off('update.auto_select')
42
+ .on('update.auto_select', disable_typeahead_on_single_selection)
43
+ .trigger('update.auto_select');
44
+
45
+ $input.removeAttr('name').removeAttr('multiple'); // some clean up for the input
46
+
47
+ var append_and_focus_on_selection = function (event, suggestion) {
48
+ var $a,
49
+ $existing = $this.find('input[value=' + suggestion.id + ']');
50
+ if ($existing.length) {
51
+ $a = $existing.next();
52
+ } else {
53
+ var $new_item = $template.clone();
54
+ $new_item.find('input').attr('name', name).val(suggestion.id);
55
+ $this.find('ul').append($new_item);
56
+ $a = $new_item.find('a').text(suggestion.label);
57
+ $this.trigger('update.auto_select');
58
+ }
59
+ if (multiple) { $a.focus(); }
60
+ $input.typeahead('val', '');
61
+ };
62
+ var ignore_tab_and_enter = function (e) {
63
+ var k = e.keyCode || e.which;
64
+ if (k === 13) { return false; }
65
+ };
66
+ $input.off('typeahead:select').off('typeahead:change')
67
+ .on('typeahead:select typeahead:autocomplete', append_and_focus_on_selection)
68
+ .on('keypress', ignore_tab_and_enter);
69
+
70
+ var remove_selection = function () {
71
+ jQuery(this).parent().remove();
72
+ $this.trigger('update.auto_select');
73
+ };
74
+ $this.off('click.auto_select').
75
+ on('click.auto_select', 'a', remove_selection);
76
+ }
77
+ });
@@ -0,0 +1,17 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
3
+ //= require bootstrap-sprockets
4
+ //= require moment
5
+ //= require bootstrap-datetimepicker
6
+ //= require summernote
7
+ //= require codemirror
8
+ //= require codemirror/addons/mode/overlay
9
+ //= require codemirror/modes/ruby
10
+ //= require codemirror/modes/javascript
11
+ //= require codemirror/modes/markdown
12
+ //= require codemirror/modes/gfm
13
+ //= require codemirror/modes/xml
14
+ //= require twitter/typeahead
15
+ //= require jquery.minicolors
16
+ //= require wallaby/auto_select
17
+ //= require wallaby/setup
@@ -0,0 +1,60 @@
1
+ window.readyPrefix = function readyPrefix(eventName) {
2
+ return '<%= Wallaby.configuration.features.turbolinks_enabled ? "turbolinks:load" : "ready" %>' + eventName;
3
+ }
4
+
5
+ jQuery(document).off(readyPrefix('.wallaby')).on(readyPrefix('.wallaby'), function () {
6
+ 'use strict';
7
+
8
+ jQuery('[data-toggle="tooltip"]').tooltip({ html: true, container:'body' })
9
+ jQuery('#imodal').on('show.bs.modal', function (event) {
10
+ var $button = jQuery(event.relatedTarget),
11
+ $this = jQuery(this);
12
+ $this.find('.modal-title').html($button.siblings('.modaler__title').html());
13
+ $this.find('.modal-body').html($button.siblings('.modaler__body').html());
14
+ })
15
+
16
+ jQuery('.index').each(function() {
17
+ jQuery('.query', this).each(function () {
18
+ var $this = jQuery(this);
19
+ jQuery('input:visible', this).on('focus.modifier', function () {
20
+ $this.addClass('query--focus');
21
+ }).on('blur', function () {
22
+ $this.removeClass('query--focus');
23
+ })
24
+ })
25
+
26
+ jQuery('.resources').each(function () {
27
+ var $this = jQuery(this);
28
+
29
+ // let's clone the actions, just for styling
30
+ jQuery('.resources__data', this).each(function () {
31
+ var $actions_table = jQuery('<table></table>').addClass('resources__actions'),
32
+ $thead = jQuery('<thead><tr><th>&nbsp;</th></tr></thead>'),
33
+ $tbody = jQuery('<tbody></tbody>'),
34
+ $tr = jQuery('<tr></tr>');
35
+
36
+ jQuery('.resource__actions', this).each(function () {
37
+ $tbody.append($tr.clone().append(jQuery(this).clone()));
38
+ })
39
+
40
+ $actions_table.append($thead, $tbody);
41
+ jQuery('> section', $this).append($actions_table);
42
+ })
43
+
44
+ // to show double arrows
45
+ jQuery('.resources__container').on('scroll', function () {
46
+ var $container = jQuery(this),
47
+ $th = jQuery('.resources__actions thead th', $this),
48
+ $data_table = jQuery('.resources__data', $this);
49
+
50
+ $th.toggleClass('resources--backward', $container.scrollLeft() > 0);
51
+ $th.toggleClass('resources--forward', $container.scrollLeft() + $container.width() < $data_table.width());
52
+ }).trigger('scroll');
53
+ })
54
+ })
55
+
56
+ if (CodeMirror) {
57
+ CodeMirror.defaults.theme = "mdn-like";
58
+ CodeMirror.defaults.lineNumbers = true;
59
+ }
60
+ })
@@ -1,51 +1 @@
1
- /*
2
- * "bootstrap-sprockets" must be imported before "bootstrap" and "bootstrap/variables"
3
- */
4
- @import "bootstrap-sprockets";
5
- @import "bootstrap";
6
- @import 'base/_vars';
7
- @import 'base/_mixins';
8
- @import 'base/_functions';
9
- @import 'base/_normalize';
10
- @import 'base/_reset';
11
- @import 'base/_layout';
12
- @import 'components/_text';
13
- @import 'components/_nav';
14
- @import 'components/_tables';
15
- @import 'components/_forms';
16
- @import 'components/_pagination';
17
-
18
- body {
19
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
20
- }
21
-
22
- nav.top-nav {
23
- margin-bottom: 0px;
24
- }
25
-
26
- section.fields {
27
- padding: 10px;
28
- }
29
-
30
- div.page-header {
31
- margin-top: 0px;
32
- }
33
-
34
- h1 {
35
- margin-top: 5px;
36
- }
37
-
38
- ul.text-danger {
39
- margin-top: 5px;
40
- margin-bottom: 5px;
41
- padding-left: 25px;
42
- }
43
-
44
- .color-square {
45
- display: inline-block;
46
- margin-right: 3px;
47
- width: 17px;
48
- height: 17px;
49
- border: 1px solid #eeeeee;
50
- vertical-align: text-top;
51
- }
1
+ @import 'wallaby/base';
@@ -1,14 +1,262 @@
1
- main {
2
- padding: 15px;
1
+ body {
2
+ background-color: $background-color;
3
+ color: $font-color;
4
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
5
+ padding-top: 142px;
6
+
7
+ &.index {
8
+ padding-top: 161px;
9
+ }
10
+
11
+ small {
12
+ font-size: 95%;
13
+ }
14
+
15
+ a {
16
+ color: $light-primary-color;
17
+ text-decoration: none;
18
+
19
+ &:hover {
20
+ color: $default-primary-color;
21
+ text-decoration: none;
22
+ }
23
+ }
3
24
  }
4
25
 
5
- img.user-portrait {
6
- margin: -5px 0;
7
- width: 30px;
8
- height: 30px;
26
+ header {
27
+ .container-fluid {
28
+ padding-left: 10px;
29
+ padding-right: 10px;
30
+ }
31
+
32
+ nav.navbar {
33
+ @extend .navbar-default, .navbar-fixed-top;
34
+ background-color: white;
35
+ box-shadow: 0 0 12px rgba(0, 0, 0, 0.175);
36
+
37
+ img.user-portrait {
38
+ border-radius: 3px;
39
+ height: 30px;
40
+ margin: -5px 0;
41
+ width: 30px;
42
+ }
43
+
44
+ i.user-portrait {
45
+ font-size: 20px;
46
+ vertical-align: bottom;
47
+ }
48
+ }
49
+
50
+ .navbar-header {
51
+ position: relative;
52
+
53
+ a.navbar-brand {
54
+ color: $light-red-color;
55
+ &:hover {
56
+ color: $default-red-color;
57
+ }
58
+ }
59
+
60
+ button.navbar-toggle {
61
+ border: none;
62
+ float: none;
63
+ line-height: 16px;
64
+ margin-top: -18px;
65
+ padding: 8px 9px;
66
+ position: absolute;
67
+ right: 0;
68
+ top: 50%;
69
+
70
+ &:hover, &:focus {
71
+ background-color: #444;
72
+ .fa-bars {
73
+ color: white;
74
+ font-size: 20px;
75
+ }
76
+ }
77
+
78
+ .fa-bars {
79
+ color: $font-color;
80
+ font-size: 20px;
81
+ }
82
+ }
83
+ }
84
+
85
+ #top-menu {
86
+ ul.navbar-nav {
87
+ ul.dropdown-menu {
88
+ ul.dropdown-menu {
89
+ display: block;
90
+ position: inherit;
91
+ margin-top: 0;
92
+ padding-left: 0;
93
+ padding-top: 0;
94
+ border: none;
95
+ box-shadow: none;
96
+
97
+ li {
98
+ position: relative;
99
+
100
+ &:before {
101
+ @extend .fa, .fa-caret-right;
102
+ position: absolute;
103
+ left: 30px;
104
+ top: 50%;
105
+ margin-top: -7px;
106
+ }
107
+
108
+ a {
109
+ padding-left: 43px;
110
+ }
111
+ }
112
+ }
113
+ }
114
+ }
115
+ }
9
116
  }
10
117
 
11
- i.user-portrait {
12
- font-size: 20px;
13
- vertical-align: bottom;
118
+ main {
119
+ margin: 0 10px;
120
+
121
+ section {
122
+ font-size: 12px;
123
+ margin-bottom: 10px;
124
+ position: relative;
125
+ }
126
+
127
+ .alert {
128
+ margin-bottom: 10px;
129
+ }
130
+
131
+ .resources, .resource {
132
+ &__container {
133
+ overflow: auto;
134
+ background-color: $white;
135
+ }
136
+ }
137
+
138
+ .resources__header, .resource__header {
139
+ background-color: $background-color;
140
+ border-bottom: none;
141
+ left: 0;
142
+ margin: 0 10px;
143
+ padding: 11px 0 0;
144
+ position: fixed;
145
+ right: 0;
146
+ top: 51px;
147
+ z-index: 10;
148
+
149
+ h1 {
150
+ color: $default-primary-color;
151
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
152
+ font-size: 24px;
153
+ line-height: 30px;
154
+ margin: 0 0 1px -1px;
155
+ overflow: hidden;
156
+ text-overflow: ellipsis;
157
+ white-space: nowrap;
158
+ }
159
+
160
+ span > a {
161
+ position: relative;
162
+ display: inline-block;
163
+ color: $light-primary-color;
164
+ text-decoration: none;
165
+ transition: 0.2s;
166
+
167
+ &:hover {
168
+ color: $default-primary-color;
169
+ }
170
+ }
171
+ }
172
+
173
+ .resources__header {
174
+ height: 109px;
175
+ }
176
+
177
+ .resource__header {
178
+ height: 90px;
179
+
180
+ nav {
181
+ bottom: 10px;
182
+ left: 0;
183
+ position: absolute;
184
+ }
185
+
186
+ ul, li {
187
+ list-style: none;
188
+ margin: 0;
189
+ padding: 0;
190
+ }
191
+
192
+ li {
193
+ float: left;
194
+ }
195
+
196
+ a {
197
+ @extend .fa;
198
+
199
+ background-color: $light-blue-color;
200
+ display: inline-block;
201
+ padding: 5px 8px;
202
+ width: 30px;
203
+ line-height: 20px;
204
+ margin-right: 6px;
205
+ text-align: center;
206
+ border-radius: 2px;
207
+ color: $white;
208
+ text-decoration: none;
209
+
210
+ &:hover {
211
+ color: $white;
212
+ background-color: $default-blue-color;
213
+ }
214
+ }
215
+
216
+ .resources__index {
217
+ @extend .fa-list;
218
+ }
219
+
220
+ .resource {
221
+ &__show {
222
+ @extend .fa-info;
223
+ }
224
+
225
+ &__create {
226
+ @extend .fa-plus;
227
+ background-color: $light-green-color;
228
+
229
+ &:hover {
230
+ background-color: $default-green-color;
231
+ }
232
+ }
233
+
234
+ &__update {
235
+ @extend .fa-pencil;
236
+ background-color: $light-yellow-color;
237
+
238
+ &:hover {
239
+ background-color: $default-yellow-color;
240
+ }
241
+ }
242
+
243
+ &__destroy {
244
+ @extend .fa-remove;
245
+ background-color: $light-red-color;
246
+
247
+ &:hover {
248
+ background-color: $default-red-color;
249
+ }
250
+ }
251
+ }
252
+ }
253
+
254
+ .modaler {
255
+ &__title,
256
+ &__body {
257
+ display: none;
258
+ }
259
+ }
14
260
  }
261
+
262
+ @import '_layout_desktop';
@@ -0,0 +1,53 @@
1
+ @media (min-width: $screen-sm-min) {
2
+ body {
3
+ padding-top: 131px;
4
+
5
+ header .container-fluid {
6
+ padding: 0 30px;
7
+ }
8
+
9
+ main {
10
+ margin: 0 30px;
11
+
12
+ section {
13
+ margin-bottom: 30px;
14
+ }
15
+
16
+ .resources__header, .resource__header {
17
+ height: 80px;
18
+ margin: 0 30px;
19
+ }
20
+
21
+ .resource__header {
22
+ padding-top: 25px;
23
+
24
+ h1 {
25
+ margin-right: 122px;
26
+ overflow: hidden;
27
+ white-space: nowrap;
28
+ }
29
+
30
+ nav {
31
+ bottom: auto;
32
+ left: auto;
33
+ margin-top: -15px;
34
+ right: -6px;
35
+ top: 50%;
36
+ transition: 0.5s;
37
+ }
38
+ }
39
+
40
+ .query {
41
+ bottom: auto;
42
+ left: 65%;
43
+ margin-top: -15px;
44
+ top: 50%;
45
+ transition: 0.5s;
46
+
47
+ &.query--focus {
48
+ left: 50%;
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,119 @@
1
+ @mixin dropdown ($left_or_right: "left") {
2
+ position: relative;
3
+
4
+ &.open {
5
+ > ul, > form {
6
+ display: block;
7
+ }
8
+ }
9
+
10
+ > ul, > form {
11
+ @if $left_or_right == "left" { left: 0 }
12
+ @if $left_or_right == "right" { right: 0 }
13
+ @if $left_or_right == "middle" { left: -93px; }
14
+ background-clip: padding-box;
15
+ background-color: $white;
16
+ border: 1px solid rgba(0, 0, 0, 0.15);
17
+ border-radius: 4px;
18
+ box-shadow: 0 0 12px rgba(0, 0, 0, 0.15);
19
+ display: none;
20
+ float: left;
21
+ list-style: none;
22
+ margin: 2px 0 0;
23
+ min-width: 160px;
24
+ padding: 5px 0;
25
+ position: absolute;
26
+ text-align: left;
27
+ top: 100%;
28
+ z-index: 100000;
29
+
30
+ em, label {
31
+ color: $light-grey-color;
32
+ display: block;
33
+ font-style: normal;
34
+ font-weight: normal;
35
+ padding: 3px 20px;
36
+ text-decoration: none;
37
+ }
38
+
39
+ a {
40
+ color: $font-color;
41
+ display: block;
42
+ font-style: normal;
43
+ font-weight: normal;
44
+ padding: 3px 20px;
45
+ text-decoration: none;
46
+
47
+ &:hover {
48
+ background-color: #f5f5f5;
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ @mixin arrow ($icon_font: $fa-var-angle-down, $icon_font_open: $fa-var-angle-up, $light: $light-red-color, $dark: $dark-red-color, $left_or_right: "right", $padding_size: 11px) {
55
+ > a {
56
+ @if $left_or_right == "left" { padding-left: $padding_size }
57
+ @if $left_or_right == "right" { padding-right: $padding_size }
58
+ display: inline-block;
59
+ position: relative;
60
+
61
+ &:after {
62
+ @if $left_or_right == "left" { left: 0 }
63
+ @if $left_or_right == "right" { right: 0 }
64
+ @extend .fa;
65
+ color: $light;
66
+ content: $icon_font;
67
+ font-size: 12px;
68
+ margin-top: -6px;
69
+ position: absolute;
70
+ top: 50%;
71
+ }
72
+
73
+ &:hover:after {
74
+ color: $dark;
75
+ }
76
+ }
77
+
78
+ &.open > a {
79
+ &:after {
80
+ @extend .fa;
81
+ content: $icon_font_open;
82
+ }
83
+ }
84
+ }
85
+
86
+ @mixin divider ($color: $light-grey-color) {
87
+ position: relative;
88
+ margin-left: 10px;
89
+ padding-left: 10px;
90
+
91
+ &:before {
92
+ background-color: $color;
93
+ content: '';
94
+ height: 10px;
95
+ left: 0;
96
+ margin-top: -5px;
97
+ position: absolute;
98
+ top: 50%;
99
+ width: 1px;
100
+ }
101
+
102
+ &:first-of-type {
103
+ margin: 0;
104
+ padding: 0;
105
+
106
+ &:before {
107
+ display: none;
108
+ }
109
+ }
110
+ }
111
+
112
+ @mixin light_link {
113
+ color: $light-blue-color;
114
+ text-decoration: none;
115
+
116
+ &:hover {
117
+ color: $default-blue-color;
118
+ }
119
+ }