refinerycms 0.9.5.9 → 0.9.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,10 +20,38 @@ unless RAILS_ROOT.nil? or RAILS_ROOT.length == 0
20
20
  # copy any rake tasks from plugins to the main lib directory so they can be run.
21
21
  FileUtils::cp Dir[File.join(REFINERY_ROOT, %w(** tasks *.rake))], File.join(RAILS_ROOT, %w(lib tasks))
22
22
 
23
+ # read in the config files
24
+ app_config = File.open(File.join(RAILS_ROOT, %w(config environment.rb)), "r").read
25
+ environment_updated = false
26
+
27
+ # backup app's environment.rb
28
+ unless (app_refinery_gems_section = app_config.scan(/(#===REFINERY REQUIRED GEMS===)([^#]*)(#===REFINERY END OF REQUIRED GEMS===)/).join("")).length == 0
29
+ # read in the config file in the gem
30
+ refinery_config = File.open(File.join(REFINERY_ROOT, %w(config environment.rb)), "r").read
31
+ FileUtils.cp File.join(RAILS_ROOT, %w(config environment.rb)), File.join(RAILS_ROOT, %w(config environment.autobackupbyrefinery.rb))
32
+
33
+ # write the new content into the file.
34
+ File.open(File.join(RAILS_ROOT, %w(config environment.rb)), "w").puts(app_config.gsub!(
35
+ app_refinery_gems_section,
36
+ refinery_config.scan(/(#===REFINERY REQUIRED GEMS===)([^#]*)(#===REFINERY END OF REQUIRED GEMS===)/).join("")
37
+ ))
38
+
39
+ environment_updated = true
40
+ end
41
+
23
42
  unless ARGV.include?("--from-refinery-installer")
24
43
  puts "---------"
25
44
  puts "Copied new Refinery core assets."
45
+ if environment_updated
46
+ puts "I've made a backup of your current config/environment.rb file as it has been updated with the latest Refinery RubyGem requirements."
47
+ puts "The backup is located at config/environment.autobackupbyrefinery.rb incase you need it."
48
+ end
49
+ puts ""
50
+ puts "=== ACTION REQUIRED ==="
26
51
  puts "Please run rake db:migrate to ensure your database is at the correct version."
52
+ puts "Please also run rake gems:install to ensure you have the currently specified gems." if environment_updated
53
+
54
+ puts ""
27
55
  end
28
56
  else
29
57
  unless ARGV.include?("--from-refinery-installer")
@@ -7,7 +7,7 @@
7
7
  # Specifies gem version of Rails to use when vendor/rails is not present
8
8
  RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION
9
9
  # Freeze to a specific version of refinerycms when running as a gem
10
- # REFINERY_GEM_VERSION = 0.9.5.1 unless defined? REFINERY_GEM_VERSION
10
+ # REFINERY_GEM_VERSION = 0.9.5.10 unless defined? REFINERY_GEM_VERSION
11
11
 
12
12
  # Bootstrap the Rails environment, frameworks, and default configuration
13
13
  require File.join(File.dirname(__FILE__), 'boot')
@@ -59,7 +59,10 @@ eval("#{(defined? Refinery::Initializer) ? Refinery : Rails}::Initializer").run
59
59
  # Make Active Record use UTC-base instead of local time
60
60
  # config.active_record.default_timezone = :utc
61
61
  #
62
-
62
+
63
+ # Please add your gems above the Refinery required gems here:
64
+
65
+ #===REFINERY REQUIRED GEMS===
63
66
  config.gem "rake", :version => ">= 0.8.3", :lib => "rake"
64
67
  config.gem "friendly_id", :version => ">= 2.2.2", :lib => "friendly_id"
65
68
  config.gem "will_paginate", :version => ">= 2.3.11", :lib => "will_paginate", :source => "http://gemcutter.org"
@@ -67,4 +70,6 @@ eval("#{(defined? Refinery::Initializer) ? Refinery : Rails}::Initializer").run
67
70
  config.gem "aasm", :version => ">= 2.1.3", :lib => "aasm", :source => "http://gemcutter.org"
68
71
  config.gem "unicode", :version => ">= 0.1", :lib => "unicode"
69
72
  config.gem "slim_scrooge", :source => "http://gemcutter.org"
73
+ config.gem "hpricot", :version => "0.8.1", :lib => "hpricot", :source => "http://gemcutter.org"
74
+ #===REFINERY END OF REQUIRED GEMS===
70
75
  end
@@ -1222,6 +1222,20 @@ WYMeditor.editor.prototype.dialog = function( dialogType ) {
1222
1222
  }
1223
1223
 
1224
1224
  selected = this.selected();
1225
+ if (dialogType == WYMeditor.DIALOG_LINK && jQuery.browser.mozilla) {
1226
+ selection = this._iframe.contentWindow.getSelection();
1227
+ matches = selected.innerHTML.match(new RegExp(selection.anchorNode.textContent + "(.*)" + selection.focusNode.textContent));
1228
+ if (matches != null && matches.length > 0 && (possible_anchor_tag = matches.last()) != null) {
1229
+ if ((href = possible_anchor_tag.match(/href="([^"]*)"/).last()) != null) {
1230
+ possible_anchors = this._iframe.document().getElementsByTagName('a');
1231
+ for (i=0;i<possible_anchors.length;i++) {
1232
+ if ((possible_match = possible_anchors[i]).innerHTML == selection) {
1233
+ selected = possible_match;
1234
+ }
1235
+ }
1236
+ }
1237
+ }
1238
+ }
1225
1239
 
1226
1240
  // set up handlers.
1227
1241
  imageGroup = null;
@@ -5,6 +5,28 @@ class Admin::ImagesController < Admin::BaseController
5
5
  crudify :image, :order => "created_at DESC", :conditions => "parent_id is NULL", :sortable => false
6
6
  before_filter :change_list_mode_if_specified
7
7
 
8
+ def index
9
+ if searching?
10
+ @images = Image.paginate_search params[:search],
11
+ :page => params[:page],
12
+ :order => "created_at DESC",
13
+ :conditions => "parent_id IS NULL"
14
+ else
15
+ @images = Image.paginate :page => params[:page],
16
+ :order => "created_at DESC",
17
+ :conditions => "parent_id IS NULL"
18
+ end
19
+
20
+ if RefinerySetting.find_or_set(:group_images_by_date_uploaded, false)
21
+ @grouped_images = []
22
+ @images.each do |image|
23
+ key = image.created_at.strftime("%Y-%m-%d")
24
+ image_group = @grouped_images.collect{|images| images.last if images.first == key }.flatten.compact << image
25
+ (@grouped_images.delete_if {|i| i.first == key}) << [key, image_group]
26
+ end
27
+ end
28
+ end
29
+
8
30
  def new
9
31
  @image = Image.new
10
32
  @url_override = admin_images_url(:dialog => from_dialog?)
@@ -1,21 +1,12 @@
1
- <ul>
2
- <% @images.each do |image| -%>
3
- <% if image.parent_id.nil? %>
4
- <li id="sortable_<%= image.id %>" class='clearfix record <%= cycle("on", "on-hover") %>'>
5
- <span class='title'>
6
- <span class='actions'>
7
- <%= link_to refinery_icon_tag('eye.png'), image.public_filename,
8
- :target => "_blank", :title => "#{image_fu image, :preview}" %>
9
- <%= link_to refinery_icon_tag('application_edit.png'), edit_admin_image_path(image),
10
- :title => 'Edit this image' %>
11
- <%= link_to refinery_icon_tag('delete.png'), admin_image_path(image),
12
- :confirm => "Are you sure you want to delete #{image.title}?",
13
- :class => "cancel", :method => :delete,
14
- :title => "Remove this image forever" %>
15
- </span>
16
- <%= image.title %> <span class="preview">&nbsp;</span>
17
- </span>
18
- </li>
19
- <% end %>
20
- <% end -%>
21
- </ul>
1
+ <% if RefinerySetting.find_or_set(:group_images_by_date_uploaded, false) %>
2
+ <% @grouped_images.each do |container| %>
3
+ <h3><%= (image_group = container.last).first.created_at.strftime("%A, %d %B %Y") %></h3>
4
+ <ul>
5
+ <%= render :partial => 'list_view_image', :collection => image_group %>
6
+ </ul>
7
+ <% end %>
8
+ <% else %>
9
+ <ul>
10
+ <%= render :partial => 'list_view_image', :collection => @images %>
11
+ </ul>
12
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <% if list_view_image.parent_id.nil? %>
2
+ <li id="sortable_<%= list_view_image.id %>" class='clearfix record <%= cycle("on", "on-hover") %>'>
3
+ <span class='title'>
4
+ <span class='actions'>
5
+ <%= link_to refinery_icon_tag('eye.png'), list_view_image.public_filename,
6
+ :target => "_blank", :title => "#{image_fu list_view_image, :preview}" %>
7
+ <%= link_to refinery_icon_tag('application_edit.png'), edit_admin_image_path(list_view_image),
8
+ :title => 'Edit this image' %>
9
+ <%= link_to refinery_icon_tag('delete.png'), admin_image_path(list_view_image),
10
+ :confirm => "Are you sure you want to delete #{list_view_image.title}?",
11
+ :class => "cancel", :method => :delete,
12
+ :title => "Remove this image forever" %>
13
+ </span>
14
+ <%= list_view_image.title %> <span class="preview">&nbsp;</span>
15
+ </span>
16
+ </li>
17
+ <% end %>
@@ -1,5 +1,6 @@
1
1
  # Methods added to this helper will be available to all templates in the application.
2
2
  module Refinery::ApplicationHelper
3
+ include Refinery::HtmlTruncationHelper
3
4
 
4
5
  def add_meta_tags
5
6
  content_for :head, "<meta name=\"keywords\" content=\"#{@page.meta_keywords}\" />" unless @page.meta_keywords.blank?
@@ -80,41 +81,6 @@ module Refinery::ApplicationHelper
80
81
  def refinery_icon_tag(filename, options = {})
81
82
  image_tag "refinery/icons/#{filename}", {:width => 16, :height => 16}.merge!(options)
82
83
  end
83
-
84
- def truncate(text, *args)
85
- truncated = super
86
- unless truncated === text
87
- options = args.extract_options!
88
- if options[:preserve_html_tags]
89
- truncated = truncated[0, truncated.length - options[:omission].length]
90
- # scan for all HTML tags then the last tag
91
- unless (tag_matches = truncated.scan(/<[^<>]{1,}>?/)).empty? or
92
- (last_tag = tag_matches.last.gsub(/<|\/|\>/, "").split(" ").first).nil? or
93
- last_tag.downcase == "p" or (tag_matches.last.split("<").last.first == "/")
94
-
95
- # scan until we find the exact tag we're looking for.
96
- full_tag = text.scan(Regexp.new("(#{tag_matches.last})([^<]*)(<\/#{last_tag}>)"))[0..2].join("") # 0..2 because it'll be found as 3 tags together.
97
- truncated.gsub!(tag_matches.last, full_tag)
98
-
99
- end
100
-
101
- truncated = truncated[0, truncated.length-1] if truncated.last == "<" # If a tag almost started, get rid of it.
102
-
103
- # add back on the omission
104
- truncated = "#{truncated}#{options[:omission]}"
105
-
106
- # close the paragraph unless it closes already.
107
- start_index = truncated.length-"</p>".length-options[:omission].length
108
- length = (end_index = options[:omission].length + "</p>".length)
109
- unless truncated[start_index, length].downcase == "</p>"
110
- truncated = "#{truncated}</p>"
111
- end
112
-
113
- end
114
- end
115
-
116
- truncated
117
- end
118
84
 
119
85
  # replace all system images with a thumbnail version of them (handy for all images inside a page part)
120
86
  def content_fu(content, thumbnail)
@@ -0,0 +1,114 @@
1
+ # By Henrik Nyh <http://henrik.nyh.se> 2008-01-30.
2
+ # Free to modify and redistribute with credit.
3
+
4
+ # modified by Dave Nolan <http://textgoeshere.org.uk> 2008-02-06
5
+ # Ellipsis appended to text of last HTML node
6
+ # Ellipsis inserted after final word break
7
+
8
+ # modified by Mark Dickson <mark@sitesteaders.com> 2008-12-18
9
+ # Option to truncate to last full word
10
+ # Option to include a 'more' link
11
+ # Check for nil last child
12
+
13
+ # modified by Ken-ichi Ueda <http://kueda.net> 2009-09-02
14
+ # Rails 2.3 compatability (chars -> mb_chars), via Henrik
15
+ # Hpricot 0.8 compatability (avoid dup on Hpricot::Elem)
16
+
17
+ # modified by Philip Arndt <http://www.resolvedigital.co.nz> 2009-11-18
18
+ # renamed function to truncate and activated html truncation when :preserve_html_tags is supplied and true.
19
+ # modified namespace to Refinery namespace and renamed module.
20
+
21
+ require "rubygems"
22
+ require "hpricot"
23
+
24
+ module Refinery::HtmlTruncationHelper
25
+
26
+ # Like the Rails _truncate_ helper but doesn't break HTML tags, entities, and optionally. words.
27
+ def truncate(text, *args)
28
+ return if text.nil?
29
+ options = args.extract_options!
30
+ unless (options[:preserve_html_tags] == true)
31
+ return super
32
+ else
33
+ max_length = options[:length] || 30
34
+ omission = options[:omission] || "..."
35
+ # use :link => link_to('more', post_path), or something to that effect
36
+
37
+ doc = Hpricot(text.to_s)
38
+ omission_length = Hpricot(omission).inner_text.mb_chars.length
39
+ content_length = doc.inner_text.mb_chars.length
40
+ actual_length = max_length - omission_length
41
+
42
+ if content_length > max_length
43
+ truncated_doc = doc.truncate(actual_length)
44
+
45
+ if (options[:preserve_full_words] || false)
46
+ word_length = actual_length - (truncated_doc.inner_html.mb_chars.length - truncated_doc.inner_html.rindex(' '))
47
+ truncated_doc = doc.truncate(word_length)
48
+ end
49
+
50
+ last_child = truncated_doc.children.last
51
+ if last_child.inner_html.nil?
52
+ truncated_doc.inner_html + omission + options[:link] if options[:link]
53
+ else
54
+ last_child.inner_html = last_child.inner_html.gsub(/\W.[^\s]+$/, "") + omission
55
+ last_child.inner_html += options[:link] if options[:link]
56
+ truncated_doc
57
+ end
58
+ else
59
+ if options[:link]
60
+ last_child = doc.children.last
61
+ if last_child.inner_html.nil?
62
+ doc.inner_html + options[:link]
63
+ else
64
+ last_child.inner_html = last_child.inner_html.gsub(/\W.[^\s]+$/, "") + options[:link]
65
+ doc
66
+ end
67
+ else
68
+ text.to_s
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+
75
+ end
76
+
77
+ module HpricotTruncator
78
+ module NodeWithChildren
79
+ def truncate(max_length)
80
+ return self if inner_text.mb_chars.length <= max_length
81
+ truncated_node = if self.is_a?(Hpricot::Doc)
82
+ self.dup
83
+ else
84
+ self.class.send(:new, self.name, self.attributes)
85
+ end
86
+ truncated_node.children = []
87
+ each_child do |node|
88
+ remaining_length = max_length - truncated_node.inner_text.mb_chars.length
89
+ break if remaining_length <= 0
90
+ truncated_node.children << node.truncate(remaining_length)
91
+ end
92
+ truncated_node
93
+ end
94
+ end
95
+
96
+ module TextNode
97
+ def truncate(max_length)
98
+ # We're using String#scan because Hpricot doesn't distinguish entities.
99
+ Hpricot::Text.new(content.scan(/&#?[^\W_]+;|./).first(max_length).join)
100
+ end
101
+ end
102
+
103
+ module IgnoredTag
104
+ def truncate(max_length)
105
+ self
106
+ end
107
+ end
108
+ end
109
+
110
+ Hpricot::Doc.send(:include, HpricotTruncator::NodeWithChildren)
111
+ Hpricot::Elem.send(:include, HpricotTruncator::NodeWithChildren)
112
+ Hpricot::Text.send(:include, HpricotTruncator::TextNode)
113
+ Hpricot::BogusETag.send(:include, HpricotTruncator::IgnoredTag)
114
+ Hpricot::Comment.send(:include, HpricotTruncator::IgnoredTag)
@@ -29,6 +29,26 @@ class Admin::ResourcesController < Admin::BaseController
29
29
  end
30
30
  end
31
31
 
32
+ def index
33
+ if searching?
34
+ @resources = Resource.paginate_search params[:search],
35
+ :page => params[:page],
36
+ :order => "created_at DESC"
37
+ else
38
+ @resources = Resource.paginate :page => params[:page],
39
+ :order => "created_at DESC"
40
+ end
41
+
42
+ if RefinerySetting.find_or_set(:group_resources_by_date_uploaded, false)
43
+ @grouped_resources = []
44
+ @resources.each do |resource|
45
+ key = resource.created_at.strftime("%Y-%m-%d")
46
+ resource_group = @grouped_resources.collect{|resources| resources.last if resources.first == key }.flatten.compact << resource
47
+ (@grouped_resources.delete_if {|i| i.first == key}) << [key, resource_group]
48
+ end
49
+ end
50
+ end
51
+
32
52
  def insert
33
53
  self.new if @resource.nil?
34
54
  @dialog = from_dialog?
@@ -19,9 +19,18 @@
19
19
  <% else %>
20
20
  <% if @resources.size > 0 -%>
21
21
  <%= will_paginate @resources, :previous_label => '&laquo;', :next_label => '&raquo;' %>
22
- <ul>
23
- <%= render :partial => "resource", :collection => @resources %>
24
- </ul>
22
+ <% if RefinerySetting.find_or_set(:group_resources_by_date_uploaded, false) %>
23
+ <% @grouped_resources.each do |container| %>
24
+ <h3><%= (resource_group = container.last).first.created_at.strftime("%A, %d %B %Y") %></h3>
25
+ <ul>
26
+ <%= render :partial => "resource", :collection => resource_group %>
27
+ </ul>
28
+ <% end %>
29
+ <% else %>
30
+ <ul>
31
+ <%= render :partial => "resource", :collection => @resources %>
32
+ </ul>
33
+ <% end %>
25
34
  <%= will_paginate @resources, :previous_label => '&laquo;', :next_label => '&raquo;' %>
26
35
  <% else -%>
27
36
  <p>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refinerycms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5.9
4
+ version: 0.9.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Resolve Digital
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2009-11-17 00:00:00 +13:00
14
+ date: 2009-11-18 00:00:00 +13:00
15
15
  default_executable: refinery
16
16
  dependencies: []
17
17
 
@@ -346,6 +346,7 @@ files:
346
346
  - vendor/plugins/images/app/views/admin/images/_form.html.erb
347
347
  - vendor/plugins/images/app/views/admin/images/_grid_view.html.erb
348
348
  - vendor/plugins/images/app/views/admin/images/_list_view.html.erb
349
+ - vendor/plugins/images/app/views/admin/images/_list_view_image.html.erb
349
350
  - vendor/plugins/images/app/views/admin/images/edit.html.erb
350
351
  - vendor/plugins/images/app/views/admin/images/index.html.erb
351
352
  - vendor/plugins/images/app/views/admin/images/insert.html.erb
@@ -455,6 +456,7 @@ files:
455
456
  - vendor/plugins/refinery/lib/refinery/activity.rb
456
457
  - vendor/plugins/refinery/lib/refinery/application_controller.rb
457
458
  - vendor/plugins/refinery/lib/refinery/form_helpers.rb
459
+ - vendor/plugins/refinery/lib/refinery/html_truncation_helper.rb
458
460
  - vendor/plugins/refinery/lib/refinery/initializer.rb
459
461
  - vendor/plugins/refinery/lib/refinery/link_renderer.rb
460
462
  - vendor/plugins/refinery/lib/refinery/plugin.rb