jinda 0.5.1 → 0.5.2
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.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/lib/generators/jinda/templates/README.md +1 -1
- data/lib/generators/jinda/templates/app/controllers/concerns/jinda_general_concern.rb +156 -0
- data/lib/generators/jinda/templates/app/controllers/concerns/jinda_run_concern.rb +236 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/jinda_controller.rb +6 -571
- data/lib/generators/jinda/templates/app/views/jinda/index.html.haml +3 -3
- data/lib/jinda/app/jinda/index.mm +2 -1
- data/lib/jinda/helpers.rb +204 -55
- data/lib/jinda/version.rb +1 -1
- metadata +6 -5
- data/lib/generators/jinda/templates/app/controllers/ctrs_controller.rb-gem-test +0 -2
|
@@ -13,15 +13,15 @@
|
|
|
13
13
|
|
|
14
14
|
%h2 Recently tested with:
|
|
15
15
|
%ul
|
|
16
|
-
%li Rubygems 2.
|
|
17
|
-
%li Rails 6.0.
|
|
16
|
+
%li Rubygems 2.7.0
|
|
17
|
+
%li Rails 6.0.2
|
|
18
18
|
%li rails new YOURAPP --skip-test-unit --skip-bundle --skip-active-record --skip-javascript --skip-turbolinks
|
|
19
19
|
%li (rails new YOURAPP -BOTJ)
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
%h2 Installation
|
|
23
23
|
%ul
|
|
24
|
-
%li add gem 'jinda', '0.5.
|
|
24
|
+
%li add gem 'jinda', '0.5.2'
|
|
25
25
|
%li bundle
|
|
26
26
|
%li rails generate jinda:install
|
|
27
27
|
%li (run all with "sh install.sh" )
|
|
@@ -44,9 +44,10 @@
|
|
|
44
44
|
<node CREATED="1275790679363" ID="ID_829325467" MODIFIED="1511159696044" TEXT="link: logs: /jinda/logs"/>
|
|
45
45
|
<node CREATED="1507573166973" ID="ID_351025910" MODIFIED="1511159700908" TEXT="link: docs: /jinda/doc"/>
|
|
46
46
|
</node>
|
|
47
|
-
<node CREATED="1273706796854"
|
|
47
|
+
<node CREATED="1273706796854" ID="ID_1003882979" MODIFIED="1588557018609" TEXT="devs: Developer">
|
|
48
48
|
<node CREATED="1275373154914" ID="ID_340725299" MODIFIED="1275373158632" TEXT="role:d"/>
|
|
49
49
|
<node CREATED="1275788317299" ID="ID_716276608" MODIFIED="1511159716471" TEXT="link: error_logs: /jinda/error_logs"/>
|
|
50
|
+
<node CREATED="1275788317299" ID="ID_1570419198" MODIFIED="1587858894833" TEXT="link: notice_logs: /jinda/notice_logs"/>
|
|
50
51
|
</node>
|
|
51
52
|
<node CREATED="1493393619430" ID="ID_554831343" MODIFIED="1584996526651" TEXT="notes: Notes">
|
|
52
53
|
<node CREATED="1493489768542" ID="ID_737469676" MODIFIED="1581383331288" TEXT="link:My Notes: /notes/my">
|
data/lib/jinda/helpers.rb
CHANGED
|
@@ -22,7 +22,7 @@ require 'active_support/core_ext'
|
|
|
22
22
|
#
|
|
23
23
|
# xvar is (become) global variable of current program including user, runseq, and services
|
|
24
24
|
#
|
|
25
|
-
|
|
25
|
+
########################################################################]
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
module Jinda
|
|
@@ -30,6 +30,155 @@ module Jinda
|
|
|
30
30
|
require "rexml/document"
|
|
31
31
|
include REXML
|
|
32
32
|
# methods from application_controller
|
|
33
|
+
|
|
34
|
+
########################################################################]
|
|
35
|
+
# Each Service at one moment will create one xmain
|
|
36
|
+
########################################################################]
|
|
37
|
+
def create_xmain(service)
|
|
38
|
+
c = name2camel(service.module.code)
|
|
39
|
+
custom_controller= "#{c}Controller"
|
|
40
|
+
params["return"] = request.env['HTTP_REFERER']
|
|
41
|
+
Jinda::Xmain.create :service=>service,
|
|
42
|
+
:start=>Time.now,
|
|
43
|
+
:name=>service.name,
|
|
44
|
+
:ip=> get_ip,
|
|
45
|
+
:status=>'I', # init
|
|
46
|
+
:user=>current_ma_user,
|
|
47
|
+
:xvars=> {
|
|
48
|
+
:service_id=>service.id,
|
|
49
|
+
:p=>params.to_unsafe_h,
|
|
50
|
+
:id=>params[:id],
|
|
51
|
+
:user_id=>current_ma_user.try(:id),
|
|
52
|
+
:custom_controller=>custom_controller,
|
|
53
|
+
:host=>request.host,
|
|
54
|
+
:referer=>request.env['HTTP_REFERER']
|
|
55
|
+
}
|
|
56
|
+
end
|
|
57
|
+
def clear_xmains
|
|
58
|
+
Jinda::Xmain.where(:status =>{'$in'=>['R','I']}).update_all(:status=>'X')
|
|
59
|
+
redirect_to action:"pending"
|
|
60
|
+
end
|
|
61
|
+
def ajax_notice
|
|
62
|
+
if notice=Jinda::Notice.recent(current_ma_user, request.env["REMOTE_ADDR"])
|
|
63
|
+
notice.update_attribute :unread, false
|
|
64
|
+
js = "notice('#{notice.message}');"
|
|
65
|
+
else
|
|
66
|
+
js = ""
|
|
67
|
+
end
|
|
68
|
+
render plain: "<script>#{js}</script>"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
########################################################################]
|
|
72
|
+
# Each xmain will create many run_seq as many as steps and form_steps
|
|
73
|
+
########################################################################]
|
|
74
|
+
#
|
|
75
|
+
############################## @runseq ################################]
|
|
76
|
+
# @runseq => #<Jinda::Runseq _id: 5df31912a54d758417a7afc9,
|
|
77
|
+
# created_at: 2019-12-13 04:52:34 UTC,
|
|
78
|
+
# updated_at: 2019-12-13 04:52:43 UTC,
|
|
79
|
+
# user_id: nil,
|
|
80
|
+
# xmain_id: BSON::ObjectId('5df31912a54d758417a7afc7'),
|
|
81
|
+
# action: "do",
|
|
82
|
+
# status: "R",
|
|
83
|
+
# code: "create",
|
|
84
|
+
# name: "Create Article",
|
|
85
|
+
# role: "",
|
|
86
|
+
# rule: "true",
|
|
87
|
+
# rstep: 2,
|
|
88
|
+
# form_step: 1,
|
|
89
|
+
# start: 2019-12-13 04:52:43 UTC,
|
|
90
|
+
# stop: nil,
|
|
91
|
+
# end: true,
|
|
92
|
+
# xml: "<node CREATED='1493419491125' ID='ID_1687683396' MODIFIED='1493483244848' TEXT='create: Create Article'><icon BUILTIN='bookmark'/></node>",
|
|
93
|
+
# ip: nil>
|
|
94
|
+
########################################################################]
|
|
95
|
+
|
|
96
|
+
def create_runseq(xmain)
|
|
97
|
+
@xvars= xmain.xvars
|
|
98
|
+
default_role= get_default_role
|
|
99
|
+
xml= xmain.service.xml
|
|
100
|
+
root = REXML::Document.new(xml).root
|
|
101
|
+
i= 0; j= 0 # i= step, j= form_step
|
|
102
|
+
root.elements.each('node') do |activity|
|
|
103
|
+
text= activity.attributes['TEXT']
|
|
104
|
+
next if ma_comment?(text)
|
|
105
|
+
next if text =~/^rule:\s*/
|
|
106
|
+
action= freemind2action(activity.elements['icon'].attributes['BUILTIN']) if activity.elements['icon']
|
|
107
|
+
return false unless action
|
|
108
|
+
i= i + 1
|
|
109
|
+
output_ma_display= false
|
|
110
|
+
if action=='output'
|
|
111
|
+
ma_display= get_option_xml("display", activity)
|
|
112
|
+
if ma_display && !affirm(ma_display)
|
|
113
|
+
output_ma_display= false
|
|
114
|
+
else
|
|
115
|
+
output_ma_display= true
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
j= j + 1 if (action=='form' || output_ma_display)
|
|
119
|
+
@xvars['referer'] = activity.attributes['TEXT'] if action=='redirect'
|
|
120
|
+
if action!= 'if' && !text.blank?
|
|
121
|
+
scode, name= text.split(':', 2)
|
|
122
|
+
name ||= scode; name.strip!
|
|
123
|
+
code= name2code(scode)
|
|
124
|
+
else
|
|
125
|
+
code= text
|
|
126
|
+
name= text
|
|
127
|
+
end
|
|
128
|
+
role= get_option_xml("role", activity) || default_role
|
|
129
|
+
rule= get_option_xml("rule", activity) || "true"
|
|
130
|
+
runseq= Jinda::Runseq.create :xmain=>xmain.id,
|
|
131
|
+
:name=> name, :action=> action,
|
|
132
|
+
:code=> code, :role=>role.upcase, :rule=> rule,
|
|
133
|
+
:rstep=> i, :form_step=> j, :status=>'I',
|
|
134
|
+
:xml=>activity.to_s
|
|
135
|
+
xmain.current_runseq= runseq.id if i==1
|
|
136
|
+
end
|
|
137
|
+
@xvars['total_steps']= i
|
|
138
|
+
@xvars['total_form_steps']= j
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def init_vars(xmain)
|
|
142
|
+
@xmain= Jinda::Xmain.find xmain
|
|
143
|
+
@xvars= @xmain.xvars
|
|
144
|
+
@runseq= @xmain.runseqs.find @xmain.current_runseq
|
|
145
|
+
# authorize?
|
|
146
|
+
@xvars['current_step']= @runseq.rstep
|
|
147
|
+
@xvars['referrer']= request.referrer
|
|
148
|
+
session[:xmain_id]= @xmain.id
|
|
149
|
+
session[:runseq_id]= @runseq.id
|
|
150
|
+
unless params[:action]=='run_call'
|
|
151
|
+
@runseq.start ||= Time.now
|
|
152
|
+
@runseq.status= 'R' # running
|
|
153
|
+
@runseq.save
|
|
154
|
+
end
|
|
155
|
+
$xmain= @xmain; $xvars= @xvars
|
|
156
|
+
$runseq_id= @runseq.id
|
|
157
|
+
$user_id= current_ma_user.try(:id)
|
|
158
|
+
end
|
|
159
|
+
def init_vars_by_runseq(runseq_id)
|
|
160
|
+
@runseq= Jinda::Runseq.find runseq_id
|
|
161
|
+
@xmain= @runseq.xmain
|
|
162
|
+
@xvars= @xmain.xvars
|
|
163
|
+
#@xvars[:current_step]= @runseq.rstep
|
|
164
|
+
@runseq.start ||= Time.now
|
|
165
|
+
@runseq.status= 'R' # running
|
|
166
|
+
@runseq.save
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def document
|
|
170
|
+
doc = Jinda::Doc.find params[:id]
|
|
171
|
+
if doc.cloudinary
|
|
172
|
+
require 'net/http'
|
|
173
|
+
require "uri"
|
|
174
|
+
uri = URI.parse(doc.url)
|
|
175
|
+
data = Net::HTTP.get_response(uri)
|
|
176
|
+
send_data(data.body, :filename=>doc.filename, :type=>doc.content_type, :disposition=>"inline")
|
|
177
|
+
else
|
|
178
|
+
data= read_binary(doc.url)
|
|
179
|
+
send_data(data, :filename=>doc.filename, :type=>doc.content_type, :disposition=>"inline")
|
|
180
|
+
end
|
|
181
|
+
end
|
|
33
182
|
def b(s)
|
|
34
183
|
"<b>#{s}</b>".html_safe
|
|
35
184
|
end
|
|
@@ -41,9 +190,9 @@ module Jinda
|
|
|
41
190
|
end
|
|
42
191
|
|
|
43
192
|
def refresh_to(url='/', option={})
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
193
|
+
if option[:alert]
|
|
194
|
+
ma_log option[:alert]
|
|
195
|
+
end
|
|
47
196
|
# skip #
|
|
48
197
|
# Rails 5.2 not allow to use js inline call
|
|
49
198
|
render inline: "<script>window.location.replace('#{url}')</script>"
|
|
@@ -156,7 +305,7 @@ module Jinda
|
|
|
156
305
|
xml= @service.xml
|
|
157
306
|
step1 = REXML::Document.new(xml).root.elements['node']
|
|
158
307
|
role= get_option_xml("role", step1) || ""
|
|
159
|
-
|
|
308
|
+
# rule= get_option_xml("rule", step1) || true
|
|
160
309
|
return true if role==""
|
|
161
310
|
unless current_ma_user
|
|
162
311
|
return role.blank?
|
|
@@ -168,13 +317,13 @@ module Jinda
|
|
|
168
317
|
def ma_log(message)
|
|
169
318
|
# Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
|
|
170
319
|
# :unread=> true, :ip=> ($ip || request.env["REMOTE_ADDR"])
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
320
|
+
if session[:user_id]
|
|
321
|
+
Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
|
|
322
|
+
:user_id => $user.id, :unread=> true, :ip=>request.env["REMOTE_ADDR"]
|
|
323
|
+
else
|
|
324
|
+
Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
|
|
325
|
+
:unread=> true, :ip=>request.env["REMOTE_ADDR"]
|
|
326
|
+
end
|
|
178
327
|
end
|
|
179
328
|
|
|
180
329
|
alias :ma_notice :ma_log
|
|
@@ -241,7 +390,7 @@ module Jinda
|
|
|
241
390
|
# end
|
|
242
391
|
#@user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
|
|
243
392
|
@user ||= User.where(:auth_token => cookies[:auth_token]).first if cookies[:auth_token]
|
|
244
|
-
|
|
393
|
+
return @user
|
|
245
394
|
end
|
|
246
395
|
|
|
247
396
|
def ui_action?(s)
|
|
@@ -256,7 +405,7 @@ module Jinda
|
|
|
256
405
|
# ""
|
|
257
406
|
# end
|
|
258
407
|
# end
|
|
259
|
-
|
|
408
|
+
|
|
260
409
|
# ##########################################################################
|
|
261
410
|
#
|
|
262
411
|
# Create / Update Modules, Runseqs, Services from XML
|
|
@@ -286,9 +435,9 @@ module Jinda
|
|
|
286
435
|
module_code= code.to_code
|
|
287
436
|
menu_icon = m_icon(m)
|
|
288
437
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
438
|
+
# ##########################################################################
|
|
439
|
+
# First Node eg: Module Name
|
|
440
|
+
# ##########################################################################
|
|
292
441
|
# create or update to GmaModule
|
|
293
442
|
ma_module= Jinda::Module.find_or_create_by :code=>module_code
|
|
294
443
|
ma_module.update_attributes :uid=>ma_module.id.to_s, :icon=>menu_icon
|
|
@@ -298,9 +447,9 @@ module Jinda
|
|
|
298
447
|
mseq += 1
|
|
299
448
|
seq= 0
|
|
300
449
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
450
|
+
# ##########################################################################
|
|
451
|
+
# Second Nodes eg: Role, Link otherwise Services
|
|
452
|
+
# ##########################################################################
|
|
304
453
|
m.each_element('node') do |s|
|
|
305
454
|
service_name= s.attributes["TEXT"].to_s
|
|
306
455
|
scode, sname= service_name.split(':', 2)
|
|
@@ -323,9 +472,9 @@ module Jinda
|
|
|
323
472
|
protected_services << ma_service.uid
|
|
324
473
|
else
|
|
325
474
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
475
|
+
# ##########################################################################
|
|
476
|
+
# Second and Third Nodes eg: Role, Normal Services
|
|
477
|
+
# ##########################################################################
|
|
329
478
|
# normal service
|
|
330
479
|
step1 = s.elements['node']
|
|
331
480
|
role= get_option_xml("role", step1) || ""
|
|
@@ -381,7 +530,7 @@ module Jinda
|
|
|
381
530
|
########################################################################
|
|
382
531
|
# Jinda Rake Task #
|
|
383
532
|
########################################################################
|
|
384
|
-
|
|
533
|
+
|
|
385
534
|
def gen_views
|
|
386
535
|
t = ["*** generate ui ***"]
|
|
387
536
|
|
|
@@ -394,7 +543,7 @@ module Jinda
|
|
|
394
543
|
unless gen_view_file_exist?(dir)
|
|
395
544
|
gen_view_mkdir(dir,t)
|
|
396
545
|
end
|
|
397
|
-
|
|
546
|
+
|
|
398
547
|
if s.code=='link'
|
|
399
548
|
f= "app/views/#{s.module.code}/index.haml"
|
|
400
549
|
$afile << f
|
|
@@ -405,7 +554,7 @@ module Jinda
|
|
|
405
554
|
end
|
|
406
555
|
next
|
|
407
556
|
end
|
|
408
|
-
|
|
557
|
+
|
|
409
558
|
dir ="app/views/#{s.module.code}/#{s.code}"
|
|
410
559
|
unless gen_view_file_exist?(dir)
|
|
411
560
|
gen_view_mkdir(dir,t)
|
|
@@ -449,18 +598,18 @@ module Jinda
|
|
|
449
598
|
|
|
450
599
|
def process_models
|
|
451
600
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
601
|
+
# app= get_app
|
|
602
|
+
# t= ["process models"]
|
|
603
|
+
# xml map sample from index.mm
|
|
604
|
+
# node @CREATED=1273819432637 @ID=ID_1098419600 @MODIFIED=1334737006485 @TEXT=Jinda
|
|
605
|
+
# node @CREATED=1273819462973 @ID=ID_282419531 @MODIFIED=1493705904561 @POSITION=right @TEXT=services
|
|
606
|
+
# node @CREATED=1273819465949 @FOLDED=true @ID=ID_855471610 @MODIFIED=1493768913078 @POSITION=right @TEXT=roles
|
|
607
|
+
# node @CREATED=1273819456867 @ID=ID_1677010054 @MODIFIED=1493418874718 @POSITION=left @TEXT=models
|
|
608
|
+
# node @CREATED=1292122118499 @FOLDED=true @ID=ID_1957754752 @MODIFIED=1493705885123 @TEXT=person
|
|
609
|
+
# node @CREATED=1292122236285 @FOLDED=true @ID=ID_959987887 @MODIFIED=1493768919147 @TEXT=address
|
|
610
|
+
# node @CREATED=1493418879485 @ID=ID_1995497233 @MODIFIED=1493718770637 @TEXT=article
|
|
611
|
+
# node @CREATED=1493418915637 @ID=ID_429078131 @MODIFIED=1493418930081 @TEXT=comment
|
|
612
|
+
|
|
464
613
|
models= @app.elements["//node[@TEXT='models']"] || REXML::Document.new
|
|
465
614
|
models.each_element('node') do |model|
|
|
466
615
|
# t << "= "+model.attributes["TEXT"]
|
|
@@ -468,14 +617,14 @@ module Jinda
|
|
|
468
617
|
next if model_name.comment?
|
|
469
618
|
model_code= name2code(model_name)
|
|
470
619
|
model_file= "#{Rails.root}/app/models/#{model_code}.rb"
|
|
471
|
-
|
|
620
|
+
|
|
472
621
|
if File.exists?(model_file)
|
|
473
622
|
doc= File.read(model_file)
|
|
474
623
|
else
|
|
475
624
|
system("rails generate model #{model_code}")
|
|
476
625
|
doc= File.read(model_file)
|
|
477
626
|
end
|
|
478
|
-
|
|
627
|
+
|
|
479
628
|
doc = add_utf8(doc)
|
|
480
629
|
attr_hash= make_fields(model)
|
|
481
630
|
doc = add_jinda(doc, attr_hash)
|
|
@@ -492,14 +641,14 @@ module Jinda
|
|
|
492
641
|
def add_jinda(doc, attr_hash)
|
|
493
642
|
if doc =~ /#{@btext}/
|
|
494
643
|
s1,s2,s3= doc.partition(/ #{@btext}.*#{@etext}\n/m)
|
|
495
|
-
|
|
644
|
+
s2= ""
|
|
496
645
|
else
|
|
497
646
|
s1,s2,s3= doc.partition("include Mongoid::Document\n")
|
|
498
647
|
end
|
|
499
648
|
doc= s1+s2+ <<-EOT
|
|
500
649
|
#{@btext}
|
|
501
650
|
include Mongoid::Timestamps
|
|
502
|
-
|
|
651
|
+
EOT
|
|
503
652
|
|
|
504
653
|
attr_hash.each do |a|
|
|
505
654
|
# doc+= "\n*****"+a.to_s+"\n"
|
|
@@ -592,8 +741,8 @@ module Jinda
|
|
|
592
741
|
########################################################################
|
|
593
742
|
# END code from jinda.rake #
|
|
594
743
|
########################################################################
|
|
595
|
-
|
|
596
|
-
|
|
744
|
+
|
|
745
|
+
|
|
597
746
|
########################################################################
|
|
598
747
|
# Methods to be overrided by gemhelp #
|
|
599
748
|
# for Rspec Test
|
|
@@ -613,7 +762,7 @@ module Jinda
|
|
|
613
762
|
t << "create file #{f}"
|
|
614
763
|
end
|
|
615
764
|
########################################################################
|
|
616
|
-
|
|
765
|
+
|
|
617
766
|
def controller_exists?(modul)
|
|
618
767
|
File.exists? "#{Rails.root}/app/controllers/#{modul}_controller.rb"
|
|
619
768
|
end
|
|
@@ -659,7 +808,7 @@ module Jinda
|
|
|
659
808
|
node.each_element("icon") do |mn|
|
|
660
809
|
mcons << mn.attributes["BUILTIN"]
|
|
661
810
|
end
|
|
662
|
-
|
|
811
|
+
ticon = mcons[0].to_s
|
|
663
812
|
return ticon
|
|
664
813
|
end
|
|
665
814
|
|
|
@@ -689,8 +838,8 @@ module Jinda
|
|
|
689
838
|
|
|
690
839
|
def freemind2action(s)
|
|
691
840
|
case s.downcase
|
|
692
|
-
|
|
693
|
-
|
|
841
|
+
#when 'bookmark' # Excellent
|
|
842
|
+
# 'call'
|
|
694
843
|
when 'bookmark' # Excellent
|
|
695
844
|
'do'
|
|
696
845
|
when 'attach' # Look here
|
|
@@ -741,9 +890,9 @@ class String
|
|
|
741
890
|
end
|
|
742
891
|
def to_code
|
|
743
892
|
s= self.dup
|
|
744
|
-
# s.downcase!
|
|
745
|
-
# s.gsub! /[\s\-_]/, ""
|
|
746
|
-
# s
|
|
893
|
+
# s.downcase!
|
|
894
|
+
# s.gsub! /[\s\-_]/, ""
|
|
895
|
+
# s
|
|
747
896
|
code, name = s.split(':')
|
|
748
897
|
code.downcase.strip.gsub(' ','_').gsub(/[^#_\/a-zA-Z0-9]/,'')
|
|
749
898
|
end
|
|
@@ -759,9 +908,9 @@ module ActionView
|
|
|
759
908
|
end
|
|
760
909
|
end
|
|
761
910
|
class FormBuilder
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
911
|
+
def date_select_thai(method)
|
|
912
|
+
self.date_select method, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year]
|
|
913
|
+
end
|
|
765
914
|
def date_field(method, options = {})
|
|
766
915
|
default= options[:default] || self.object.send(method) || Date.today
|
|
767
916
|
data_options= ({"mode"=>"calbox"}).merge(options)
|
|
@@ -852,7 +1001,7 @@ module ActionView
|
|
|
852
1001
|
init_map();
|
|
853
1002
|
});
|
|
854
1003
|
</script>
|
|
855
|
-
EOT
|
|
1004
|
+
EOT
|
|
856
1005
|
out.html_safe
|
|
857
1006
|
end
|
|
858
1007
|
end
|