jinda-5 0.4.5

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