2014-04-01 07:10:21 +00:00
|
|
|
module PagesHelper
|
|
|
|
|
|
|
|
def parse_pp_tags(file)
|
|
|
|
opened_file = File.open(file)
|
2014-04-01 08:37:43 +00:00
|
|
|
doc = Nokogiri::HTML(opened_file, nil, "UTF-8")
|
2014-04-01 07:10:21 +00:00
|
|
|
opened_file.close
|
|
|
|
pps = doc.css("*[data-pp]")
|
|
|
|
pps.each do |pp|
|
|
|
|
pp.content = "<p class='add-ps'></p>"
|
|
|
|
end
|
|
|
|
doc.to_html
|
|
|
|
end
|
|
|
|
|
2014-11-03 12:00:59 +00:00
|
|
|
def render_widget_for_frontend(controller_name, widget_method, widget_file, subpart_id=nil)
|
2014-08-05 07:53:08 +00:00
|
|
|
def widget_parsing_repeats_again(elements,d,level)
|
2014-05-22 11:19:25 +00:00
|
|
|
newhtml = []
|
|
|
|
oldhtml = []
|
|
|
|
elements.each do |el|
|
|
|
|
html_to_render = ""
|
|
|
|
data_name = el.attr("data-list")
|
|
|
|
wrap_elements = el.css("*[data-list][data-level='#{level}']")
|
|
|
|
if d["#{data_name}"]
|
|
|
|
d["#{data_name}"].each_with_index do |item,i|
|
|
|
|
element = el.inner_html
|
|
|
|
if wrap_elements.count > 0
|
2014-08-05 07:53:08 +00:00
|
|
|
htmls = widget_parsing_repeats_again(wrap_elements,d["#{data_name}"][i], level + 1)
|
2014-05-22 11:19:25 +00:00
|
|
|
htmls[0].each_with_index do |html,i|
|
|
|
|
element = element.gsub(html,htmls[1][i])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
item.each do |key,value|
|
|
|
|
if !value.kind_of?(Array)
|
|
|
|
value = value.nil? ? "" : value
|
2014-06-04 07:25:04 +00:00
|
|
|
element = element.gsub("{{#{key}}}",value.to_s.html_safe)
|
2014-05-22 11:19:25 +00:00
|
|
|
element = element.gsub("%7B%7B#{key}%7D%7D",value.to_s)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
html_to_render = html_to_render + element
|
|
|
|
end
|
|
|
|
temp = el.to_s
|
|
|
|
oldhtml << temp
|
|
|
|
temp = temp.gsub(el.inner_html, html_to_render)
|
|
|
|
newhtml << temp
|
|
|
|
end
|
|
|
|
end
|
|
|
|
[oldhtml,newhtml]
|
|
|
|
end
|
2014-11-03 12:00:59 +00:00
|
|
|
@key = Site.first.template if @key.nil?
|
2014-04-15 04:49:38 +00:00
|
|
|
controller_name = controller_name.downcase.singularize
|
2014-06-09 10:58:44 +00:00
|
|
|
f = File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', "#{controller_name}", "_#{widget_file}.html.erb");
|
2014-06-06 08:30:56 +00:00
|
|
|
if !File.exists?f
|
2014-06-26 11:14:46 +00:00
|
|
|
f = File.join(Rails.root, 'app', 'templates', "#{@key}", 'widgets', "#{controller_name}", "_#{widget_file}.html.erb");
|
|
|
|
if !File.exists?f
|
2014-07-16 09:12:23 +00:00
|
|
|
f = File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', "#{controller_name}", "_widget.html.erb");
|
|
|
|
if File.exists?f
|
|
|
|
f = File.join('../templates', "#{@key}", 'modules', "#{controller_name}", "_widget.html.erb");
|
|
|
|
else
|
|
|
|
return "<div class='well'>Maybe the administrator has changed the theme, please select the widget design again from the page settings.</div>".html_safe
|
|
|
|
end
|
2014-06-26 11:14:46 +00:00
|
|
|
else
|
|
|
|
f = File.join('../templates', "#{@key}", 'widgets', "#{controller_name}", "_#{widget_file}.html.erb");
|
|
|
|
end
|
2014-06-09 10:58:44 +00:00
|
|
|
else
|
|
|
|
f = File.join('../templates', "#{@key}", 'modules', "#{controller_name}", "_#{widget_file}.html.erb");
|
2014-06-06 08:30:56 +00:00
|
|
|
end
|
2014-04-15 04:49:38 +00:00
|
|
|
s = render_to_string(f)
|
|
|
|
doc = Nokogiri::HTML(s, nil, "UTF-8")
|
2014-11-03 12:00:59 +00:00
|
|
|
if !subpart_id.nil?
|
|
|
|
doc.css("body").children.first.set_attribute("data-subpart-id", subpart_id) rescue nil
|
|
|
|
end
|
2014-04-01 07:10:21 +00:00
|
|
|
wrap_elements = doc.css("*[data-repeat]")
|
2014-04-15 04:49:38 +00:00
|
|
|
controller = "#{controller_name.capitalize.pluralize}_controller".classify.constantize.new
|
|
|
|
OrbitHelper.set_current_widget_module controller_name
|
2015-04-15 05:39:46 +00:00
|
|
|
begin
|
|
|
|
data = controller.send("#{widget_method}") #rescue nil
|
|
|
|
rescue Exception => e
|
|
|
|
write_widget_debug_file(e,controller_name,widget_method,subpart_id)
|
|
|
|
end
|
2014-07-16 07:12:41 +00:00
|
|
|
if !data.nil?
|
|
|
|
wrap_elements = doc.css("*[data-list][data-level='0']")
|
2014-08-05 07:53:08 +00:00
|
|
|
htmls = widget_parsing_repeats_again(wrap_elements,data,1)
|
2014-07-16 07:12:41 +00:00
|
|
|
html = doc.to_s
|
|
|
|
htmls[0].each_with_index do |h,i|
|
|
|
|
html = html.gsub(h,htmls[1][i])
|
|
|
|
end
|
|
|
|
extras = data['extras'] || {}
|
|
|
|
extras["widget-title"] = OrbitHelper.widget_title
|
|
|
|
extras.each do |key,value|
|
|
|
|
html = html.gsub("{{#{key}}}",value.to_s.html_safe)
|
|
|
|
html = html.gsub("%7B%7B#{key}%7D%7D",value.to_s)
|
|
|
|
end
|
|
|
|
html.html_safe
|
|
|
|
else
|
2014-12-09 14:00:40 +00:00
|
|
|
return "<div class='well'>No content to show.</div>".html_safe
|
2014-04-02 06:07:04 +00:00
|
|
|
end
|
2014-04-01 07:10:21 +00:00
|
|
|
end
|
|
|
|
|
2015-04-15 05:39:46 +00:00
|
|
|
def write_widget_debug_file(e,controller_name,action_name,sub_part)
|
2015-04-17 07:54:32 +00:00
|
|
|
url_dir_name = request.fullpath.split("?")[0]
|
|
|
|
url_dir_name = URI.decode(url_dir_name)
|
|
|
|
url_dir_name = (url_dir_name == "/" ? "home" : url_dir_name.sub("/","").gsub("/","_").gsub("-","_").gsub(" ","_"))
|
|
|
|
directory_name = "tmp/debug/#{url_dir_name}"
|
|
|
|
FileUtils.mkdir_p(directory_name) unless File.exists?(directory_name)
|
2015-04-15 05:39:46 +00:00
|
|
|
fn = "#{directory_name}/#{controller_name}_#{action_name}_#{(sub_part if !sub_part.nil?)}.html"
|
|
|
|
error_trace_spans = ""
|
|
|
|
e.backtrace.each do |bt|
|
|
|
|
error_trace_spans = error_trace_spans + "<span>#{bt}</span><br />"
|
|
|
|
end
|
|
|
|
con = "#{controller_name.capitalize.pluralize}_controller".classify.constantize
|
|
|
|
File.open(fn, "w"){ |file|
|
|
|
|
file.puts "<html>
|
|
|
|
<head>
|
2015-04-17 07:54:32 +00:00
|
|
|
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
|
|
|
|
<meta charset=UTF-8'>
|
2015-04-15 05:39:46 +00:00
|
|
|
<title>Debug result</title>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<h3>Error Message</h3>
|
|
|
|
<div class='error-message'>
|
|
|
|
<h2><i>#{e.message}</i></h2>
|
|
|
|
</div>
|
|
|
|
<h3>Request Details</h3>
|
|
|
|
<div class='request-details'>
|
2015-04-17 07:54:32 +00:00
|
|
|
<span>Url : <b>#{URI.decode(request.url)}</b></span><br />
|
2015-04-15 05:39:46 +00:00
|
|
|
<span>Controller : <b>#{con.to_s}</b></span><br />
|
|
|
|
<span>Action : <b>#{action_name.capitalize}</b></span><br />
|
|
|
|
<span>SubPart Id : <b>#{sub_part}</b></span>
|
|
|
|
</div>
|
|
|
|
<h3>Error Trace</h3>
|
|
|
|
<div class='error-trace'>
|
|
|
|
#{error_trace_spans}
|
|
|
|
</div>
|
|
|
|
<h3>Params</h3>
|
|
|
|
<div class='params'>
|
|
|
|
#{OrbitHelper.params}
|
|
|
|
</div>
|
|
|
|
</body>
|
|
|
|
</html>"
|
|
|
|
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2014-04-01 07:10:21 +00:00
|
|
|
end
|
2014-04-02 06:07:04 +00:00
|
|
|
|