jinda 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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