jinda-5 0.4.5

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 (296) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +177 -0
  4. data/Rakefile +3 -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/config_generator.rb +108 -0
  9. data/lib/generators/jinda/install_generator.rb +206 -0
  10. data/lib/generators/jinda/minitest_generator.rb +30 -0
  11. data/lib/generators/jinda/rspec_generator.rb +30 -0
  12. data/lib/generators/jinda/templates/README.md +173 -0
  13. data/lib/generators/jinda/templates/app/assets/config/manifest.js +4 -0
  14. data/lib/generators/jinda/templates/app/assets/images/4dcity-old.ico +0 -0
  15. data/lib/generators/jinda/templates/app/assets/images/4dcity.ico +0 -0
  16. data/lib/generators/jinda/templates/app/assets/images/account.png +0 -0
  17. data/lib/generators/jinda/templates/app/assets/images/add.png +0 -0
  18. data/lib/generators/jinda/templates/app/assets/images/ajax-loader-circle.gif +0 -0
  19. data/lib/generators/jinda/templates/app/assets/images/ajax-loader.gif +0 -0
  20. data/lib/generators/jinda/templates/app/assets/images/anchor.png +0 -0
  21. data/lib/generators/jinda/templates/app/assets/images/application_double.png +0 -0
  22. data/lib/generators/jinda/templates/app/assets/images/application_form_edit.png +0 -0
  23. data/lib/generators/jinda/templates/app/assets/images/arrow_left.png +0 -0
  24. data/lib/generators/jinda/templates/app/assets/images/arrow_right.png +0 -0
  25. data/lib/generators/jinda/templates/app/assets/images/arrow_turn_left.png +0 -0
  26. data/lib/generators/jinda/templates/app/assets/images/arrow_turn_right.png +0 -0
  27. data/lib/generators/jinda/templates/app/assets/images/calendar.png +0 -0
  28. data/lib/generators/jinda/templates/app/assets/images/cancel.png +0 -0
  29. data/lib/generators/jinda/templates/app/assets/images/chart_bar.png +0 -0
  30. data/lib/generators/jinda/templates/app/assets/images/clock.png +0 -0
  31. data/lib/generators/jinda/templates/app/assets/images/cog.png +0 -0
  32. data/lib/generators/jinda/templates/app/assets/images/control_fastforward.png +0 -0
  33. data/lib/generators/jinda/templates/app/assets/images/control_play.png +0 -0
  34. data/lib/generators/jinda/templates/app/assets/images/cross.png +0 -0
  35. data/lib/generators/jinda/templates/app/assets/images/delete.png +0 -0
  36. data/lib/generators/jinda/templates/app/assets/images/external-link.png +0 -0
  37. data/lib/generators/jinda/templates/app/assets/images/facebook-continue-button.png +0 -0
  38. data/lib/generators/jinda/templates/app/assets/images/facebooksmall.png +0 -0
  39. data/lib/generators/jinda/templates/app/assets/images/favicon.ico +0 -0
  40. data/lib/generators/jinda/templates/app/assets/images/freemind(mm).png +0 -0
  41. data/lib/generators/jinda/templates/app/assets/images/google-continue-button.png +0 -0
  42. data/lib/generators/jinda/templates/app/assets/images/help.png +0 -0
  43. data/lib/generators/jinda/templates/app/assets/images/highway-menu.png +0 -0
  44. data/lib/generators/jinda/templates/app/assets/images/highway.png +0 -0
  45. data/lib/generators/jinda/templates/app/assets/images/house.png +0 -0
  46. data/lib/generators/jinda/templates/app/assets/images/icons-18-black.png +0 -0
  47. data/lib/generators/jinda/templates/app/assets/images/icons-18-white.png +0 -0
  48. data/lib/generators/jinda/templates/app/assets/images/icons-36-black.png +0 -0
  49. data/lib/generators/jinda/templates/app/assets/images/icons-36-white.png +0 -0
  50. data/lib/generators/jinda/templates/app/assets/images/logo.png +0 -0
  51. data/lib/generators/jinda/templates/app/assets/images/logo_jinda.png +0 -0
  52. data/lib/generators/jinda/templates/app/assets/images/logout.png +0 -0
  53. data/lib/generators/jinda/templates/app/assets/images/new.gif +0 -0
  54. data/lib/generators/jinda/templates/app/assets/images/new.png +0 -0
  55. data/lib/generators/jinda/templates/app/assets/images/page.png +0 -0
  56. data/lib/generators/jinda/templates/app/assets/images/page_attach.png +0 -0
  57. data/lib/generators/jinda/templates/app/assets/images/page_green.png +0 -0
  58. data/lib/generators/jinda/templates/app/assets/images/page_output.png +0 -0
  59. data/lib/generators/jinda/templates/app/assets/images/page_pdf.png +0 -0
  60. data/lib/generators/jinda/templates/app/assets/images/pencil.png +0 -0
  61. data/lib/generators/jinda/templates/app/assets/images/printer.png +0 -0
  62. data/lib/generators/jinda/templates/app/assets/images/refresh.png +0 -0
  63. data/lib/generators/jinda/templates/app/assets/images/report.png +0 -0
  64. data/lib/generators/jinda/templates/app/assets/images/rssmall.png +0 -0
  65. data/lib/generators/jinda/templates/app/assets/images/tick.png +0 -0
  66. data/lib/generators/jinda/templates/app/assets/images/twittersmall.png +0 -0
  67. data/lib/generators/jinda/templates/app/assets/images/user.png +0 -0
  68. data/lib/generators/jinda/templates/app/assets/images/user_admin_gear.png +0 -0
  69. data/lib/generators/jinda/templates/app/assets/images/view_code.png +0 -0
  70. data/lib/generators/jinda/templates/app/assets/javascripts/application.js +24 -0
  71. data/lib/generators/jinda/templates/app/assets/javascripts/application.js-jqm +28 -0
  72. data/lib/generators/jinda/templates/app/assets/javascripts/cable.js +13 -0
  73. data/lib/generators/jinda/templates/app/assets/javascripts/disable_enter_key.js-org +10 -0
  74. data/lib/generators/jinda/templates/app/assets/javascripts/iscroll-wrapper.js +32 -0
  75. data/lib/generators/jinda/templates/app/assets/javascripts/iscroll.js +1084 -0
  76. data/lib/generators/jinda/templates/app/assets/javascripts/jinda.js +14 -0
  77. data/lib/generators/jinda/templates/app/assets/javascripts/jquery.mobile-1.2.1.js +9272 -0
  78. data/lib/generators/jinda/templates/app/assets/javascripts/jquery.mobile.datebox.js +1778 -0
  79. data/lib/generators/jinda/templates/app/assets/javascripts/jquery.mobile.splitview.js +695 -0
  80. data/lib/generators/jinda/templates/app/assets/stylesheets/app.scss +84 -0
  81. data/lib/generators/jinda/templates/app/assets/stylesheets/application.css.scss +34 -0
  82. data/lib/generators/jinda/templates/app/assets/stylesheets/articles.scss +84 -0
  83. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.eot +0 -0
  84. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.ttf +0 -0
  85. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.woff +0 -0
  86. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_bold.ttf +0 -0
  87. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_bolditalic.ttf +0 -0
  88. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_italic.ttf +0 -0
  89. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.eot +0 -0
  90. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.ttf +0 -0
  91. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.woff +0 -0
  92. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew.css +47 -0
  93. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.eot +0 -0
  94. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.ttf +0 -0
  95. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.woff +0 -0
  96. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.eot +0 -0
  97. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.ttf +0 -0
  98. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.woff +0 -0
  99. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.eot +0 -0
  100. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.ttf +0 -0
  101. data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.woff +0 -0
  102. data/lib/generators/jinda/templates/app/assets/stylesheets/images/ajax-loader.gif +0 -0
  103. data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_black.png +0 -0
  104. data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_blue.png +0 -0
  105. data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_red.png +0 -0
  106. data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-18-black.png +0 -0
  107. data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-18-white.png +0 -0
  108. data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-36-black.png +0 -0
  109. data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-36-white.png +0 -0
  110. data/lib/generators/jinda/templates/app/assets/stylesheets/images/indicator.gif +0 -0
  111. data/lib/generators/jinda/templates/app/assets/stylesheets/jinda.css +52 -0
  112. data/lib/generators/jinda/templates/app/assets/stylesheets/jquery.mobile-1.2.1.css +2339 -0
  113. data/lib/generators/jinda/templates/app/assets/stylesheets/jquery.mobile.datebox.css +65 -0
  114. data/lib/generators/jinda/templates/app/assets/stylesheets/jquery.mobile.grids.collapsible.css +122 -0
  115. data/lib/generators/jinda/templates/app/assets/stylesheets/jquery.mobile.splitview.css +128 -0
  116. data/lib/generators/jinda/templates/app/assets/stylesheets/kul-4.2.css +1516 -0
  117. data/lib/generators/jinda/templates/app/assets/stylesheets/kul-4.2.min.css +11 -0
  118. data/lib/generators/jinda/templates/app/assets/stylesheets/sarabun.css +37 -0
  119. data/lib/generators/jinda/templates/app/assets/stylesheets/social.scss +133 -0
  120. data/lib/generators/jinda/templates/app/channels/application_cable/channel.rb +4 -0
  121. data/lib/generators/jinda/templates/app/channels/application_cable/connection.rb +4 -0
  122. data/lib/generators/jinda/templates/app/controllers/api/v1/notes_controller.rb +81 -0
  123. data/lib/generators/jinda/templates/app/controllers/ctrs_controller.rb-gem-test +2 -0
  124. data/lib/generators/jinda/templates/app/controllers/jinda_org/admins_controller.rb +6 -0
  125. data/lib/generators/jinda/templates/app/controllers/jinda_org/application_controller.rb +42 -0
  126. data/lib/generators/jinda/templates/app/controllers/jinda_org/articles_controller.rb +81 -0
  127. data/lib/generators/jinda/templates/app/controllers/jinda_org/comments_controller.rb +17 -0
  128. data/lib/generators/jinda/templates/app/controllers/jinda_org/devs_controller.rb +2 -0
  129. data/lib/generators/jinda/templates/app/controllers/jinda_org/identities_controller.rb +5 -0
  130. data/lib/generators/jinda/templates/app/controllers/jinda_org/jinda_controller.rb +579 -0
  131. data/lib/generators/jinda/templates/app/controllers/jinda_org/notes_controller.rb +86 -0
  132. data/lib/generators/jinda/templates/app/controllers/jinda_org/password_resets.rb +28 -0
  133. data/lib/generators/jinda/templates/app/controllers/jinda_org/password_resets_controller.rb +34 -0
  134. data/lib/generators/jinda/templates/app/controllers/jinda_org/sessions_controller.rb +43 -0
  135. data/lib/generators/jinda/templates/app/controllers/jinda_org/sitemap_controller.rb +12 -0
  136. data/lib/generators/jinda/templates/app/controllers/jinda_org/users_controller.rb +34 -0
  137. data/lib/generators/jinda/templates/app/helpers/admins_helper.rb +2 -0
  138. data/lib/generators/jinda/templates/app/helpers/application_helper.rb +33 -0
  139. data/lib/generators/jinda/templates/app/helpers/articles_helper.rb +2 -0
  140. data/lib/generators/jinda/templates/app/helpers/basic_helper.rb +2 -0
  141. data/lib/generators/jinda/templates/app/helpers/comments_helper.rb +2 -0
  142. data/lib/generators/jinda/templates/app/helpers/ctrs_helper.rb +2 -0
  143. data/lib/generators/jinda/templates/app/helpers/devs_helper.rb +2 -0
  144. data/lib/generators/jinda/templates/app/helpers/pictures_helper.rb +2 -0
  145. data/lib/generators/jinda/templates/app/helpers/sitemap_helper.rb +2 -0
  146. data/lib/generators/jinda/templates/app/helpers/users_helper.rb +2 -0
  147. data/lib/generators/jinda/templates/app/jinda/index.mm +306 -0
  148. data/lib/generators/jinda/templates/app/jinda/template/linkview.haml +21 -0
  149. data/lib/generators/jinda/templates/app/jinda/template/view.html.erb +27 -0
  150. data/lib/generators/jinda/templates/app/mailers/application_mailer.rb +4 -0
  151. data/lib/generators/jinda/templates/app/mailers/jinda_mailer.rb +7 -0
  152. data/lib/generators/jinda/templates/app/mailers/note_mailer.rb +10 -0
  153. data/lib/generators/jinda/templates/app/mailers/user_mailer.rb +15 -0
  154. data/lib/generators/jinda/templates/app/models/address.rb +14 -0
  155. data/lib/generators/jinda/templates/app/models/article.rb +14 -0
  156. data/lib/generators/jinda/templates/app/models/ckeditor/asset.rb +5 -0
  157. data/lib/generators/jinda/templates/app/models/ckeditor/attachment_file.rb +13 -0
  158. data/lib/generators/jinda/templates/app/models/ckeditor/picture.rb +14 -0
  159. data/lib/generators/jinda/templates/app/models/comment.rb +11 -0
  160. data/lib/generators/jinda/templates/app/models/identity.rb +18 -0
  161. data/lib/generators/jinda/templates/app/models/jinda/doc.rb +22 -0
  162. data/lib/generators/jinda/templates/app/models/jinda/module.rb +11 -0
  163. data/lib/generators/jinda/templates/app/models/jinda/notice.rb +14 -0
  164. data/lib/generators/jinda/templates/app/models/jinda/role.rb +8 -0
  165. data/lib/generators/jinda/templates/app/models/jinda/runseq.rb +24 -0
  166. data/lib/generators/jinda/templates/app/models/jinda/service.rb +17 -0
  167. data/lib/generators/jinda/templates/app/models/jinda/xmain.rb +38 -0
  168. data/lib/generators/jinda/templates/app/models/note.rb +22 -0
  169. data/lib/generators/jinda/templates/app/models/param.rb +41 -0
  170. data/lib/generators/jinda/templates/app/models/person.rb +14 -0
  171. data/lib/generators/jinda/templates/app/models/user.rb +66 -0
  172. data/lib/generators/jinda/templates/app/views/adminbsbs/content.haml +241 -0
  173. data/lib/generators/jinda/templates/app/views/admins/edit_role/edit_role.html.erb +7 -0
  174. data/lib/generators/jinda/templates/app/views/admins/edit_role/select_user.html.erb +4 -0
  175. data/lib/generators/jinda/templates/app/views/api/v1/note.haml +0 -0
  176. data/lib/generators/jinda/templates/app/views/articles/edit.haml +12 -0
  177. data/lib/generators/jinda/templates/app/views/articles/edit_article/edit_article.html.erb +13 -0
  178. data/lib/generators/jinda/templates/app/views/articles/edit_article/select_article.html.erb +12 -0
  179. data/lib/generators/jinda/templates/app/views/articles/index.haml +23 -0
  180. data/lib/generators/jinda/templates/app/views/articles/my.haml +20 -0
  181. data/lib/generators/jinda/templates/app/views/articles/new_article/form_article.html.erb +14 -0
  182. data/lib/generators/jinda/templates/app/views/articles/show.html.haml +24 -0
  183. data/lib/generators/jinda/templates/app/views/articles/xedit_article/edit_article.html.erb +13 -0
  184. data/lib/generators/jinda/templates/app/views/ctrs/vfolder1/viewfile1.html.erb +23 -0
  185. data/lib/generators/jinda/templates/app/views/ctrs/vfolder1/viewfile2.html.erb +23 -0
  186. data/lib/generators/jinda/templates/app/views/ctrs/vfolder2/viewfile2.html.erb +23 -0
  187. data/lib/generators/jinda/templates/app/views/custom/_adsense.haml +6 -0
  188. data/lib/generators/jinda/templates/app/views/identities/new.html.erb +32 -0
  189. data/lib/generators/jinda/templates/app/views/jinda/_activity.md +10 -0
  190. data/lib/generators/jinda/templates/app/views/jinda/_menu.haml +26 -0
  191. data/lib/generators/jinda/templates/app/views/jinda/_menu_mm.haml +44 -0
  192. data/lib/generators/jinda/templates/app/views/jinda/_model.md +5 -0
  193. data/lib/generators/jinda/templates/app/views/jinda/_modul.md +9 -0
  194. data/lib/generators/jinda/templates/app/views/jinda/_pending_home.haml +5 -0
  195. data/lib/generators/jinda/templates/app/views/jinda/_pending_page.haml +24 -0
  196. data/lib/generators/jinda/templates/app/views/jinda/_service.md +24 -0
  197. data/lib/generators/jinda/templates/app/views/jinda/_static.haml +13 -0
  198. data/lib/generators/jinda/templates/app/views/jinda/doc-thai.md +37 -0
  199. data/lib/generators/jinda/templates/app/views/jinda/doc.md +36 -0
  200. data/lib/generators/jinda/templates/app/views/jinda/error_logs.haml +22 -0
  201. data/lib/generators/jinda/templates/app/views/jinda/feed.rss.builder +27 -0
  202. data/lib/generators/jinda/templates/app/views/jinda/help.haml +20 -0
  203. data/lib/generators/jinda/templates/app/views/jinda/index.html.haml +43 -0
  204. data/lib/generators/jinda/templates/app/views/jinda/logs.haml +22 -0
  205. data/lib/generators/jinda/templates/app/views/jinda/notice_logs.haml +18 -0
  206. data/lib/generators/jinda/templates/app/views/jinda/pending.haml +1 -0
  207. data/lib/generators/jinda/templates/app/views/jinda/run_form.haml +42 -0
  208. data/lib/generators/jinda/templates/app/views/jinda/run_output.haml +38 -0
  209. data/lib/generators/jinda/templates/app/views/jinda/search.haml +20 -0
  210. data/lib/generators/jinda/templates/app/views/jinda/status.haml +61 -0
  211. data/lib/generators/jinda/templates/app/views/jinda_mailer/gmail.html.erb +9 -0
  212. data/lib/generators/jinda/templates/app/views/layouts/_head.html.erb +13 -0
  213. data/lib/generators/jinda/templates/app/views/layouts/_meta_tags.html.erb +5 -0
  214. data/lib/generators/jinda/templates/app/views/layouts/_metatag.html.erb +19 -0
  215. data/lib/generators/jinda/templates/app/views/layouts/application.haml +4 -0
  216. data/lib/generators/jinda/templates/app/views/layouts/bsb/_footer.haml +7 -0
  217. data/lib/generators/jinda/templates/app/views/layouts/bsb/_header.haml +147 -0
  218. data/lib/generators/jinda/templates/app/views/layouts/bsb/_menu.haml +47 -0
  219. data/lib/generators/jinda/templates/app/views/layouts/bsb/_menu_mm.haml +34 -0
  220. data/lib/generators/jinda/templates/app/views/layouts/bsb/_rightbar.haml +123 -0
  221. data/lib/generators/jinda/templates/app/views/layouts/bsb/_sidebar.haml +155 -0
  222. data/lib/generators/jinda/templates/app/views/layouts/bsb/application.haml-bsb +47 -0
  223. data/lib/generators/jinda/templates/app/views/layouts/gmail.html.erb +9 -0
  224. data/lib/generators/jinda/templates/app/views/layouts/jqm/_full.haml +41 -0
  225. data/lib/generators/jinda/templates/app/views/layouts/jqm/_page.haml +16 -0
  226. data/lib/generators/jinda/templates/app/views/layouts/jqm/application.haml-jqm +4 -0
  227. data/lib/generators/jinda/templates/app/views/layouts/mailer.html.erb +13 -0
  228. data/lib/generators/jinda/templates/app/views/layouts/mailer.html.haml +3 -0
  229. data/lib/generators/jinda/templates/app/views/layouts/mailer.text.erb +1 -0
  230. data/lib/generators/jinda/templates/app/views/layouts/mailer.text.haml +1 -0
  231. data/lib/generators/jinda/templates/app/views/layouts/mobile.html.erb +13 -0
  232. data/lib/generators/jinda/templates/app/views/layouts/mobilejq.html.erb +31 -0
  233. data/lib/generators/jinda/templates/app/views/layouts/print.html.erb +22 -0
  234. data/lib/generators/jinda/templates/app/views/layouts/utf8.html.erb +22 -0
  235. data/lib/generators/jinda/templates/app/views/new.html.erb +7 -0
  236. data/lib/generators/jinda/templates/app/views/note_mailer/gmail.html.haml +7 -0
  237. data/lib/generators/jinda/templates/app/views/note_mailer/gmail.text.haml +8 -0
  238. data/lib/generators/jinda/templates/app/views/notes/delete/select_note.html.erb +14 -0
  239. data/lib/generators/jinda/templates/app/views/notes/edit/edit_note.html.erb +10 -0
  240. data/lib/generators/jinda/templates/app/views/notes/edit/select_note.html.erb +14 -0
  241. data/lib/generators/jinda/templates/app/views/notes/index.haml +71 -0
  242. data/lib/generators/jinda/templates/app/views/notes/mail/display_mail.html.erb +20 -0
  243. data/lib/generators/jinda/templates/app/views/notes/mail/select_note.html.erb +19 -0
  244. data/lib/generators/jinda/templates/app/views/notes/mail/show.html.haml +13 -0
  245. data/lib/generators/jinda/templates/app/views/notes/my.haml +21 -0
  246. data/lib/generators/jinda/templates/app/views/notes/new/new_note.html.erb +13 -0
  247. data/lib/generators/jinda/templates/app/views/notes/show.haml +10 -0
  248. data/lib/generators/jinda/templates/app/views/notes/xedit/edit_note.html.erb +10 -0
  249. data/lib/generators/jinda/templates/app/views/password_resets/edit.html.erb +21 -0
  250. data/lib/generators/jinda/templates/app/views/password_resets/new.html.erb +7 -0
  251. data/lib/generators/jinda/templates/app/views/sessions/new.html.erb +20 -0
  252. data/lib/generators/jinda/templates/app/views/sitemap/index.xml.haml +10 -0
  253. data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.html.haml +3 -0
  254. data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.text.erb +3 -0
  255. data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.text.haml +3 -0
  256. data/lib/generators/jinda/templates/app/views/users/index.haml +13 -0
  257. data/lib/generators/jinda/templates/app/views/users/pwd/enter.html.erb +6 -0
  258. data/lib/generators/jinda/templates/app/views/users/user/enter_user.html.erb +8 -0
  259. data/lib/generators/jinda/templates/config/cloudinary.yml +9 -0
  260. data/lib/generators/jinda/templates/db/seeds.rb +6 -0
  261. data/lib/generators/jinda/templates/dot/dot.env +2 -0
  262. data/lib/generators/jinda/templates/jinda.yml +10 -0
  263. data/lib/generators/jinda/templates/public/404.html +67 -0
  264. data/lib/generators/jinda/templates/public/422.html +67 -0
  265. data/lib/generators/jinda/templates/public/500.html +66 -0
  266. data/lib/generators/jinda/templates/public/assets/images/logo.png +0 -0
  267. data/lib/generators/jinda/templates/public/favicon.ico +0 -0
  268. data/lib/generators/jinda/templates/public/robots.txt +3 -0
  269. data/lib/generators/jinda/templates/spec/controllers/api/v1_get_index_spec.rb +23 -0
  270. data/lib/generators/jinda/templates/spec/controllers/api/v1_get_my_spec.rb +14 -0
  271. data/lib/generators/jinda/templates/spec/controllers/api/v1_post_spec.rb +19 -0
  272. data/lib/generators/jinda/templates/spec/controllers/sessions_controller_spec.rb +96 -0
  273. data/lib/generators/jinda/templates/spec/features/userlogins_spec.rb +23 -0
  274. data/lib/generators/jinda/templates/spec/mailers/note_spec.rb +24 -0
  275. data/lib/generators/jinda/templates/spec/mailers/previews/note_preview.rb +9 -0
  276. data/lib/generators/jinda/templates/spec/models/note_spec.rb +41 -0
  277. data/lib/generators/jinda/templates/spec/models/user_spec.rb +12 -0
  278. data/lib/generators/jinda/templates/spec/rails_helper.rb +44 -0
  279. data/lib/generators/jinda/templates/spec/spec_helper.rb +77 -0
  280. data/lib/generators/jinda/templates/spec/support/authentication_helper.rb +20 -0
  281. data/lib/generators/jinda/templates/spec/support/factory_bot.rb +12 -0
  282. data/lib/generators/jinda/templates/spec/support/omniauth_macros.rb +38 -0
  283. data/lib/generators/jinda/templates/spec/support/request_spec_helper.rb +8 -0
  284. data/lib/generators/jinda/templates/spec/views/articles/_article.html.erb_spec.rbx +14 -0
  285. data/lib/generators/jinda/templates/test/application_system_test_case.rb +5 -0
  286. data/lib/generators/jinda/templates/test/integration/jinda_routes_test.rb +42 -0
  287. data/lib/generators/jinda/templates/test/test_helper.rb +6 -0
  288. data/lib/jinda.rb +6 -0
  289. data/lib/jinda/ template/view.html.erb +25 -0
  290. data/lib/jinda/app/jinda/template/view.html.erb +27 -0
  291. data/lib/jinda/gemhelpers.rb +50 -0
  292. data/lib/jinda/helpers.rb +853 -0
  293. data/lib/jinda/railtie.rb +18 -0
  294. data/lib/jinda/version.rb +3 -0
  295. data/lib/tasks/jinda.rake +33 -0
  296. metadata +405 -0
@@ -0,0 +1,11 @@
1
+ /*
2
+ * jQuery Mobile Framework Git Build: SHA1: 27e3c18acfebab2d47ee7ed37bd50fc4942c8838 <> Date: Fri Mar 22 08:50:04 2013 -0600
3
+ * http://jquerymobile.com
4
+ *
5
+ * Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
6
+ * Released under the MIT license.
7
+ * http://jquery.org/license
8
+ *
9
+ */
10
+
11
+ .ui-bar-a{border:1px solid #bcecff ;background:#bcecff ;color:#000000 ;font-weight:bold;text-shadow:0 1px 1px #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #bcecff ),to( #bcecff )); background-image:-webkit-linear-gradient( #bcecff,#bcecff ); background-image: -moz-linear-gradient( #bcecff,#bcecff ); background-image: -ms-linear-gradient( #bcecff,#bcecff ); background-image: -o-linear-gradient( #bcecff,#bcecff ); background-image: linear-gradient( #bcecff,#bcecff );}.ui-bar-a .ui-link-inherit{color:#000000 ;}.ui-bar-a a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-a a.ui-link:visited{ color:#2489ce ;}.ui-bar-a a.ui-link:hover{color:#2489ce ;}.ui-bar-a a.ui-link:active{color:#2489ce ;}.ui-bar-a,.ui-bar-a input,.ui-bar-a select,.ui-bar-a textarea,.ui-bar-a button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-a,.ui-overlay-a{border:1px solid #657f67 ;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background:#b9e8bc ;background-image:-webkit-gradient(linear,left top,left bottom,from( #e7FFeb ),to( #8aae8d )); background-image:-webkit-linear-gradient( #e7FFeb,#8aae8d ); background-image: -moz-linear-gradient( #e7FFeb,#8aae8d ); background-image: -ms-linear-gradient( #e7FFeb,#8aae8d ); background-image: -o-linear-gradient( #e7FFeb,#8aae8d ); background-image: linear-gradient( #e7FFeb,#8aae8d );}.ui-overlay-a{background-image:none;border-width:0;}.ui-body-a,.ui-body-a input,.ui-body-a select,.ui-body-a textarea,.ui-body-a button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-a .ui-link-inherit{color:#000000 ;}.ui-body-a .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-a .ui-link:visited{ color:#2489ce ;}.ui-body-a .ui-link:hover{color:#2489ce ;}.ui-body-a .ui-link:active{color:#2489ce ;}.ui-btn-up-a{border:1px solid #e8e5b0 ;background:#e8e5b0 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #b4b289 ),to( #FFFFd6 )); background-image:-webkit-linear-gradient( #b4b289,#FFFFd6 ); background-image: -moz-linear-gradient( #b4b289,#FFFFd6 ); background-image: -ms-linear-gradient( #b4b289,#FFFFd6 ); background-image: -o-linear-gradient( #b4b289,#FFFFd6 ); background-image: linear-gradient( #b4b289,#FFFFd6 );}.ui-btn-up-a:visited,.ui-btn-up-a a.ui-link-inherit{color:#000000 ;}.ui-btn-hover-a{border:1px solid #ffcacf ;background:#FFFFca ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #eaeab9 ),to( #FFFFda )); background-image:-webkit-linear-gradient( #eaeab9,#FFFFda ); background-image: -moz-linear-gradient( #eaeab9,#FFFFda ); background-image: -ms-linear-gradient( #eaeab9,#FFFFda ); background-image: -o-linear-gradient( #eaeab9,#FFFFda ); background-image: linear-gradient( #eaeab9,#FFFFda );}.ui-btn-hover-a:visited,.ui-btn-hover-a:hover,.ui-btn-hover-a a.ui-link-inherit{color:#000000 ;}.ui-btn-down-a{border:1px solid #FFFFca ;background:#FFFFca ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #e5e5b5 ),to( #FFFFde )); background-image:-webkit-linear-gradient( #e5e5b5,#FFFFde ); background-image: -moz-linear-gradient( #e5e5b5,#FFFFde ); background-image: -ms-linear-gradient( #e5e5b5,#FFFFde ); background-image: -o-linear-gradient( #e5e5b5,#FFFFde ); background-image: linear-gradient( #e5e5b5,#FFFFde );}.ui-btn-down-a:visited,.ui-btn-down-a:hover,.ui-btn-down-a a.ui-link-inherit{color:#000000 ;}.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-b{border:1px solid #bcecff ;background:#bcecff ;color:#000000 ;font-weight:bold;text-shadow:0 1px 1px #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ceFFFF ),to( #a9d4e5 )); background-image:-webkit-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -moz-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -ms-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -o-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: linear-gradient( #ceFFFF,#a9d4e5 );}.ui-bar-b .ui-link-inherit{color:#000000 ;}.ui-bar-b a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-b a.ui-link:visited{ color:#2489ce ;}.ui-bar-b a.ui-link:hover{color:#2489ce ;}.ui-bar-b a.ui-link:active{color:#2489ce ;}.ui-bar-b,.ui-bar-b input,.ui-bar-b select,.ui-bar-b textarea,.ui-bar-b button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-b,.ui-overlay-b{border:1px solid #7e7e7e ;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background:#e6e6e6 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #fdfdfd ),to( #cfcfcf )); background-image:-webkit-linear-gradient( #fdfdfd,#cfcfcf ); background-image: -moz-linear-gradient( #fdfdfd,#cfcfcf ); background-image: -ms-linear-gradient( #fdfdfd,#cfcfcf ); background-image: -o-linear-gradient( #fdfdfd,#cfcfcf ); background-image: linear-gradient( #fdfdfd,#cfcfcf );}.ui-overlay-b{background-image:none;border-width:0;}.ui-body-b,.ui-body-b input,.ui-body-b select,.ui-body-b textarea,.ui-body-b button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-b .ui-link-inherit{color:#000000 ;}.ui-body-b .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-b .ui-link:visited{ color:#2489ce ;}.ui-body-b .ui-link:hover{color:#2489ce ;}.ui-body-b .ui-link:active{color:#2489ce ;}.ui-btn-up-b{border:1px solid #ffd7c6 ;background:#ffd7c6 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FFecd9 ),to( #e5c1b2 )); background-image:-webkit-linear-gradient( #FFecd9,#e5c1b2 ); background-image: -moz-linear-gradient( #FFecd9,#e5c1b2 ); background-image: -ms-linear-gradient( #FFecd9,#e5c1b2 ); background-image: -o-linear-gradient( #FFecd9,#e5c1b2 ); background-image: linear-gradient( #FFecd9,#e5c1b2 );}.ui-btn-up-b:visited,.ui-btn-up-b a.ui-link-inherit{color:#000000 ;}.ui-btn-hover-b{border:1px solid #FFf7e3 ;background:#FFf7e3 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FFFFf9 ),to( #e5decc )); background-image:-webkit-linear-gradient( #FFFFf9,#e5decc ); background-image: -moz-linear-gradient( #FFFFf9,#e5decc ); background-image: -ms-linear-gradient( #FFFFf9,#e5decc ); background-image: -o-linear-gradient( #FFFFf9,#e5decc ); background-image: linear-gradient( #FFFFf9,#e5decc );}.ui-btn-hover-b:visited,.ui-btn-hover-b:hover,.ui-btn-hover-b a.ui-link-inherit{color:#000000 ;}.ui-btn-down-b{border:1px solid #FFf7e3 ;background:#FFf7e3 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #e5decc ),to( #FFFFf9 )); background-image:-webkit-linear-gradient( #e5decc,#FFFFf9 ); background-image: -moz-linear-gradient( #e5decc,#FFFFf9 ); background-image: -ms-linear-gradient( #e5decc,#FFFFf9 ); background-image: -o-linear-gradient( #e5decc,#FFFFf9 ); background-image: linear-gradient( #e5decc,#FFFFf9 );}.ui-btn-down-b:visited,.ui-btn-down-b:hover,.ui-btn-down-b a.ui-link-inherit{color:#000000 ;}.ui-btn-up-b,.ui-btn-hover-b,.ui-btn-down-b{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-c{border:1px solid #b3b3b3 ;background:#eeeeee ;color:#3e3e3e ;font-weight:bold;text-shadow:0 1px 1px #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f0f0f0 ),to( #dddddd )); background-image:-webkit-linear-gradient( #f0f0f0,#dddddd ); background-image: -moz-linear-gradient( #f0f0f0,#dddddd ); background-image: -ms-linear-gradient( #f0f0f0,#dddddd ); background-image: -o-linear-gradient( #f0f0f0,#dddddd ); background-image: linear-gradient( #f0f0f0,#dddddd );}.ui-bar-c .ui-link-inherit{color:#3e3e3e ;}.ui-bar-c a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-c a.ui-link:visited{ color:#2489ce ;}.ui-bar-c a.ui-link:hover{color:#2489ce ;}.ui-bar-c a.ui-link:active{color:#2489ce ;}.ui-bar-c,.ui-bar-c input,.ui-bar-c select,.ui-bar-c textarea,.ui-bar-c button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-c,.ui-overlay-c{border:1px solid #aaaaaa ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#f9f9f9 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eeeeee )); background-image:-webkit-linear-gradient( #f9f9f9,#eeeeee ); background-image: -moz-linear-gradient( #f9f9f9,#eeeeee ); background-image: -ms-linear-gradient( #f9f9f9,#eeeeee ); background-image: -o-linear-gradient( #f9f9f9,#eeeeee ); background-image: linear-gradient( #f9f9f9,#eeeeee );}.ui-overlay-c{background-image:none;border-width:0;}.ui-body-c,.ui-body-c input,.ui-body-c select,.ui-body-c textarea,.ui-body-c button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-c .ui-link-inherit{color:#333333 ;}.ui-body-c .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-c .ui-link:visited{ color:#2489ce ;}.ui-body-c .ui-link:hover{color:#2489ce ;}.ui-body-c .ui-link:active{color:#2489ce ;}.ui-btn-up-c{border:1px solid #cccccc ;background:#eeeeee ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffffff ),to( #f1f1f1 )); background-image:-webkit-linear-gradient( #ffffff,#f1f1f1 ); background-image: -moz-linear-gradient( #ffffff,#f1f1f1 ); background-image: -ms-linear-gradient( #ffffff,#f1f1f1 ); background-image: -o-linear-gradient( #ffffff,#f1f1f1 ); background-image: linear-gradient( #ffffff,#f1f1f1 );}.ui-btn-up-c:visited,.ui-btn-up-c a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-hover-c{border:1px solid #bbbbbb ;background:#dfdfdf ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 )); background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -moz-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -ms-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -o-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: linear-gradient( #f6f6f6,#e0e0e0 );}.ui-btn-hover-c:visited,.ui-btn-hover-c:hover,.ui-btn-hover-c a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-down-c{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf )); background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -moz-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -ms-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -o-linear-gradient( #d0d0d0,#dfdfdf ); background-image: linear-gradient( #d0d0d0,#dfdfdf );}.ui-btn-down-c:visited,.ui-btn-down-c:hover,.ui-btn-down-c a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-d{border:1px solid #b3b3b3 ;background:#eeeeee ;color:#3e3e3e ;font-weight:bold;text-shadow:0 1px 1px #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f0f0f0 ),to( #dddddd )); background-image:-webkit-linear-gradient( #f0f0f0,#dddddd ); background-image: -moz-linear-gradient( #f0f0f0,#dddddd ); background-image: -ms-linear-gradient( #f0f0f0,#dddddd ); background-image: -o-linear-gradient( #f0f0f0,#dddddd ); background-image: linear-gradient( #f0f0f0,#dddddd );}.ui-bar-d .ui-link-inherit{color:#3e3e3e ;}.ui-bar-d a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-d a.ui-link:visited{ color:#2489ce ;}.ui-bar-d a.ui-link:hover{color:#2489ce ;}.ui-bar-d a.ui-link:active{color:#2489ce ;}.ui-bar-d,.ui-bar-d input,.ui-bar-d select,.ui-bar-d textarea,.ui-bar-d button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-d,.ui-overlay-d{border:1px solid #aaaaaa ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#f9f9f9 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eeeeee )); background-image:-webkit-linear-gradient( #f9f9f9,#eeeeee ); background-image: -moz-linear-gradient( #f9f9f9,#eeeeee ); background-image: -ms-linear-gradient( #f9f9f9,#eeeeee ); background-image: -o-linear-gradient( #f9f9f9,#eeeeee ); background-image: linear-gradient( #f9f9f9,#eeeeee );}.ui-overlay-d{background-image:none;border-width:0;}.ui-body-d,.ui-body-d input,.ui-body-d select,.ui-body-d textarea,.ui-body-d button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-d .ui-link-inherit{color:#333333 ;}.ui-body-d .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-d .ui-link:visited{ color:#2489ce ;}.ui-body-d .ui-link:hover{color:#2489ce ;}.ui-body-d .ui-link:active{color:#2489ce ;}.ui-btn-up-d{border:1px solid #cccccc ;background:#eeeeee ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffffff ),to( #f1f1f1 )); background-image:-webkit-linear-gradient( #ffffff,#f1f1f1 ); background-image: -moz-linear-gradient( #ffffff,#f1f1f1 ); background-image: -ms-linear-gradient( #ffffff,#f1f1f1 ); background-image: -o-linear-gradient( #ffffff,#f1f1f1 ); background-image: linear-gradient( #ffffff,#f1f1f1 );}.ui-btn-up-d:visited,.ui-btn-up-d a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-hover-d{border:1px solid #bbbbbb ;background:#dfdfdf ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 )); background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -moz-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -ms-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -o-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: linear-gradient( #f6f6f6,#e0e0e0 );}.ui-btn-hover-d:visited,.ui-btn-hover-d:hover,.ui-btn-hover-d a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-down-d{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf )); background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -moz-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -ms-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -o-linear-gradient( #d0d0d0,#dfdfdf ); background-image: linear-gradient( #d0d0d0,#dfdfdf );}.ui-btn-down-d:visited,.ui-btn-down-d:hover,.ui-btn-down-d a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-e{border:1px solid #b3b3b3 ;background:#eeeeee ;color:#3e3e3e ;font-weight:bold;text-shadow:0 1px 1px #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f0f0f0 ),to( #dddddd )); background-image:-webkit-linear-gradient( #f0f0f0,#dddddd ); background-image: -moz-linear-gradient( #f0f0f0,#dddddd ); background-image: -ms-linear-gradient( #f0f0f0,#dddddd ); background-image: -o-linear-gradient( #f0f0f0,#dddddd ); background-image: linear-gradient( #f0f0f0,#dddddd );}.ui-bar-e .ui-link-inherit{color:#3e3e3e ;}.ui-bar-e a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-e a.ui-link:visited{ color:#2489ce ;}.ui-bar-e a.ui-link:hover{color:#2489ce ;}.ui-bar-e a.ui-link:active{color:#2489ce ;}.ui-bar-e,.ui-bar-e input,.ui-bar-e select,.ui-bar-e textarea,.ui-bar-e button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-e,.ui-overlay-e{border:1px solid #aaaaaa ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#f9f9f9 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eeeeee )); background-image:-webkit-linear-gradient( #f9f9f9,#eeeeee ); background-image: -moz-linear-gradient( #f9f9f9,#eeeeee ); background-image: -ms-linear-gradient( #f9f9f9,#eeeeee ); background-image: -o-linear-gradient( #f9f9f9,#eeeeee ); background-image: linear-gradient( #f9f9f9,#eeeeee );}.ui-overlay-e{background-image:none;border-width:0;}.ui-body-e,.ui-body-e input,.ui-body-e select,.ui-body-e textarea,.ui-body-e button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-e .ui-link-inherit{color:#333333 ;}.ui-body-e .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-e .ui-link:visited{ color:#2489ce ;}.ui-body-e .ui-link:hover{color:#2489ce ;}.ui-body-e .ui-link:active{color:#2489ce ;}.ui-btn-up-e{border:1px solid #cccccc ;background:#eeeeee ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffffff ),to( #f1f1f1 )); background-image:-webkit-linear-gradient( #ffffff,#f1f1f1 ); background-image: -moz-linear-gradient( #ffffff,#f1f1f1 ); background-image: -ms-linear-gradient( #ffffff,#f1f1f1 ); background-image: -o-linear-gradient( #ffffff,#f1f1f1 ); background-image: linear-gradient( #ffffff,#f1f1f1 );}.ui-btn-up-e:visited,.ui-btn-up-e a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-hover-e{border:1px solid #bbbbbb ;background:#dfdfdf ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 )); background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -moz-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -ms-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -o-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: linear-gradient( #f6f6f6,#e0e0e0 );}.ui-btn-hover-e:visited,.ui-btn-hover-e:hover,.ui-btn-hover-e a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-down-e{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf )); background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -moz-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -ms-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -o-linear-gradient( #d0d0d0,#dfdfdf ); background-image: linear-gradient( #d0d0d0,#dfdfdf );}.ui-btn-down-e:visited,.ui-btn-down-e:hover,.ui-btn-down-e a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-up-e,.ui-btn-hover-e,.ui-btn-down-e{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-f{border:1px solid #b3b3b3 ;background:#eeeeee ;color:#3e3e3e ;font-weight:bold;text-shadow:0 1px 1px #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f0f0f0 ),to( #dddddd )); background-image:-webkit-linear-gradient( #f0f0f0,#dddddd ); background-image: -moz-linear-gradient( #f0f0f0,#dddddd ); background-image: -ms-linear-gradient( #f0f0f0,#dddddd ); background-image: -o-linear-gradient( #f0f0f0,#dddddd ); background-image: linear-gradient( #f0f0f0,#dddddd );}.ui-bar-f .ui-link-inherit{color:#3e3e3e ;}.ui-bar-f a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-f a.ui-link:visited{ color:#2489ce ;}.ui-bar-f a.ui-link:hover{color:#2489ce ;}.ui-bar-f a.ui-link:active{color:#2489ce ;}.ui-bar-f,.ui-bar-f input,.ui-bar-f select,.ui-bar-f textarea,.ui-bar-f button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-f,.ui-overlay-f{border:1px solid #aaaaaa ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#f9f9f9 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eeeeee )); background-image:-webkit-linear-gradient( #f9f9f9,#eeeeee ); background-image: -moz-linear-gradient( #f9f9f9,#eeeeee ); background-image: -ms-linear-gradient( #f9f9f9,#eeeeee ); background-image: -o-linear-gradient( #f9f9f9,#eeeeee ); background-image: linear-gradient( #f9f9f9,#eeeeee );}.ui-overlay-f{background-image:none;border-width:0;}.ui-body-f,.ui-body-f input,.ui-body-f select,.ui-body-f textarea,.ui-body-f button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-f .ui-link-inherit{color:#333333 ;}.ui-body-f .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-f .ui-link:visited{ color:#2489ce ;}.ui-body-f .ui-link:hover{color:#2489ce ;}.ui-body-f .ui-link:active{color:#2489ce ;}.ui-btn-up-f{border:1px solid #cccccc ;background:#eeeeee ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffffff ),to( #f1f1f1 )); background-image:-webkit-linear-gradient( #ffffff,#f1f1f1 ); background-image: -moz-linear-gradient( #ffffff,#f1f1f1 ); background-image: -ms-linear-gradient( #ffffff,#f1f1f1 ); background-image: -o-linear-gradient( #ffffff,#f1f1f1 ); background-image: linear-gradient( #ffffff,#f1f1f1 );}.ui-btn-up-f:visited,.ui-btn-up-f a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-hover-f{border:1px solid #bbbbbb ;background:#dfdfdf ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 )); background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -moz-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -ms-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -o-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: linear-gradient( #f6f6f6,#e0e0e0 );}.ui-btn-hover-f:visited,.ui-btn-hover-f:hover,.ui-btn-hover-f a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-down-f{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf )); background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -moz-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -ms-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -o-linear-gradient( #d0d0d0,#dfdfdf ); background-image: linear-gradient( #d0d0d0,#dfdfdf );}.ui-btn-down-f:visited,.ui-btn-down-f:hover,.ui-btn-down-f a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-up-f,.ui-btn-hover-f,.ui-btn-down-f{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-g{border:1px solid #ed1c24 ;background:#ed1c24 ;color:#ffffff ;font-weight:bold;text-shadow:0 1px 1px #444444 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FF1e27 ),to( #d51920 )); background-image:-webkit-linear-gradient( #FF1e27,#d51920 ); background-image: -moz-linear-gradient( #FF1e27,#d51920 ); background-image: -ms-linear-gradient( #FF1e27,#d51920 ); background-image: -o-linear-gradient( #FF1e27,#d51920 ); background-image: linear-gradient( #FF1e27,#d51920 );}.ui-bar-g .ui-link-inherit{color:#ffffff ;}.ui-bar-g a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-g a.ui-link:visited{ color:#2489ce ;}.ui-bar-g a.ui-link:hover{color:#2489ce ;}.ui-bar-g a.ui-link:active{color:#2489ce ;}.ui-bar-g,.ui-bar-g input,.ui-bar-g select,.ui-bar-g textarea,.ui-bar-g button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-g,.ui-overlay-g{border:1px solid #aaaaaa ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#f9f9f9 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eeeeee )); background-image:-webkit-linear-gradient( #f9f9f9,#eeeeee ); background-image: -moz-linear-gradient( #f9f9f9,#eeeeee ); background-image: -ms-linear-gradient( #f9f9f9,#eeeeee ); background-image: -o-linear-gradient( #f9f9f9,#eeeeee ); background-image: linear-gradient( #f9f9f9,#eeeeee );}.ui-overlay-g{background-image:none;border-width:0;}.ui-body-g,.ui-body-g input,.ui-body-g select,.ui-body-g textarea,.ui-body-g button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-g .ui-link-inherit{color:#333333 ;}.ui-body-g .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-g .ui-link:visited{ color:#2489ce ;}.ui-body-g .ui-link:hover{color:#2489ce ;}.ui-body-g .ui-link:active{color:#2489ce ;}.ui-btn-up-g{border:1px solid #cccccc ;background:#eeeeee ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffffff ),to( #f1f1f1 )); background-image:-webkit-linear-gradient( #ffffff,#f1f1f1 ); background-image: -moz-linear-gradient( #ffffff,#f1f1f1 ); background-image: -ms-linear-gradient( #ffffff,#f1f1f1 ); background-image: -o-linear-gradient( #ffffff,#f1f1f1 ); background-image: linear-gradient( #ffffff,#f1f1f1 );}.ui-btn-up-g:visited,.ui-btn-up-g a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-hover-g{border:1px solid #bbbbbb ;background:#dfdfdf ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 )); background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -moz-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -ms-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -o-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: linear-gradient( #f6f6f6,#e0e0e0 );}.ui-btn-hover-g:visited,.ui-btn-hover-g:hover,.ui-btn-hover-g a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-down-g{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf )); background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -moz-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -ms-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -o-linear-gradient( #d0d0d0,#dfdfdf ); background-image: linear-gradient( #d0d0d0,#dfdfdf );}.ui-btn-down-g:visited,.ui-btn-down-g:hover,.ui-btn-down-g a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-up-g,.ui-btn-hover-g,.ui-btn-down-g{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}a.ui-link-inherit{text-decoration:none !important;}.ui-btn-active{border:1px solid #33cccc ;background:#bcecff ;font-weight:bold;color:#000000 ;cursor:pointer;text-shadow:0 1px 1px #eeeeee ;text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from( #ceFFFF ),to( #a9d4e5 )); background-image:-webkit-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -moz-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -ms-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -o-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: linear-gradient( #ceFFFF,#a9d4e5 ); font-family:Helvetica,Arial,sans-serif ;}.ui-btn-active:visited,.ui-btn-active:hover,.ui-btn-active a.ui-link-inherit{color:#000000 ;}.ui-btn-inner{border-top:1px solid #fff;border-color:rgba(255,255,255,.3);}.ui-corner-tl{-moz-border-radius-topleft:.6em ;-webkit-border-top-left-radius:.6em ;border-top-left-radius:.6em ;}.ui-corner-tr{-moz-border-radius-topright:.6em ;-webkit-border-top-right-radius:.6em ;border-top-right-radius:.6em ;}.ui-corner-bl{-moz-border-radius-bottomleft:.6em ;-webkit-border-bottom-left-radius:.6em ;border-bottom-left-radius:.6em ;}.ui-corner-br{-moz-border-radius-bottomright:.6em ;-webkit-border-bottom-right-radius:.6em ;border-bottom-right-radius:.6em ;}.ui-corner-top{-moz-border-radius-topleft:.6em ;-webkit-border-top-left-radius:.6em ;border-top-left-radius:.6em ;-moz-border-radius-topright:.6em ;-webkit-border-top-right-radius:.6em ;border-top-right-radius:.6em ;}.ui-corner-bottom{-moz-border-radius-bottomleft:.6em ;-webkit-border-bottom-left-radius:.6em ;border-bottom-left-radius:.6em ;-moz-border-radius-bottomright:.6em ;-webkit-border-bottom-right-radius:.6em ;border-bottom-right-radius:.6em ;}.ui-corner-right{-moz-border-radius-topright:.6em ;-webkit-border-top-right-radius:.6em ;border-top-right-radius:.6em ;-moz-border-radius-bottomright:.6em ;-webkit-border-bottom-right-radius:.6em ;border-bottom-right-radius:.6em ;}.ui-corner-left{-moz-border-radius-topleft:.6em ;-webkit-border-top-left-radius:.6em ;border-top-left-radius:.6em ;-moz-border-radius-bottomleft:.6em ;-webkit-border-bottom-left-radius:.6em ;border-bottom-left-radius:.6em ;}.ui-corner-all{-moz-border-radius:.6em ;-webkit-border-radius:.6em ;border-radius:.6em ;}.ui-corner-none{-moz-border-radius: 0;-webkit-border-radius: 0;border-radius: 0;}.ui-br{border-bottom:rgb(130,130,130);border-bottom:rgba(130,130,130,.3);border-bottom-width:1px;border-bottom-style:solid;}.ui-disabled{filter:Alpha(Opacity=30);opacity:.3;zoom:1;}.ui-disabled,.ui-disabled a{cursor:default !important;pointer-events:none;}.ui-icon,.ui-icon-searchfield:after{background:#000000 ;background:rgba(0,0,0,0.4) ;background-image:url(images/icons-18-white.png) ;background-repeat:no-repeat;-moz-border-radius:9px;-webkit-border-radius:9px;border-radius:9px;}.ui-icon-alt{background:#fff;background:rgba(255,255,255,.3);background-image:url(images/icons-18-black.png);background-repeat:no-repeat;}@media only screen and (-webkit-min-device-pixel-ratio:1.5), only screen and (min--moz-device-pixel-ratio:1.5), only screen and (min-resolution:240dpi){.ui-icon-plus,.ui-icon-minus,.ui-icon-delete,.ui-icon-arrow-r,.ui-icon-arrow-l,.ui-icon-arrow-u,.ui-icon-arrow-d,.ui-icon-check,.ui-icon-gear,.ui-icon-refresh,.ui-icon-forward,.ui-icon-back,.ui-icon-grid,.ui-icon-star,.ui-icon-alert,.ui-icon-info,.ui-icon-home,.ui-icon-search,.ui-icon-searchfield:after,.ui-icon-checkbox-off,.ui-icon-checkbox-on,.ui-icon-radio-off,.ui-icon-radio-on{background-image:url(images/icons-36-white.png);-moz-background-size:776px 18px;-o-background-size:776px 18px;-webkit-background-size:776px 18px;background-size:776px 18px;}.ui-icon-alt{background-image:url(images/icons-36-black.png);}}.ui-icon-plus{background-position:-0 50%;}.ui-icon-minus{background-position:-36px 50%;}.ui-icon-delete{background-position:-72px 50%;}.ui-icon-arrow-r{background-position:-108px 50%;}.ui-icon-arrow-l{background-position:-144px 50%;}.ui-icon-arrow-u{background-position:-180px 50%;}.ui-icon-arrow-d{background-position:-216px 50%;}.ui-icon-check{background-position:-252px 50%;}.ui-icon-gear{background-position:-288px 50%;}.ui-icon-refresh{background-position:-324px 50%;}.ui-icon-forward{background-position:-360px 50%;}.ui-icon-back{background-position:-396px 50%;}.ui-icon-grid{background-position:-432px 50%;}.ui-icon-star{background-position:-468px 50%;}.ui-icon-alert{background-position:-504px 50%;}.ui-icon-info{background-position:-540px 50%;}.ui-icon-home{background-position:-576px 50%;}.ui-icon-search,.ui-icon-searchfield:after{background-position:-612px 50%;}.ui-icon-checkbox-off{background-position:-684px 50%;}.ui-icon-checkbox-on{background-position:-648px 50%;}.ui-icon-radio-off{background-position:-756px 50%;}.ui-icon-radio-on{background-position:-720px 50%;}.ui-checkbox .ui-icon,.ui-selectmenu-list .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}.ui-icon-checkbox-off,.ui-icon-radio-off{background-color:transparent;}.ui-checkbox-on .ui-icon,.ui-radio-on .ui-icon{background-color:#bcecff ; }.ui-icon-loading{background:url(images/ajax-loader.gif);background-size:46px 46px;}.ui-btn-corner-tl{-moz-border-radius-topleft:1em ;-webkit-border-top-left-radius:1em ;border-top-left-radius:1em ;}.ui-btn-corner-tr{-moz-border-radius-topright:1em ;-webkit-border-top-right-radius:1em ;border-top-right-radius:1em ;}.ui-btn-corner-bl{-moz-border-radius-bottomleft:1em ;-webkit-border-bottom-left-radius:1em ;border-bottom-left-radius:1em ;}.ui-btn-corner-br{-moz-border-radius-bottomright:1em ;-webkit-border-bottom-right-radius:1em ;border-bottom-right-radius:1em ;}.ui-btn-corner-top{-moz-border-radius-topleft:1em ;-webkit-border-top-left-radius:1em ;border-top-left-radius:1em ;-moz-border-radius-topright:1em ;-webkit-border-top-right-radius:1em ;border-top-right-radius:1em ;}.ui-btn-corner-bottom{-moz-border-radius-bottomleft:1em ;-webkit-border-bottom-left-radius:1em ;border-bottom-left-radius:1em ;-moz-border-radius-bottomright:1em ;-webkit-border-bottom-right-radius:1em ;border-bottom-right-radius:1em ;}.ui-btn-corner-right{-moz-border-radius-topright:1em ;-webkit-border-top-right-radius:1em ;border-top-right-radius:1em ;-moz-border-radius-bottomright:1em ;-webkit-border-bottom-right-radius:1em ;border-bottom-right-radius:1em ;}.ui-btn-corner-left{-moz-border-radius-topleft:1em ;-webkit-border-top-left-radius:1em ;border-top-left-radius:1em ;-moz-border-radius-bottomleft:1em ;-webkit-border-bottom-left-radius:1em ;border-bottom-left-radius:1em ;}.ui-btn-corner-all{-moz-border-radius:1em ;-webkit-border-radius:1em ;border-radius:1em ;}.ui-corner-tl,.ui-corner-tr,.ui-corner-bl,.ui-corner-br,.ui-corner-top,.ui-corner-bottom,.ui-corner-right,.ui-corner-left,.ui-corner-all,.ui-btn-corner-tl,.ui-btn-corner-tr,.ui-btn-corner-bl,.ui-btn-corner-br,.ui-btn-corner-top,.ui-btn-corner-bottom,.ui-btn-corner-right,.ui-btn-corner-left,.ui-btn-corner-all{ -webkit-background-clip:padding-box; -moz-background-clip:padding; background-clip:padding-box;}.ui-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5;position:absolute;width:100%;height:100%;}.ui-overlay-shadow{-moz-box-shadow:0px 0px 12px rgba(0,0,0,.6);-webkit-box-shadow:0px 0px 12px rgba(0,0,0,.6);box-shadow:0px 0px 12px rgba(0,0,0,.6);}.ui-shadow{-moz-box-shadow:0px 1px 4px rgba(0,0,0,.3) ;-webkit-box-shadow:0px 1px 4px rgba(0,0,0,.3) ;box-shadow:0px 1px 4px rgba(0,0,0,.3) ;}.ui-bar-a .ui-shadow,.ui-bar-b .ui-shadow,.ui-bar-c .ui-shadow {-moz-box-shadow:0px 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0px 1px 0 rgba(255,255,255,.3);box-shadow:0px 1px 0 rgba(255,255,255,.3);}.ui-shadow-inset{-moz-box-shadow:inset 0px 1px 4px rgba(0,0,0,.2);-webkit-box-shadow:inset 0px 1px 4px rgba(0,0,0,.2);box-shadow:inset 0px 1px 4px rgba(0,0,0,.2);}.ui-icon-shadow{-moz-box-shadow:0px 1px 0 rgba(255,255,255,.4) ;-webkit-box-shadow:0px 1px 0 rgba(255,255,255,.4) ;box-shadow:0px 1px 0 rgba(255,255,255,.4) ;}.ui-btn:focus,.ui-link-inherit:focus{outline:0;}.ui-btn.ui-focus{z-index:1;}.ui-focus,.ui-btn:focus{-moz-box-shadow:inset 0px 0px 3px #bcecff,0px 0px 9px #bcecff ;-webkit-box-shadow:inset 0px 0px 3px #bcecff,0px 0px 9px #bcecff ;box-shadow:inset 0px 0px 3px #bcecff,0px 0px 9px #bcecff ;}.ui-input-text.ui-focus,.ui-input-search.ui-focus{-moz-box-shadow:0px 0px 12px #bcecff ;-webkit-box-shadow:0px 0px 12px #bcecff ;box-shadow:0px 0px 12px #bcecff ;}.ui-mobile-nosupport-boxshadow *{-moz-box-shadow:none !important;-webkit-box-shadow:none !important;box-shadow:none !important;}.ui-mobile-nosupport-boxshadow .ui-focus,.ui-mobile-nosupport-boxshadow .ui-btn:focus,.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus{outline-width:1px;outline-style:auto;}
@@ -0,0 +1,37 @@
1
+ @font-face {
2
+ font-family: 'TH SarabunPSK';
3
+ src: url('fonts/thsarabunnew-webfont.eot');
4
+ src: url('fonts/thsarabunnew-webfont.eot?#iefix') format('embedded-opentype'),
5
+ url('fonts/thsarabunnew-webfont.woff') format('woff'),
6
+ url('fonts/thsarabunnew-webfont.ttf') format('truetype');
7
+ font-weight: normal;
8
+ font-style: normal;
9
+ }
10
+ @font-face {
11
+ font-family: 'TH SarabunPSK';
12
+ font-style: normal;
13
+ font-weight: bold;
14
+ src: url('fonts/thsarabunnew_bold-webfont.eot');
15
+ src: url('fonts/thsarabunnew_bold-webfont.eot?#iefix') format('embedded-opentype'),
16
+ url('fonts/thsarabunnew_bold-webfont.woff') format('woff'),
17
+ url('fonts/thsarabunnew_bold-webfont.ttf') format('truetype');
18
+ }
19
+ @font-face {
20
+ font-family: 'TH SarabunPSK';
21
+ font-style: italic;
22
+ font-weight: bold;
23
+ src: url('fonts/thsarabunnew_bolditalic-webfont.eot');
24
+ src: url('fonts/thsarabunnew_bolditalic-webfont.eot?#iefix') format('embedded-opentype'),
25
+ url('fonts/thsarabunnew_bolditalic-webfont.woff') format('woff'),
26
+ url('fonts/thsarabunnew_bolditalic-webfont.ttf') format('truetype');
27
+ }
28
+ @font-face {
29
+ font-family: 'TH SarabunPSK';
30
+ font-style: italic;
31
+ font-weight: normal;
32
+ src: url('fonts/thsarabunnew_italic-webfont.eot');
33
+ src: url('fonts/thsarabunnew_italic-webfont.eot?#iefix') format('embedded-opentype'),
34
+ url('fonts/thsarabunnew_italic-webfont.woff') format('woff'),
35
+ url('fonts/thsarabunnew_italic-webfont.ttf') format('truetype');
36
+ }
37
+
@@ -0,0 +1,133 @@
1
+ html * {
2
+ font-family: 'Montserrat', sans-serif;
3
+ box-sizing: border-box;
4
+ }
5
+
6
+ body {
7
+ background: #4688F1;
8
+ padding: 0;
9
+ margin: 0;
10
+ }
11
+
12
+ .login-box {
13
+ padding: 20px;
14
+ max-width: 480px;
15
+ margin: 5vh auto;
16
+ text-align: center;
17
+ letter-spacing: 1px;
18
+ position: relative;
19
+ }
20
+
21
+ .login-box:hover {
22
+ box-shadow: 0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
23
+ }
24
+
25
+ .login-box h2 {
26
+ margin: 20px 0 20px;
27
+ padding: 0;
28
+ text-transform: uppercase;
29
+ color: #4688F1;
30
+ }
31
+
32
+ .social-button {
33
+ background-position: 25px 0px;
34
+ box-sizing: border-box;
35
+ color: rgb(255, 255, 255);
36
+ cursor: pointer;
37
+ display: inline-block;
38
+ height: 50px;
39
+ line-height: 50px;
40
+ text-align: left;
41
+ text-decoration: none;
42
+ text-transform: uppercase;
43
+ vertical-align: middle;
44
+ width: 100%;
45
+ border-radius: 3px;
46
+ margin: 10px auto;
47
+ outline: rgb(255, 255, 255) none 0px;
48
+ padding-left: 20%;
49
+ transition: all 0.2s cubic-bezier(0.72, 0.01, 0.56, 1) 0s;
50
+ -webkit-transition: all .3s ease;
51
+ -moz-transition: all .3s ease;
52
+ -ms-transition: all .3s ease;
53
+ -o-transition: all .3s ease;
54
+ transition: all .3s ease;
55
+ }
56
+
57
+ #facebook-connect {
58
+ background: rgb(255, 255, 255) url('https://eswarasai.com/projects/social-login/img/facebook.svg') no-repeat scroll 5px 0px / 30px 50px padding-box border-box;
59
+ border: 1px solid rgb(60, 90, 154);
60
+ }
61
+
62
+ #facebook-connect:hover {
63
+ border-color: rgb(60, 90, 154);
64
+ background: rgb(60, 90, 154) url('https://eswarasai.com/projects/social-login/img/facebook-white.svg') no-repeat scroll 5px 0px / 30px 50px padding-box border-box;
65
+ -webkit-transition: all .8s ease-out;
66
+ -moz-transition: all .3s ease;
67
+ -ms-transition: all .3s ease;
68
+ -o-transition: all .3s ease;
69
+ transition: all .3s ease-out;
70
+ }
71
+
72
+ #facebook-connect span {
73
+ box-sizing: border-box;
74
+ color: rgb(60, 90, 154);
75
+ cursor: pointer;
76
+ text-align: center;
77
+ text-transform: uppercase;
78
+ border: 0px none rgb(255, 255, 255);
79
+ outline: rgb(255, 255, 255) none 0px;
80
+ -webkit-transition: all .3s ease;
81
+ -moz-transition: all .3s ease;
82
+ -ms-transition: all .3s ease;
83
+ -o-transition: all .3s ease;
84
+ transition: all .3s ease;
85
+ }
86
+
87
+ #facebook-connect:hover span {
88
+ color: #FFF;
89
+ -webkit-transition: all .3s ease;
90
+ -moz-transition: all .3s ease;
91
+ -ms-transition: all .3s ease;
92
+ -o-transition: all .3s ease;
93
+ transition: all .3s ease;
94
+ }
95
+
96
+ #google-connect {
97
+ background: rgb(255, 255, 255) url('https://eswarasai.com/projects/social-login/img/google-plus.png') no-repeat scroll 5px 0px / 50px 50px padding-box border-box;
98
+ border: 1px solid rgb(220, 74, 61);
99
+ }
100
+
101
+ #google-connect:hover {
102
+ border-color: rgb(220, 74, 61);
103
+ background: rgb(220, 74, 61) url('https://eswarasai.com/projects/social-login/img/google-plus-white.png') no-repeat scroll 5px 0px / 50px 50px padding-box border-box;
104
+ -webkit-transition: all .8s ease-out;
105
+ -moz-transition: all .3s ease;
106
+ -ms-transition: all .3s ease;
107
+ -o-transition: all .3s ease;
108
+ transition: all .3s ease-out;
109
+ }
110
+
111
+ #google-connect span {
112
+ box-sizing: border-box;
113
+ color: rgb(220, 74, 61);
114
+ cursor: pointer;
115
+ text-align: center;
116
+ text-transform: uppercase;
117
+ border: 0px none rgb(220, 74, 61);
118
+ outline: rgb(255, 255, 255) none 0px;
119
+ -webkit-transition: all .3s ease;
120
+ -moz-transition: all .3s ease;
121
+ -ms-transition: all .3s ease;
122
+ -o-transition: all .3s ease;
123
+ transition: all .3s ease;
124
+ }
125
+
126
+ #google-connect:hover span {
127
+ color: #FFF;
128
+ -webkit-transition: all .3s ease;
129
+ -moz-transition: all .3s ease;
130
+ -ms-transition: all .3s ease;
131
+ -o-transition: all .3s ease;
132
+ transition: all .3s ease;
133
+ }
@@ -0,0 +1,4 @@
1
+ module ApplicationCable
2
+ class Channel < ActionCable::Channel::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ApplicationCable
2
+ class Connection < ActionCable::Connection::Base
3
+ end
4
+ end
@@ -0,0 +1,81 @@
1
+ class Api::V1::NotesController < ApplicationController
2
+ before_action :load_note, only: [:show, :destroy]
3
+ # before_action :xload_current_ma_user, only: [:destroy]
4
+
5
+ def index
6
+ @notes = Note.desc(:created_at).page(params[:page]).per(10)
7
+ render json: @notes
8
+ end
9
+
10
+ def my
11
+ @notes = Note.where(user_id: current_ma_user).desc(:created_at).page(params[:page]).per(10)
12
+ render json: @notes
13
+ end
14
+
15
+ def show
16
+ end
17
+
18
+ def edit
19
+ @note = Note.find(params[:id])
20
+ @page_title = 'Edit Note'
21
+ end
22
+
23
+ def create
24
+ @note = Note.new(
25
+ title: params[:title],
26
+ body: params[:body],
27
+ user_id: params[:user])
28
+
29
+ @note.save!
30
+ render json: @note, status: :created
31
+ end
32
+
33
+
34
+ def update
35
+ # $xvars["select_note"] and $xvars["edit_note"]
36
+ # These are variables.
37
+ # They contain everything that we get their forms select_note and edit_note
38
+ note_id = $xvars["select_note"] ? $xvars["select_note"]["id"] : $xvars["p"]["note_id"]
39
+ @note = Note.find(note_id)
40
+ @note.update(title: $xvars["edit_note"]["title"],
41
+ body: $xvars["edit_note"]["body"])
42
+ redirect_to @note
43
+
44
+ end
45
+
46
+ def delete
47
+ # called by freemind
48
+ # Tobe called from other controller:jinda
49
+ @note_id = $xvars["select_note"] ? $xvars["select_note"]["id"] : $xvars["p"]["note_id"]
50
+ @note = Note.find(@note_id)
51
+ @note.destroy
52
+ end
53
+
54
+ def destroy
55
+ # called by rails menu my
56
+ if current_ma_user.role.upcase.split(',').include?("A") || current_ma_user == @note.user
57
+ @note.destroy
58
+ end
59
+ redirect_to :action=>'my'
60
+ end
61
+
62
+ def mail
63
+ NoteMailer.gmail(
64
+ $xvars["display_mail"]["body"],
65
+ $xvars["select_note"]["email"],
66
+ $xvars["display_mail"]["title"],
67
+ xload_current_ma_user.email)
68
+ end
69
+
70
+ private
71
+
72
+ # Tobe called from other controller:jinda
73
+ def xload_current_ma_user
74
+ @current_ma_user = User.find($xvars["user_id"])
75
+ end
76
+
77
+ def load_note
78
+ @note = Note.find(params[:id])
79
+ end
80
+
81
+ end
@@ -0,0 +1,2 @@
1
+ class CtrsController < ApplicationController
2
+ end
@@ -0,0 +1,6 @@
1
+ class AdminsController < ApplicationController
2
+ def update_role
3
+ user = User.find_by :code=> $xvars["select_user"]["code"]
4
+ user.update_attribute :role, $xvars["edit_role"]["role"]
5
+ end
6
+ end
@@ -0,0 +1,42 @@
1
+ class ApplicationController < ActionController::Base
2
+ # https://www.cookieshq.co.uk/posts/easy-seo-metatags-with-rails-4#a-word-about-turbolinks
3
+ before_action :prepare_meta_tags, if: -> { request.get? }
4
+ # CSRF protection is turned on with the protect_from_forgery method.
5
+ protect_from_forgery unless: -> { request.format.json? }
6
+ def prepare_meta_tags(options={})
7
+ site_name = DEFAULT_TITLE
8
+ title = [controller_name, action_name].join(" ")
9
+ description = DEFAULT_DESCRIPTION
10
+ image = options[:image] || href="/assets/images/logo.png"
11
+ keywords = DEFAULT_KEYWORDS
12
+ current_url = request.url
13
+
14
+ # Let's prepare a nice set of defaults
15
+ defaults = {
16
+ site: site_name,
17
+ title: title,
18
+ image: image,
19
+ description: description,
20
+ keywords: keywords,
21
+ twitter: {
22
+ site_name: site_name,
23
+ site: site_name,
24
+ card: 'summary',
25
+ description: description,
26
+ image: image
27
+ },
28
+ og: {
29
+ url: current_url,
30
+ site_name: site_name,
31
+ title: title,
32
+ image: image,
33
+ description: description,
34
+ type: 'website'
35
+ }
36
+ }
37
+
38
+ options.reverse_merge!(defaults)
39
+
40
+ set_meta_tags options
41
+ end
42
+ end
@@ -0,0 +1,81 @@
1
+ class ArticlesController < ApplicationController
2
+ before_action :load_article, only: [:show,]
3
+ before_action :load_edit_article, only: [:edit, :destroy]
4
+ before_action :load_comments, only: [:show]
5
+
6
+ def index
7
+ @articles = Article.desc(:created_at).page(params[:page]).per(10)
8
+ end
9
+
10
+ def show
11
+ prepare_meta_tags(title: @article.title,
12
+ description: @article.text,
13
+ keywords: @article.keywords)
14
+ end
15
+
16
+ def edit
17
+ @page_title = 'Member Login'
18
+ end
19
+
20
+ def create
21
+ @article = Article.new(
22
+ title: $xvars["form_article"]["title"],
23
+ text: $xvars["form_article"]["text"],
24
+ keywords: $xvars["form_article"]["keywords"],
25
+ body: $xvars["form_article"]["body"],
26
+ user_id: $xvars["user_id"])
27
+ @article.save!
28
+ end
29
+
30
+ def my
31
+ @articles = Article.where(user_id: current_ma_user).desc(:created_at).page(params[:page]).per(10)
32
+ @page_title = 'Member Login'
33
+ end
34
+
35
+ def update
36
+ # $xvars["select_article"] and $xvars["edit_article"]
37
+ # These are variables with params when called
38
+ # They contain everything that we get their forms select_article and edit_article
39
+
40
+ article_id = $xvars["select_article"] ? $xvars["select_article"]["title"] : $xvars["p"]["article_id"]
41
+ @article = Article.find(article_id)
42
+ @article.update(title: $xvars["edit_article"]["title"],
43
+ text: $xvars["edit_article"]["text"],
44
+ keywords: $xvars["edit_article"]["keywords"],
45
+ body: $xvars["edit_article"]["body"]
46
+ )
47
+ end
48
+
49
+ def destroy
50
+ #
51
+ # duplicated from jinda_controller
52
+ # Expected to use in jinda)controller
53
+ current_ma_user = User.where(:auth_token => cookies[:auth_token]).first if cookies[:auth_token]
54
+
55
+ if Rails.env.test? #Temp solution until fix test of current_ma_user
56
+ current_ma_user = $xvars["current_ma_user"]
57
+ #current_ma_user = @article.user
58
+ end
59
+
60
+ if current_ma_user.role.upcase.split(',').include?("A") || current_ma_user == @article.user
61
+ @article.destroy
62
+ end
63
+
64
+ redirect_to :action=>'my'
65
+ end
66
+
67
+ private
68
+
69
+ def load_edit_article
70
+ @article = Article.find(params.require(:article_id))
71
+ end
72
+
73
+ def load_article
74
+ @article = Article.find(params.permit(:id))
75
+ end
76
+
77
+ def load_comments
78
+ @comments = @article.comments.find_all
79
+ end
80
+
81
+ end
@@ -0,0 +1,17 @@
1
+ class CommentsController < ApplicationController
2
+
3
+ def create
4
+ # $xvars['p'] is the query parameters like params in rails guide:
5
+ # private
6
+ # def comment_params
7
+ # params.require(:comment).permit(:commenter, :body)
8
+ # end
9
+ #
10
+ @article = Article.find($xvars['p']['comment']['article_id'])
11
+ @comment = @article.comments.new(
12
+ body: $xvars['p']['comment']['body'],
13
+ user_id: $xvars["user_id"])
14
+ @comment.save!
15
+ end
16
+
17
+ end
@@ -0,0 +1,2 @@
1
+ class DevsController < ApplicationController
2
+ end
@@ -0,0 +1,5 @@
1
+ class IdentitiesController < ApplicationController
2
+ def new
3
+ @identity =request.env['omniauth.identity']
4
+ end
5
+ end
@@ -0,0 +1,579 @@
1
+ # -*- encoding : utf-8 -*-
2
+ ###################################################### @runseq ####################################################
3
+ # @runseq => #<Jinda::Runseq _id: 5df31912a54d758417a7afc9,
4
+ # created_at: 2019-12-13 04:52:34 UTC,
5
+ # updated_at: 2019-12-13 04:52:43 UTC,
6
+ # user_id: nil,
7
+ # xmain_id: BSON::ObjectId('5df31912a54d758417a7afc7'),
8
+ # action: "do",
9
+ # status: "R",
10
+ # code: "create",
11
+ # name: "Create Article",
12
+ # role: "",
13
+ # rule: "true",
14
+ # rstep: 2,
15
+ # form_step: 1,
16
+ # start: 2019-12-13 04:52:43 UTC,
17
+ # stop: nil,
18
+ # end: true,
19
+ # xml: "<node CREATED='1493419491125' ID='ID_1687683396' MODIFIED='1493483244848' TEXT='create: Create Article'><icon BUILTIN='bookmark'/></node>",
20
+ # ip: nil>
21
+
22
+ ######################################################################################################################
23
+
24
+ class JindaController < ApplicationController
25
+ def index
26
+ end
27
+ def logs
28
+ @xmains = Jinda::Xmain.all.desc(:created_at).page(params[:page]).per(10)
29
+ end
30
+ def error_logs
31
+ @xmains = Jinda::Xmain.in(status:['E']).desc(:created_at).page(params[:page]).per(10)
32
+ end
33
+ def notice_logs
34
+ @notices= Jinda::Notice.desc(:created_at).page(params[:page]).per(10)
35
+ end
36
+ def pending
37
+ @title= "Pending Tasks"
38
+ @xmains = Jinda::Xmain.in(status:['R','I']).asc(:created_at)
39
+ end
40
+ def cancel
41
+ Jinda::Xmain.find(params[:id]).update_attributes :status=>'X'
42
+ if params[:return]
43
+ redirect_to params[:return]
44
+ else
45
+ redirect_to action:"pending"
46
+ end
47
+ end
48
+ def clear_xmains
49
+ Jinda::Xmain.where(:status =>{'$in'=>['R','I']}).update_all(:status=>'X')
50
+ redirect_to action:"pending"
51
+ end
52
+ def ajax_notice
53
+ if notice=Jinda::Notice.recent(current_ma_user, request.env["REMOTE_ADDR"])
54
+ notice.update_attribute :unread, false
55
+ js = "notice('#{notice.message}');"
56
+ else
57
+ js = ""
58
+ end
59
+ render plain: "<script>#{js}</script>"
60
+ end
61
+ ####################################################################################################]
62
+ # prepare xmain.runseq eg: how many form_step or total_step and step properties check if authorized
63
+ ####################################################################################################]
64
+ # view menu by user selected what service (module and code) to run (not all services like menu did
65
+ # Its only one service
66
+ def init
67
+ module_code, code = params[:s].split(":")
68
+ @service= Jinda::Service.where(:module_code=> module_code, :code=> code).first
69
+ # @service= Jinda::Service.where(:module_code=> params[:module], :code=> params[:service]).first
70
+ if @service && authorize_init?
71
+ xmain = create_xmain(@service)
72
+ result = create_runseq(xmain)
73
+ unless result
74
+ message = "cannot find action for xmain #{xmain.id}"
75
+ ma_log(message)
76
+ flash[:notice]= message
77
+ redirect_to "pending" and return
78
+ end
79
+ xmain.update_attribute(:xvars, @xvars)
80
+ xmain.runseqs.last.update_attribute(:end,true)
81
+ #Above line cause error update_attribute in heroku shown in logs and it was proposed to fixed in github:'kul1/g241502'
82
+ redirect_to :action=>'run', :id=>xmain.id
83
+ else
84
+ refresh_to "/", :alert => "Error: cannot process"
85
+ end
86
+ end
87
+ ####################################################################################################]
88
+ # run if, form, mail, output etc depend on icon in freemind
89
+ # action from @runseq.action == do, form, if, output
90
+ # Then will call def run_do, run_form, run_if, run_output
91
+ ####################################################################################################]
92
+ def run
93
+ init_vars(params[:id])
94
+ if authorize?
95
+ # session[:full_layout]= false
96
+ redirect_to(:action=>"run_#{@runseq.action}", :id=>@xmain.id)
97
+ else
98
+ redirect_to_root
99
+ end
100
+ end
101
+ def run_form
102
+ init_vars(params[:id])
103
+ if authorize?
104
+ if ['F', 'X'].include? @xmain.status
105
+ redirect_to_root
106
+ else
107
+ service= @xmain.service
108
+ ###############################################################################################
109
+ # Run View Form f created template by jinda rake follow freemind mm file
110
+ ###############################################################################################
111
+ if service
112
+ @title= "Transaction ID #{@xmain.xid}: #{@xmain.name} / #{@runseq.name}"
113
+ fhelp= "app/views/#{service.module.code}/#{service.code}/#{@runseq.code}.md"
114
+ @help = File.read(fhelp) if File.exists?(fhelp)
115
+ f= "app/views/#{service.module.code}/#{service.code}/#{@runseq.code}.html.erb"
116
+ if File.file?(f)
117
+ @ui= File.read(f)
118
+ else
119
+ # flash[:notice]= "Error: Can not find the view file for this controller"
120
+ ma_log "Error: Can not find the view file for this controller"
121
+ redirect_to_root
122
+ end
123
+
124
+ end
125
+ end
126
+ else
127
+ redirect_to_root
128
+ end
129
+ end
130
+ def run_if
131
+ init_vars(params[:id])
132
+ condition= eval(@runseq.code).to_s
133
+ match_found= false
134
+ if condition
135
+ xml= REXML::Document.new(@runseq.xml).root
136
+ next_runseq= nil
137
+ text = xml.elements['//node/node'].attributes['TEXT']
138
+ match, name= text.split(':',2)
139
+ label= name2code(name.strip)
140
+ if condition==match
141
+ if label=="end"
142
+ @end_job= true
143
+ else
144
+ next_runseq= @xmain.runseqs.where(:code=> label, :action.ne=>'redirect').first
145
+ match_found= true if next_runseq
146
+ @runseq_not_f= false
147
+ end
148
+ end
149
+ end
150
+ unless match_found || @end_job
151
+ next_runseq= @xmain.runseqs.where( rstep:(@xvars['current_step']+1) ).first
152
+ end
153
+ end_action(next_runseq)
154
+ end
155
+ def run_redirect
156
+ init_vars(params[:id])
157
+ # next_runseq= @xmain.runseqs.first :conditions=>["id != ? AND code = ?",@runseq.id, @runseq.code]
158
+ next_runseq= @xmain.runseqs.where(:id.ne=>@runseq.id, :code=>@runseq.code).first
159
+ @xmain.current_runseq= next_runseq.id
160
+ end_action(next_runseq)
161
+ end
162
+ def run_do
163
+ init_vars(params[:id])
164
+ @runseq.start ||= Time.now
165
+ @runseq.status= 'R' # running
166
+ $runseq_id= @runseq.id
167
+ $user_id= current_ma_user.try(:id)
168
+ set_global
169
+ controller = Kernel.const_get(@xvars['custom_controller']).new
170
+ result = controller.send(@runseq.code)
171
+ init_vars_by_runseq($runseq_id)
172
+ @xvars = $xvars
173
+ @xvars[@runseq.code.to_sym]= result.to_s
174
+ @xvars['current_step']= @runseq.rstep
175
+ @runseq.status= 'F' #finish
176
+ @runseq.stop= Time.now
177
+ @runseq.save
178
+ end_action
179
+ rescue => e
180
+ @xmain.status='E'
181
+ @xvars['error']= e.to_s+e.backtrace.to_s
182
+ @xmain.xvars= $xvars
183
+ @xmain.save
184
+ @runseq.status= 'F' #finish
185
+ @runseq.stop= Time.now
186
+ @runseq.save
187
+ refresh_to "/", :alert => "Sorry opeation error at #{@xmain.id} #{@xvars['error']}"
188
+ end
189
+ def run_output
190
+ init_vars(params[:id])
191
+ service= @xmain.service
192
+ disp= get_option("ma_display")
193
+ ma_display = (disp && !affirm(disp)) ? false : true
194
+ if service
195
+ f= "app/views/#{service.module.code}/#{service.code}/#{@runseq.code}.html.erb"
196
+ @ui= File.read(f)
197
+ if Jinda::Doc.where(:runseq_id=>@runseq.id).exists?
198
+ @doc= Jinda::Doc.where(:runseq_id=>@runseq.id).first
199
+ @doc.update_attributes :data_text=> render_to_string(:inline=>@ui, :layout=>"utf8"),
200
+ :xmain=>@xmain, :runseq=>@runseq, :user=>current_ma_user,
201
+ :ip=> get_ip, :service=>service, :ma_display=>ma_display,
202
+ :ma_secured => @xmain.service.ma_secured
203
+ else
204
+ @doc= Jinda::Doc.create :name=> @runseq.name,
205
+ :content_type=>"output", :data_text=> render_to_string(:inline=>@ui, :layout=>"utf8"),
206
+ :xmain=>@xmain, :runseq=>@runseq, :user=>current_ma_user,
207
+ :ip=> get_ip, :service=>service, :ma_display=>ma_display,
208
+ :ma_secured => @xmain.service.ma_secured
209
+ end
210
+ @message = defined?(MSG_NEXT) ? MSG_NEXT : "Next &gt;"
211
+ @message = "Finish" if @runseq.end
212
+ eval "@xvars[@runseq.code] = url_for(:controller=>'Jinda', :action=>'document', :id=>@doc.id)"
213
+ else
214
+ # flash[:notice]= "Error: Can not find the view file for this controller"
215
+ ma_log "Error: Can not find the view file for this controller"
216
+ redirect_to_root
217
+ end
218
+ #ma_display= get_option("ma_display")
219
+ unless ma_display
220
+ end_action
221
+ end
222
+ end
223
+ def run_mail
224
+ init_vars(params[:id])
225
+ service= @xmain.service
226
+ f= "app/views/#{service.module.code}/#{service.code}/#{@runseq.code}.html.erb"
227
+ @ui= File.read(f).html_safe
228
+ @doc= Jinda::Doc.create :name=> @runseq.name,
229
+ :content_type=>"mail", :data_text=> render_to_string(:inline=>@ui, :layout=>false),
230
+ :xmain=>@xmain, :runseq=>@runseq, :user=>current_ma_user,
231
+ :ip=> get_ip, :service=>service, :ma_display=>false,
232
+ :ma_secured => @xmain.service.ma_secured
233
+ eval "@xvars[:#{@runseq.code}] = url_for(:controller=>'jinda', :action=>'document', :id=>@doc.id)"
234
+ mail_from = get_option('from')
235
+ # sender= render_to_string(:inline=>mail_from) if mail_from
236
+ mail_to = get_option('to')
237
+ recipients= render_to_string(:inline=>mail_to) if mail_to
238
+ mail_subject = get_option('subject')
239
+ subject= render_to_string(:inline=>mail_subject) || "#{@runseq.name}"
240
+ JindaMailer.gmail(@doc.data_text, recipients, subject).deliver unless DONT_SEND_MAIL
241
+ end_action
242
+ end
243
+ def end_output
244
+ init_vars(params[:xmain_id])
245
+ end_action
246
+ end
247
+
248
+ ####################################################
249
+ # search for original_filename if attached #
250
+ ####################################################
251
+ #
252
+ # def end_form
253
+ # init_vars(params[:xmain_id])
254
+ # eval "@xvars[@runseq.code] = {} unless @xvars[@runseq.code]"
255
+ # params.each { |k,v|
256
+ # if params[k].respond_to? :original_filename
257
+ # get_image(k, params[k])
258
+ # elsif params[k].is_a?(Hash)
259
+ # eval "@xvars[@runseq.code][k] = v"
260
+ # params[k].each { |k1,v1|
261
+ # next unless v1.respond_to?(:original_filename)
262
+ # get_image1(k, k1, params[k][k1])
263
+ # }
264
+ # else
265
+ # v = v.to_unsafe_h unless v.class == String
266
+ # eval "@xvars[@runseq.code][k] = v"
267
+ # end
268
+ # }
269
+ # end_action
270
+ # end
271
+ # Not working at ?(Hash)
272
+ # Temp hardcode below!! require field to load name :filename
273
+
274
+
275
+ def end_form
276
+ init_vars(params[:xmain_id])
277
+ eval "@xvars[@runseq.code] = {} unless @xvars[@runseq.code]"
278
+ # Search for uploaded file name if exist
279
+ params.each { |k,v|
280
+ if params[k].respond_to? :original_filename
281
+ get_image(k, params[k])
282
+ # check if params of array in form eg: edit_article
283
+ elsif params[k].is_a?(ActionController::Parameters)
284
+ params[k].each { |k1,v1|
285
+ # eval "@xvars[@runseq.code][k1] = params.require(k1).permit(k1)"
286
+ eval "@xvars[@runseq.code][k1] = v1"
287
+ next unless v1.respond_to?(:original_filename)
288
+ get_image1(k, k1, params[k][k1])
289
+ }
290
+ else
291
+ # bug in to_unsalfe_h rails 5.1.6 https://github.com/getsentry/raven-ruby/issues/799
292
+ # Solution:
293
+ # https://stackoverflow.com/questions/34949505/rails-5-unable-to-retrieve-hash-values-from-parameter
294
+ # v = v.to_unsafe_h unless v.class == String
295
+ # v = params.require[k] unless v.class == String
296
+ v = v.to_s unless v.class == String
297
+ eval "@xvars[@runseq.code][k] = v"
298
+ end
299
+ }
300
+ end_action
301
+ end
302
+
303
+ def end_action(next_runseq = nil)
304
+ # @runseq.status='F' unless @runseq_not_f
305
+ @xmain.xvars= @xvars
306
+ @xmain.status= 'R' # running
307
+ @xmain.save!
308
+ @runseq.status='F'
309
+ @runseq.user= current_ma_user
310
+ @runseq.stop= Time.now
311
+ @runseq.save
312
+ next_runseq= @xmain.runseqs.where(:rstep=> @runseq.rstep+1).first unless next_runseq
313
+ if @end_job || !next_runseq # job finish
314
+ @xmain.xvars= @xvars
315
+ @xmain.status= 'F' unless @xmain.status== 'E' # finish
316
+ @xmain.stop= Time.now
317
+ @xmain.save
318
+ if @xvars['p']['return']
319
+ redirect_to @xvars['p']['return'] and return
320
+ else
321
+ if @user
322
+ redirect_to :action=>'index' and return
323
+ else
324
+ redirect_to_root and return
325
+ end
326
+ end
327
+ else
328
+ @xmain.update_attribute :current_runseq, next_runseq.id
329
+ redirect_to :action=>'run', :id=>@xmain.id and return
330
+ end
331
+ end
332
+ # process images from first level
333
+ def get_image(key, params)
334
+ doc = Jinda::Doc.create(
335
+ :name=> key.to_s,
336
+ :xmain=> @xmain.id,
337
+ :runseq=> @runseq.id,
338
+ :filename=> params.original_filename,
339
+ :content_type => params.content_type || 'application/zip',
340
+ :data_text=> '',
341
+ :ma_display=>true,
342
+ :ma_secured => @xmain.service.ma_secured )
343
+ if defined?(IMAGE_LOCATION)
344
+ filename = "#{IMAGE_LOCATION}/f#{Param.gen(:asset_id)}"
345
+ File.open(filename,"wb") { |f| f.write(params.read) }
346
+ # File.open(filename,"wb") { |f| f.puts(params.read) }
347
+ eval "@xvars[@runseq.code][key] = '#{url_for(:action=>'document', :id=>doc.id, :only_path => true )}' "
348
+ doc.update_attributes :url => filename, :basename => File.basename(filename), :cloudinary => false
349
+ else
350
+ result = Cloudinary::Uploader.upload(params)
351
+ eval %Q{ @xvars[@runseq.code][key] = '#{result["url"]}' }
352
+ doc.update_attributes :url => result["url"], :basename => File.basename(result["url"]), :cloudinary => true
353
+ end
354
+ end
355
+ # process images from second level, e.g,, fields_for
356
+ def get_image1(key, key1, params)
357
+ doc = Jinda::Doc.create(
358
+ :name=> "#{key}_#{key1}",
359
+ :xmain=> @xmain.id,
360
+ :runseq=> @runseq.id,
361
+ :filename=> params.original_filename,
362
+ :content_type => params.content_type || 'application/zip',
363
+ :data_text=> '',
364
+ :ma_display=>true, :ma_secured => @xmain.service.ma_secured )
365
+ if defined?(IMAGE_LOCATION)
366
+ filename = "#{IMAGE_LOCATION}/f#{Param.gen(:asset_id)}"
367
+ File.open(filename,"wb") { |f| f.write(params.read) }
368
+ eval "@xvars[@runseq.code][key][key1] = '#{url_for(:action=>'document', :id=>doc.id, :only_path => true)}' "
369
+ doc.update_attributes :url => filename, :basename => File.basename(filename), :cloudinary => false
370
+ else
371
+ result = Cloudinary::Uploader.upload(params)
372
+ eval %Q{ @xvars[@runseq.code][key][key1] = '#{result["url"]}' }
373
+ doc.update_attributes :url => result["url"], :basename => File.basename(result["url"]), :cloudinary => true
374
+ end
375
+ end
376
+ def doc_print
377
+ render :file=>'public/doc.html', :layout=>'layouts/print'
378
+ end
379
+ # generate documentation for application
380
+ def doc
381
+ require 'rdoc'
382
+ @app= get_app
383
+ @intro = File.read('README.md')
384
+ @print= "<div align='right'><img src='/assets/printer.png'/> <a href='/jinda/doc_print' target='_blank'/>Print</a></div>"
385
+ doc= render_to_string 'doc.md', :layout => false
386
+ html= Maruku.new(doc).to_html
387
+ File.open('public/doc.html','w') {|f| f.puts html }
388
+ respond_to do |format|
389
+ format.html {
390
+ render :plain=> @print+html, :layout => 'layouts/jqm/_page'
391
+ # render :text=> Maruku.new(doc).to_html, :layout => false
392
+ # format.html {
393
+ # h = RDoc::Markup::ToHtml.new
394
+ # render :text=> h.convert(doc), :layout => 'layouts/_page'
395
+ }
396
+ format.pdf {
397
+ latex= Maruku.new(doc).to_latex
398
+ File.open('tmp/doc.md','w') {|f| f.puts doc}
399
+ File.open('tmp/doc.tex','w') {|f| f.puts latex}
400
+ # system('pdflatex tmp/doc.tex ')
401
+ # send_file( 'tmp/doc.pdf', :type => ‘application/pdf’,
402
+ # :disposition => ‘inline’, :filename => 'doc.pdf')
403
+ render :plain=>'done'
404
+ }
405
+ end
406
+ end
407
+ # handle uploaded image
408
+ def document
409
+ doc = Jinda::Doc.find params[:id]
410
+ if doc.cloudinary
411
+ require 'net/http'
412
+ require "uri"
413
+ uri = URI.parse(doc.url)
414
+ data = Net::HTTP.get_response(uri)
415
+ send_data(data.body, :filename=>doc.filename, :type=>doc.content_type, :disposition=>"inline")
416
+ else
417
+ data= read_binary(doc.url)
418
+ send_data(data, :filename=>doc.filename, :type=>doc.content_type, :disposition=>"inline")
419
+ end
420
+ end
421
+ def status
422
+ @xmain= Jinda::Xmain.where(:xid=>params[:xid]).first
423
+ @title= "Task number #{params[:xid]} #{@xmain.name}"
424
+ @backbtn= true
425
+ @xvars= @xmain.xvars
426
+ # flash.now[:notice]= "รายการ #{@xmain.id} ได้ถูกยกเลิกแล้ว" if @xmain.status=='X'
427
+ ma_log "Task #{@xmain.id} is cancelled" if @xmain.status=='X'
428
+ # flash.now[:notice]= "transaction #{@xmain.id} was cancelled" if @xmain.status=='X'
429
+ rescue
430
+ refresh_to "/", :alert => "Could not find task number <b> #{params[:xid]} </b>"
431
+ end
432
+ def help
433
+ end
434
+ def search
435
+ @q = params[:q] || params[:ma_search][:q] || ""
436
+ @title = "ผลการค้นหา #{@q}"
437
+ @backbtn= true
438
+ @cache= true
439
+ if @q.blank?
440
+ redirect_to "/"
441
+ else
442
+ s= GmaSearch.create :q=>@q, :ip=> request.env["REMOTE_ADDR"]
443
+ do_search
444
+ end
445
+ end
446
+ def err404
447
+ # ma_log 'ERROR', 'main/err404'
448
+ flash[:notice] = "We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly."
449
+ ma_log "We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly."
450
+ redirect_to '/'
451
+ end
452
+ def err500
453
+ # ma_log 'ERROR', 'main/err500'
454
+ flash[:notice] = "We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly."
455
+ ma_log "We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly."
456
+ redirect_to '/'
457
+ end
458
+
459
+ private
460
+ def create_xmain(service)
461
+ c = name2camel(service.module.code)
462
+ custom_controller= "#{c}Controller"
463
+ params["return"] = request.env['HTTP_REFERER']
464
+ Jinda::Xmain.create :service=>service,
465
+ :start=>Time.now,
466
+ :name=>service.name,
467
+ :ip=> get_ip,
468
+ :status=>'I', # init
469
+ :user=>current_ma_user,
470
+ :xvars=> {
471
+ :service_id=>service.id,
472
+ :p=>params.to_unsafe_h,
473
+ :id=>params[:id],
474
+ :user_id=>current_ma_user.try(:id),
475
+ :custom_controller=>custom_controller,
476
+ :host=>request.host,
477
+ :referer=>request.env['HTTP_REFERER']
478
+ }
479
+ end
480
+ def create_runseq(xmain)
481
+ @xvars= xmain.xvars
482
+ default_role= get_default_role
483
+ xml= xmain.service.xml
484
+ root = REXML::Document.new(xml).root
485
+ i= 0; j= 0 # i= step, j= form_step
486
+ root.elements.each('node') do |activity|
487
+ text= activity.attributes['TEXT']
488
+ next if ma_comment?(text)
489
+ next if text =~/^rule:\s*/
490
+ action= freemind2action(activity.elements['icon'].attributes['BUILTIN']) if activity.elements['icon']
491
+ return false unless action
492
+ i= i + 1
493
+ output_ma_display= false
494
+ if action=='output'
495
+ ma_display= get_option_xml("ma_display", activity)
496
+ if ma_display && !affirm(ma_display)
497
+ output_ma_display= false
498
+ else
499
+ output_ma_display= true
500
+ end
501
+ end
502
+ j= j + 1 if (action=='form' || output_ma_display)
503
+ @xvars['referer'] = activity.attributes['TEXT'] if action=='redirect'
504
+ if action!= 'if'
505
+ scode, name= text.split(':', 2)
506
+ name ||= scode; name.strip!
507
+ code= name2code(scode)
508
+ else
509
+ code= text
510
+ name= text
511
+ end
512
+ role= get_option_xml("role", activity) || default_role
513
+ rule= get_option_xml("rule", activity) || "true"
514
+ runseq= Jinda::Runseq.create :xmain=>xmain.id,
515
+ :name=> name, :action=> action,
516
+ :code=> code, :role=>role.upcase, :rule=> rule,
517
+ :rstep=> i, :form_step=> j, :status=>'I',
518
+ :xml=>activity.to_s
519
+ xmain.current_runseq= runseq.id if i==1
520
+ end
521
+ @xvars['total_steps']= i
522
+ @xvars['total_form_steps']= j
523
+ end
524
+ def init_vars(xmain)
525
+ @xmain= Jinda::Xmain.find xmain
526
+ @xvars= @xmain.xvars
527
+ @runseq= @xmain.runseqs.find @xmain.current_runseq
528
+ # authorize?
529
+ @xvars['current_step']= @runseq.rstep
530
+ @xvars['referrer']= request.referrer
531
+ session[:xmain_id]= @xmain.id
532
+ session[:runseq_id]= @runseq.id
533
+ unless params[:action]=='run_call'
534
+ @runseq.start ||= Time.now
535
+ @runseq.status= 'R' # running
536
+ @runseq.save
537
+ end
538
+ $xmain= @xmain; $xvars= @xvars
539
+ $runseq_id= @runseq.id
540
+ $user_id= current_ma_user.try(:id)
541
+ end
542
+ def init_vars_by_runseq(runseq_id)
543
+ @runseq= Jinda::Runseq.find runseq_id
544
+ @xmain= @runseq.xmain
545
+ @xvars= @xmain.xvars
546
+ #@xvars[:current_step]= @runseq.rstep
547
+ @runseq.start ||= Time.now
548
+ @runseq.status= 'R' # running
549
+ @runseq.save
550
+ end
551
+ def store_asset
552
+ if params[:content]
553
+ doc = GmaDoc.create! :name=> 'asset',
554
+ :filename=> (params[:file_name]||''),
555
+ :content_type => (params[:content_type] || 'application/zip'),
556
+ :data_text=> '',
557
+ :ma_display=>true
558
+ path = (IMAGE_LOCATION || "tmp")
559
+ File.open("#{path}/f#{doc.id}","wb") { |f|
560
+ f.puts(params[:content])
561
+ }
562
+ render :xml=>"<elocal><doc id='#{doc.id}' /><success /></elocal>"
563
+ else
564
+ render :xml=>"<elocal><fail /></elocal>"
565
+ end
566
+ end
567
+ def do_search
568
+ if current_ma_user.ma_secured?
569
+ @docs = GmaDoc.search_ma_secured(@q.downcase, params[:page], PER_PAGE)
570
+ else
571
+ @docs = GmaDoc.search(@q.downcase, params[:page], PER_PAGE)
572
+ end
573
+ @xmains = GmaXmain.find(@docs.map(&:ma_xmain_id)).sort { |a,b| b.id<=>a.id }
574
+ # @xmains = GmaXmain.find @docs.map(&:created_at).sort { |a,b| b<=>a }
575
+ end
576
+ def read_binary(path)
577
+ File.open path, "rb" do |f| f.read end
578
+ end
579
+ end