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