I was using the nice Dojo Table widget for a rails application because I needed to allow the user to sort the displayed table. I also needed to deploy the application on Tomcat. To make it work, I had to copy the resources folder created by Jmaki in the public folder to the root folder of Tomcat's webapps (the webapps folder). I also had to do some fixes to jmaki_core_celper.rb source. The modified parts (which adds more functionality such as allowing to pass field names to jmaki widgets) are the following:
module JmakiCoreHelper
# ---------- Global Constants ----------
JMAKI_RESOURCES = RAILS_ROOT + '/' + "public/resources/" #chg by JPT to allow Tomcat to find the the widget's files
...
# ---------- Global jMaki Methods ----------
def jmaki_widget(name, options = {}, field_name ="jmaki_field", width = 100)
# Set up variables we will need
result = ""
nameSlashed = name.tr('.', '/')
widgetDir = "/resources/" + nameSlashed # FIXME - relative to context path?
# Render the widget-specific libraries and stylesheets
widget = jmaki_load_widget(name)
# puts "Loaded data is " + widget.inspect
config = widget['config']
if config
type = config['type']
if type
id = type['id']
if ((id != nil) && !jmaki_type_include?(id))
# preload
preload = type['preload']
if preload
result += jmaki_generate_script(preload)
end
# libs
libs = type['libs']
if libs
for i in 0...libs.length
result += jmaki_generate_js(widgetDir + "/" + libs[i])
end
end
# postload
postload = type['postload']
if postload
result += jmaki_generate_script(postload)
end
# styles
styles = type['styles']
if styles
for i in 0...styles.length
result += jmaki_generate_css(widgetDir + "/" + styles[i])
end
end
jmaki_type_include(id)
end
end
end
# Render link to widget stylesheet (if any)
# FIXME - allow "component.css" override with "style" attribute
if (File.exist?(JMAKI_RESOURCES + nameSlashed + "/component.css"))
result += jmaki_generate_css(widgetDir + "/component.css")
end
# Render link to widget javascript (assumed to exist)
# FIXME - allow "component.js" override with "script" attribute
result += jmaki_generate_js(widgetDir + "/component.js")
# Create an empty options hash if we did not receive one
if !options
options = { }
end
# Decorate the options hash with our required attributes
options['name'] = name
if !options['uuid']
options['uuid'] = jmaki_generate_uuid(name)
end
options['widgetDir'] = widgetDir
# puts "options = " + options.inspect
# Deal with the widget template (if any), including parameter replacements
# FIXME - override local filename with "template" attribute
template = nil
templateFilename = JMAKI_RESOURCES + nameSlashed + "/component.htm"
if (File.exist?(templateFilename))
template = jmaki_generate_content(templateFilename)
elsif (File.exist?(templateFilename + "l"))
template = jmaki_generate_content(templateFilename + "l")
end
if template
# FIXME - do substitutions in writeTemplate() other than ${uuid}
template = template.gsub('${uuid}', options['uuid'])
template = template.gsub('${field_name}', field_name)
template = template.gsub('${width}', width.to_s)
result += template
end
# puts "OPTIONS=" + options.to_json
# Render the widget constructor call
result += "\n"
# Return the completed result
result
end
...
end
Comments