Skip to content

Commit

Permalink
Major documenting and restructuring effort
Browse files Browse the repository at this point in the history
  • Loading branch information
Winton Welsh committed Nov 8, 2008
1 parent b1c5212 commit 0e9c808
Show file tree
Hide file tree
Showing 4 changed files with 374 additions and 316 deletions.
4 changes: 2 additions & 2 deletions lib/rails_widget.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
require [ File.dirname(f), File.basename(f, '.rb') ].join('/')
end

ActionView::Base.send :include, WidgetHelpers
ActionController::Base.send :include, WidgetHelpers
ActionView::Base.send :include, RailsWidget
ActionController::Base.send :include, RailsWidget
ActionController::Base.view_paths += [ RAILS_ROOT + '/app/widgets' ]
184 changes: 97 additions & 87 deletions lib/rails_widget/assets.rb
Original file line number Diff line number Diff line change
@@ -1,114 +1,124 @@
module WidgetHelpers

def default_javascript
"#{params[:controller]}/#{params[:action]}"
end

def default_stylesheet
"#{params[:controller]}/#{params[:action]}"
end
module RailsWidget #:doc:

def javascripts(*paths, &block)
add_assets :javascripts, paths, &block
@assets ||= Assets.new binding, controller
@assets.javascripts *paths, &block
end

def stylesheets(*paths, &block)
add_assets :stylesheets, paths, &block
@assets ||= Assets.new binding, controller
@assets.stylesheets *paths, &block
end

def templates(*paths, &block)
paths.each do |path|
add_assets :templates, path, &block
end
add_assets(:templates, paths, &block) if paths.empty?
@assets ||= Assets.new binding, controller
@assets.templates *paths, &block
end

def textarea_template(id, path=nil, locals={})
controller.render_to_string(:partial => 'app_helpers/template/textarea', :locals => {
:id => id,
:body => controller.render_to_string(:partial => path, :locals => locals)
})
end
class Assets
attr :assets, true
attr :block, true
attr :item, true

def initialize(bind, controller)
@bind = bind
@controller = controller
@assets = {}
end

private

def add_assets(type, paths, &block)
options = paths.extract_options!
paths.flatten! unless type == :templates
def javascripts(*paths, &block)
add_assets :javascripts, paths, &block
end

def stylesheets(*paths, &block)
add_assets :stylesheets, paths, &block
end

def templates(*paths, &block)
paths.each do |path|
add_assets :templates, path, &block
end
add_assets(:templates, paths, &block) if paths.empty?
end

@assets ||= {}
@assets[type] ||= []
@layout_assets ||= {}
@layout_assets[type] ||= []
private

paths = nil if paths.empty?
def add_assets(type, paths, &block)
options = paths.extract_options!
paths.flatten! unless type == :templates

@assets[type] ||= []

paths = nil if paths.empty?

if options[:layout]
options.delete :layout
paths.push(options) if paths
@layout_assets[type].push(paths ) if paths
@layout_assets[type].push(capture(&block)) if block
else
paths.push(options) if paths
@assets[type].push(paths ) if paths
@assets[type].push(capture(&block)) if block
end
@assets[type].push(paths) if paths
if block
@block = block
@assets[type].push eval("capture(&@assets.block)", @bind)
end

if !paths && !block
#logger.info type.inspect
#logger.info 'LAYOUT ' + @layout_assets[type].inspect
#logger.info @assets[type].inspect

@assets[type] = @layout_assets[type] + @assets[type]
if !paths && !block
#logger.info type.inspect
#logger.info 'LAYOUT ' + @layout_assets[type].inspect
#logger.info @assets[type].inspect

@assets[type].uniq!
remove_dups @assets[type]
@assets[type].collect! { |a| a[0].respond_to?(:keys) ? nil : a }
@assets[type].compact!
@assets[type].uniq!
remove_dups @assets[type]
@assets[type].collect! { |a| a[0].respond_to?(:keys) ? nil : a }
@assets[type].compact!

js = []
assets = @assets[type].collect do |item|
if item.respond_to?(:pop)
case type
when :javascripts
javascript_include_tag *item
when :stylesheets
stylesheet_link_tag *item
when :templates
textarea_template item[0], item[1], item[2]
end + "\n"
else
case type
when :javascripts
js.push(item) unless item.blank?
nil
js = []
assets = @assets[type].collect do |item|
if item.respond_to?(:pop)
@item = item
case type
when :javascripts
eval "javascript_include_tag *@assets.item", @bind
when :stylesheets
eval "stylesheet_link_tag *@assets.item", @bind
when :templates
eval "textarea_template @assets.item[0], @assets.item[1], @assets.item[2]", @bind
end + "\n"
else
item
case type
when :javascripts
js.push(item) unless item.blank?
nil
else
item
end
end
end.compact
if type == :javascripts
assets.join + "<script type='text/javascript'>\n#{js.join "\n"}\n</script>"
else
assets.join
end
end.compact
if type == :javascripts
assets.join + "<script type='text/javascript'>\n#{js.join "\n"}\n</script>"
else
assets.join
end
end
end

def remove_dups(arr, list=[])
arr.dup.each do |a|
if a.respond_to?(:keys)
next
elsif a.respond_to?(:pop)
remove_dups a, list
else
if list.include?(a) || a.blank?
arr.delete_at arr.rindex(a)

def remove_dups(arr, list=[])
arr.dup.each do |a|
if a.respond_to?(:keys)
next
elsif a.respond_to?(:pop)
remove_dups a, list
else
list << a
if list.include?(a) || a.blank?
arr.delete_at arr.rindex(a)
else
list << a
end
end
end
end
end

def textarea_template(id, path=nil, locals={})
@controller.render_to_string(:partial => 'app_helpers/template/textarea', :locals => {
:id => id,
:body => @controller.render_to_string(:partial => path, :locals => locals)
})
end
end
end
Loading

0 comments on commit 0e9c808

Please sign in to comment.