mindapp 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +29 -0
  5. data/Rakefile +1 -0
  6. data/lib/generators/mindapp/USAGE +8 -0
  7. data/lib/generators/mindapp/install_generator.rb +134 -0
  8. data/lib/generators/mindapp/templates/app/assets/images/account.png +0 -0
  9. data/lib/generators/mindapp/templates/app/assets/images/add.png +0 -0
  10. data/lib/generators/mindapp/templates/app/assets/images/ajax-loader-circle.gif +0 -0
  11. data/lib/generators/mindapp/templates/app/assets/images/ajax-loader.gif +0 -0
  12. data/lib/generators/mindapp/templates/app/assets/images/anchor.png +0 -0
  13. data/lib/generators/mindapp/templates/app/assets/images/application_double.png +0 -0
  14. data/lib/generators/mindapp/templates/app/assets/images/application_form_edit.png +0 -0
  15. data/lib/generators/mindapp/templates/app/assets/images/arrow_left.png +0 -0
  16. data/lib/generators/mindapp/templates/app/assets/images/arrow_right.png +0 -0
  17. data/lib/generators/mindapp/templates/app/assets/images/arrow_turn_left.png +0 -0
  18. data/lib/generators/mindapp/templates/app/assets/images/arrow_turn_right.png +0 -0
  19. data/lib/generators/mindapp/templates/app/assets/images/calendar.png +0 -0
  20. data/lib/generators/mindapp/templates/app/assets/images/cancel.png +0 -0
  21. data/lib/generators/mindapp/templates/app/assets/images/chart_bar.png +0 -0
  22. data/lib/generators/mindapp/templates/app/assets/images/clock.png +0 -0
  23. data/lib/generators/mindapp/templates/app/assets/images/cog.png +0 -0
  24. data/lib/generators/mindapp/templates/app/assets/images/control_fastforward.png +0 -0
  25. data/lib/generators/mindapp/templates/app/assets/images/control_play.png +0 -0
  26. data/lib/generators/mindapp/templates/app/assets/images/cross.png +0 -0
  27. data/lib/generators/mindapp/templates/app/assets/images/delete.png +0 -0
  28. data/lib/generators/mindapp/templates/app/assets/images/external-link.png +0 -0
  29. data/lib/generators/mindapp/templates/app/assets/images/help.png +0 -0
  30. data/lib/generators/mindapp/templates/app/assets/images/house.png +0 -0
  31. data/lib/generators/mindapp/templates/app/assets/images/logo_mindapp.png +0 -0
  32. data/lib/generators/mindapp/templates/app/assets/images/logout.png +0 -0
  33. data/lib/generators/mindapp/templates/app/assets/images/new.gif +0 -0
  34. data/lib/generators/mindapp/templates/app/assets/images/new.png +0 -0
  35. data/lib/generators/mindapp/templates/app/assets/images/page.png +0 -0
  36. data/lib/generators/mindapp/templates/app/assets/images/page_attach.png +0 -0
  37. data/lib/generators/mindapp/templates/app/assets/images/page_green.png +0 -0
  38. data/lib/generators/mindapp/templates/app/assets/images/page_output.png +0 -0
  39. data/lib/generators/mindapp/templates/app/assets/images/page_pdf.png +0 -0
  40. data/lib/generators/mindapp/templates/app/assets/images/pencil.png +0 -0
  41. data/lib/generators/mindapp/templates/app/assets/images/printer.png +0 -0
  42. data/lib/generators/mindapp/templates/app/assets/images/refresh.png +0 -0
  43. data/lib/generators/mindapp/templates/app/assets/images/report.png +0 -0
  44. data/lib/generators/mindapp/templates/app/assets/images/rssmall.png +0 -0
  45. data/lib/generators/mindapp/templates/app/assets/images/tick.png +0 -0
  46. data/lib/generators/mindapp/templates/app/assets/images/user.png +0 -0
  47. data/lib/generators/mindapp/templates/app/assets/images/view_code.png +0 -0
  48. data/lib/generators/mindapp/templates/app/assets/javascripts/application.js +19 -0
  49. data/lib/generators/mindapp/templates/app/assets/javascripts/disable_enter_key.js +10 -0
  50. data/lib/generators/mindapp/templates/app/assets/javascripts/iscroll-wrapper.js +32 -0
  51. data/lib/generators/mindapp/templates/app/assets/javascripts/iscroll.js +1084 -0
  52. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery-1.7.1.js +9266 -0
  53. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery.mobile.datebox.js +1772 -0
  54. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery.mobile.js +7007 -0
  55. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery.mobile.splitview.js +624 -0
  56. data/lib/generators/mindapp/templates/app/assets/javascripts/mindapp.js +14 -0
  57. data/lib/generators/mindapp/templates/app/assets/stylesheets/application.css.scss +18 -0
  58. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun.eot +0 -0
  59. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun.ttf +0 -0
  60. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun.woff +0 -0
  61. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun_bold.ttf +0 -0
  62. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun_bolditalic.ttf +0 -0
  63. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun_italic.ttf +0 -0
  64. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.eot +0 -0
  65. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.ttf +0 -0
  66. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.woff +0 -0
  67. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew.css +47 -0
  68. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.eot +0 -0
  69. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.ttf +0 -0
  70. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.woff +0 -0
  71. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.eot +0 -0
  72. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.ttf +0 -0
  73. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.woff +0 -0
  74. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.eot +0 -0
  75. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.ttf +0 -0
  76. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.woff +0 -0
  77. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ajax-loader.png +0 -0
  78. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/bg.png +0 -0
  79. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/button_black.png +0 -0
  80. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/button_blue.png +0 -0
  81. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/button_red.png +0 -0
  82. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/cancel.png +0 -0
  83. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/close.png +0 -0
  84. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/del2.png +0 -0
  85. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/deli4.png +0 -0
  86. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/down-left.png +0 -0
  87. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/down-right.png +0 -0
  88. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/fbook.png +0 -0
  89. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ff.png +0 -0
  90. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icon-search-black.png +0 -0
  91. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-18-black.png +0 -0
  92. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-18-white.png +0 -0
  93. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-36-black.png +0 -0
  94. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-36-white.png +0 -0
  95. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/overlay.png +0 -0
  96. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/rss3.png +0 -0
  97. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/rss4.png +0 -0
  98. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/search_bg.png +0 -0
  99. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/stumble2.png +0 -0
  100. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/stumble4.png +0 -0
  101. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/tab-left.png +0 -0
  102. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/tab-right.png +0 -0
  103. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/tech3.png +0 -0
  104. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/tech4.png +0 -0
  105. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/twitter3.png +0 -0
  106. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/twitter4.png +0 -0
  107. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-anim_basic_16x16.gif +0 -0
  108. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  109. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  110. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  111. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  112. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  113. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  114. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  115. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  116. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  117. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  118. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  119. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  120. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  121. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  122. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_217bc0_256x240.png +0 -0
  123. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_222222_256x240.png +0 -0
  124. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_2e83ff_256x240.png +0 -0
  125. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_454545_256x240.png +0 -0
  126. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_469bdd_256x240.png +0 -0
  127. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_6da8d5_256x240.png +0 -0
  128. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_888888_256x240.png +0 -0
  129. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_cd0a0a_256x240.png +0 -0
  130. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_d8e7f3_256x240.png +0 -0
  131. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_f9bd01_256x240.png +0 -0
  132. data/lib/generators/mindapp/templates/app/assets/stylesheets/indicator.gif +0 -0
  133. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.css +1855 -0
  134. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.datebox.css +65 -0
  135. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.grids.collapsible.css +122 -0
  136. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.splitview.css +130 -0
  137. data/lib/generators/mindapp/templates/app/assets/stylesheets/mindapp.css +134 -0
  138. data/lib/generators/mindapp/templates/app/assets/stylesheets/sarabun.css +37 -0
  139. data/lib/generators/mindapp/templates/app/controllers/identities_controller.rb +5 -0
  140. data/lib/generators/mindapp/templates/app/controllers/mindapp_controller.rb +464 -0
  141. data/lib/generators/mindapp/templates/app/controllers/sessions_controller.rb +28 -0
  142. data/lib/generators/mindapp/templates/app/mailers/.gitkeep +0 -0
  143. data/lib/generators/mindapp/templates/app/mailers/mindapp_mailer.rb +7 -0
  144. data/lib/generators/mindapp/templates/app/mindapp/index.mm +85 -0
  145. data/lib/generators/mindapp/templates/app/mindapp/template/view.html.erb +21 -0
  146. data/lib/generators/mindapp/templates/app/models/.gitkeep +0 -0
  147. data/lib/generators/mindapp/templates/app/models/identity.rb +14 -0
  148. data/lib/generators/mindapp/templates/app/models/mindapp/doc.rb +30 -0
  149. data/lib/generators/mindapp/templates/app/models/mindapp/module.rb +10 -0
  150. data/lib/generators/mindapp/templates/app/models/mindapp/notice.rb +11 -0
  151. data/lib/generators/mindapp/templates/app/models/mindapp/role.rb +7 -0
  152. data/lib/generators/mindapp/templates/app/models/mindapp/runseq.rb +24 -0
  153. data/lib/generators/mindapp/templates/app/models/mindapp/service.rb +16 -0
  154. data/lib/generators/mindapp/templates/app/models/mindapp/xmain.rb +38 -0
  155. data/lib/generators/mindapp/templates/app/models/param.rb +41 -0
  156. data/lib/generators/mindapp/templates/app/models/user.rb +30 -0
  157. data/lib/generators/mindapp/templates/app/views/identities/new.html.erb +30 -0
  158. data/lib/generators/mindapp/templates/app/views/layouts/_full.haml +39 -0
  159. data/lib/generators/mindapp/templates/app/views/layouts/_head.html.erb +14 -0
  160. data/lib/generators/mindapp/templates/app/views/layouts/_page.haml +16 -0
  161. data/lib/generators/mindapp/templates/app/views/layouts/_top.html.erb +10 -0
  162. data/lib/generators/mindapp/templates/app/views/layouts/application.haml +4 -0
  163. data/lib/generators/mindapp/templates/app/views/layouts/gmail.html.erb +9 -0
  164. data/lib/generators/mindapp/templates/app/views/layouts/mobile.html.erb +13 -0
  165. data/lib/generators/mindapp/templates/app/views/layouts/mobilejq.html.erb +31 -0
  166. data/lib/generators/mindapp/templates/app/views/layouts/print.html.erb +22 -0
  167. data/lib/generators/mindapp/templates/app/views/layouts/utf8.html.erb +21 -0
  168. data/lib/generators/mindapp/templates/app/views/mindapp/_activity.md +10 -0
  169. data/lib/generators/mindapp/templates/app/views/mindapp/_menu.haml +22 -0
  170. data/lib/generators/mindapp/templates/app/views/mindapp/_menu_mm.haml +30 -0
  171. data/lib/generators/mindapp/templates/app/views/mindapp/_model.md +5 -0
  172. data/lib/generators/mindapp/templates/app/views/mindapp/_modul.md +9 -0
  173. data/lib/generators/mindapp/templates/app/views/mindapp/_pending_home.haml +5 -0
  174. data/lib/generators/mindapp/templates/app/views/mindapp/_pending_page.haml +26 -0
  175. data/lib/generators/mindapp/templates/app/views/mindapp/_service.md +24 -0
  176. data/lib/generators/mindapp/templates/app/views/mindapp/_static.haml +23 -0
  177. data/lib/generators/mindapp/templates/app/views/mindapp/doc.md +37 -0
  178. data/lib/generators/mindapp/templates/app/views/mindapp/feed.rss.builder +27 -0
  179. data/lib/generators/mindapp/templates/app/views/mindapp/help.haml +20 -0
  180. data/lib/generators/mindapp/templates/app/views/mindapp/index.html.haml +34 -0
  181. data/lib/generators/mindapp/templates/app/views/mindapp/pending.haml +1 -0
  182. data/lib/generators/mindapp/templates/app/views/mindapp/run_form.haml +37 -0
  183. data/lib/generators/mindapp/templates/app/views/mindapp/search.haml +20 -0
  184. data/lib/generators/mindapp/templates/app/views/mindapp/status.haml +61 -0
  185. data/lib/generators/mindapp/templates/app/views/mindapp_mailer/gmail.html.erb +9 -0
  186. data/lib/generators/mindapp/templates/app/views/sessions/new.html.erb +11 -0
  187. data/lib/generators/mindapp/templates/mindapp.yml +10 -0
  188. data/lib/generators/mindapp/templates/seeds.rb +6 -0
  189. data/lib/mindapp.rb +6 -0
  190. data/lib/mindapp/helpers.rb +475 -0
  191. data/lib/mindapp/railtie.rb +18 -0
  192. data/lib/mindapp/version.rb +3 -0
  193. data/lib/tasks/mindapp.rake +191 -0
  194. data/mindapp.gemspec +19 -0
  195. metadata +239 -0
@@ -0,0 +1 @@
1
+ = render :partial=>"pending_page", :locals=>{:xmains=>@xmains}
@@ -0,0 +1,37 @@
1
+ .head
2
+ = step(@runseq.form_step, @xvars['total_form_steps'])
3
+ %p
4
+ - user = current_user || User.new
5
+ - form_class = 'formtastic'
6
+ - next_step = 'end_form'
7
+ - if @help
8
+ %div(data-role="collapsible" data-theme="e" data-content-theme="c" data-mini="true")
9
+ %h3 ตำแนะนำ
10
+ %p= markdown(@help)
11
+ = form_tag({ :action => next_step } , {:multipart => true, :onSubmit=>'return validate()', :class=>form_class, "data-ajax"=>"#{ajax?(@ui)}"}) do
12
+ = hidden_field_tag 'xmain_id', @xmain.id
13
+ = hidden_field_tag 'ajax', ajax?(@ui)
14
+ = hidden_field_tag 'runseq_id', @runseq.id
15
+ = hidden_field_tag 'step', @xvars[:current_step]
16
+ %div(data-role="fieldcontain")
17
+ = render :inline=> @ui
18
+ %p
19
+ = submit_tag NEXT
20
+ %p
21
+ :javascript
22
+ $(function() {
23
+ $('.required').append('<span style="color:red"> *</span>');
24
+ $('.refresh').append(" <img src='/images/refresh.png'/>");
25
+ $("input").keypress(function (evt) {
26
+ //Deterime where our character code is coming from within the event
27
+ var charCode = evt.charCode || evt.keyCode;
28
+ if (charCode == 13) { //Enter key's keycode
29
+ alert("กรุณาใช้เม้าส์คลิ้กที่ปุ่มเพื่อดำเนินการต่อ");
30
+ return false;
31
+ }
32
+ });
33
+ });
34
+ $( document ).one( "pagechange", function(){
35
+ $('input[type="file"]').textinput({theme: 'c'});
36
+ });
37
+
@@ -0,0 +1,20 @@
1
+ /%h3= "Search #{@q}"
2
+ = will_paginate @docs, :class=>'flickr_pagination', :params=>{:q=>@q}
3
+ /= will_paginate @xmains, :class=>'flickr_pagination', :params=>{:q=>@q}
4
+
5
+ %table{:width=>"100%"}
6
+ %tr{:style=>"color:white; background-color:#6A6A6A; text-shadow:none;"}
7
+ %th id
8
+ %th task
9
+ %th starter
10
+ %th begin
11
+ %th end
12
+ %th status
13
+ - @xmains.each do |xmain|
14
+ %tr
15
+ %td= link_to xmain.id, :action=>"status", :id=>xmain.id
16
+ %td= link_to xmain.name, :action=>"status", :id=>xmain.id
17
+ %td{:align=>'center'}= xmain.gma_user.full_name
18
+ %td= date_thai xmain.start, :date_only=>true
19
+ %td= xmain.stop ? date_thai(xmain.stop, :date_only=>true) : '&nbsp;'
20
+ %td(align='center')= status_icon xmain
@@ -0,0 +1,61 @@
1
+ %table{:width=>"100%"}
2
+ %tr{:style=>"color:white; background-color:#6A6A6A;"}
3
+ %th id
4
+ %th step
5
+ %th starter
6
+ %th begin
7
+ %th end
8
+ - @xmain.runseqs.form_action.each do |r|
9
+ %tr
10
+ - if @xmain.status=='X'
11
+ %td{:align=>'center'}= image_tag 'cancel.png'
12
+ - else
13
+ %td{:align=>'center'}= status_icon(r)
14
+ %td= r.name
15
+ %td{:align=>'center'}
16
+ - if r.role.blank? && @xvars[:action]
17
+ - u = @xvars[:action][:assign].blank? ? '&nbsp;' : User.find(@xvars[:action][:assign]).full_name
18
+ = u
19
+ - if @xvars[:action][:final]=='n'
20
+ %td{:align=>'center'} -
21
+ %td{:align=>'center'} -
22
+ - else
23
+ - if r.start
24
+ %td= date_thai r.start
25
+ - else
26
+ %td{:align=>'center'} -
27
+ - if r.stop
28
+ %td= date_thai r.stop
29
+ - else
30
+ %td{:align=>'center'} -
31
+ - else
32
+ = role_name r.role
33
+ - if r.start
34
+ %td= date_thai r.start
35
+ - else
36
+ %td{:align=>'center'} -
37
+ - if r.stop
38
+ %td= date_thai r.stop
39
+ - else
40
+ %td{:align=>'center'} -
41
+ .label
42
+ = image_tag "cog.png"
43
+ เอกสารประกอบ
44
+ %table{:width=>"100%"}
45
+ %tr{:style=>"color:white; background-color:#6A6A6A;"}
46
+ %th เอกสาร
47
+ %th ชื่อไฟล์
48
+ %th ผู้ดำเนินการ
49
+ %th วันที่
50
+ - @xmain.docs.each do |doc|
51
+ - next unless doc.display
52
+ %tr
53
+ %td
54
+ - if doc.content_type=='output'
55
+ = image_tag 'page_output.png'
56
+ - else
57
+ = image_tag 'page_attach.png'
58
+ = link_to align_text(doc.name), "/engine/document/#{doc.id}", :target=>'_blank'
59
+ %td= doc.filename
60
+ %td= doc.gma_user.full_name
61
+ %td= date_thai doc.created_at
@@ -0,0 +1,9 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
5
+ </head>
6
+ <body>
7
+ <%= raw @ui %>
8
+ </body>
9
+ </html>
@@ -0,0 +1,11 @@
1
+ <%= form_tag "/auth/identity/callback", {'data-ajax'=>'false'} do %>
2
+ <div class="field" data-role="fieldcontain">
3
+ <%= label_tag :auth_key, "User name" %>
4
+ <%= text_field_tag :auth_key %>
5
+ </div>
6
+ <div class="field" data-role="fieldcontain">
7
+ <%= label_tag :password, "Password" %>
8
+ <%= password_field_tag :password %>
9
+ </div>
10
+ <div class="actions"><%= submit_tag "Sign In" %></div>
11
+ <% end %>
@@ -0,0 +1,10 @@
1
+ development:
2
+ server: "http://localhost:9292/faye"
3
+ secret_token: "secret"
4
+ test:
5
+ server: "http://localhost:9292/faye"
6
+ secret_token: "secret"
7
+ production:
8
+ server: "http://example.com/faye"
9
+ secret_token: "<%= ActiveSupport::SecureRandom.hex(32) %>"
10
+ signature_expiration: 3600 # one hour
@@ -0,0 +1,6 @@
1
+ if Identity.count==0
2
+ identity= Identity.create :code => "admin", :email => "admin@test.com", :password => "secret",
3
+ :password_confirmation => "secret"
4
+ User.create :provider => "identity", :uid => identity.id.to_s, :code => identity.code,
5
+ :email => identity.email, :role => "M,A,D"
6
+ end
data/lib/mindapp.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "mindapp/version"
2
+ require 'mindapp/railtie'
3
+
4
+ module Mindapp
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,475 @@
1
+ module Mindapp
2
+ module Helpers
3
+
4
+ # methods from application_controller
5
+ def code_text(s) # old def code(s)
6
+ "<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'>#{s}</code></pre>".html_safe
7
+ end
8
+ def refresh_to(url='/', option={})
9
+ if option[:alert]
10
+ gma_log option[:alert]
11
+ end
12
+ render :text => "<script>window.location.replace('#{url}')</script>"
13
+ end
14
+ def read_binary(path)
15
+ File.open path, "rb" do |f| f.read end
16
+ end
17
+ def redirect_to_root
18
+ redirect_to root_path
19
+ end
20
+ def get_option(opt, runseq=@runseq)
21
+ xml= REXML::Document.new(runseq.xml).root
22
+ url=''
23
+ xml.each_element('///node') do |n|
24
+ text= n.attributes['TEXT']
25
+ url= text if text =~/^#{opt}:\s*/
26
+ end
27
+ c, h= url.split(':', 2)
28
+ opt= h ? h.strip : false
29
+ end
30
+ def gma_comment?(s)
31
+ s[0]==35
32
+ end
33
+ def get_ip
34
+ request.env['HTTP_X_FORWARDED_FOR'] || request.env['REMOTE_ADDR']
35
+ end
36
+ def get_default_role
37
+ default_role= Mindapp::Role.where(:code =>'default').first
38
+ return default_role ? default_role.name.to_s : ''
39
+ end
40
+ def name2code(s)
41
+ # rather not ignore # symbol cause it could be comment
42
+ code, name = s.split(':')
43
+ code.downcase.strip.gsub(' ','_').gsub(/[^#_\/a-zA-Z0-9]/,'')
44
+ end
45
+ def name2camel(s)
46
+ s.gsub(' ','_').camelcase
47
+ end
48
+ def true_action?(s)
49
+ %w(call ws redirect invoke email).include? s
50
+ end
51
+ def set_global
52
+ $xmain= @xmain ; $runseq = @runseq ; $user = current_user ; $xvars= @xmain.xvars
53
+ end
54
+ def authorize? # use in pending tasks
55
+ @runseq= @xmain.runseqs.find @xmain.current_runseq
56
+ return false unless @runseq
57
+ @user = current_user
58
+ set_global
59
+ return false unless eval(@runseq.rule) if @runseq.rule
60
+ return true if true_action?(@runseq.action)
61
+ # return false if check_wait
62
+ return true if @runseq.role.blank?
63
+ unless @runseq.role.empty?
64
+ return false unless @user.role
65
+ return @user.role.upcase.split(',').include?(@runseq.role.upcase)
66
+ end
67
+ return true
68
+ end
69
+ def authorize_init? # use when initialize new transaction
70
+ # check module role
71
+ mrole = @service.module.role
72
+ return false if mrole && !current_user
73
+ return false if mrole && !current_user.has_role(mrole)
74
+
75
+ # check step 1 role
76
+ xml= @service.xml
77
+ step1 = REXML::Document.new(xml).root.elements['node']
78
+ role= get_option_xml("role", step1) || ""
79
+ # rule= get_option_xml("rule", step1) || true
80
+ return true if role==""
81
+ unless current_user
82
+ return role.blank?
83
+ else
84
+ return false unless current_user.role
85
+ return current_user.has_role(role)
86
+ end
87
+ end
88
+ def gma_log(message)
89
+ Mindapp::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
90
+ :user_id => $user.id, :unread=> true
91
+ end
92
+
93
+ # methods from application_helper
94
+ def markdown(text)
95
+ erbified = ERB.new(text.html_safe).result(binding)
96
+ red = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)
97
+ red.render(erbified).html_safe
98
+ end
99
+ def align_text(s, pixel=3)
100
+ "<span style='position:relative; top:-#{pixel}px;'>#{s}</span>".html_safe
101
+ end
102
+ def status_icon(runseq)
103
+ case runseq.status
104
+ when 'R'
105
+ image_tag 'user.png'
106
+ when 'F'
107
+ image_tag 'tick.png'
108
+ when 'I'
109
+ image_tag 'control_play.png'
110
+ when 'E'
111
+ image_tag 'logout.png'
112
+ when 'X'
113
+ image_tag 'cross.png'
114
+ else
115
+ image_tag 'cancel.png'
116
+ end
117
+ end
118
+ def role_name(code)
119
+ role= Mindapp::Role.where(code:code).first
120
+ return role ? role.name : ""
121
+ end
122
+ def uncomment(s)
123
+ s.sub(/^#\s/,'')
124
+ end
125
+ def code_div(s)
126
+ "<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'> #{s}</code></pre>".html_safe
127
+ end
128
+ def ajax?(s)
129
+ return s.match('file_field') ? false : true
130
+ end
131
+ def step(s, total) # square text
132
+ s = (s==0)? 1: s.to_i
133
+ total = total.to_i
134
+ out ="<div class='step'>"
135
+ (s-1).times {|ss| out += "<span class='steps_done'>#{(ss+1)}</span>" }
136
+ out += %Q@<span class='step_now' >@
137
+ out += s.to_s
138
+ out += "</span>"
139
+ out += %Q@@
140
+ for i in s+1..total
141
+ out += "<span class='steps_more'>#{i}</span>"
142
+ end
143
+ out += "</div>"
144
+ out.html_safe
145
+ end
146
+
147
+ # methods that I don't know where they came from
148
+ def current_user
149
+ if session[:user_id]
150
+ return @user ||= User.find(session[:user_id])
151
+ else
152
+ return nil
153
+ end
154
+ end
155
+ def ui_action?(s)
156
+ %w(form output mail pdf).include? s
157
+ end
158
+ # def handle_gma_notice
159
+ # if Mindapp::Notice.recent.count>0
160
+ # notice= Mindapp::Notice.recent.last
161
+ # notice.update_attribute :unread, false
162
+ # "<script>notice('#{notice.message}');</script>"
163
+ # else
164
+ # ""
165
+ # end
166
+ # end
167
+ def process_services
168
+ # todo: persist mm_md5
169
+ xml= @app||get_app
170
+ if defined? session
171
+ md5= Digest::MD5.hexdigest(xml.to_s)
172
+ if session[:mm_md5]
173
+ return if session[:mm_md5]==md5
174
+ else
175
+ session[:mm_md5]= md5
176
+ end
177
+ end
178
+ protected_services = []
179
+ protected_modules = []
180
+ mseq= 0
181
+ @services= xml.elements["//node[@TEXT='services']"] || REXML::Document.new
182
+ @services.each_element('node') do |m|
183
+ ss= m.attributes["TEXT"]
184
+ code, name= ss.split(':', 2)
185
+ next if code.blank?
186
+ next if code.comment?
187
+ module_code= code.to_code
188
+ # create or update to GmaModule
189
+ ma_module= Mindapp::Module.find_or_create_by :code=>module_code
190
+ ma_module.update_attributes :uid=>ma_module.id.to_s
191
+ protected_modules << ma_module.uid
192
+ name = module_code if name.blank?
193
+ ma_module.update_attributes :name=> name.strip, :seq=> mseq
194
+ mseq += 1
195
+ seq= 0
196
+ m.each_element('node') do |s|
197
+ service_name= s.attributes["TEXT"].to_s
198
+ scode, sname= service_name.split(':', 2)
199
+ sname ||= scode; sname.strip!
200
+ scode= scode.to_code
201
+ if scode=="role"
202
+ ma_module.update_attribute :role, sname
203
+ next
204
+ end
205
+ if scode.downcase=="link"
206
+ role= get_option_xml("role", s) || ""
207
+ rule= get_option_xml("rule", s) || ""
208
+ ma_service= Mindapp::Service.find_or_create_by :module_code=> ma_module.code, :code=> scode, :name=> sname
209
+ ma_service.update_attributes :xml=>s.to_s, :name=>sname,
210
+ :list=>listed(s), :secured=>secured?(s),
211
+ :module_id=>gma_module.id, :seq => seq,
212
+ :confirm=> get_option_xml("confirm", xml),
213
+ :role => role, :rule => rule, :uid=> gma_service.id.to_s
214
+ seq += 1
215
+ protected_services << ma_service.uid
216
+ else
217
+ # normal service
218
+ step1 = s.elements['node']
219
+ role= get_option_xml("role", step1) || ""
220
+ rule= get_option_xml("rule", step1) || ""
221
+ ma_service= Mindapp::Service.find_or_create_by :module_code=> ma_module.code, :code=> scode
222
+ ma_service.update_attributes :xml=>s.to_s, :name=>sname,
223
+ :list=>listed(s), :secured=>secured?(s),
224
+ :module_id=>ma_module.id, :seq => seq,
225
+ :confirm=> get_option_xml("confirm", xml),
226
+ :role => role, :rule => rule, :uid=> ma_service.id.to_s
227
+ seq += 1
228
+ protected_services << ma_service.uid
229
+ end
230
+ end
231
+ end
232
+ Mindapp::Module.not_in(:uid=>protected_modules).delete_all
233
+ Mindapp::Service.not_in(:uid=>protected_services).delete_all
234
+ end
235
+ def get_app
236
+ dir= "#{Rails.root}/app/mindapp"
237
+ f= "#{dir}/index.mm"
238
+ t= REXML::Document.new(File.read(f).gsub("\n","")).root
239
+ recheck= true ; first_pass= true
240
+ while recheck
241
+ recheck= false
242
+ t.elements.each("//node") do |n|
243
+ if n.attributes['LINK'] # has attached file
244
+ if first_pass
245
+ f= "#{dir}/#{n.attributes['LINK']}"
246
+ else
247
+ f= n.attributes['LINK']
248
+ end
249
+ next unless File.exists?(f)
250
+ tt= REXML::Document.new(File.read(f).gsub("\n","")).root.elements["node"]
251
+ make_folders_absolute(f,tt)
252
+ tt.elements.each("node") do |tt_node|
253
+ n.parent.insert_before n, tt_node
254
+ end
255
+ recheck= true
256
+ n.parent.delete_element n
257
+ end
258
+ end
259
+ first_pass = false
260
+ end
261
+ return t
262
+ end
263
+ def controller_exists?(modul)
264
+ File.exists? "#{Rails.root}/app/controllers/#{modul}_controller.rb"
265
+ end
266
+ def dup_hash(a)
267
+ h = Hash.new(0)
268
+ a.each do |aa|
269
+ h[aa] += 1
270
+ end
271
+ return h
272
+ end
273
+ def login?
274
+ session[:user_id] != nil
275
+ end
276
+ def own_xmain?
277
+ if $xvars
278
+ return $user.id==$xvars['user_id']
279
+ else
280
+ # if eval on first step would return true so user can start service
281
+ return true
282
+ end
283
+ end
284
+ def get_option_xml(opt, xml)
285
+ if xml
286
+ url=''
287
+ xml.each_element('node') do |n|
288
+ text= n.attributes['TEXT']
289
+ url= text if text =~/^#{opt}/
290
+ end
291
+ return nil if url.blank?
292
+ c, h= url.split(':', 2)
293
+ opt= h ? h.strip : true
294
+ else
295
+ return nil
296
+ end
297
+ end
298
+ def listed(node)
299
+ icons=[]
300
+ node.each_element("icon") do |nn|
301
+ icons << nn.attributes["BUILTIN"]
302
+ end
303
+ return !icons.include?("closed")
304
+ end
305
+ def secured?(node)
306
+ icons=[]
307
+ node.each_element("icon") do |nn|
308
+ icons << nn.attributes["BUILTIN"]
309
+ end
310
+ return icons.include?("password")
311
+ end
312
+ def freemind2action(s)
313
+ case s.downcase
314
+ #when 'bookmark' # Excellent
315
+ # 'call'
316
+ when 'bookmark' # Excellent
317
+ 'do'
318
+ when 'attach' # Look here
319
+ 'form'
320
+ when 'edit' # Refine
321
+ 'pdf'
322
+ when 'wizard' # Magic
323
+ 'ws'
324
+ when 'help' # Question
325
+ 'if'
326
+ when 'forward' # Forward
327
+ 'redirect'
328
+ when 'kaddressbook' #Phone
329
+ 'invoke' # invoke new service along the way
330
+ when 'pencil'
331
+ 'output'
332
+ when 'mail'
333
+ 'mail'
334
+ end
335
+ end
336
+ def affirm(s)
337
+ return s =~ /[y|yes|t|true]/i ? true : false
338
+ end
339
+ def negate(s)
340
+ return s =~ /[n|no|f|false]/i ? true : false
341
+ end
342
+
343
+ # module FormBuilder
344
+ # def date_field(method, options = {})
345
+ # default= self.object.send(method) || Date.today
346
+ # data_options= ({"mode"=>"calbox"}).merge(options)
347
+ # %Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>).html_safe
348
+ # end
349
+ # end
350
+ end
351
+ end
352
+
353
+ class String
354
+ def comment?
355
+ self[0]==35 # check if first char is #
356
+ end
357
+ def to_code
358
+ s= self.dup
359
+ # s.downcase!
360
+ # s.gsub! /[\s\-_]/, ""
361
+ # s
362
+ code, name = s.split(':')
363
+ code.downcase.strip.gsub(' ','_').gsub(/[^#_\/a-zA-Z0-9]/,'')
364
+ end
365
+ end
366
+
367
+ module ActionView
368
+ module Helpers
369
+ module DateHelper
370
+ def date_field_tag(method, options = {})
371
+ default= options[:default] || Date.today
372
+ data_options= ({"mode"=>"calbox"}).merge(options)
373
+ %Q(<input name='#{method}' id='#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>).html_safe
374
+ end
375
+ end
376
+ class FormBuilder
377
+ # def date_select_thai(method)
378
+ # self.date_select method, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year]
379
+ # end
380
+ def date_field(method, options = {})
381
+ default= self.object.send(method) || Date.today
382
+ data_options= ({"mode"=>"calbox"}).merge(options)
383
+ out= %Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>)
384
+ out.html_safe
385
+ end
386
+ def time_field(method, options = {})
387
+ default= self.object.send(method) || Time.now
388
+ data_options= ({"mode"=>"timebox"}).merge(options)
389
+ out=%Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>)
390
+ out.html_safe
391
+ end
392
+ def date_select_thai(method, default= Time.now, disabled=false)
393
+ date_select method, :default => default, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year], :disabled=>disabled
394
+ end
395
+ def datetime_select_thai(method, default= Time.now, disabled=false)
396
+ datetime_select method, :default => default, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year], :disabled=>disabled
397
+ end
398
+
399
+ def point(o={})
400
+ o[:zoom]= 11 unless o[:zoom]
401
+ o[:width]= '100%' unless o[:width]
402
+ o[:height]= '300px' unless o[:height]
403
+ o[:lat] = 13.91819 unless o[:lat]
404
+ o[:lng] = 100.48889 unless o[:lng]
405
+
406
+ out = <<-EOT
407
+ <script type='text/javascript'>
408
+ //<![CDATA[
409
+ var latLng;
410
+ var map_#{self.object_name};
411
+ var marker_#{self.object_name};
412
+
413
+ function init_map() {
414
+ var lat = #{o[:lat]};
415
+ var lng = #{o[:lng]};
416
+ //var lat = position.coords.latitude"; // HTML5 pass position in function initialize(position)
417
+ // google.loader.ClientLocation.latitude;
418
+ //var lng = position.coords.longitude;
419
+ // google.loader.ClientLocation.longitude;
420
+ latLng = new google.maps.LatLng(lat, lng);
421
+ map_#{self.object_name} = new google.maps.Map(document.getElementById("map_#{self.object_name}"), {
422
+ zoom: #{o[:zoom]},
423
+ center: latLng,
424
+ mapTypeId: google.maps.MapTypeId.ROADMAP
425
+ });
426
+ marker_#{self.object_name} = new google.maps.Marker({
427
+ position: latLng,
428
+ map: map_#{self.object_name},
429
+ draggable: true,
430
+ });
431
+ google.maps.event.addListener(marker_#{self.object_name}, 'dragend', function(event) {
432
+ $('##{self.object_name}_lat').val(event.latLng.lat());
433
+ $('##{self.object_name}_lng').val(event.latLng.lng());
434
+ });
435
+ google.maps.event.addListener(map_#{self.object_name}, 'click', function(event) {
436
+ $('##{self.object_name}_lat').val(event.latLng.lat());
437
+ $('##{self.object_name}_lng').val(event.latLng.lng());
438
+ move();
439
+ });
440
+ $('##{self.object_name}_lat').val(lat);
441
+ $('##{self.object_name}_lng').val(lng);
442
+ };
443
+
444
+ function move() {
445
+ latLng = new google.maps.LatLng($('##{self.object_name}_lat').val(), $('##{self.object_name}_lng').val());
446
+ map_#{self.object_name}.panTo(latLng);
447
+ marker_#{self.object_name}.setPosition(latLng);
448
+ }
449
+
450
+ //google.maps.event.addDomListener(window, 'load', init_map);
451
+
452
+ //]]>
453
+ </script>
454
+ <div class="field" data-role="fieldcontain">
455
+ Latitude: #{self.text_field :lat, :style=>"width:300px;" }
456
+ Longitude: #{self.text_field :lng, :style=>"width:300px;" }
457
+ </div>
458
+ <p/>
459
+ <div id='map_#{self.object_name}' style='max-width: none !important; width:#{o[:width]}; height:#{o[:height]};' class='map'></div>
460
+ <script>
461
+ $('##{self.object_name}_lat').change(function() {move()});
462
+ $('##{self.object_name}_lng').change(function() {move()});
463
+ //var w= $("input[id*=lat]").parent().width();
464
+ //$("input[id*=lat]").css('width','300px');
465
+ //$("input[id*=lng]").css('width','300px');
466
+ $( document ).one( "pagechange", function(){
467
+ init_map();
468
+ });
469
+ </script>
470
+ EOT
471
+ out.html_safe
472
+ end
473
+ end
474
+ end
475
+ end