module JsOnDemandViewMixin def required_js_on_demand "if(!JsOnDemand) { var JsOnDemand = {}; JsOnDemand.callbacks = {}; JsOnDemand.num = 0; JsOnDemand.Get = function(url, callback) { this.callback = callback; var id = JsOnDemand.num++; JsOnDemand.callbacks[id] = this.callback; var script = document.createElement('script'); script.type = 'text/javascript'; var t = new Date(); var cacheDefeater = '' + t.getYear() + t.getMonth() + t.getDay() + t.getHours() + t.getMinutes() + t.getSeconds() + id script.src = 'http://#{request.host_with_port}' + url + '&JsOnDemandNum=' + id + '&__no_cache=' + cacheDefeater; document.getElementsByTagName('head')[0].appendChild(script); } }" end def js_on_demand_get(options) query_string = "" if not options[:js_parameters].nil? query_string = options[:js_parameters].entries.collect { |key,value| "'" + key.to_s + "=' + " + value.to_s }.join(" + '&' + ") options.delete(:js_parameters) end callback = "callback" if not options[:callback].nil? callback = options[:callback].to_s options.delete(:callback) end url = url_for(options) if (url =~ /\?/).nil? query_string = "'?' + " + query_string else query_string = "'&' + " + query_string end "new JsOnDemand.Get('#{url}' + #{query_string}, #{callback});" end end