jinda 0.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 (260) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +179 -0
  4. data/Rakefile +1 -0
  5. data/bin/console +14 -0
  6. data/bin/setup +8 -0
  7. data/lib/generators/jinda/USAGE +2 -0
  8. data/lib/generators/jinda/install_generator.rb +192 -0
  9. data/lib/generators/jinda/mongoid_generator.rb +35 -0
  10. data/lib/generators/jinda/templates/app/assets/config/manifest.js +3 -0
  11. data/lib/generators/jinda/templates/app/assets/images/4dcity-old.ico +0 -0
  12. data/lib/generators/jinda/templates/app/assets/images/4dcity.ico +0 -0
  13. data/lib/generators/jinda/templates/app/assets/images/account.png +0 -0
  14. data/lib/generators/jinda/templates/app/assets/images/add.png +0 -0
  15. data/lib/generators/jinda/templates/app/assets/images/ajax-loader-circle.gif +0 -0
  16. data/lib/generators/jinda/templates/app/assets/images/ajax-loader.gif +0 -0
  17. data/lib/generators/jinda/templates/app/assets/images/anchor.png +0 -0
  18. data/lib/generators/jinda/templates/app/assets/images/application_double.png +0 -0
  19. data/lib/generators/jinda/templates/app/assets/images/application_form_edit.png +0 -0
  20. data/lib/generators/jinda/templates/app/assets/images/arrow_left.png +0 -0
  21. data/lib/generators/jinda/templates/app/assets/images/arrow_right.png +0 -0
  22. data/lib/generators/jinda/templates/app/assets/images/arrow_turn_left.png +0 -0
  23. data/lib/generators/jinda/templates/app/assets/images/arrow_turn_right.png +0 -0
  24. data/lib/generators/jinda/templates/app/assets/images/calendar.png +0 -0
  25. data/lib/generators/jinda/templates/app/assets/images/cancel.png +0 -0
  26. data/lib/generators/jinda/templates/app/assets/images/chart_bar.png +0 -0
  27. data/lib/generators/jinda/templates/app/assets/images/clock.png +0 -0
  28. data/lib/generators/jinda/templates/app/assets/images/cog.png +0 -0
  29. data/lib/generators/jinda/templates/app/assets/images/control_fastforward.png +0 -0
  30. data/lib/generators/jinda/templates/app/assets/images/control_play.png +0 -0
  31. data/lib/generators/jinda/templates/app/assets/images/cross.png +0 -0
  32. data/lib/generators/jinda/templates/app/assets/images/delete.png +0 -0
  33. data/lib/generators/jinda/templates/app/assets/images/external-link.png +0 -0
  34. data/lib/generators/jinda/templates/app/assets/images/facebook-button.png +0 -0
  35. data/lib/generators/jinda/templates/app/assets/images/facebook-sign-in-button.png +0 -0
  36. data/lib/generators/jinda/templates/app/assets/images/facebooksmall.png +0 -0
  37. data/lib/generators/jinda/templates/app/assets/images/favicon.ico +0 -0
  38. data/lib/generators/jinda/templates/app/assets/images/freemind(mm).png +0 -0
  39. data/lib/generators/jinda/templates/app/assets/images/help.png +0 -0
  40. data/lib/generators/jinda/templates/app/assets/images/highway-menu.png +0 -0
  41. data/lib/generators/jinda/templates/app/assets/images/highway.png +0 -0
  42. data/lib/generators/jinda/templates/app/assets/images/house.png +0 -0
  43. data/lib/generators/jinda/templates/app/assets/images/icons-18-black.png +0 -0
  44. data/lib/generators/jinda/templates/app/assets/images/icons-18-white.png +0 -0
  45. data/lib/generators/jinda/templates/app/assets/images/icons-36-black.png +0 -0
  46. data/lib/generators/jinda/templates/app/assets/images/icons-36-white.png +0 -0
  47. data/lib/generators/jinda/templates/app/assets/images/logo.png +0 -0
  48. data/lib/generators/jinda/templates/app/assets/images/logo_jinda.png +0 -0
  49. data/lib/generators/jinda/templates/app/assets/images/logout.png +0 -0
  50. data/lib/generators/jinda/templates/app/assets/images/new.gif +0 -0
  51. data/lib/generators/jinda/templates/app/assets/images/new.png +0 -0
  52. data/lib/generators/jinda/templates/app/assets/images/page.png +0 -0
  53. data/lib/generators/jinda/templates/app/assets/images/page_attach.png +0 -0
  54. data/lib/generators/jinda/templates/app/assets/images/page_green.png +0 -0
  55. data/lib/generators/jinda/templates/app/assets/images/page_output.png +0 -0
  56. data/lib/generators/jinda/templates/app/assets/images/page_pdf.png +0 -0
  57. data/lib/generators/jinda/templates/app/assets/images/pencil.png +0 -0
  58. data/lib/generators/jinda/templates/app/assets/images/printer.png +0 -0
  59. data/lib/generators/jinda/templates/app/assets/images/refresh.png +0 -0
  60. data/lib/generators/jinda/templates/app/assets/images/report.png +0 -0
  61. data/lib/generators/jinda/templates/app/assets/images/rssmall.png +0 -0
  62. data/lib/generators/jinda/templates/app/assets/images/tick.png +0 -0
  63. data/lib/generators/jinda/templates/app/assets/images/twittersmall.png +0 -0
  64. data/lib/generators/jinda/templates/app/assets/images/user.png +0 -0
  65. data/lib/generators/jinda/templates/app/assets/images/view_code.png +0 -0
  66. data/lib/generators/jinda/templates/app/assets/javascripts/application.js +26 -0
  67. data/lib/generators/jinda/templates/app/assets/javascripts/cable.js +13 -0
  68. data/lib/generators/jinda/templates/app/assets/javascripts/jqm/application.js-jqm +26 -0
  69. data/lib/generators/jinda/templates/app/assets/javascripts/jqm/disable_enter_key.js +10 -0
  70. data/lib/generators/jinda/templates/app/assets/javascripts/jqm/iscroll-wrapper.js +32 -0
  71. data/lib/generators/jinda/templates/app/assets/javascripts/jqm/iscroll.js +1084 -0
  72. data/lib/generators/jinda/templates/app/assets/javascripts/jqm/jinda.js +14 -0
  73. data/lib/generators/jinda/templates/app/assets/javascripts/jqm/jquery.mobile-1.2.1.js +9272 -0
  74. data/lib/generators/jinda/templates/app/assets/javascripts/jqm/jquery.mobile.datebox.js +1772 -0
  75. data/lib/generators/jinda/templates/app/assets/javascripts/jqm/jquery.mobile.splitview.js +695 -0
  76. data/lib/generators/jinda/templates/app/assets/stylesheets/application.scss +30 -0
  77. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.eot +0 -0
  78. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.ttf +0 -0
  79. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.woff +0 -0
  80. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_bold.ttf +0 -0
  81. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_bolditalic.ttf +0 -0
  82. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_italic.ttf +0 -0
  83. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.eot +0 -0
  84. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.ttf +0 -0
  85. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.woff +0 -0
  86. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew.css +47 -0
  87. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.eot +0 -0
  88. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.ttf +0 -0
  89. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.woff +0 -0
  90. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.eot +0 -0
  91. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.ttf +0 -0
  92. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.woff +0 -0
  93. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.eot +0 -0
  94. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.ttf +0 -0
  95. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.woff +0 -0
  96. data/lib/generators/jinda/templates/app/assets/stylesheets/images/ajax-loader.gif +0 -0
  97. data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_black.png +0 -0
  98. data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_blue.png +0 -0
  99. data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_red.png +0 -0
  100. data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-18-black.png +0 -0
  101. data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-18-white.png +0 -0
  102. data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-36-black.png +0 -0
  103. data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-36-white.png +0 -0
  104. data/lib/generators/jinda/templates/app/assets/stylesheets/images/indicator.gif +0 -0
  105. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/application.scss-jqm +30 -0
  106. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/articles.scss +84 -0
  107. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/jinda.css +138 -0
  108. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/jquery.mobile-1.2.1.css +2339 -0
  109. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/jquery.mobile.datebox.css +65 -0
  110. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/jquery.mobile.grids.collapsible.css +122 -0
  111. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/jquery.mobile.splitview.css +128 -0
  112. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/kul-4.2.css +1516 -0
  113. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/kul-4.2.min.css +11 -0
  114. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/rouge.css.erb +11 -0
  115. data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/sarabun.css +37 -0
  116. data/lib/generators/jinda/templates/app/channels/application_cable/channel.rb +4 -0
  117. data/lib/generators/jinda/templates/app/channels/application_cable/connection.rb +4 -0
  118. data/lib/generators/jinda/templates/app/controllers/admins_controller.rb +6 -0
  119. data/lib/generators/jinda/templates/app/controllers/application_controller.rb +40 -0
  120. data/lib/generators/jinda/templates/app/controllers/articles_controller.rb +67 -0
  121. data/lib/generators/jinda/templates/app/controllers/comments_controller.rb +17 -0
  122. data/lib/generators/jinda/templates/app/controllers/ctrs_controller.rb +2 -0
  123. data/lib/generators/jinda/templates/app/controllers/devs_controller.rb +2 -0
  124. data/lib/generators/jinda/templates/app/controllers/identities_controller.rb +5 -0
  125. data/lib/generators/jinda/templates/app/controllers/jinda_controller.rb +537 -0
  126. data/lib/generators/jinda/templates/app/controllers/password_resets.rb +28 -0
  127. data/lib/generators/jinda/templates/app/controllers/password_resets_controller.rb +34 -0
  128. data/lib/generators/jinda/templates/app/controllers/sessions_controller.rb +37 -0
  129. data/lib/generators/jinda/templates/app/controllers/sitemap_controller.rb +12 -0
  130. data/lib/generators/jinda/templates/app/controllers/users_controller.rb +34 -0
  131. data/lib/generators/jinda/templates/app/helpers/admins_helper.rb +2 -0
  132. data/lib/generators/jinda/templates/app/helpers/application_helper.rb +33 -0
  133. data/lib/generators/jinda/templates/app/helpers/articles_helper.rb +2 -0
  134. data/lib/generators/jinda/templates/app/helpers/basic_helper.rb +2 -0
  135. data/lib/generators/jinda/templates/app/helpers/comments_helper.rb +2 -0
  136. data/lib/generators/jinda/templates/app/helpers/ctrs_helper.rb +2 -0
  137. data/lib/generators/jinda/templates/app/helpers/devs_helper.rb +2 -0
  138. data/lib/generators/jinda/templates/app/helpers/pictures_helper.rb +2 -0
  139. data/lib/generators/jinda/templates/app/helpers/sitemap_helper.rb +2 -0
  140. data/lib/generators/jinda/templates/app/helpers/users_helper.rb +2 -0
  141. data/lib/generators/jinda/templates/app/jinda/index.mm +189 -0
  142. data/lib/generators/jinda/templates/app/jinda/template/view.html.erb +23 -0
  143. data/lib/generators/jinda/templates/app/jobs/application_job.rb +2 -0
  144. data/lib/generators/jinda/templates/app/mailers/application_mailer.rb +4 -0
  145. data/lib/generators/jinda/templates/app/mailers/jinda_mailer.rb +7 -0
  146. data/lib/generators/jinda/templates/app/mailers/user_mailer.rb +15 -0
  147. data/lib/generators/jinda/templates/app/models/address.rb +14 -0
  148. data/lib/generators/jinda/templates/app/models/article.rb +14 -0
  149. data/lib/generators/jinda/templates/app/models/ckeditor/asset.rb +5 -0
  150. data/lib/generators/jinda/templates/app/models/ckeditor/attachment_file.rb +13 -0
  151. data/lib/generators/jinda/templates/app/models/ckeditor/picture.rb +14 -0
  152. data/lib/generators/jinda/templates/app/models/comment.rb +11 -0
  153. data/lib/generators/jinda/templates/app/models/identity.rb +16 -0
  154. data/lib/generators/jinda/templates/app/models/jinda/doc.rb +31 -0
  155. data/lib/generators/jinda/templates/app/models/jinda/module.rb +11 -0
  156. data/lib/generators/jinda/templates/app/models/jinda/notice.rb +14 -0
  157. data/lib/generators/jinda/templates/app/models/jinda/role.rb +8 -0
  158. data/lib/generators/jinda/templates/app/models/jinda/runseq.rb +24 -0
  159. data/lib/generators/jinda/templates/app/models/jinda/service.rb +17 -0
  160. data/lib/generators/jinda/templates/app/models/jinda/xmain.rb +38 -0
  161. data/lib/generators/jinda/templates/app/models/param.rb +41 -0
  162. data/lib/generators/jinda/templates/app/models/person.rb +14 -0
  163. data/lib/generators/jinda/templates/app/models/user.rb +59 -0
  164. data/lib/generators/jinda/templates/app/views/adminbsbs/content.haml +241 -0
  165. data/lib/generators/jinda/templates/app/views/admins/edit_role/edit_role.html.erb +7 -0
  166. data/lib/generators/jinda/templates/app/views/admins/edit_role/select_user.html.erb +4 -0
  167. data/lib/generators/jinda/templates/app/views/articles/edit.haml +12 -0
  168. data/lib/generators/jinda/templates/app/views/articles/edit_article/edit_article.html.erb +13 -0
  169. data/lib/generators/jinda/templates/app/views/articles/edit_article/select_article.html.erb +12 -0
  170. data/lib/generators/jinda/templates/app/views/articles/index.haml +23 -0
  171. data/lib/generators/jinda/templates/app/views/articles/my.haml +21 -0
  172. data/lib/generators/jinda/templates/app/views/articles/new_article/form_article.html.erb +14 -0
  173. data/lib/generators/jinda/templates/app/views/articles/show.html.haml +24 -0
  174. data/lib/generators/jinda/templates/app/views/articles/xedit_article/edit_article.html.erb +13 -0
  175. data/lib/generators/jinda/templates/app/views/articles/xedit_article/xedit_article.html.erb +11 -0
  176. data/lib/generators/jinda/templates/app/views/ctrs/vfolder1/viewfile1.html.erb +23 -0
  177. data/lib/generators/jinda/templates/app/views/ctrs/vfolder1/viewfile2.html.erb +23 -0
  178. data/lib/generators/jinda/templates/app/views/ctrs/vfolder2/viewfile2.html.erb +23 -0
  179. data/lib/generators/jinda/templates/app/views/custom/_adsense.haml +6 -0
  180. data/lib/generators/jinda/templates/app/views/identities/new.html.erb +30 -0
  181. data/lib/generators/jinda/templates/app/views/jinda/_activity.md +10 -0
  182. data/lib/generators/jinda/templates/app/views/jinda/_menu.haml +24 -0
  183. data/lib/generators/jinda/templates/app/views/jinda/_menu_mm.haml +29 -0
  184. data/lib/generators/jinda/templates/app/views/jinda/_model.md +5 -0
  185. data/lib/generators/jinda/templates/app/views/jinda/_modul.md +9 -0
  186. data/lib/generators/jinda/templates/app/views/jinda/_pending_home.haml +5 -0
  187. data/lib/generators/jinda/templates/app/views/jinda/_pending_page.haml +24 -0
  188. data/lib/generators/jinda/templates/app/views/jinda/_service.md +24 -0
  189. data/lib/generators/jinda/templates/app/views/jinda/_static.haml +23 -0
  190. data/lib/generators/jinda/templates/app/views/jinda/doc-thai.md +37 -0
  191. data/lib/generators/jinda/templates/app/views/jinda/doc.md +36 -0
  192. data/lib/generators/jinda/templates/app/views/jinda/error_logs.haml +22 -0
  193. data/lib/generators/jinda/templates/app/views/jinda/feed.rss.builder +27 -0
  194. data/lib/generators/jinda/templates/app/views/jinda/help.haml +20 -0
  195. data/lib/generators/jinda/templates/app/views/jinda/index.html.haml +39 -0
  196. data/lib/generators/jinda/templates/app/views/jinda/logs.haml +22 -0
  197. data/lib/generators/jinda/templates/app/views/jinda/pending.haml +1 -0
  198. data/lib/generators/jinda/templates/app/views/jinda/run_form.haml +37 -0
  199. data/lib/generators/jinda/templates/app/views/jinda/run_output.haml +38 -0
  200. data/lib/generators/jinda/templates/app/views/jinda/search.haml +20 -0
  201. data/lib/generators/jinda/templates/app/views/jinda/status.haml +61 -0
  202. data/lib/generators/jinda/templates/app/views/jinda_mailer/gmail.html.erb +9 -0
  203. data/lib/generators/jinda/templates/app/views/layouts/_head.html.erb +13 -0
  204. data/lib/generators/jinda/templates/app/views/layouts/_meta_tags.html.erb +5 -0
  205. data/lib/generators/jinda/templates/app/views/layouts/_metatag.html.erb +19 -0
  206. data/lib/generators/jinda/templates/app/views/layouts/application.haml +4 -0
  207. data/lib/generators/jinda/templates/app/views/layouts/bsb/_footer.haml +7 -0
  208. data/lib/generators/jinda/templates/app/views/layouts/bsb/_header.haml +147 -0
  209. data/lib/generators/jinda/templates/app/views/layouts/bsb/_menu.haml +47 -0
  210. data/lib/generators/jinda/templates/app/views/layouts/bsb/_menu_mm.haml +34 -0
  211. data/lib/generators/jinda/templates/app/views/layouts/bsb/_rightbar.haml +123 -0
  212. data/lib/generators/jinda/templates/app/views/layouts/bsb/_sidebar.haml +155 -0
  213. data/lib/generators/jinda/templates/app/views/layouts/bsb/application.haml-bsb +47 -0
  214. data/lib/generators/jinda/templates/app/views/layouts/gmail.html.erb +9 -0
  215. data/lib/generators/jinda/templates/app/views/layouts/jqm/_full.haml +41 -0
  216. data/lib/generators/jinda/templates/app/views/layouts/jqm/_page.haml +16 -0
  217. data/lib/generators/jinda/templates/app/views/layouts/jqm/application.haml-jqm +4 -0
  218. data/lib/generators/jinda/templates/app/views/layouts/mailer.html.erb +13 -0
  219. data/lib/generators/jinda/templates/app/views/layouts/mailer.html.haml +3 -0
  220. data/lib/generators/jinda/templates/app/views/layouts/mailer.text.erb +1 -0
  221. data/lib/generators/jinda/templates/app/views/layouts/mailer.text.haml +1 -0
  222. data/lib/generators/jinda/templates/app/views/layouts/mobile.html.erb +13 -0
  223. data/lib/generators/jinda/templates/app/views/layouts/mobilejq.html.erb +31 -0
  224. data/lib/generators/jinda/templates/app/views/layouts/print.html.erb +22 -0
  225. data/lib/generators/jinda/templates/app/views/layouts/utf8.html.erb +22 -0
  226. data/lib/generators/jinda/templates/app/views/new.html.erb +7 -0
  227. data/lib/generators/jinda/templates/app/views/password_resets/edit.html.erb +21 -0
  228. data/lib/generators/jinda/templates/app/views/password_resets/new.html.erb +7 -0
  229. data/lib/generators/jinda/templates/app/views/sessions/new.html.erb +16 -0
  230. data/lib/generators/jinda/templates/app/views/sitemap/index.xml.haml +10 -0
  231. data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.html.haml +3 -0
  232. data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.text.erb +3 -0
  233. data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.text.haml +3 -0
  234. data/lib/generators/jinda/templates/app/views/users/index.haml +13 -0
  235. data/lib/generators/jinda/templates/app/views/users/pwd/enter.html.erb +6 -0
  236. data/lib/generators/jinda/templates/app/views/users/user/enter_user.html.erb +8 -0
  237. data/lib/generators/jinda/templates/cloudinary.yml +9 -0
  238. data/lib/generators/jinda/templates/jinda.yml +10 -0
  239. data/lib/generators/jinda/templates/public/404.html +67 -0
  240. data/lib/generators/jinda/templates/public/422.html +67 -0
  241. data/lib/generators/jinda/templates/public/500.html +66 -0
  242. data/lib/generators/jinda/templates/public/assets/images/logo.png +0 -0
  243. data/lib/generators/jinda/templates/public/favicon.ico +0 -0
  244. data/lib/generators/jinda/templates/public/robots.txt +3 -0
  245. data/lib/generators/jinda/templates/seeds.rb +6 -0
  246. data/lib/generators/jinda/templates/spec/controllers/admins_controller_spec.rb +5 -0
  247. data/lib/generators/jinda/templates/spec/controllers/devs_controller_spec.rb +5 -0
  248. data/lib/generators/jinda/templates/spec/controllers/users_controller_spec.rb +5 -0
  249. data/lib/generators/jinda/templates/spec/helpers/admins_helper_spec.rb +15 -0
  250. data/lib/generators/jinda/templates/spec/helpers/devs_helper_spec.rb +15 -0
  251. data/lib/generators/jinda/templates/spec/helpers/users_helper_spec.rb +15 -0
  252. data/lib/generators/jinda/templates/spec/spec_helper.rb +38 -0
  253. data/lib/jinda.rb +6 -0
  254. data/lib/jinda/helpers.rb +517 -0
  255. data/lib/jinda/railtie.rb +18 -0
  256. data/lib/jinda/version.rb +3 -0
  257. data/lib/tasks/jinda.rake +202 -0
  258. data/test/jinda_test.rb +7 -0
  259. data/test/test_helper.rb +4 -0
  260. metadata +345 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
@@ -0,0 +1,3 @@
1
+ # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
2
+ User-agent: *
3
+ Disallow: /
@@ -0,0 +1,6 @@
1
+ unless Identity.where(code:"admin").exists?
2
+ identity= Identity.create :code => "admin", :email => "admin@test.com", :password => "secret",
3
+ :password_confirmation => "secret"
4
+ User.create :provider => "identity", :uid => identity.id.to_s, :code => identity.code,
5
+ :email => identity.email, :role => "M,A,D"
6
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe AdminsController do
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe DevsController do
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe UsersController do
4
+
5
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the AdminsHelper. For example:
5
+ #
6
+ # describe AdminsHelper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # helper.concat_strings("this","that").should == "this that"
10
+ # end
11
+ # end
12
+ # end
13
+ describe AdminsHelper do
14
+ pending "add some examples to (or delete) #{__FILE__}"
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the DevsHelper. For example:
5
+ #
6
+ # describe DevsHelper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # helper.concat_strings("this","that").should == "this that"
10
+ # end
11
+ # end
12
+ # end
13
+ describe DevsHelper do
14
+ pending "add some examples to (or delete) #{__FILE__}"
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the UsersHelper. For example:
5
+ #
6
+ # describe UsersHelper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # helper.concat_strings("this","that").should == "this that"
10
+ # end
11
+ # end
12
+ # end
13
+ describe UsersHelper do
14
+ pending "add some examples to (or delete) #{__FILE__}"
15
+ end
@@ -0,0 +1,38 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ REQUEST.ENV["RAILS_ENV"] ||= 'test'
3
+ require File.expand_path("../../config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+ require 'rspec/autorun'
6
+
7
+ # Requires supporting ruby files with custom matchers and macros, etc,
8
+ # in spec/support/ and its subdirectories.
9
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
10
+
11
+ RSpec.configure do |config|
12
+ # ## Mock Framework
13
+ #
14
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
15
+ #
16
+ # config.mock_with :mocha
17
+ # config.mock_with :flexmock
18
+ # config.mock_with :rr
19
+
20
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
21
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
22
+
23
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
24
+ # examples within a transaction, remove the following line or assign false
25
+ # instead of true.
26
+ config.use_transactional_fixtures = true
27
+
28
+ # If true, the base class of anonymous controllers will be inferred
29
+ # automatically. This will be the default behavior in future versions of
30
+ # rspec-rails.
31
+ config.infer_base_class_for_anonymous_controllers = false
32
+
33
+ # Run specs in random order to surface order dependencies. If you find an
34
+ # order dependency and want to debug it, you can fix the order by providing
35
+ # the seed, which is printed after each run.
36
+ # --seed 1234
37
+ config.order = "random"
38
+ end
data/lib/jinda.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'jinda/version'
2
+ require 'jinda/railtie'
3
+
4
+ module Jinda
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,517 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module Jinda
3
+ module Helpers
4
+ require "rexml/document"
5
+ include REXML
6
+ # methods from application_controller
7
+ def b(s)
8
+ "<b>#{s}</b>".html_safe
9
+ end
10
+ def date_thai(d= Time.now, options={})
11
+ unless d
12
+ ""
13
+ else
14
+ y = d.year+543
15
+ if options[:monthfull] || options[:month_full]
16
+ mh= ['มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฏาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม']
17
+ else
18
+ mh= ['ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.', 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.']
19
+ end
20
+ if options[:dateonly] || options[:date_only]
21
+ d.day.to_s+" "+mh[d.month-1]+" "+y.to_s
22
+ else
23
+ d.day.to_s+" "+mh[d.month-1]+" "+y.to_s+" เวลา "+sprintf("%02d",d.hour.to_s)+":"+sprintf("%02d",d.min.to_s)
24
+ end
25
+ end
26
+ end
27
+ def link_to_blank(body, url_options = {}, html_options = {})
28
+ link_to(body, url_options, html_options.merge(target: "_blank"))
29
+ end
30
+ def code_text(s) # old def code(s)
31
+ "<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'>#{s}</code></pre>".html_safe
32
+ end
33
+ def refresh_to(url='/', option={})
34
+ if option[:alert]
35
+ ma_log option[:alert]
36
+ end
37
+ render inline: "<script>window.location.replace('#{url}')</script>"
38
+ end
39
+ def read_binary(path)
40
+ File.open path, "rb" do |f| f.read end
41
+ end
42
+ def redirect_to_root
43
+ redirect_to root_path
44
+ end
45
+ def get_option(opt, runseq=@runseq)
46
+ xml= REXML::Document.new(runseq.xml).root
47
+ url=''
48
+ xml.each_element('///node') do |n|
49
+ text= n.attributes['TEXT']
50
+ url= text if text =~/^#{opt}:\s*/
51
+ end
52
+ c, h= url.split(':', 2)
53
+ opt= h ? h.strip : false
54
+ end
55
+ def ma_comment?(s)
56
+ s[0]==35
57
+ end
58
+ def get_ip
59
+ request.env['HTTP_X_FORWARDED_FOR'] || request.env['REMOTE_ADDR']
60
+ end
61
+ def get_default_role
62
+ default_role= Jinda::Role.where(:code =>'default').first
63
+ return default_role ? default_role.name.to_s : ''
64
+ end
65
+ def name2code(s)
66
+ # rather not ignore # symbol cause it could be comment
67
+ code, name = s.split(':')
68
+ code.downcase.strip.gsub(' ','_').gsub(/[^#_\/a-zA-Z0-9]/,'')
69
+ end
70
+ def name2camel(s)
71
+ s.gsub(' ','_').camelcase
72
+ end
73
+ def true_action?(s)
74
+ %w(call ws redirect invoke email).include? s
75
+ end
76
+ def set_global
77
+ $xmain= @xmain ; $runseq = @runseq ; $user = current_ma_user ; $xvars= @xmain.xvars; $ip = request.env["REMOTE_ADDR"]
78
+ end
79
+ def authorize? # use in pending tasks
80
+ @runseq= @xmain.runseqs.find @xmain.current_runseq
81
+ return false unless @runseq
82
+ @user = current_ma_user
83
+ set_global
84
+ return false unless eval(@runseq.rule) if @runseq.rule
85
+ return true if true_action?(@runseq.action)
86
+ # return false if check_wait
87
+ return true if @runseq.role.blank?
88
+ unless @runseq.role.empty?
89
+ return false unless @user.role
90
+ return @user.role.upcase.split(',').include?(@runseq.role.upcase)
91
+ end
92
+ return true
93
+ end
94
+ def authorize_init? # use when initialize new transaction
95
+ # check module role
96
+ mrole = @service.module.role
97
+ return false if mrole && !current_ma_user
98
+ return false if mrole && !current_ma_user.has_role(mrole)
99
+
100
+ # check step 1 role
101
+ xml= @service.xml
102
+ step1 = REXML::Document.new(xml).root.elements['node']
103
+ role= get_option_xml("role", step1) || ""
104
+ # rule= get_option_xml("rule", step1) || true
105
+ return true if role==""
106
+ unless current_ma_user
107
+ return role.blank?
108
+ else
109
+ return false unless current_ma_user.role
110
+ return current_ma_user.has_role(role)
111
+ end
112
+ end
113
+ def ma_log(message)
114
+ Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
115
+ :unread=> true, :ip=> ($ip || request.env["REMOTE_ADDR"])
116
+ # if session[:user_id]
117
+ # Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
118
+ # :user_id => $user.id, :unread=> true, :ip=>request.env["REMOTE_ADDR"]
119
+ # else
120
+ # Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
121
+ # :unread=> true, :ip=>request.env["REMOTE_ADDR"]
122
+ # end
123
+ end
124
+
125
+ alias :ma_notice :ma_log
126
+
127
+ # methods from application_helper
128
+ def markdown(text)
129
+ erbified = ERB.new(text.html_safe).result(binding)
130
+ red = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)
131
+ red.render(erbified).html_safe
132
+ end
133
+ def align_text(s, pixel=3)
134
+ "<span style='position:relative; top:-#{pixel}px;'>#{s}</span>".html_safe
135
+ end
136
+ def status_icon(status)
137
+ case status
138
+ when 'R'
139
+ image_tag 'user.png'
140
+ when 'F'
141
+ image_tag 'tick.png'
142
+ when 'I'
143
+ image_tag 'control_play.png'
144
+ when 'E'
145
+ image_tag 'logout.png'
146
+ when 'X'
147
+ image_tag 'cross.png'
148
+ else
149
+ image_tag 'cancel.png'
150
+ end
151
+ end
152
+ def role_name(code)
153
+ role= Jinda::Role.where(code:code).first
154
+ return role ? role.name : ""
155
+ end
156
+ def uncomment(s)
157
+ s.sub(/^#\s/,'')
158
+ end
159
+ def code_div(s)
160
+ "<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'> #{s}</code></pre>".html_safe
161
+ end
162
+ def ajax?(s)
163
+ return s.match('file_field') ? false : true
164
+ end
165
+ def step(s, total) # square text
166
+ s = (s==0)? 1: s.to_i
167
+ total = total.to_i
168
+ out ="<div class='step'>"
169
+ (s-1).times {|ss| out += "<span class='steps_done'>#{(ss+1)}</span>" }
170
+ out += %Q@<span class='step_now' >@
171
+ out += s.to_s
172
+ out += "</span>"
173
+ out += %Q@@
174
+ for i in s+1..total
175
+ out += "<span class='steps_more'>#{i}</span>"
176
+ end
177
+ out += "</div>"
178
+ out.html_safe
179
+ end
180
+
181
+ def current_ma_user
182
+ # if session[:user_id]
183
+ # return @user ||= User.find(session[:user_id]['$oid'])
184
+ # else
185
+ # return nil
186
+ # end
187
+ #@user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
188
+ @user ||= User.where(:auth_token => cookies[:auth_token]).first if cookies[:auth_token]
189
+
190
+ end
191
+
192
+ def ui_action?(s)
193
+ %w(form output mail pdf).include? s
194
+ end
195
+ # def handle_ma_notice
196
+ # if Jinda::Notice.recent.count>0
197
+ # notice= Jinda::Notice.recent.last
198
+ # notice.update_attribute :unread, false
199
+ # "<script>notice('#{notice.message}');</script>"
200
+ # else
201
+ # ""
202
+ # end
203
+ # end
204
+ def process_services
205
+ # todo: persist mm_md5
206
+ xml= @app||get_app
207
+ if defined? session
208
+ md5= Digest::MD5.hexdigest(xml.to_s)
209
+ if session[:mm_md5]
210
+ return if session[:mm_md5]==md5
211
+ else
212
+ session[:mm_md5]= md5
213
+ end
214
+ end
215
+ protected_services = []
216
+ protected_modules = []
217
+ mseq= 0
218
+ @services= xml.elements["//node[@TEXT='services']"] || REXML::Document.new
219
+ @services.each_element('node') do |m|
220
+ ss= m.attributes["TEXT"]
221
+ code, name= ss.split(':', 2)
222
+ next if code.blank?
223
+ next if code.comment?
224
+ module_code= code.to_code
225
+ # create or update to GmaModule
226
+ ma_module= Jinda::Module.find_or_create_by :code=>module_code
227
+ ma_module.update_attributes :uid=>ma_module.id.to_s
228
+ protected_modules << ma_module.uid
229
+ name = module_code if name.blank?
230
+ ma_module.update_attributes :name=> name.strip, :seq=> mseq
231
+ mseq += 1
232
+ seq= 0
233
+ m.each_element('node') do |s|
234
+ service_name= s.attributes["TEXT"].to_s
235
+ scode, sname= service_name.split(':', 2)
236
+ sname ||= scode; sname.strip!
237
+ scode= scode.to_code
238
+ if scode=="role"
239
+ ma_module.update_attribute :role, sname
240
+ next
241
+ end
242
+ if scode.downcase=="link"
243
+ role= get_option_xml("role", s) || ""
244
+ rule= get_option_xml("rule", s) || ""
245
+ ma_service= Jinda::Service.find_or_create_by :module_code=> ma_module.code, :code=> scode, :name=> sname
246
+ ma_service.update_attributes :xml=>s.to_s, :name=>sname,
247
+ :list=>listed(s), :ma_secured=>ma_secured?(s),
248
+ :module_id=>ma_module.id, :seq => seq,
249
+ :confirm=> get_option_xml("confirm", xml),
250
+ :role => role, :rule => rule, :uid=> ma_service.id.to_s
251
+ seq += 1
252
+ protected_services << ma_service.uid
253
+ else
254
+ # normal service
255
+ step1 = s.elements['node']
256
+ role= get_option_xml("role", step1) || ""
257
+ rule= get_option_xml("rule", step1) || ""
258
+ ma_service= Jinda::Service.find_or_create_by :module_code=> ma_module.code, :code=> scode
259
+ ma_service.update_attributes :xml=>s.to_s, :name=>sname,
260
+ :list=>listed(s), :ma_secured=>ma_secured?(s),
261
+ :module_id=>ma_module.id, :seq => seq,
262
+ :confirm=> get_option_xml("confirm", xml),
263
+ :role => role, :rule => rule, :uid=> ma_service.id.to_s
264
+ seq += 1
265
+ protected_services << ma_service.uid
266
+ end
267
+ end
268
+ end
269
+ Jinda::Module.not_in(:uid=>protected_modules).delete_all
270
+ Jinda::Service.not_in(:uid=>protected_services).delete_all
271
+ end
272
+ def get_app
273
+ f= MM || "#{Rails.root}/app/jinda/index.mm"
274
+ dir= File.dirname(f)
275
+ t= REXML::Document.new(File.read(MM).gsub("\n","")).root
276
+ recheck= true ; first_pass= true
277
+ while recheck
278
+ recheck= false
279
+ t.elements.each("//node") do |n|
280
+ if n.attributes['LINK'] # has attached file
281
+ if first_pass
282
+ f= "#{dir}/#{n.attributes['LINK']}"
283
+ else
284
+ f= n.attributes['LINK']
285
+ end
286
+ next unless File.exists?(f)
287
+ tt= REXML::Document.new(File.read(f).gsub("\n","")).root.elements["node"]
288
+ make_folders_absolute(f,tt)
289
+ tt.elements.each("node") do |tt_node|
290
+ n.parent.insert_before n, tt_node
291
+ end
292
+ recheck= true
293
+ n.parent.delete_element n
294
+ end
295
+ end
296
+ first_pass = false
297
+ end
298
+ return t
299
+ end
300
+ def controller_exists?(modul)
301
+ File.exists? "#{Rails.root}/app/controllers/#{modul}_controller.rb"
302
+ end
303
+ def dup_hash(a)
304
+ h = Hash.new(0)
305
+ a.each do |aa|
306
+ h[aa] += 1
307
+ end
308
+ return h
309
+ end
310
+ def login?
311
+ ## To use remember me cookies then remove
312
+ #session[:user_id] != nil
313
+ current_ma_user != nil
314
+ #cookies[:auth_token] != nil
315
+ end
316
+ def own_xmain?
317
+ if $xmain
318
+ return current_ma_user.id==$xvars['user_id']
319
+ else
320
+ # if eval on first step would return true so user can start service
321
+ return true
322
+ end
323
+ end
324
+ def get_option_xml(opt, xml)
325
+ if xml
326
+ url=''
327
+ xml.each_element('node') do |n|
328
+ text= n.attributes['TEXT']
329
+ url= text if text =~/^#{opt}/
330
+ end
331
+ return nil if url.blank?
332
+ c, h= url.split(':', 2)
333
+ opt= h ? h.strip : true
334
+ else
335
+ return nil
336
+ end
337
+ end
338
+ def listed(node)
339
+ icons=[]
340
+ node.each_element("icon") do |nn|
341
+ icons << nn.attributes["BUILTIN"]
342
+ end
343
+ return !icons.include?("closed")
344
+ end
345
+ def ma_secured?(node)
346
+ icons=[]
347
+ node.each_element("icon") do |nn|
348
+ icons << nn.attributes["BUILTIN"]
349
+ end
350
+ return icons.include?("password")
351
+ end
352
+ def freemind2action(s)
353
+ case s.downcase
354
+ #when 'bookmark' # Excellent
355
+ # 'call'
356
+ when 'bookmark' # Excellent
357
+ 'do'
358
+ when 'attach' # Look here
359
+ 'form'
360
+ when 'edit' # Refine
361
+ 'pdf'
362
+ when 'wizard' # Magic
363
+ 'ws'
364
+ when 'help' # Question
365
+ 'if'
366
+ when 'forward' # Forward
367
+ 'redirect'
368
+ when 'kaddressbook' #Phone
369
+ 'invoke' # invoke new service along the way
370
+ when 'list'
371
+ 'list'
372
+ when 'mail'
373
+ 'mail'
374
+ when 'xmag' # Tobe discussed
375
+ 'search'
376
+ end
377
+ end
378
+ def affirm(s)
379
+ return s =~ /[y|yes|t|true]/i ? true : false
380
+ end
381
+ def negate(s)
382
+ return s =~ /[n|no|f|false]/i ? true : false
383
+ end
384
+
385
+ # module FormBuilder
386
+ # def date_field(method, options = {})
387
+ # default= self.object.send(method) || Date.today
388
+ # data_options= ({"mode"=>"calbox"}).merge(options)
389
+ # %Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>).html_safe
390
+ # end
391
+ # end
392
+ end
393
+ end
394
+
395
+ class String
396
+ def comment?
397
+ self[0]=='#'
398
+ end
399
+ def to_code
400
+ s= self.dup
401
+ # s.downcase!
402
+ # s.gsub! /[\s\-_]/, ""
403
+ # s
404
+ code, name = s.split(':')
405
+ code.downcase.strip.gsub(' ','_').gsub(/[^#_\/a-zA-Z0-9]/,'')
406
+ end
407
+ end
408
+
409
+ module ActionView
410
+ module Helpers
411
+ module DateHelper
412
+ def date_field_tag(method, options = {})
413
+ default= options[:default] || Date.today
414
+ data_options= ({"mode"=>"calbox"}).merge(options)
415
+ %Q(<input name='#{method}' id='#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>).html_safe
416
+ end
417
+ end
418
+ class FormBuilder
419
+ # def date_select_thai(method)
420
+ # self.date_select method, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year]
421
+ # end
422
+ def date_field(method, options = {})
423
+ default= options[:default] || self.object.send(method) || Date.today
424
+ data_options= ({"mode"=>"calbox"}).merge(options)
425
+ out= %Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>)
426
+ out.html_safe
427
+ end
428
+ def time_field(method, options = {})
429
+ default= self.object.send(method) || Time.now
430
+ data_options= ({"mode"=>"timebox"}).merge(options)
431
+ out=%Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>)
432
+ out.html_safe
433
+ end
434
+ def date_select_thai(method, default= Time.now, disabled=false)
435
+ date_select method, :default => default, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year], :disabled=>disabled
436
+ end
437
+ def datetime_select_thai(method, default= Time.now, disabled=false)
438
+ datetime_select method, :default => default, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year], :disabled=>disabled
439
+ end
440
+
441
+ def point(o={})
442
+ o[:zoom]= 11 unless o[:zoom]
443
+ o[:width]= '100%' unless o[:width]
444
+ o[:height]= '300px' unless o[:height]
445
+ o[:lat] = 13.91819 unless o[:lat]
446
+ o[:lng] = 100.48889 unless o[:lng]
447
+
448
+ out = <<-EOT
449
+ <script type='text/javascript'>
450
+ //<![CDATA[
451
+ var latLng;
452
+ var map_#{self.object_name};
453
+ var marker_#{self.object_name};
454
+
455
+ function init_map() {
456
+ var lat = #{o[:lat]};
457
+ var lng = #{o[:lng]};
458
+ //var lat = position.coords.latitude"; // HTML5 pass position in function initialize(position)
459
+ // google.loader.ClientLocation.latitude;
460
+ //var lng = position.coords.longitude;
461
+ // google.loader.ClientLocation.longitude;
462
+ latLng = new google.maps.LatLng(lat, lng);
463
+ map_#{self.object_name} = new google.maps.Map(document.getElementById("map_#{self.object_name}"), {
464
+ zoom: #{o[:zoom]},
465
+ center: latLng,
466
+ mapTypeId: google.maps.MapTypeId.ROADMAP
467
+ });
468
+ marker_#{self.object_name} = new google.maps.Marker({
469
+ position: latLng,
470
+ map: map_#{self.object_name},
471
+ draggable: true,
472
+ });
473
+ google.maps.event.addListener(marker_#{self.object_name}, 'dragend', function(event) {
474
+ $('##{self.object_name}_lat').val(event.latLng.lat());
475
+ $('##{self.object_name}_lng').val(event.latLng.lng());
476
+ });
477
+ google.maps.event.addListener(map_#{self.object_name}, 'click', function(event) {
478
+ $('##{self.object_name}_lat').val(event.latLng.lat());
479
+ $('##{self.object_name}_lng').val(event.latLng.lng());
480
+ move();
481
+ });
482
+ $('##{self.object_name}_lat').val(lat);
483
+ $('##{self.object_name}_lng').val(lng);
484
+ };
485
+
486
+ function move() {
487
+ latLng = new google.maps.LatLng($('##{self.object_name}_lat').val(), $('##{self.object_name}_lng').val());
488
+ map_#{self.object_name}.panTo(latLng);
489
+ marker_#{self.object_name}.setPosition(latLng);
490
+ }
491
+
492
+ //google.maps.event.addDomListener(window, 'load', init_map);
493
+
494
+ //]]>
495
+ </script>
496
+ <div class="field" data-role="fieldcontain">
497
+ Latitude: #{self.text_field :lat, :style=>"width:300px;" }
498
+ Longitude: #{self.text_field :lng, :style=>"width:300px;" }
499
+ </div>
500
+ <p/>
501
+ <div id='map_#{self.object_name}' style='max-width: none !important; width:#{o[:width]}; height:#{o[:height]};' class='map'></div>
502
+ <script>
503
+ $('##{self.object_name}_lat').change(function() {move()});
504
+ $('##{self.object_name}_lng').change(function() {move()});
505
+ //var w= $("input[id*=lat]").parent().width();
506
+ //$("input[id*=lat]").css('width','300px');
507
+ //$("input[id*=lng]").css('width','300px');
508
+ $( document ).one( "pagechange", function(){
509
+ init_map();
510
+ });
511
+ </script>
512
+ EOT
513
+ out.html_safe
514
+ end
515
+ end
516
+ end
517
+ end