mindapp 0.0.1

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