localtower 1.0.0 → 2.0.1

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 (227) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +133 -33
  3. data/app/assets/javascripts/localtower/application.js +30830 -0
  4. data/app/assets/javascripts/localtower/application.js.map +7 -0
  5. data/app/assets/stylesheets/localtower/application.css +1179 -0
  6. data/app/assets/stylesheets/src/application.css +68 -0
  7. data/app/controllers/localtower/pages_controller.rb +20 -35
  8. data/app/javascript/application.js +46 -0
  9. data/app/javascript/components/DarkSelect.js +115 -0
  10. data/app/javascript/components/ModernTooltip.js +26 -0
  11. data/app/javascript/components/NewMigrationForm.js +687 -0
  12. data/app/javascript/components/NewModelForm.js +432 -0
  13. data/app/javascript/components/data/Stores.js +294 -0
  14. data/app/views/layouts/localtower/application.html.erb +80 -66
  15. data/app/views/localtower/_migration.html.erb +30 -0
  16. data/app/views/localtower/pages/_alert_no_models.html.erb +1 -1
  17. data/app/views/localtower/pages/migrations.html.erb +24 -55
  18. data/app/views/localtower/pages/new_migration.html.erb +33 -96
  19. data/app/views/localtower/pages/new_model.html.erb +17 -83
  20. data/config/routes.rb +1 -1
  21. data/lib/localtower/engine.rb +9 -2
  22. data/lib/localtower/generators/migration.rb +218 -91
  23. data/lib/localtower/generators/model.rb +29 -20
  24. data/lib/localtower/generators/service_objects/insert_array.rb +5 -3
  25. data/lib/localtower/generators/service_objects/insert_defaults.rb +73 -3
  26. data/lib/localtower/generators/service_objects/insert_foreign_keys.rb +35 -0
  27. data/lib/localtower/generators/service_objects/insert_indexes.rb +41 -18
  28. data/lib/localtower/generators/service_objects/insert_nullable.rb +5 -3
  29. data/lib/localtower/status.rb +3 -1
  30. data/lib/localtower/tools.rb +20 -9
  31. data/lib/localtower/version.rb +1 -1
  32. data/lib/localtower.rb +0 -6
  33. data/public/com/favicon-64.png +0 -0
  34. data/public/com/twitter-cover-1.png +0 -0
  35. data/public/com/twitter-cover-2.png +0 -0
  36. data/public/fonts/Circular/CircularStd-Black.otf +0 -0
  37. data/public/fonts/Circular/CircularStd-BlackItalic.otf +0 -0
  38. data/public/fonts/Circular/CircularStd-Bold.otf +0 -0
  39. data/public/fonts/Circular/CircularStd-BoldItalic.otf +0 -0
  40. data/public/fonts/Circular/CircularStd-Book.otf +0 -0
  41. data/public/fonts/Circular/CircularStd-BookItalic.otf +0 -0
  42. data/public/fonts/Circular/CircularStd-Light Italic.otf +0 -0
  43. data/public/fonts/Circular/CircularStd-Light.otf +0 -0
  44. data/public/fonts/Circular/CircularStd-Medium.otf +0 -0
  45. data/public/fonts/Circular/CircularStd-MediumItalic.otf +0 -0
  46. data/public/fonts/Circular/Read Me.txt +5 -0
  47. data/public/fonts/Circular/www.dfonts.org.url +2 -0
  48. data/public/screenshots/v0.1.1/1_schema.png +0 -0
  49. data/public/screenshots/v0.1.1/2_models_1.png +0 -0
  50. data/public/screenshots/v0.1.1/2_models_2.png +0 -0
  51. data/public/screenshots/v0.1.1/3_relations.png +0 -0
  52. data/public/screenshots/v0.1.1/4_migrations.png +0 -0
  53. data/public/screenshots/v0.1.6/1_schema.png +0 -0
  54. data/public/screenshots/v0.1.6/2_models_1.png +0 -0
  55. data/public/screenshots/v0.1.6/3_relations.png +0 -0
  56. data/public/screenshots/v0.1.6/4_migrations.png +0 -0
  57. data/public/screenshots/v0.1.6/5_capture.png +0 -0
  58. data/public/screenshots/v1.0.0/migrations.png +0 -0
  59. data/public/screenshots/v1.0.0/models.png +0 -0
  60. data/public/screenshots/v1.0.0/new_migration.png +0 -0
  61. data/public/screenshots/v1.0.0/new_model.png +0 -0
  62. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.44.30.jpg +0 -0
  63. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.44.42.jpg +0 -0
  64. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.44.54.jpg +0 -0
  65. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.48.21.jpg +0 -0
  66. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.48.28.jpg +0 -0
  67. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.48.51.jpg +0 -0
  68. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.49.09.jpg +0 -0
  69. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.50.04.jpg +0 -0
  70. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.50.11.jpg +0 -0
  71. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.50.19.jpg +0 -0
  72. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.51.47.jpg +0 -0
  73. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.51.48.jpg +0 -0
  74. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.52.02.jpg +0 -0
  75. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.52.18.jpg +0 -0
  76. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.52.26.jpg +0 -0
  77. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.52.38.jpg +0 -0
  78. data/public/screenshots/v2.0.0/migrations.png +0 -0
  79. data/public/screenshots/v2.0.0/new_migration.png +0 -0
  80. data/public/screenshots/v2.0.0/new_model.png +0 -0
  81. data/public/vendor/jquery-3.7.1.min.js +2 -0
  82. data/public/vendor/lucide.min.js +12 -0
  83. data/public/vendor/monokai-sublime.css +80 -0
  84. data/public/vendor/rails-ujs.min.js +8 -0
  85. data/spec/dummy/Gemfile +1 -1
  86. data/spec/dummy/Gemfile.lock +146 -104
  87. data/spec/dummy/config/database.yml +4 -6
  88. data/spec/dummy/config/puma.rb +1 -1
  89. data/spec/dummy/db/schema.rb +2 -39
  90. data/spec/dummy/lib/tasks/reset.rake +16 -0
  91. data/spec/dummy/log/development.log +22746 -15994
  92. data/spec/dummy/log/localtower.log +747 -1891
  93. data/spec/dummy/log/test.log +1145 -0
  94. data/spec/dummy/tmp/cache/sessions/localtower/726/FE1/_session_id%3A2%3A%3A69d6764784f832ea25700ea2f242210f3f8d94b48912b0f09ffc44311f0376eb +0 -0
  95. data/spec/dummy/tmp/cache/sessions/localtower/77E/121/_session_id%3A2%3A%3A0b3c1fe7154461ba023ba6c81dd1b999348757880b505f4b082faed263a627f9 +1 -0
  96. data/spec/dummy/tmp/cache/sessions/localtower/7EB/8A1/_session_id%3A2%3A%3Af88237c1d157546a5dcde894fd6c1410162a8eba318748d4ac573ee75e40df16 +0 -0
  97. data/spec/dummy/tmp/local_secret.txt +1 -0
  98. data/spec/factories/migration.rb +77 -40
  99. data/spec/factories/model.rb +46 -26
  100. data/spec/lib/localtower/generators/migration_spec.rb +16 -24
  101. data/spec/lib/localtower/generators/model_spec.rb +71 -8
  102. data/spec/lib/localtower/generators/service_objects/insert_array_spec.rb +1 -1
  103. data/spec/lib/localtower/generators/service_objects/insert_defaults_spec.rb +1 -1
  104. data/spec/lib/localtower/generators/service_objects/insert_foreign_keys_spec.rb +101 -0
  105. data/spec/lib/localtower/generators/service_objects/insert_indexes_spec.rb +1 -1
  106. data/spec/lib/localtower/generators/service_objects/insert_nullable_spec.rb +2 -2
  107. data/spec/spec_helper.rb +2 -3
  108. metadata +107 -238
  109. data/app/views/localtower/pages/models.html.erb +0 -63
  110. data/public/css/app.css +0 -55
  111. data/public/js/app.js +0 -337
  112. data/public/light-bootstrap-dashboard-master/assets/css/animate.min.css +0 -6
  113. data/public/light-bootstrap-dashboard-master/assets/css/bootstrap.min.css +0 -5
  114. data/public/light-bootstrap-dashboard-master/assets/css/demo.css +0 -61
  115. data/public/light-bootstrap-dashboard-master/assets/css/light-bootstrap-dashboard.css +0 -2789
  116. data/public/light-bootstrap-dashboard-master/assets/css/pe-icon-7-stroke.css +0 -632
  117. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.eot +0 -0
  118. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.svg +0 -212
  119. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.ttf +0 -0
  120. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.woff +0 -0
  121. data/public/light-bootstrap-dashboard-master/assets/img/default-avatar.png +0 -0
  122. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-0.jpg +0 -0
  123. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-1.jpg +0 -0
  124. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-2.jpg +0 -0
  125. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-3.jpg +0 -0
  126. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-4.jpg +0 -0
  127. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-5.jpg +0 -0
  128. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-6.jpg +0 -0
  129. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-7.jpg +0 -0
  130. data/public/light-bootstrap-dashboard-master/assets/img/faces/tim_vector.jpe +0 -0
  131. data/public/light-bootstrap-dashboard-master/assets/img/favicon.ico +0 -0
  132. data/public/light-bootstrap-dashboard-master/assets/img/loading-bubbles.svg +0 -14
  133. data/public/light-bootstrap-dashboard-master/assets/img/mask.png +0 -0
  134. data/public/light-bootstrap-dashboard-master/assets/img/new_logo.png +0 -0
  135. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-1.jpg +0 -0
  136. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-2.jpg +0 -0
  137. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-3.jpg +0 -0
  138. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-4.jpg +0 -0
  139. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-5.jpg +0 -0
  140. data/public/light-bootstrap-dashboard-master/assets/img/tim_80x80.png +0 -0
  141. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-checkbox-radio-switch.js +0 -502
  142. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-notify.js +0 -404
  143. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-select.js +0 -438
  144. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap.min.js +0 -7
  145. data/public/light-bootstrap-dashboard-master/assets/js/chartist.min.js +0 -9
  146. data/public/light-bootstrap-dashboard-master/assets/js/demo.js +0 -152
  147. data/public/light-bootstrap-dashboard-master/assets/js/jquery-1.10.2.js +0 -9789
  148. data/public/light-bootstrap-dashboard-master/assets/js/light-bootstrap-dashboard.js +0 -179
  149. data/public/logo-localtower-white-300.png +0 -0
  150. data/public/logo-localtower-white.png +0 -0
  151. data/public/logo-localtower.png +0 -0
  152. data/public/vendor/font-awesome.min.css +0 -4
  153. data/public/vendor/highlight-js-default.min.css +0 -9
  154. data/spec/dummy/app/models/post.rb +0 -3
  155. data/spec/dummy/app/models/user.rb +0 -3
  156. data/spec/dummy/db/migrate/20230119221452_create_users.rb +0 -14
  157. data/spec/dummy/db/migrate/20230119221751_change_users_at1674166670.rb +0 -7
  158. data/spec/dummy/db/migrate/20230119222054_create_posts.rb +0 -11
  159. data/spec/dummy/db/migrate/20230119222106_change_posts_at1674166865.rb +0 -5
  160. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/-Y/-YOiiBKqc2UODHFjctm8xc7xFoZaL7zOjWQj6qQ2wyE.cache +0 -1
  161. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/-d/-dwueM4vmPt8L51S3jeSyg_AjGDcj0GUN6pDpCA1gCg.cache +0 -3
  162. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/0g/0gaJnJQdtd2ACbihXxn8OnjLWlDjnQ_WxfgOpbiLzhg.cache +0 -1
  163. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/0r/0rFCsCV9kZnEYtZZ6sfig8329OU31bqjecDFqSVank8.cache +0 -1
  164. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/1J/1J2k_CpnQE3d-PZAQwOVGQALGkta4qVvhdsKjgG0e4Q.cache +0 -0
  165. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/2p/2pYVH2Z_syqh6ok8QYxJNKxXpx1Iwppf6JGElZI0gpw.cache +0 -0
  166. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/3W/3WBmqd-2V6q5N-jvbyp-tlcfn3aHYMwBppbOUm7x4qg.cache +0 -1
  167. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/4K/4KFPlHkhdDW0riGUmlbaR-kmDz6JUnQvY6fwW8qsdaE.cache +0 -3
  168. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/6x/6xMeRWmLpNK_flx6-JA3KazvUxSCxyPxHv9Zm3eC26Q.cache +0 -1
  169. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/7d/7dNqI_dCDJLJmI1oM4xwFp9nRRNOem-4P4OD7PMyz2E.cache +0 -0
  170. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/8X/8XquhxVcp5A8QquLtxO8NgKTMJch0eqQmzFmRGIZP6I.cache +0 -1
  171. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ah/AhdfXXtU63kXS4TnsH2Vi1yWgVkIEeV8Z8XA68hrNQc.cache +0 -0
  172. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Bt/BtAePnwLSGw82xUGI7wuhWDfuwarOQVS91YqCsweMcs.cache +0 -0
  173. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Bx/BxzoG0KxeNLac4xTNeJv3qfeytbNBw58xj2zD-xdbrE.cache +0 -2
  174. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/CC/CCD0ROPX0yxHwNpVZmuP8ZNtgQpaVCMXpdzC0Wb5n24.cache +0 -1
  175. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/DS/DS43oxBg6K5PMWLn2mTy_4EnxI03ehHkxpjV7NCi8yM.cache +0 -1
  176. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Do/Do83AoOat5W-c1g7piDGy2GMmffsY6JY0Qfuh5PY3GM.cache +0 -2
  177. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/EI/EI0Nxk-VRATWstMuVCVc0_GdYlQ-a0dx6n2g0l3vIik.cache +0 -0
  178. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/EN/ENhJnzJAU2IK-7aHqubj9N8Jo_UTmjG_VEQqyIkolQ8.cache +0 -1
  179. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Fc/FcS6VUHN3Bd4pHGqd5NHA8jA4OLwWrU94s3b4GGxX9c.cache +0 -1
  180. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/G0/G0kukI-r0q0Vbrg6e_jnYJoYcOX8K__h-mwKbCf4twE.cache +0 -0
  181. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/I1/I1Jw08-mz8xzgrgi6giCzpf1UmzGTSbl4eJEw4DAoJM.cache +0 -1
  182. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/IV/IVOO1dXBmgjieDk__g57p6aYt0Z3CmfTa32jhegoyko.cache +0 -3
  183. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/JY/JYPmv5WP4wxdI9EKEEPkK_fVtqeSLfmint_5E8fQLQ8.cache +0 -1
  184. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/MX/MXI3KxaQPZGImSvCNZ_TbQVruWCJ3E0xiVxza1ZCAjM.cache +0 -1
  185. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/OU/OUoioCqXALK909jXPV3VSyCJIdNC7bsogUfdnRTpc5o.cache +0 -1
  186. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/PH/PHjtqNLUPAUDiSlu5AbPjlIo20mOGNm0uNjMLhX2NvM.cache +0 -0
  187. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/RC/RC9vfALY5K634pTeau0BAhTHl7d5_5yA3tM-QTLiKtI.cache +0 -0
  188. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/RG/RG1PrmlixwaUlG8BV0kcm_3F7OQekxsrLYjBdf403-k.cache +0 -2
  189. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ut/UtoMO6n6FHTpRCGk9VfxlfTI2Ao2GYJ_6kMzx3B9VH8.cache +0 -1
  190. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/VE/VExnbpDk3LxYdPk3htUrZQXPI8NK_zlKtSFfVXJlxU4.cache +0 -1
  191. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Wm/WmKTjykiU-Tx_Faf5zduEeEQ-DozAs5omKToM2l1cZM.cache +0 -0
  192. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/X-/X-KjhDPd0nI155N_FaxFSgaOiYo0_ytqlmkBlLM7ayw.cache +0 -1
  193. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/XX/XXVhj-O91tJ5c8pz7DQlTABOv8TIRVg5haw9VOq9HuI.cache +0 -1
  194. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/YC/YCiifo5NCMwDChFqYFiV4EaYEx8hy3Efle1PsGbIdak.cache +0 -1
  195. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ya/YayMISAqD-Y3vBFywwKrXbUovGf5o77HUF5s8mnQgO0.cache +0 -0
  196. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Zl/Zl-NEb0aDLmZ9gN4gdY1OYlbUXD4JhkFY_y23m55zmo.cache +0 -0
  197. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/_h/_hnjPptBeD3GP5B0iJR6pvyVkiMiq-o2TxaYmGf9KJo.cache +0 -3
  198. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/_p/_poEF6QbTPYJiQCFGoXxIXjmvcn6T0I87ElzJGHguk0.cache +0 -1
  199. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/aa/aaSj2zt8ddc87nZqTpOI9gRCKVnoalXKFBww7t4t3Kg.cache +0 -0
  200. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/bZ/bZHWUkrOLp0WM_Ogo36Qjt4cxDt-rOFgtcj4LNB-BVE.cache +0 -1
  201. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/cP/cPSNG_663TNT944Rke919luRS6FtpMwVc_7aDph645w.cache +0 -1
  202. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ce/ceq8fcZGIoqWrCl9vrCRrywEdx42iy9PrGG9CwFSIF4.cache +0 -0
  203. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/cl/cljhP0Jc018nLnG1rpdg-FUf6mlIqrQYvXTNXTNG9Bw.cache +0 -0
  204. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/dm/dmod3fTZdoKso2FGM5RTQtb4kTB6vywsiXLWDygYFN4.cache +0 -1
  205. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/dy/dySDGcUTqlKx2MTvOmIEP-WzhyhCfU5xhN9qgxbz3rI.cache +0 -0
  206. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/gQ/gQYdmEzbLjTcFCnsfzXzEmeminOchF263snAk3IvXM0.cache +0 -1
  207. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/gh/ghvuMAqccBGljlmEaI3Gt5tH5rEg6hseKYMYfRMkHdY.cache +0 -1
  208. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/gt/gt8QC7k92A4hXA3HlCpQulW73tqd6x63I3uT-YrGMj0.cache +0 -1
  209. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/hf/hfVg-y7dPSQKbb7V3I7M5w7IpOhDiIB2H31d2tmbZMU.cache +0 -0
  210. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/iF/iFLwyhZIu1Jxm77NUT2qWeTDMmyELW4U85t9rGE_KVg.cache +0 -0
  211. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/kF/kFlIcBBnSyKE00OjpM90pqSn93mLMUv9esz86nrO-Cs.cache +0 -1
  212. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ma/MazNt_5OaYexRuZnccZZ_7AONlxn1a4W3KdWyHyBdws.cache +0 -0
  213. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ma/ma3w08gnDTeqwY2-C9BlToxA6-AS8bvXlu-nBiz0UYs.cache +0 -1
  214. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/n_/n_xYqQYhwEMQknb3jFQnjlxxBE9TzMNHCdJ-bEyZFIw.cache +0 -2
  215. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/nx/nxTv3sKVUQZADJyM3dPaVmUA78MIsMLD_K279yN_GsI.cache +0 -2
  216. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/pv/pv6tV3CDkIAmLXdU8EPLlNEkXAKJPufVD4VP30o4fWo.cache +0 -0
  217. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/qP/qPmv5snMrDw830S6hSICDcnIy7kVEWoFKXhGKT38lG4.cache +0 -2
  218. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/sY/sYvTb1uPWWmnHJNXKuW_xSco-aUb-rN2f0J35zSIzuc.cache +0 -1
  219. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/su/suQ_jjDxRiIn4VEqFJYKaBWJILaeGKBvoTv49XNX0vo.cache +0 -1
  220. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/u8/u8IrW5IIQ7espwk2Vpk23zheL9YZA0tnbKq9X7E-WA0.cache +0 -1
  221. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/wh/whzETExjcZCkn4msasD2aylgfhfpKPZrNxTkY-SOIDg.cache +0 -2
  222. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/x7/x7PYh8DJvPykcEqpVab2vcY9-GFz-3cqtoMlRAu94Uc.cache +0 -2
  223. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/y6/y6oxsJD3pAY9ph1_5M-77uiEjTVw8BheLZNygCKPm1g.cache +0 -1
  224. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/yH/yHZ-a1J23ZCf2n5mEHINMz23Iec2cLGTKauW7k4yGTE.cache +0 -0
  225. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/z7/z7KfUWYoSaGq8tQ5mbHwyfXyT3Pa4FWKJswHcIdJuds.cache +0 -1
  226. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/zu/zuExWc5WHxeOUPZUKHl9a9ZRmN50g7jMOD28macn6M0.cache +0 -0
  227. data/spec/dummy/tmp/pids/server.pid +0 -1
@@ -1,14 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="white">
2
- <circle transform="translate(8 0)" cx="0" cy="16" r="0">
3
- <animate attributeName="r" values="0; 4; 0; 0" dur="1.2s" repeatCount="indefinite" begin="0"
4
- keytimes="0;0.2;0.7;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
5
- </circle>
6
- <circle transform="translate(16 0)" cx="0" cy="16" r="0">
7
- <animate attributeName="r" values="0; 4; 0; 0" dur="1.2s" repeatCount="indefinite" begin="0.3"
8
- keytimes="0;0.2;0.7;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
9
- </circle>
10
- <circle transform="translate(24 0)" cx="0" cy="16" r="0">
11
- <animate attributeName="r" values="0; 4; 0; 0" dur="1.2s" repeatCount="indefinite" begin="0.6"
12
- keytimes="0;0.2;0.7;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
13
- </circle>
14
- </svg>
@@ -1,502 +0,0 @@
1
- !function ($) {
2
-
3
- /* CHECKBOX PUBLIC CLASS DEFINITION
4
- * ============================== */
5
-
6
- var Checkbox = function (element, options) {
7
- this.init(element, options);
8
- }
9
-
10
- Checkbox.prototype = {
11
-
12
- constructor: Checkbox
13
-
14
- , init: function (element, options) {
15
- var $el = this.$element = $(element)
16
-
17
- this.options = $.extend({}, $.fn.checkbox.defaults, options);
18
- $el.before(this.options.template);
19
- this.setState();
20
- }
21
-
22
- , setState: function () {
23
- var $el = this.$element
24
- , $parent = $el.closest('.checkbox');
25
-
26
- $el.prop('disabled') && $parent.addClass('disabled');
27
- $el.prop('checked') && $parent.addClass('checked');
28
- }
29
-
30
- , toggle: function () {
31
- var ch = 'checked'
32
- , $el = this.$element
33
- , $parent = $el.closest('.checkbox')
34
- , checked = $el.prop(ch)
35
- , e = $.Event('toggle')
36
-
37
- if ($el.prop('disabled') == false) {
38
- $parent.toggleClass(ch) && checked ? $el.removeAttr(ch) : $el.prop(ch, ch);
39
- $el.trigger(e).trigger('change');
40
- }
41
- }
42
-
43
- , setCheck: function (option) {
44
- var d = 'disabled'
45
- , ch = 'checked'
46
- , $el = this.$element
47
- , $parent = $el.closest('.checkbox')
48
- , checkAction = option == 'check' ? true : false
49
- , e = $.Event(option)
50
-
51
- $parent[checkAction ? 'addClass' : 'removeClass' ](ch) && checkAction ? $el.prop(ch, ch) : $el.removeAttr(ch);
52
- $el.trigger(e).trigger('change');
53
- }
54
-
55
- }
56
-
57
-
58
- /* CHECKBOX PLUGIN DEFINITION
59
- * ======================== */
60
-
61
- var old = $.fn.checkbox
62
-
63
- $.fn.checkbox = function (option) {
64
- return this.each(function () {
65
- var $this = $(this)
66
- , data = $this.data('checkbox')
67
- , options = $.extend({}, $.fn.checkbox.defaults, $this.data(), typeof option == 'object' && option);
68
- if (!data) $this.data('checkbox', (data = new Checkbox(this, options)));
69
- if (option == 'toggle') data.toggle()
70
- if (option == 'check' || option == 'uncheck') data.setCheck(option)
71
- else if (option) data.setState();
72
- });
73
- }
74
-
75
- $.fn.checkbox.defaults = {
76
- template: '<span class="icons"><span class="first-icon fa fa-square-o"></span><span class="second-icon fa fa-check-square-o"></span></span>'
77
- }
78
-
79
-
80
- /* CHECKBOX NO CONFLICT
81
- * ================== */
82
-
83
- $.fn.checkbox.noConflict = function () {
84
- $.fn.checkbox = old;
85
- return this;
86
- }
87
-
88
-
89
- /* CHECKBOX DATA-API
90
- * =============== */
91
-
92
- $(document).on('click.checkbox.data-api', '[data-toggle^=checkbox], .checkbox', function (e) {
93
- var $checkbox = $(e.target);
94
- if (e.target.tagName != "A") {
95
- e && e.preventDefault() && e.stopPropagation();
96
- if (!$checkbox.hasClass('checkbox')) $checkbox = $checkbox.closest('.checkbox');
97
- $checkbox.find(':checkbox').checkbox('toggle');
98
- }
99
- });
100
-
101
- $(function () {
102
- $('[data-toggle="checkbox"]').each(function () {
103
- var $checkbox = $(this);
104
- $checkbox.checkbox();
105
- });
106
- });
107
-
108
- }(window.jQuery);
109
-
110
-
111
-
112
- /* =============================================================
113
- * flatui-radio v0.0.3
114
- * ============================================================ */
115
-
116
- !function ($) {
117
-
118
- /* RADIO PUBLIC CLASS DEFINITION
119
- * ============================== */
120
-
121
- var Radio = function (element, options) {
122
- this.init(element, options);
123
- }
124
-
125
- Radio.prototype = {
126
-
127
- constructor: Radio
128
-
129
- , init: function (element, options) {
130
- var $el = this.$element = $(element)
131
-
132
- this.options = $.extend({}, $.fn.radio.defaults, options);
133
- $el.before(this.options.template);
134
- this.setState();
135
- }
136
-
137
- , setState: function () {
138
- var $el = this.$element
139
- , $parent = $el.closest('.radio');
140
-
141
- $el.prop('disabled') && $parent.addClass('disabled');
142
- $el.prop('checked') && $parent.addClass('checked');
143
- }
144
-
145
- , toggle: function () {
146
- var d = 'disabled'
147
- , ch = 'checked'
148
- , $el = this.$element
149
- , checked = $el.prop(ch)
150
- , $parent = $el.closest('.radio')
151
- , $parentWrap = $el.closest('form').length ? $el.closest('form') : $el.closest('body')
152
- , $elemGroup = $parentWrap.find(':radio[name="' + $el.attr('name') + '"]')
153
- , e = $.Event('toggle')
154
-
155
- if ($el.prop(d) == false) {
156
- $elemGroup.not($el).each(function () {
157
- var $el = $(this)
158
- , $parent = $(this).closest('.radio');
159
-
160
- if ($el.prop(d) == false) {
161
- $parent.removeClass(ch) && $el.removeAttr(ch).trigger('change');
162
- }
163
- });
164
-
165
- if (checked == false) $parent.addClass(ch) && $el.prop(ch, true);
166
- $el.trigger(e);
167
-
168
- if (checked !== $el.prop(ch)) {
169
- $el.trigger('change');
170
- }
171
- }
172
- }
173
-
174
- , setCheck: function (option) {
175
- var ch = 'checked'
176
- , $el = this.$element
177
- , $parent = $el.closest('.radio')
178
- , checkAction = option == 'check' ? true : false
179
- , checked = $el.prop(ch)
180
- , $parentWrap = $el.closest('form').length ? $el.closest('form') : $el.closest('body')
181
- , $elemGroup = $parentWrap.find(':radio[name="' + $el['attr']('name') + '"]')
182
- , e = $.Event(option)
183
-
184
- $elemGroup.not($el).each(function () {
185
- var $el = $(this)
186
- , $parent = $(this).closest('.radio');
187
-
188
- $parent.removeClass(ch) && $el.removeAttr(ch);
189
- });
190
-
191
- $parent[checkAction ? 'addClass' : 'removeClass'](ch) && checkAction ? $el.prop(ch, ch) : $el.removeAttr(ch);
192
- $el.trigger(e);
193
-
194
- if (checked !== $el.prop(ch)) {
195
- $el.trigger('change');
196
- }
197
- }
198
-
199
- }
200
-
201
-
202
- /* RADIO PLUGIN DEFINITION
203
- * ======================== */
204
-
205
- var old = $.fn.radio
206
-
207
- $.fn.radio = function (option) {
208
- return this.each(function () {
209
- var $this = $(this)
210
- , data = $this.data('radio')
211
- , options = $.extend({}, $.fn.radio.defaults, $this.data(), typeof option == 'object' && option);
212
- if (!data) $this.data('radio', (data = new Radio(this, options)));
213
- if (option == 'toggle') data.toggle()
214
- if (option == 'check' || option == 'uncheck') data.setCheck(option)
215
- else if (option) data.setState();
216
- });
217
- }
218
-
219
- $.fn.radio.defaults = {
220
- template: '<span class="icons"><span class="first-icon fa fa-circle-o"></span><span class="second-icon fa fa-dot-circle-o"></span></span>'
221
- }
222
-
223
-
224
- /* RADIO NO CONFLICT
225
- * ================== */
226
-
227
- $.fn.radio.noConflict = function () {
228
- $.fn.radio = old;
229
- return this;
230
- }
231
-
232
-
233
- /* RADIO DATA-API
234
- * =============== */
235
-
236
- $(document).on('click.radio.data-api', '[data-toggle^=radio], .radio', function (e) {
237
- var $radio = $(e.target);
238
- e && e.preventDefault() && e.stopPropagation();
239
- if (!$radio.hasClass('radio')) $radio = $radio.closest('.radio');
240
- $radio.find(':radio').radio('toggle');
241
- });
242
-
243
- $(function () {
244
- $('[data-toggle="radio"]').each(function () {
245
- var $radio = $(this);
246
- $radio.radio();
247
- });
248
- });
249
-
250
- }(window.jQuery);
251
-
252
-
253
-
254
- /* ============================================================
255
- * bootstrapSwitch v1.3 by Larentis Mattia @spiritualGuru
256
- * http://www.larentis.eu/switch/
257
- * ============================================================
258
- * Licensed under the Apache License, Version 2.0
259
- * http://www.apache.org/licenses/LICENSE-2.0
260
- * ============================================================ */
261
-
262
- !function ($) {
263
- "use strict";
264
-
265
- $.fn['bootstrapSwitch'] = function (method) {
266
- var methods = {
267
- init: function () {
268
- return this.each(function () {
269
- var $element = $(this)
270
- , $div
271
- , $switchLeft
272
- , $switchRight
273
- , $label
274
- , myClasses = ""
275
- , classes = $element.attr('class')
276
- , color
277
- , moving
278
- , onLabel = "ON"
279
- , offLabel = "OFF"
280
- , icon = false;
281
-
282
- $.each(['switch-mini', 'switch-small', 'switch-large'], function (i, el) {
283
- if (classes.indexOf(el) >= 0)
284
- myClasses = el;
285
- });
286
-
287
- $element.addClass('has-switch');
288
-
289
- if ($element.data('on') !== undefined)
290
- color = "switch-" + $element.data('on');
291
-
292
- if ($element.data('on-label') !== undefined)
293
- onLabel = $element.data('on-label');
294
-
295
- if ($element.data('off-label') !== undefined)
296
- offLabel = $element.data('off-label');
297
-
298
- if ($element.data('icon') !== undefined)
299
- icon = $element.data('icon');
300
-
301
- $switchLeft = $('<span>')
302
- .addClass("switch-left")
303
- .addClass(myClasses)
304
- .addClass(color)
305
- .html(onLabel);
306
-
307
- color = '';
308
- if ($element.data('off') !== undefined)
309
- color = "switch-" + $element.data('off');
310
-
311
- $switchRight = $('<span>')
312
- .addClass("switch-right")
313
- .addClass(myClasses)
314
- .addClass(color)
315
- .html(offLabel);
316
-
317
- $label = $('<label>')
318
- .html("&nbsp;")
319
- .addClass(myClasses)
320
- .attr('for', $element.find('input').attr('id'));
321
-
322
- if (icon) {
323
- $label.html('<i class="' + icon + '"></i>');
324
- }
325
-
326
- $div = $element.find(':checkbox').wrap($('<div>')).parent().data('animated', false);
327
-
328
- if ($element.data('animated') !== false)
329
- $div.addClass('switch-animate').data('animated', true);
330
-
331
- $div
332
- .append($switchLeft)
333
- .append($label)
334
- .append($switchRight);
335
-
336
- $element.find('>div').addClass(
337
- $element.find('input').is(':checked') ? 'switch-on' : 'switch-off'
338
- );
339
-
340
- if ($element.find('input').is(':disabled'))
341
- $(this).addClass('deactivate');
342
-
343
- var changeStatus = function ($this) {
344
- $this.siblings('label').trigger('mousedown').trigger('mouseup').trigger('click');
345
- };
346
-
347
- $element.on('keydown', function (e) {
348
- if (e.keyCode === 32) {
349
- e.stopImmediatePropagation();
350
- e.preventDefault();
351
- changeStatus($(e.target).find('span:first'));
352
- }
353
- });
354
-
355
- $switchLeft.on('click', function (e) {
356
- changeStatus($(this));
357
- });
358
-
359
- $switchRight.on('click', function (e) {
360
- changeStatus($(this));
361
- });
362
-
363
- $element.find('input').on('change', function (e) {
364
- var $this = $(this)
365
- , $element = $this.parent()
366
- , thisState = $this.is(':checked')
367
- , state = $element.is('.switch-off');
368
-
369
- e.preventDefault();
370
-
371
- $element.css('left', '');
372
-
373
- if (state === thisState) {
374
-
375
- if (thisState)
376
- $element.removeClass('switch-off').addClass('switch-on');
377
- else $element.removeClass('switch-on').addClass('switch-off');
378
-
379
- if ($element.data('animated') !== false)
380
- $element.addClass("switch-animate");
381
-
382
- $element.parent().trigger('switch-change', {'el': $this, 'value': thisState})
383
- }
384
- });
385
-
386
- $element.find('label').on('mousedown touchstart', function (e) {
387
- var $this = $(this);
388
- moving = false;
389
-
390
- e.preventDefault();
391
- e.stopImmediatePropagation();
392
-
393
- $this.closest('div').removeClass('switch-animate');
394
-
395
- if ($this.closest('.has-switch').is('.deactivate'))
396
- $this.unbind('click');
397
- else {
398
- $this.on('mousemove touchmove', function (e) {
399
- var $element = $(this).closest('.switch')
400
- , relativeX = (e.pageX || e.originalEvent.targetTouches[0].pageX) - $element.offset().left
401
- , percent = (relativeX / $element.width()) * 100
402
- , left = 25
403
- , right = 75;
404
-
405
- moving = true;
406
-
407
- if (percent < left)
408
- percent = left;
409
- else if (percent > right)
410
- percent = right;
411
-
412
- $element.find('>div').css('left', (percent - right) + "%")
413
- });
414
-
415
- $this.on('click touchend', function (e) {
416
- var $this = $(this)
417
- , $target = $(e.target)
418
- , $myCheckBox = $target.siblings('input');
419
-
420
- e.stopImmediatePropagation();
421
- e.preventDefault();
422
-
423
- $this.unbind('mouseleave');
424
-
425
- if (moving)
426
- $myCheckBox.prop('checked', !(parseInt($this.parent().css('left')) < -25));
427
- else $myCheckBox.prop("checked", !$myCheckBox.is(":checked"));
428
-
429
- moving = false;
430
- $myCheckBox.trigger('change');
431
- });
432
-
433
- $this.on('mouseleave', function (e) {
434
- var $this = $(this)
435
- , $myCheckBox = $this.siblings('input');
436
-
437
- e.preventDefault();
438
- e.stopImmediatePropagation();
439
-
440
- $this.unbind('mouseleave');
441
- $this.trigger('mouseup');
442
-
443
- $myCheckBox.prop('checked', !(parseInt($this.parent().css('left')) < -25)).trigger('change');
444
- });
445
-
446
- $this.on('mouseup', function (e) {
447
- e.stopImmediatePropagation();
448
- e.preventDefault();
449
-
450
- $(this).unbind('mousemove');
451
- });
452
- }
453
- });
454
- }
455
- );
456
- },
457
- toggleActivation: function () {
458
- $(this).toggleClass('deactivate');
459
- },
460
- isActive: function () {
461
- return !$(this).hasClass('deactivate');
462
- },
463
- setActive: function (active) {
464
- if (active)
465
- $(this).removeClass('deactivate');
466
- else $(this).addClass('deactivate');
467
- },
468
- toggleState: function (skipOnChange) {
469
- var $input = $(this).find('input:checkbox');
470
- $input.prop('checked', !$input.is(':checked')).trigger('change', skipOnChange);
471
- },
472
- setState: function (value, skipOnChange) {
473
- $(this).find('input:checkbox').prop('checked', value).trigger('change', skipOnChange);
474
- },
475
- status: function () {
476
- return $(this).find('input:checkbox').is(':checked');
477
- },
478
- destroy: function () {
479
- var $div = $(this).find('div')
480
- , $checkbox;
481
-
482
- $div.find(':not(input:checkbox)').remove();
483
-
484
- $checkbox = $div.children();
485
- $checkbox.unwrap().unwrap();
486
-
487
- $checkbox.unbind('change');
488
-
489
- return $checkbox;
490
- }
491
- };
492
-
493
- if (methods[method])
494
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
495
- else if (typeof method === 'object' || !method)
496
- return methods.init.apply(this, arguments);
497
- else
498
- $.error('Method ' + method + ' does not exist!');
499
- };
500
- }(jQuery);
501
-
502
-