inline_forms 7.0.4 → 7.2.11

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 (353) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -0
  3. data/CHANGELOG.md +174 -0
  4. data/README.rdoc +6 -0
  5. data/app/assets/fonts/foundation-icons.svg +970 -0
  6. data/app/assets/fonts/foundation-icons.ttf +0 -0
  7. data/app/assets/fonts/foundation-icons.woff +0 -0
  8. data/app/assets/images/jquery-ui/animated-overlay.gif +0 -0
  9. data/app/assets/images/jquery-ui/ui-bg_diagonal-maze_20_6e4f1c_10x10.png +0 -0
  10. data/app/assets/images/jquery-ui/ui-bg_diagonal-maze_40_000000_10x10.png +0 -0
  11. data/app/assets/images/jquery-ui/ui-bg_diagonals-medium_20_d34d17_40x40.png +0 -0
  12. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
  13. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_25_c5ddfc_40x40.png +0 -0
  14. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_40_db4865_40x40.png +0 -0
  15. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_50_262626_40x40.png +0 -0
  16. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_50_93c3cd_40x40.png +0 -0
  17. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_50_ff3853_40x40.png +0 -0
  18. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_75_ccd232_40x40.png +0 -0
  19. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_15_0b3e6f_40x40.png +0 -0
  20. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
  21. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  22. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  23. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_20_e69700_40x40.png +0 -0
  24. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_22_1484e6_40x40.png +0 -0
  25. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_26_2293f7_40x40.png +0 -0
  26. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_75_f3d8d8_40x40.png +0 -0
  27. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_8_333333_40x40.png +0 -0
  28. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_90_eeeeee_40x40.png +0 -0
  29. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_95_ffdc2e_40x40.png +0 -0
  30. data/app/assets/images/jquery-ui/ui-bg_diamond_10_4f4221_10x8.png +0 -0
  31. data/app/assets/images/jquery-ui/ui-bg_diamond_20_372806_10x8.png +0 -0
  32. data/app/assets/images/jquery-ui/ui-bg_diamond_25_675423_10x8.png +0 -0
  33. data/app/assets/images/jquery-ui/ui-bg_diamond_25_d5ac5d_10x8.png +0 -0
  34. data/app/assets/images/jquery-ui/ui-bg_diamond_8_261803_10x8.png +0 -0
  35. data/app/assets/images/jquery-ui/ui-bg_diamond_8_443113_10x8.png +0 -0
  36. data/app/assets/images/jquery-ui/ui-bg_dots-medium_30_0b58a2_4x4.png +0 -0
  37. data/app/assets/images/jquery-ui/ui-bg_dots-medium_80_ffff38_4x4.png +0 -0
  38. data/app/assets/images/jquery-ui/ui-bg_dots-small_20_333333_2x2.png +0 -0
  39. data/app/assets/images/jquery-ui/ui-bg_dots-small_30_a32d00_2x2.png +0 -0
  40. data/app/assets/images/jquery-ui/ui-bg_dots-small_35_35414f_2x2.png +0 -0
  41. data/app/assets/images/jquery-ui/ui-bg_dots-small_40_00498f_2x2.png +0 -0
  42. data/app/assets/images/jquery-ui/ui-bg_dots-small_65_a6a6a6_2x2.png +0 -0
  43. data/app/assets/images/jquery-ui/ui-bg_fine-grain_10_eceadf_60x60.png +0 -0
  44. data/app/assets/images/jquery-ui/ui-bg_fine-grain_10_f8f7f6_60x60.png +0 -0
  45. data/app/assets/images/jquery-ui/ui-bg_fine-grain_15_eceadf_60x60.png +0 -0
  46. data/app/assets/images/jquery-ui/ui-bg_fine-grain_15_f7f3de_60x60.png +0 -0
  47. data/app/assets/images/jquery-ui/ui-bg_fine-grain_15_ffffff_60x60.png +0 -0
  48. data/app/assets/images/jquery-ui/ui-bg_fine-grain_65_654b24_60x60.png +0 -0
  49. data/app/assets/images/jquery-ui/ui-bg_fine-grain_68_b83400_60x60.png +0 -0
  50. data/app/assets/images/jquery-ui/ui-bg_flat_0_303030_40x100.png +0 -0
  51. data/app/assets/images/jquery-ui/ui-bg_flat_0_333333_40x100.png +0 -0
  52. data/app/assets/images/jquery-ui/ui-bg_flat_0_4c4c4c_40x100.png +0 -0
  53. data/app/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  54. data/app/assets/images/jquery-ui/ui-bg_flat_0_e69700_40x100.png +0 -0
  55. data/app/assets/images/jquery-ui/ui-bg_flat_0_e6b900_40x100.png +0 -0
  56. data/app/assets/images/jquery-ui/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  57. data/app/assets/images/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
  58. data/app/assets/images/jquery-ui/ui-bg_flat_15_cd0a0a_40x100.png +0 -0
  59. data/app/assets/images/jquery-ui/ui-bg_flat_30_cccccc_40x100.png +0 -0
  60. data/app/assets/images/jquery-ui/ui-bg_flat_40_292929_40x100.png +0 -0
  61. data/app/assets/images/jquery-ui/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
  62. data/app/assets/images/jquery-ui/ui-bg_flat_55_994d53_40x100.png +0 -0
  63. data/app/assets/images/jquery-ui/ui-bg_flat_55_999999_40x100.png +0 -0
  64. data/app/assets/images/jquery-ui/ui-bg_flat_55_c0402a_40x100.png +0 -0
  65. data/app/assets/images/jquery-ui/ui-bg_flat_55_eeeeee_40x100.png +0 -0
  66. data/app/assets/images/jquery-ui/ui-bg_flat_55_fafafa_40x100.png +0 -0
  67. data/app/assets/images/jquery-ui/ui-bg_flat_55_fbec88_40x100.png +0 -0
  68. data/app/assets/images/jquery-ui/ui-bg_flat_55_ffffff_40x100.png +0 -0
  69. data/app/assets/images/jquery-ui/ui-bg_flat_65_ffffff_40x100.png +0 -0
  70. data/app/assets/images/jquery-ui/ui-bg_flat_75_aaaaaa_40x100.png +0 -0
  71. data/app/assets/images/jquery-ui/ui-bg_flat_75_ba9217_40x100.png +0 -0
  72. data/app/assets/images/jquery-ui/ui-bg_flat_75_ddd4b0_40x100.png +0 -0
  73. data/app/assets/images/jquery-ui/ui-bg_flat_75_ffffff_40x100.png +0 -0
  74. data/app/assets/images/jquery-ui/ui-bg_glass_100_e4f1fb_1x400.png +0 -0
  75. data/app/assets/images/jquery-ui/ui-bg_glass_100_f5f0e5_1x400.png +0 -0
  76. data/app/assets/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  77. data/app/assets/images/jquery-ui/ui-bg_glass_100_f8f8f8_1x400.png +0 -0
  78. data/app/assets/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  79. data/app/assets/images/jquery-ui/ui-bg_glass_15_5f391b_1x400.png +0 -0
  80. data/app/assets/images/jquery-ui/ui-bg_glass_20_555555_1x400.png +0 -0
  81. data/app/assets/images/jquery-ui/ui-bg_glass_25_cb842e_1x400.png +0 -0
  82. data/app/assets/images/jquery-ui/ui-bg_glass_35_dddddd_1x400.png +0 -0
  83. data/app/assets/images/jquery-ui/ui-bg_glass_40_0078a3_1x400.png +0 -0
  84. data/app/assets/images/jquery-ui/ui-bg_glass_40_0a0a0a_1x400.png +0 -0
  85. data/app/assets/images/jquery-ui/ui-bg_glass_40_111111_1x400.png +0 -0
  86. data/app/assets/images/jquery-ui/ui-bg_glass_40_ffc73d_1x400.png +0 -0
  87. data/app/assets/images/jquery-ui/ui-bg_glass_45_0078ae_1x400.png +0 -0
  88. data/app/assets/images/jquery-ui/ui-bg_glass_50_3baae3_1x400.png +0 -0
  89. data/app/assets/images/jquery-ui/ui-bg_glass_55_1c1c1c_1x400.png +0 -0
  90. data/app/assets/images/jquery-ui/ui-bg_glass_55_f1fbe5_1x400.png +0 -0
  91. data/app/assets/images/jquery-ui/ui-bg_glass_55_f8da4e_1x400.png +0 -0
  92. data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
  93. data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf8ee_1x400.png +0 -0
  94. data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  95. data/app/assets/images/jquery-ui/ui-bg_glass_55_fcf0ba_1x400.png +0 -0
  96. data/app/assets/images/jquery-ui/ui-bg_glass_60_000000_1x400.png +0 -0
  97. data/app/assets/images/jquery-ui/ui-bg_glass_60_eeeeee_1x400.png +0 -0
  98. data/app/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
  99. data/app/assets/images/jquery-ui/ui-bg_glass_70_ede4d4_1x400.png +0 -0
  100. data/app/assets/images/jquery-ui/ui-bg_glass_75_79c9ec_1x400.png +0 -0
  101. data/app/assets/images/jquery-ui/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  102. data/app/assets/images/jquery-ui/ui-bg_glass_75_dadada_1x400.png +0 -0
  103. data/app/assets/images/jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  104. data/app/assets/images/jquery-ui/ui-bg_glass_80_d7ebf9_1x400.png +0 -0
  105. data/app/assets/images/jquery-ui/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  106. data/app/assets/images/jquery-ui/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  107. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_100_ece8da_500x100.png +0 -0
  108. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_16_121212_500x100.png +0 -0
  109. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_20_111111_500x100.png +0 -0
  110. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_20_1c160d_500x100.png +0 -0
  111. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_25_333333_500x100.png +0 -0
  112. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_25_453326_500x100.png +0 -0
  113. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_30_3d3644_500x100.png +0 -0
  114. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_30_44372c_500x100.png +0 -0
  115. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  116. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_45_817865_500x100.png +0 -0
  117. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_45_e14f1c_500x100.png +0 -0
  118. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_50_6eac2c_500x100.png +0 -0
  119. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_55_000000_500x100.png +0 -0
  120. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  121. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_60_fece2f_500x100.png +0 -0
  122. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_70_ffdd57_500x100.png +0 -0
  123. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_75_2191c0_500x100.png +0 -0
  124. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_85_9fda58_500x100.png +0 -0
  125. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_90_fff9e5_500x100.png +0 -0
  126. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_95_f6ecd5_500x100.png +0 -0
  127. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_eeeeee_1x100.png +0 -0
  128. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f2f5f7_1x100.png +0 -0
  129. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f4f0ec_1x100.png +0 -0
  130. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f5f3e5_1x100.png +0 -0
  131. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f6f6f6_1x100.png +0 -0
  132. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
  133. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_fafaf4_1x100.png +0 -0
  134. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_15_459e00_1x100.png +0 -0
  135. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_15_888888_1x100.png +0 -0
  136. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_20_0972a5_1x100.png +0 -0
  137. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_30_285c00_1x100.png +0 -0
  138. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_40_aaaaaa_1x100.png +0 -0
  139. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_55_555555_1x100.png +0 -0
  140. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_65_fee4bd_1x100.png +0 -0
  141. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_70_000000_1x100.png +0 -0
  142. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_75_f5f5b5_1x100.png +0 -0
  143. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_95_cccccc_1x100.png +0 -0
  144. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_dcd9de_1x100.png +0 -0
  145. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_deedf7_1x100.png +0 -0
  146. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_eae6ea_1x100.png +0 -0
  147. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  148. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
  149. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_f9f9f9_1x100.png +0 -0
  150. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_feeebd_1x100.png +0 -0
  151. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_15_cc0000_1x100.png +0 -0
  152. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_20_201913_1x100.png +0 -0
  153. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_20_619226_1x100.png +0 -0
  154. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
  155. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_30273a_1x100.png +0 -0
  156. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_67b021_1x100.png +0 -0
  157. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_ffef8f_1x100.png +0 -0
  158. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_33_003147_1x100.png +0 -0
  159. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_33_3a8104_1x100.png +0 -0
  160. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_35_222222_1x100.png +0 -0
  161. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_35_adadad_1x100.png +0 -0
  162. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_44_444444_1x100.png +0 -0
  163. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_45_5f5964_1x100.png +0 -0
  164. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_50_4eb305_1x100.png +0 -0
  165. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_50_aaaaaa_1x100.png +0 -0
  166. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
  167. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_60_4ca20b_1x100.png +0 -0
  168. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_60_dddddd_1x100.png +0 -0
  169. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  170. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  171. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_80_eeeeee_1x100.png +0 -0
  172. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_95_ffedad_1x100.png +0 -0
  173. data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_eeeeee_1x100.png +0 -0
  174. data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  175. data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  176. data/app/assets/images/jquery-ui/ui-bg_inset-hard_45_cd0a0a_1x100.png +0 -0
  177. data/app/assets/images/jquery-ui/ui-bg_inset-hard_55_ffeb80_1x100.png +0 -0
  178. data/app/assets/images/jquery-ui/ui-bg_inset-hard_75_999999_1x100.png +0 -0
  179. data/app/assets/images/jquery-ui/ui-bg_inset-soft_100_f4f0ec_1x100.png +0 -0
  180. data/app/assets/images/jquery-ui/ui-bg_inset-soft_10_201913_1x100.png +0 -0
  181. data/app/assets/images/jquery-ui/ui-bg_inset-soft_10_285c00_1x100.png +0 -0
  182. data/app/assets/images/jquery-ui/ui-bg_inset-soft_15_121212_1x100.png +0 -0
  183. data/app/assets/images/jquery-ui/ui-bg_inset-soft_15_2b2922_1x100.png +0 -0
  184. data/app/assets/images/jquery-ui/ui-bg_inset-soft_25_000000_1x100.png +0 -0
  185. data/app/assets/images/jquery-ui/ui-bg_inset-soft_30_f58400_1x100.png +0 -0
  186. data/app/assets/images/jquery-ui/ui-bg_inset-soft_30_ffffff_1x100.png +0 -0
  187. data/app/assets/images/jquery-ui/ui-bg_inset-soft_50_c9c9c9_1x100.png +0 -0
  188. data/app/assets/images/jquery-ui/ui-bg_loop_25_000000_21x21.png +0 -0
  189. data/app/assets/images/jquery-ui/ui-bg_white-lines_85_f7f7ba_40x100.png +0 -0
  190. data/app/assets/images/jquery-ui/ui-icons_000000_256x240.png +0 -0
  191. data/app/assets/images/jquery-ui/ui-icons_004276_256x240.png +0 -0
  192. data/app/assets/images/jquery-ui/ui-icons_00498f_256x240.png +0 -0
  193. data/app/assets/images/jquery-ui/ui-icons_0073ea_256x240.png +0 -0
  194. data/app/assets/images/jquery-ui/ui-icons_0078ae_256x240.png +0 -0
  195. data/app/assets/images/jquery-ui/ui-icons_056b93_256x240.png +0 -0
  196. data/app/assets/images/jquery-ui/ui-icons_070603_256x240.png +0 -0
  197. data/app/assets/images/jquery-ui/ui-icons_0a82eb_256x240.png +0 -0
  198. data/app/assets/images/jquery-ui/ui-icons_0b54d5_256x240.png +0 -0
  199. data/app/assets/images/jquery-ui/ui-icons_1f1f1f_256x240.png +0 -0
  200. data/app/assets/images/jquery-ui/ui-icons_217bc0_256x240.png +0 -0
  201. data/app/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
  202. data/app/assets/images/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
  203. data/app/assets/images/jquery-ui/ui-icons_2694e8_256x240.png +0 -0
  204. data/app/assets/images/jquery-ui/ui-icons_2e83ff_256x240.png +0 -0
  205. data/app/assets/images/jquery-ui/ui-icons_3383bb_256x240.png +0 -0
  206. data/app/assets/images/jquery-ui/ui-icons_3572ac_256x240.png +0 -0
  207. data/app/assets/images/jquery-ui/ui-icons_3d3d3d_256x240.png +0 -0
  208. data/app/assets/images/jquery-ui/ui-icons_3d80b3_256x240.png +0 -0
  209. data/app/assets/images/jquery-ui/ui-icons_454545_256x240.png +0 -0
  210. data/app/assets/images/jquery-ui/ui-icons_469bdd_256x240.png +0 -0
  211. data/app/assets/images/jquery-ui/ui-icons_4b8e0b_256x240.png +0 -0
  212. data/app/assets/images/jquery-ui/ui-icons_4ca300_256x240.png +0 -0
  213. data/app/assets/images/jquery-ui/ui-icons_4eb305_256x240.png +0 -0
  214. data/app/assets/images/jquery-ui/ui-icons_5fa5e3_256x240.png +0 -0
  215. data/app/assets/images/jquery-ui/ui-icons_666666_256x240.png +0 -0
  216. data/app/assets/images/jquery-ui/ui-icons_6da8d5_256x240.png +0 -0
  217. data/app/assets/images/jquery-ui/ui-icons_70b2e1_256x240.png +0 -0
  218. data/app/assets/images/jquery-ui/ui-icons_72a7cf_256x240.png +0 -0
  219. data/app/assets/images/jquery-ui/ui-icons_72b42d_256x240.png +0 -0
  220. data/app/assets/images/jquery-ui/ui-icons_734d99_256x240.png +0 -0
  221. data/app/assets/images/jquery-ui/ui-icons_808080_256x240.png +0 -0
  222. data/app/assets/images/jquery-ui/ui-icons_847e71_256x240.png +0 -0
  223. data/app/assets/images/jquery-ui/ui-icons_888888_256x240.png +0 -0
  224. data/app/assets/images/jquery-ui/ui-icons_88a206_256x240.png +0 -0
  225. data/app/assets/images/jquery-ui/ui-icons_8DC262_256x240.png +0 -0
  226. data/app/assets/images/jquery-ui/ui-icons_8c291d_256x240.png +0 -0
  227. data/app/assets/images/jquery-ui/ui-icons_8d78a5_256x240.png +0 -0
  228. data/app/assets/images/jquery-ui/ui-icons_98d2fb_256x240.png +0 -0
  229. data/app/assets/images/jquery-ui/ui-icons_999999_256x240.png +0 -0
  230. data/app/assets/images/jquery-ui/ui-icons_9bcc60_256x240.png +0 -0
  231. data/app/assets/images/jquery-ui/ui-icons_9ccdfc_256x240.png +0 -0
  232. data/app/assets/images/jquery-ui/ui-icons_9fda58_256x240.png +0 -0
  233. data/app/assets/images/jquery-ui/ui-icons_a83300_256x240.png +0 -0
  234. data/app/assets/images/jquery-ui/ui-icons_a8a3ae_256x240.png +0 -0
  235. data/app/assets/images/jquery-ui/ui-icons_aaaaaa_256x240.png +0 -0
  236. data/app/assets/images/jquery-ui/ui-icons_add978_256x240.png +0 -0
  237. data/app/assets/images/jquery-ui/ui-icons_b83400_256x240.png +0 -0
  238. data/app/assets/images/jquery-ui/ui-icons_b8ec79_256x240.png +0 -0
  239. data/app/assets/images/jquery-ui/ui-icons_bbbbbb_256x240.png +0 -0
  240. data/app/assets/images/jquery-ui/ui-icons_bd7b00_256x240.png +0 -0
  241. data/app/assets/images/jquery-ui/ui-icons_c02669_256x240.png +0 -0
  242. data/app/assets/images/jquery-ui/ui-icons_c47a23_256x240.png +0 -0
  243. data/app/assets/images/jquery-ui/ui-icons_c98000_256x240.png +0 -0
  244. data/app/assets/images/jquery-ui/ui-icons_cb672b_256x240.png +0 -0
  245. data/app/assets/images/jquery-ui/ui-icons_cc0000_256x240.png +0 -0
  246. data/app/assets/images/jquery-ui/ui-icons_cccccc_256x240.png +0 -0
  247. data/app/assets/images/jquery-ui/ui-icons_cd0a0a_256x240.png +0 -0
  248. data/app/assets/images/jquery-ui/ui-icons_d19405_256x240.png +0 -0
  249. data/app/assets/images/jquery-ui/ui-icons_d8e7f3_256x240.png +0 -0
  250. data/app/assets/images/jquery-ui/ui-icons_e0fdff_256x240.png +0 -0
  251. data/app/assets/images/jquery-ui/ui-icons_e1e463_256x240.png +0 -0
  252. data/app/assets/images/jquery-ui/ui-icons_e3ddc9_256x240.png +0 -0
  253. data/app/assets/images/jquery-ui/ui-icons_e8e2b5_256x240.png +0 -0
  254. data/app/assets/images/jquery-ui/ui-icons_e9cd86_256x240.png +0 -0
  255. data/app/assets/images/jquery-ui/ui-icons_eb990f_256x240.png +0 -0
  256. data/app/assets/images/jquery-ui/ui-icons_ebccce_256x240.png +0 -0
  257. data/app/assets/images/jquery-ui/ui-icons_ed9f26_256x240.png +0 -0
  258. data/app/assets/images/jquery-ui/ui-icons_ededed_256x240.png +0 -0
  259. data/app/assets/images/jquery-ui/ui-icons_eeeeee_256x240.png +0 -0
  260. data/app/assets/images/jquery-ui/ui-icons_ef8c08_256x240.png +0 -0
  261. data/app/assets/images/jquery-ui/ui-icons_efec9f_256x240.png +0 -0
  262. data/app/assets/images/jquery-ui/ui-icons_f08000_256x240.png +0 -0
  263. data/app/assets/images/jquery-ui/ui-icons_f1fd86_256x240.png +0 -0
  264. data/app/assets/images/jquery-ui/ui-icons_f29a00_256x240.png +0 -0
  265. data/app/assets/images/jquery-ui/ui-icons_f2ec64_256x240.png +0 -0
  266. data/app/assets/images/jquery-ui/ui-icons_f35f07_256x240.png +0 -0
  267. data/app/assets/images/jquery-ui/ui-icons_f5e175_256x240.png +0 -0
  268. data/app/assets/images/jquery-ui/ui-icons_f7a50d_256x240.png +0 -0
  269. data/app/assets/images/jquery-ui/ui-icons_f9bd01_256x240.png +0 -0
  270. data/app/assets/images/jquery-ui/ui-icons_f9f2bd_256x240.png +0 -0
  271. data/app/assets/images/jquery-ui/ui-icons_fadc7a_256x240.png +0 -0
  272. data/app/assets/images/jquery-ui/ui-icons_fbc856_256x240.png +0 -0
  273. data/app/assets/images/jquery-ui/ui-icons_fbdb93_256x240.png +0 -0
  274. data/app/assets/images/jquery-ui/ui-icons_fcd113_256x240.png +0 -0
  275. data/app/assets/images/jquery-ui/ui-icons_fcdd4a_256x240.png +0 -0
  276. data/app/assets/images/jquery-ui/ui-icons_ff0084_256x240.png +0 -0
  277. data/app/assets/images/jquery-ui/ui-icons_ff7519_256x240.png +0 -0
  278. data/app/assets/images/jquery-ui/ui-icons_ffcf29_256x240.png +0 -0
  279. data/app/assets/images/jquery-ui/ui-icons_ffd27a_256x240.png +0 -0
  280. data/app/assets/images/jquery-ui/ui-icons_ffe180_256x240.png +0 -0
  281. data/app/assets/images/jquery-ui/ui-icons_ffeb33_256x240.png +0 -0
  282. data/app/assets/images/jquery-ui/ui-icons_ffffff_256x240.png +0 -0
  283. data/app/assets/javascripts/inline_forms/inline_forms.js +14 -0
  284. data/app/assets/stylesheets/inline_forms/_foundation_icons.scss +596 -0
  285. data/app/assets/stylesheets/inline_forms/devise.scss +34 -3
  286. data/app/assets/stylesheets/inline_forms/foundation_and_overrides.scss +62 -4
  287. data/app/assets/stylesheets/inline_forms/inline_forms.scss +198 -46
  288. data/app/assets/stylesheets/jquery_ui/jquery.ui.accordion.css.scss +39 -0
  289. data/app/assets/stylesheets/jquery_ui/jquery.ui.all.css.scss +14 -0
  290. data/app/assets/stylesheets/jquery_ui/jquery.ui.autocomplete.css.scss +17 -0
  291. data/app/assets/stylesheets/jquery_ui/jquery.ui.base.css.scss +27 -0
  292. data/app/assets/stylesheets/jquery_ui/jquery.ui.button.css.scss +115 -0
  293. data/app/assets/stylesheets/jquery_ui/jquery.ui.core.css.scss +92 -0
  294. data/app/assets/stylesheets/jquery_ui/jquery.ui.datepicker.css.scss +179 -0
  295. data/app/assets/stylesheets/jquery_ui/jquery.ui.dialog.css.scss +70 -0
  296. data/app/assets/stylesheets/jquery_ui/jquery.ui.menu.css.scss +80 -0
  297. data/app/assets/stylesheets/jquery_ui/jquery.ui.progressbar.css.scss +29 -0
  298. data/app/assets/stylesheets/jquery_ui/jquery.ui.resizable.css.scss +79 -0
  299. data/app/assets/stylesheets/jquery_ui/jquery.ui.selectable.css.scss +16 -0
  300. data/app/assets/stylesheets/jquery_ui/jquery.ui.slider.css.scss +74 -0
  301. data/app/assets/stylesheets/jquery_ui/jquery.ui.spinner.css.scss +66 -0
  302. data/app/assets/stylesheets/jquery_ui/jquery.ui.tabs.css.scss +53 -0
  303. data/app/assets/stylesheets/jquery_ui/jquery.ui.theme.css.scss +408 -0
  304. data/app/assets/stylesheets/jquery_ui/jquery.ui.tooltip.css.scss +20 -0
  305. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.base.css.scss +78 -0
  306. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.black-tie.css.scss +80 -0
  307. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.blitzer.css.scss +80 -0
  308. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.cupertino.css.scss +80 -0
  309. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.dark-hive.css.scss +80 -0
  310. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.dot-luv.css.scss +80 -0
  311. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.eggplant.css.scss +80 -0
  312. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.excite-bike.css.scss +80 -0
  313. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.flick.css.scss +80 -0
  314. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.hot-sneaks.css.scss +80 -0
  315. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.humanity.css.scss +80 -0
  316. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.le-frog.css.scss +80 -0
  317. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.mint-choc.css.scss +80 -0
  318. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.overcast.css.scss +80 -0
  319. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.pepper-grinder.css.scss +80 -0
  320. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.redmond.css.scss +80 -0
  321. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.smoothness.css.scss +80 -0
  322. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.south-street.css.scss +80 -0
  323. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.start.css.scss +80 -0
  324. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.sunny.css.scss +80 -0
  325. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.swanky-purse.css.scss +80 -0
  326. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.trontastic.css.scss +80 -0
  327. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.ui-darkness.css.scss +80 -0
  328. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.ui-lightness.css.scss +80 -0
  329. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.vader.css.scss +80 -0
  330. data/app/controllers/inline_forms_controller.rb +29 -1
  331. data/app/views/devise/passwords/_top-bar-and-flash.html.erb +8 -9
  332. data/app/views/devise/passwords/edit.html.erb +1 -1
  333. data/app/views/devise/passwords/new.html.erb +1 -1
  334. data/app/views/devise/sessions/_top-bar.html.erb +8 -9
  335. data/app/views/devise/sessions/new.html.erb +1 -1
  336. data/app/views/inline_forms/_header.html.erb +18 -25
  337. data/app/views/inline_forms/_list.html.erb +64 -4
  338. data/app/views/inline_forms/_versions_list.html.erb +83 -74
  339. data/app/views/layouts/application.html.erb +10 -1
  340. data/app/views/layouts/inline_forms.html.erb +11 -1
  341. data/bin/inline_forms_app_template.rb +3 -1
  342. data/bin/inline_forms_installer_core.rb +137 -6
  343. data/inline_forms.gemspec +22 -11
  344. data/lib/generators/assets/stylesheets/inline_forms.scss +217 -78
  345. data/lib/generators/templates/_inline_forms_tabs.html.erb +38 -39
  346. data/lib/inline_forms/version.rb +1 -1
  347. data/lib/inline_forms.rb +10 -0
  348. data/lib/installer_templates/dartsass/devise_main.scss +2 -0
  349. data/lib/installer_templates/dartsass/inline_forms_dartsass_builds.rb +14 -0
  350. data/lib/installer_templates/dartsass/inline_forms_main.scss +2 -0
  351. data/lib/installer_templates/example_app_tests/test/integration/example_app_apartment_photos_pagination_test.rb +228 -0
  352. data/lib/installer_templates/example_app_tests/test/integration/example_app_turbo_layout_test.rb +28 -0
  353. metadata +363 -14
@@ -41,7 +41,20 @@
41
41
  <% end %>
42
42
  <% end %>
43
43
 
44
- <%= raw "<div class=\"list_container\" id=\"#{update_span}\">" if ul_needed -%>
44
+ <%#
45
+ Container element. For the nested has_many case (parent_class set) we
46
+ emit a `<turbo-frame>` so pagination clicks (and any future in-frame
47
+ re-render of this list) swap only the matching frame instead of doing
48
+ a full-page navigation. Top-level lists (parent_class.nil?) keep the
49
+ classic <div> + full-page pagination they already had.
50
+ -%>
51
+ <% if ul_needed -%>
52
+ <% if parent_class.nil? -%>
53
+ <%= raw "<div class=\"list_container\" id=\"#{update_span}\">" -%>
54
+ <% else -%>
55
+ <%= raw "<turbo-frame id=\"#{update_span}\" class=\"list_container\">" -%>
56
+ <% end -%>
57
+ <% end -%>
45
58
 
46
59
  <!-- # list of objects -->
47
60
  <% for object in objects %>
@@ -52,7 +65,30 @@
52
65
  <% css_class_id = parent_class.to_s.underscore + '_' + parent_id.to_s + '_' + attribute.to_s.singularize.underscore + "_" + object.id.to_s -%>
53
66
  <% path_to_object = attribute.to_s.singularize.underscore + "_path" %>
54
67
  <% end %>
55
- <div class="row <%= cycle('odd', 'even') %><%= " top-level" if parent_class.nil? %>" id="<%= css_class_id -%>">
68
+ <%#
69
+ For NESTED rows (parent_class present) the surrounding
70
+ <turbo-frame> would otherwise intercept the UJS-driven inline-edit
71
+ links/forms swapped in by show.js.erb / edit.js.erb / new.js.erb
72
+ -- those all do `$('#<row_id>').html(...)`, so the swapped content
73
+ stays a descendant of this row. Turbo would submit the multipart
74
+ `<form>` from _edit.html.erb with `Accept: text/html`, which
75
+ inline_forms_controller's update / create / destroy only respond
76
+ to via format.js, raising `ActionController::UnknownFormat` (HTTP
77
+ 406) AFTER the DB write already happened. `data-turbo="false"`
78
+ here keeps UJS handling those, unchanged.
79
+
80
+ For TOP-LEVEL rows (parent_class.nil?) there is no surrounding
81
+ frame, so the attribute would be a no-op for the row's own click
82
+ -- BUT after UJS swaps in the inline edit (which itself contains
83
+ the nested-photos `<turbo-frame>`), Turbo's `elementIsNavigatable`
84
+ walks up from any link inside that inner frame looking for the
85
+ closest `[data-turbo]` ancestor; it does NOT stop at the
86
+ intervening `<turbo-frame>`. A `data-turbo="false"` on the
87
+ top-level row therefore poisons every descendant including the
88
+ pagination links inside the inner photos frame, breaking
89
+ in-frame navigation. So we only emit it on nested rows.
90
+ -%>
91
+ <div class="row <%= cycle('odd', 'even') %><%= " top-level" if parent_class.nil? %>" id="<%= css_class_id -%>"<%= raw ' data-turbo="false"' unless parent_class.nil? %>>
56
92
  <% if cancan_disabled? || ( can? :soft_delete, object ) %>
57
93
  <div class="small-1 column">
58
94
  <%= link_to_soft_delete(object, css_class_id) -%>
@@ -77,7 +113,25 @@
77
113
  <% pagination = will_paginate objects -%>
78
114
  <% else %>
79
115
  <% if pagination %>
80
- <% pagination = will_paginate objects, :remote => true, :params => {:controller => attribute, :action => :index, :id => nil, :parent_class => parent_class, :parent_id => parent_id, :update => "#{parent_class.to_s.underscore}_#{parent_id}_#{attribute}", :ul_needed => true } %>
116
+ <%#
117
+ Nested pagination is now driven by the surrounding <turbo-frame>:
118
+ the link's same-URL GET returns a fresh frame and Turbo swaps
119
+ just that region. No more remote: true + list.js.erb on the
120
+ pagination path.
121
+
122
+ The `update:` param must match the frame's id (`<update_span>`,
123
+ which is `…_list`). The legacy UJS pagination passed the OUTER
124
+ wrapper's id (`…` without `_list`) because list.js.erb did
125
+ `$('#<outer>').html(<rendered _list partial>)` and needed the
126
+ outer container, not the inner one. Turbo Frames swaps the
127
+ element with the matching id, so the param now carries the
128
+ frame id itself; otherwise the response (`<turbo-frame
129
+ id="…_list">`) and the request expectation (`Turbo-Frame:
130
+ <update_span>` derived from the URL `update=…` param) would
131
+ disagree and Turbo would log "the response did not contain the
132
+ expected <turbo-frame>" and ignore the page.
133
+ -%>
134
+ <% pagination = will_paginate objects, :params => {:controller => attribute, :action => :index, :id => nil, :parent_class => parent_class, :parent_id => parent_id, :update => "#{parent_class.to_s.underscore}_#{parent_id}_#{attribute}_list", :ul_needed => true } %>
81
135
  <% end %>
82
136
  <% end %>
83
137
  <% if pagination %>
@@ -87,4 +141,10 @@
87
141
  </div>
88
142
  </div>
89
143
  <% end %>
90
- <%= raw "</div>" if ul_needed -%>
144
+ <% if ul_needed -%>
145
+ <% if parent_class.nil? -%>
146
+ <%= raw "</div>" -%>
147
+ <% else -%>
148
+ <%= raw "</turbo-frame>" -%>
149
+ <% end -%>
150
+ <% end -%>
@@ -13,82 +13,91 @@
13
13
  %>
14
14
  </div>
15
15
  </div>
16
+ <%#
17
+ Header / per-entry rows: every entry was previously wrapped in a single
18
+ `<div class='small-12 column'>` whose direct children were `.small-N
19
+ column` divs. F5's float-based grid floated them side-by-side because
20
+ every `.column` was `float: left`; F6's flex grid only makes the direct
21
+ children of `.row` flex items, so once those `.small-N column` divs sit
22
+ inside a plain `.column` (not a `.row`) they collapse to stacked blocks
23
+ -- which is why opening Versions on F6 rendered Event/Done by/Changeset
24
+ vertically and the per-entry restore/timestamp/changeset cells one per
25
+ line. Each entry is now its own `<div class="row">` whose direct
26
+ children ARE the cell columns, so F6's flex grid lays them out
27
+ horizontally and the partial keeps F5's visual layout.
28
+ -%>
16
29
  <div class="row <%= cycle('odd', 'even') %>">
17
- <div class='small-12 column'>
18
- <div class="small-1 column">
19
- &nbsp;
20
- </div>
21
- <div class="small-1 column">
22
- <strong>Event</strong>
23
- </div>
24
- <div class="small-2 column">
25
- <strong>Done by</strong>
26
- </div>
27
- <div class="small-8 column">
28
- <strong>Changeset</strong>
29
- </div>
30
+ <div class="small-1 column">
31
+ &nbsp;
32
+ </div>
33
+ <div class="small-1 column">
34
+ <strong>Event</strong>
35
+ </div>
36
+ <div class="small-2 column">
37
+ <strong>Done by</strong>
38
+ </div>
39
+ <div class="small-8 column">
40
+ <strong>Changeset</strong>
30
41
  </div>
31
42
  </div>
32
- <div class="row <%= cycle('odd', 'even') %>">
33
- <% entries.reverse.each do |entry| %>
34
- <% version = entry[:version] -%>
35
- <% rich_text_name = entry[:rich_text_name] -%>
36
- <div class='small-12 column'>
37
- <div class="small-1 column">
38
- <% if entry[:kind] == :primary %>
39
- <%= link_to t('inline_forms.view.restore'),
40
- send('revert_' + @object.class.to_s.underscore + "_path",
41
- version,
42
- :update => "#{@object.class.name.underscore}_#{@object.id}"
43
- ),
44
- :remote => true,
45
- :method => :post
46
- %>
47
- <% else %>
48
- &nbsp;
49
- <% end %>
50
- </div>
51
- <div class="small-1 column">
52
- <%= version.event -%><% if entry[:kind] == :rich_text %> <em>(rich text)</em><% end %>
53
- </div>
54
- <div class="small-2 column">
55
- <%= version.created_at -%>
56
- </div>
57
- <div class="small-2 column">
58
- <%= version_modified_by version.whodunnit -%>
59
- </div>
60
- <div class="small-6 column">
61
- <% if version.changeset.nil? || version.changeset.empty? %>
62
- <em>empty</em>
63
- <% else %>
64
- <% version.changeset.each do |attribute, value| %>
65
- <% next if attribute == 'updated_at' %>
66
- <% next if entry[:kind] == :rich_text && attribute == 'record_id' %>
67
- <% next if entry[:kind] == :rich_text && attribute == 'record_type' %>
68
- <% next if entry[:kind] == :rich_text && attribute == 'name' %>
69
- <% display_attribute = entry[:kind] == :rich_text && attribute == 'body' ? rich_text_name : attribute -%>
70
- <table>
71
- <tr>
72
- <th colspan="2" class="text-center"><%= display_attribute %></th>
73
- <th></th>
74
- </tr>
75
- <tr>
76
- <td>old value</td>
77
- <td>new value</td>
78
- </tr>
79
- <tr>
80
- <% if entry[:kind] == :rich_text && attribute == 'body' %>
81
- <td><%= raw value[0] %></td>
82
- <td><%= raw value[1] %></td>
83
- <% else %>
84
- <td><%= value[0] %></td>
85
- <td><%= value[1] %></td>
86
- <% end %>
87
- </tr>
88
- </table>
89
- <% end %>
43
+ <% entries.reverse.each do |entry| %>
44
+ <% version = entry[:version] -%>
45
+ <% rich_text_name = entry[:rich_text_name] -%>
46
+ <div class="row <%= cycle('odd', 'even') %>">
47
+ <div class="small-1 column">
48
+ <% if entry[:kind] == :primary %>
49
+ <%= link_to t('inline_forms.view.restore'),
50
+ send('revert_' + @object.class.to_s.underscore + "_path",
51
+ version,
52
+ :update => "#{@object.class.name.underscore}_#{@object.id}"
53
+ ),
54
+ :remote => true,
55
+ :method => :post
56
+ %>
57
+ <% else %>
58
+ &nbsp;
59
+ <% end %>
60
+ </div>
61
+ <div class="small-1 column">
62
+ <%= version.event -%><% if entry[:kind] == :rich_text %> <em>(rich text)</em><% end %>
63
+ </div>
64
+ <div class="small-2 column">
65
+ <%= version.created_at -%>
66
+ </div>
67
+ <div class="small-2 column">
68
+ <%= version_modified_by version.whodunnit -%>
69
+ </div>
70
+ <div class="small-6 column">
71
+ <% if version.changeset.nil? || version.changeset.empty? %>
72
+ <em>empty</em>
73
+ <% else %>
74
+ <% version.changeset.each do |attribute, value| %>
75
+ <% next if attribute == 'updated_at' %>
76
+ <% next if entry[:kind] == :rich_text && attribute == 'record_id' %>
77
+ <% next if entry[:kind] == :rich_text && attribute == 'record_type' %>
78
+ <% next if entry[:kind] == :rich_text && attribute == 'name' %>
79
+ <% display_attribute = entry[:kind] == :rich_text && attribute == 'body' ? rich_text_name : attribute -%>
80
+ <table>
81
+ <tr>
82
+ <th colspan="2" class="text-center"><%= display_attribute %></th>
83
+ <th></th>
84
+ </tr>
85
+ <tr>
86
+ <td>old value</td>
87
+ <td>new value</td>
88
+ </tr>
89
+ <tr>
90
+ <% if entry[:kind] == :rich_text && attribute == 'body' %>
91
+ <td><%= raw value[0] %></td>
92
+ <td><%= raw value[1] %></td>
93
+ <% else %>
94
+ <td><%= value[0] %></td>
95
+ <td><%= value[1] %></td>
96
+ <% end %>
97
+ </tr>
98
+ </table>
90
99
  <% end %>
91
- </div>
100
+ <% end %>
92
101
  </div>
93
- <% end %>
94
- </div>
102
+ </div>
103
+ <% end %>
@@ -13,7 +13,16 @@
13
13
 
14
14
  <body>
15
15
  <%= yield %>
16
- <%= javascript_include_tag "application", 'data-turbolinks-track' => true %>
16
+ <%= javascript_include_tag "application" %>
17
+ <%# Turbo (Hotwire) is loaded as an ES module so it does not collide with %>
18
+ <%# the classic-script Sprockets bundle above. Drive is disabled here so %>
19
+ <%# existing UJS-driven links/forms keep working unchanged; `<turbo-frame>` %>
20
+ <%# and `format.turbo_stream` remain available for per-view conversions. %>
21
+ <script type="module">
22
+ import { Turbo } from "<%= asset_path('turbo.min.js') %>"
23
+ Turbo.session.drive = false
24
+ window.Turbo = Turbo
25
+ </script>
17
26
  <%= javascript_include_tag "https://unpkg.com/trix@1.3.1/dist/trix.js" %>
18
27
  <%= javascript_include_tag Ckeditor.cdn_url if defined?(Ckeditor) %>
19
28
  </body>
@@ -16,7 +16,17 @@
16
16
  <div id="outer_container">
17
17
  <%= yield %>
18
18
  </div>
19
- <%= javascript_include_tag 'inline_forms/inline_forms', 'data-turbolinks-track' => true %>
19
+ <%= javascript_include_tag 'inline_forms/inline_forms' %>
20
+ <%# Turbo (Hotwire) is loaded as an ES module so it does not collide with %>
21
+ <%# the classic-script Sprockets bundle above (jquery_ujs etc.). Drive is %>
22
+ <%# disabled here so existing UJS-driven links/forms keep working unchanged; %>
23
+ <%# `<turbo-frame>` and `format.turbo_stream` are still available for the %>
24
+ <%# per-view conversions that follow this slice. %>
25
+ <script type="module">
26
+ import { Turbo } from "<%= asset_path('turbo.min.js') %>"
27
+ Turbo.session.drive = false
28
+ window.Turbo = Turbo
29
+ </script>
20
30
  <%= javascript_include_tag "https://unpkg.com/trix@1.3.1/dist/trix.js" %>
21
31
  <%= javascript_include_tag Ckeditor.cdn_url if defined?(Ckeditor) %>
22
32
  </body>
@@ -2,7 +2,9 @@ require 'rvm'
2
2
 
3
3
  if RVM.current && ENV['skiprvm'] !='true'
4
4
  rvm_version = "#{ENV['ruby_version']}@#{app_name}"
5
- RVM.chdir "../#{app_name}" do
5
+ # Rails' `app_name` is underscored (e.g. my_app) while the directory may be
6
+ # camel-cased (MyApp); `../#{app_name}` breaks on case-sensitive filesystems.
7
+ RVM.chdir(File.expand_path(".")) do
6
8
  say "Working directory is #{`pwd`}"
7
9
  RVM.use_from_path! '.' # TODO ROYTJE FIX THIS BELOW
8
10
  # Warning! PATH is not properly set up, '/home/vagrant/.rvm/gems/ruby-2.0.0-p247@MyApp/bin' is not available,
@@ -11,13 +11,24 @@ gem 'cancancan'
11
11
  gem 'carrierwave', '~> 3.1'
12
12
  gem 'devise-i18n', :git => 'https://github.com/acesuares/devise-i18n.git'
13
13
  gem 'devise'
14
- gem 'foundation-icons-sass-rails'
15
- gem 'foundation-rails', '~> 5.5'
14
+ gem 'autoprefixer-rails'
15
+ # foundation-rails 6.7+ uses Dart Sass (`sass:math`); sass-rails/sassc removed.
16
+ # Visually tuned against foundation-rails ~> 6.6.2; current pin ~> 6.9 (6.9.0.x).
17
+ gem 'foundation-rails', '~> 6.9'
16
18
  gem 'i18n-active_record', :git => 'https://github.com/acesuares/i18n-active_record.git'
17
- gem 'inline_forms', path: "#{File.expand_path(GENERATOR_PATH)}"
19
+ generator_repo = File.expand_path(GENERATOR_PATH)
20
+ # Always use the generator source path (repo checkout OR installed gem dir).
21
+ # This guarantees the generated app uses the exact inline_forms code that
22
+ # launched `inline_forms create`, including unreleased local builds.
23
+ gem 'inline_forms', path: generator_repo
18
24
  gem 'jquery-rails'
19
25
  gem 'jquery-timepicker-rails'
20
- gem 'jquery-ui-sass-rails'
26
+ # jQuery UI JavaScript (`//= require jquery.ui.all` in inline_forms.js). SCSS + PNGs
27
+ # are vendored in the inline_forms engine (Dart Sass cannot evaluate sass-rails
28
+ # `image-path()`). Pin matches former jquery-ui-sass-rails 4.0.3.x stack.
29
+ gem 'jquery-ui-rails', '4.0.3'
30
+ # Foundation Icons SCSS + fonts are vendored in the inline_forms engine (Dart Sass;
31
+ # foundation-icons-sass-rails depended on sass-rails).
21
32
  gem 'mini_magick'
22
33
  gem 'mysql2'
23
34
  gem 'paper_trail', '~> 16.0'
@@ -27,13 +38,18 @@ gem 'rails', '~> 7.0.0'
27
38
  gem 'rake'
28
39
  gem 'remotipart', '~> 1.0'
29
40
  gem 'rvm'
30
- gem 'sass-rails'
41
+ gem 'dartsass-rails'
31
42
  # Rails 7 no longer adds sprockets-rails to the default Gemfile; declare it
32
43
  # explicitly because the gem's own assets (foundation, jquery, etc.) live in
33
44
  # app/assets and rely on the Sprockets pipeline.
34
45
  gem 'sprockets-rails'
35
46
  # Rails 7 default JavaScript tooling: importmap-rails replaces Webpacker.
36
47
  gem 'importmap-rails'
48
+ # Hotwire/Turbo. Loaded into the Sprockets bundle by inline_forms.js with
49
+ # Turbo Drive disabled by default so existing UJS-driven links/forms keep
50
+ # working; turbo-rails also registers the `turbo_stream` Mime type and view
51
+ # format so future controllers can opt in to Turbo Stream responses.
52
+ gem 'turbo-rails'
37
53
  gem 'tabs_on_rails', :git => 'https://github.com/acesuares/tabs_on_rails.git', :branch => 'update_remote_before_action'
38
54
  gem 'unicorn'
39
55
  gem 'validation_hints'
@@ -55,7 +71,6 @@ gem_group :development do
55
71
  gem 'seed_dump', '~> 0.5.3'
56
72
  # Rails 6.1 ActiveRecord's sqlite3 adapter requires sqlite3 ~> 1.4; 2.x activates first and breaks.
57
73
  gem 'sqlite3', '~> 1.4'
58
- gem 'switch_user'
59
74
  gem 'thin'
60
75
  gem 'yaml_db'
61
76
  end
@@ -69,6 +84,27 @@ say "- Running bundle..."
69
84
  run "gem install bundler"
70
85
  run "bundle install"
71
86
 
87
+ say "- Dart Sass: inline_forms stylesheet entrypoints + initializer..."
88
+ copy_file File.join(GENERATOR_PATH, "lib/installer_templates/dartsass/inline_forms_dartsass_builds.rb"),
89
+ "config/initializers/inline_forms_dartsass_builds.rb"
90
+ copy_file File.join(GENERATOR_PATH, "lib/installer_templates/dartsass/inline_forms_main.scss"),
91
+ "app/assets/stylesheets/inline_forms_install/inline_forms_main.scss"
92
+ copy_file File.join(GENERATOR_PATH, "lib/installer_templates/dartsass/devise_main.scss"),
93
+ "app/assets/stylesheets/inline_forms_install/devise_main.scss"
94
+
95
+ say "- Dart Sass: rails dartsass:install (builds/, manifest, Procfile.dev)..."
96
+ run "bundle exec rails dartsass:install"
97
+
98
+ say "- Dart Sass: drop default application.css (manifest links builds/*.css only)..."
99
+ remove_file "app/assets/stylesheets/application.css"
100
+
101
+ insert_into_file "test/test_helper.rb", <<~'DARTSASS_TEST', after: %(require "rails/test_help"\n)
102
+
103
+ # Dart Sass writes CSS to app/assets/builds; Sprockets does not compile .scss.
104
+ Rails.application.load_tasks
105
+ Rake::Task["dartsass:build"].invoke
106
+ DARTSASS_TEST
107
+
72
108
  say "- Database setup: creating config/database.yml with development database #{ENV['database']}"
73
109
  remove_file "config/database.yml" # the one that 'rails new' created
74
110
  if ENV['using_sqlite'] == 'true'
@@ -336,6 +372,9 @@ say "- Installaing ZURB Foundation..."
336
372
  say "- Copy inline_forms_devise file for custom styles..."
337
373
  copy_file File.join(GENERATOR_PATH, 'lib/generators/assets/stylesheets/inline_forms_devise.css'), 'app/assets/stylesheets/inline_forms_devise.css'
338
374
 
375
+ say "- Sprockets: link inline_forms_devise.css (logical path; dartsass:install drops link_directory ../stylesheets)..."
376
+ append_to_file "app/assets/config/manifest.js", "//= link inline_forms_devise.css\n"
377
+
339
378
  say "- Add human_attribute_name in app/models/application_record.rb"
340
379
  remove_file 'app/models/application_record.rb' # the one that 'rails new' created
341
380
  copy_file File.join(GENERATOR_PATH, 'lib/generators/templates/application_record.rb'), "app/models/application_record.rb"
@@ -621,8 +660,100 @@ if ENV['install_example'] == 'true'
621
660
  run 'bundle exec rails g inline_forms Photo name:string caption:string image:image_field description:rich_text apartment:belongs_to _presentation:\'#{name}\''
622
661
  run 'bundle exec rails generate uploader Image'
623
662
  run 'bundle exec rails g inline_forms Apartment name:string title:string description:rich_text photos:has_many photos:associated _enabled:yes _presentation:\'#{name}\''
663
+
664
+ say "- Lower Photo.per_page so the seeded gallery paginates..."
665
+ # The model template (lib/generators/templates/model.erb) emits
666
+ # attr_reader :per_page
667
+ # @per_page = 7
668
+ # which is a long-standing typo: `attr_reader :per_page` defines an
669
+ # *instance* method, then `@per_page = 7` (executed in the class body)
670
+ # actively *clobbers* the class-level per_page that will_paginate
671
+ # exposes via `class_attribute :per_page` (its singleton-ivar storage
672
+ # also lives on `@per_page`). Net effect: nothing reads 7 anywhere,
673
+ # and the class-level per_page silently reverts to will_paginate's
674
+ # 30-default. Replace the pair on Photo with a real `self.per_page = 5`
675
+ # so the seeded gallery (12 photos) actually paginates 5/5/2.
676
+ gsub_file "app/models/photo.rb",
677
+ /^\s*attr_reader\s+:per_page\s*\n\s*@per_page\s*=\s*\d+\s*\n/,
678
+ " self.per_page = 5\n"
679
+
624
680
  run 'bundle exec rake db:migrate'
625
681
 
682
+ # Seed the photos gallery from a local `pics/` folder. The folder is
683
+ # *gitignored* in the gem source (so the built .gem stays small and
684
+ # the gallery images are not committed) which means GENERATOR_PATH/pics
685
+ # exists only when the installer is run from the source repo, not when
686
+ # it is run from an installed gem on the developer's box. We therefore
687
+ # check, in order:
688
+ # 1. ENV['INLINE_FORMS_SEED_PICS'] -- explicit override path
689
+ # 2. GENERATOR_PATH/pics -- gem source repo checkout
690
+ # 3. /home/code/inline_forms/pics -- local dev convention
691
+ # and copy whichever is found into the generated app's db/seed_images/.
692
+ # The migration generated below is what reads from db/seed_images at
693
+ # `db:migrate` / `db:test:prepare` time, so this copy is only ever a
694
+ # one-shot at app generation.
695
+ pics_candidates = [
696
+ ENV["INLINE_FORMS_SEED_PICS"],
697
+ File.join(GENERATOR_PATH, "pics"),
698
+ "/home/code/inline_forms/pics",
699
+ ].compact
700
+ pics_src = pics_candidates.find { |p| Dir.exist?(p) }
701
+ if pics_src
702
+ seed_pics = Dir.glob(File.join(pics_src, "*.{jpg,jpeg,JPG,JPEG,png,PNG,gif,GIF}")).sort
703
+ if seed_pics.any?
704
+ say "- Copying #{seed_pics.size} sample photo(s) into db/seed_images/..."
705
+ empty_directory "db/seed_images"
706
+ seed_pics.each do |abs|
707
+ copy_file abs, File.join("db/seed_images", File.basename(abs))
708
+ end
709
+
710
+ say "- Generating Konferensha apartment + photos seed migration..."
711
+ sleep 1 # unique migration timestamp
712
+ seed_ts = Time.now.utc.strftime("%Y%m%d%H%M%S")
713
+ create_file "db/migrate/#{seed_ts}_seed_konferensha_photos.rb", <<-SEED_MIGRATION.strip_heredoc
714
+ class SeedKonferenshaPhotos < ActiveRecord::Migration[7.0]
715
+ # Seed an Apartment with a gallery of photos so the nested
716
+ # has_many list (apartments -> photos) has enough rows to
717
+ # trigger pagination. Driven by db/seed_images/, which the
718
+ # inline_forms installer copies from the gem's pics/ dir.
719
+ # Runs in development (via db:migrate) and against the test
720
+ # DB (via db:test:prepare), so integration tests can assert
721
+ # the paginated <turbo-frame> renders without seeding manually.
722
+ def up
723
+ apartment = Apartment.find_or_create_by!(name: "Konferensha") do |a|
724
+ a.title = "Konferensha sobre Papiamentu"
725
+ end
726
+
727
+ seed_dir = Rails.root.join("db", "seed_images")
728
+ return unless seed_dir.directory?
729
+
730
+ Dir.glob(seed_dir.join("*.{jpg,jpeg,png,gif}"), File::FNM_CASEFOLD).sort.each do |abs|
731
+ base = File.basename(abs)
732
+ next if Photo.exists?(name: base, apartment_id: apartment.id)
733
+ File.open(abs, "rb") do |io|
734
+ Photo.create!(
735
+ name: base,
736
+ caption: "Konferensha foto \#{base}",
737
+ apartment: apartment,
738
+ image: io
739
+ )
740
+ end
741
+ end
742
+ end
743
+
744
+ def down
745
+ apartment = Apartment.find_by(name: "Konferensha")
746
+ return unless apartment
747
+ apartment.photos.destroy_all
748
+ apartment.destroy
749
+ end
750
+ end
751
+ SEED_MIGRATION
752
+
753
+ run "bundle exec rake db:migrate"
754
+ end
755
+ end
756
+
626
757
  remove_file 'public/index.html'
627
758
 
628
759
  route "root :to => 'apartments#index'"
data/inline_forms.gemspec CHANGED
@@ -9,22 +9,33 @@ Gem::Specification.new do |s|
9
9
  s.authors = ["Ace Suares", "Lemuel Boyce", "Manuel Ortega"]
10
10
  s.email = ["ace@suares.com"]
11
11
  s.homepage = %q{http://github.com/acesuares/inline_forms}
12
- s.summary = %q{Inline editing of forms.}
13
- s.description = %q{Inline Forms aims to ease the setup of forms that provide inline editing. The field list can be specified in the model.}
12
+ s.summary = %q{Inline editing of forms. Versions after 6.2.14 are currently broken.}
13
+ s.description = %q{Inline Forms aims to ease the setup of forms that provide inline editing. The field list can be specified in the model. Versions after 6.2.14 are currently broken, and we will post a notice when the gem is good again.}
14
14
  s.licenses = ["MIT"]
15
+ s.required_ruby_version = ">= 3.2.0"
15
16
 
16
- s.rubyforge_project = "inline_forms"
17
-
18
- s.files = `git ls-files`.split("\n")
19
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ if File.directory?(File.join(__dir__, ".git"))
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ else
21
+ s.files = Dir.chdir(__dir__) do
22
+ Dir.glob("**/*", File::FNM_DOTMATCH).reject do |f|
23
+ f.start_with?(".git/", ".bundle/", "pkg/") ||
24
+ f == ".git" || f == ".bundle"
25
+ end
26
+ end
27
+ s.test_files = Dir.chdir(__dir__) do
28
+ Dir.glob("{test,spec,features}/**/*")
29
+ end
30
+ end
31
+ s.executables = ["inline_forms"]
21
32
  s.require_paths = ["lib"]
22
33
 
23
- s.add_dependency('rvm')
24
- s.add_dependency('thor')
25
- s.add_dependency('validation_hints')
34
+ s.add_dependency('rvm', '>= 1.11', '< 2.0')
35
+ s.add_dependency('thor', '>= 1.0', '< 2.0')
36
+ s.add_dependency('validation_hints', '>= 0.2', '< 1.0')
26
37
  s.add_dependency('rails', '>= 7.0.0', '< 7.1')
27
- s.add_dependency('rails-i18n')
38
+ s.add_dependency('rails-i18n', '>= 7.0', '< 8.0')
28
39
 
29
40
  s.add_development_dependency("minitest", "~> 5.0")
30
41