refinerycms 0.9.5.9 → 0.9.5.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -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