caboose-cms 0.4.127 → 0.4.128

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MjVjM2VjZjJkMDVhZDUxZjE4MzFhMmE4ZjE0NDhkZWRhZmViYWRiZQ==
4
+ NWYxNmY0YjZjYTJkMzBlMGIzNjE0NWI1ZGJlMjU0Njg1M2FmZDc1NA==
5
5
  data.tar.gz: !binary |-
6
- OGUxNWE4MjgwZGJhYTBmZGI5NGJlZjAyYTgyZDhhZmFlYWVkMDYzNw==
6
+ MzU3ODgzMjM1MjQwNDQ5NTBkZDY2MjlkOWNjNTVhMmVlNjhhMGNjYQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NTExYjcxODUyZDRjNTk5NDFjYzk5MjE0OGUwZDIxNmYzMjc0ZWNjNWE0Mjll
10
- MTU2NWZiNWM2N2ZiYzUxN2NmNzE4NzBiYTM0NmRhYThmN2UwMGYxNWU4ZTM2
11
- ZDI4YjkzY2IzZTc2YzA1ZjcyMWQwOWMxZDU3N2I2ZjcxNTk4YjY=
9
+ MmJiZWExOTg4YjdjNWYyNzk3YjgwYTMyMzQ2YmRmMmIwYTBhYWNjYzg2Yjdi
10
+ MTkzODE2MGMyM2Q2ZDk0ZjY1ZTE4NzIyNTQxZTQzNDhiN2I3M2VjMDVlZWIw
11
+ YmM4MDk4ZDlhMzYxNWRiMDhjMGIzNGIzNzUzMWNhY2M3OGQ0YWQ=
12
12
  data.tar.gz: !binary |-
13
- Mjk4ZjlmMzJiN2RiODg3MDRlNTVlY2FiZmVkYWYzZjc5YzY0NTFmNjE3YmMz
14
- NjI0ZDZmZDk0ZDMwOTAxYWZkZTFlNTBkNTA2MWJmYjRhMTY1ZDQ5YTBhZDRl
15
- ZjNkMzRmZDFmNzdhZjUwYWMxYTg5NzQ1NDAzNTY3NjBmOGIyNWM=
13
+ OTlkZWVlZjYyNTQ4ZWZjMWVmZDUzNmQxYjkwYWU5YjdlODkzZjJlMWE2M2Fm
14
+ NjExMTBhM2RhNDRhNGY4MDlkMTZlZjljNzUwNWY1ZjU0MzUwYTk3ZTJiNTk4
15
+ MTM5NzM2ZjMwYTkzMjc4ZDgzNmIzODdiMGJhZTcxNjFiYzQ5MmM=
@@ -423,6 +423,15 @@ module Caboose
423
423
  Page.update_authorized_for_action(page.id, 'edit', value)
424
424
  when 'approvers'
425
425
  Page.update_authorized_for_action(page.id, 'approve', value)
426
+ when 'tags'
427
+ current_tags = page.page_tags.collect{ |t| t.tag }
428
+ new_tags = value.split(',').collect{ |v| v.strip.downcase }.reject{ |t| t.nil? || t.strip.length == 0 }
429
+
430
+ # Delete the tags not in new_tags
431
+ current_tags.each{ |t| PageTag.where(:page_id => page.id, :tag => t).destroy_all if !new_tags.include?(t) }
432
+
433
+ # Add any new tags not in current_tags
434
+ new_tags.each{ |t| PageTag.create(:page_id => page.id, :tag => t) if !current_tags.include?(t) }
426
435
  end
427
436
  end
428
437
 
@@ -7,6 +7,7 @@ class Caboose::Page < ActiveRecord::Base
7
7
  has_many :children, :class_name => 'Caboose::Page', :foreign_key => 'parent_id', :order => 'sort_order, title'
8
8
  has_many :page_permissions
9
9
  has_many :blocks, :order => 'sort_order'
10
+ has_many :page_tags, :class_name => 'Caboose::PageTag', :dependent => :delete_all, :order => 'tag'
10
11
  attr_accessible :id ,
11
12
  :site_id ,
12
13
  :parent_id ,
@@ -0,0 +1,5 @@
1
+ class Caboose::PageTag < ActiveRecord::Base
2
+ self.table_name = "page_tags"
3
+ belongs_to :page
4
+ attr_accessible :id, :page_id, :tag
5
+ end
@@ -27,8 +27,7 @@ class Caboose::Schema < Caboose::Utilities::Schema
27
27
  Caboose::Block => [:block_type],
28
28
  #Caboose::FieldType => [:model_binder_options],
29
29
  Caboose::AbValue => [:i, :text],
30
- Caboose::AbOption => [:text],
31
- Caboose::User => [:timezone],
30
+ Caboose::AbOption => [:text],
32
31
  #Caboose::Field => [:child_block_id],
33
32
  Caboose::BlockType => [:layout_function],
34
33
  Caboose::CalendarEvent => [
@@ -233,6 +232,10 @@ class Caboose::Schema < Caboose::Utilities::Schema
233
232
  [ :page_id , :integer ],
234
233
  [ :action , :string ]
235
234
  ],
235
+ Caboose::PageTag => [
236
+ [ :page_id , :integer ],
237
+ [ :tag , :string ]
238
+ ],
236
239
  Caboose::PermanentRedirect => [
237
240
  [ :site_id , :integer ],
238
241
  [ :priority , :integer , { :default => 0 }],
@@ -300,21 +303,6 @@ class Caboose::Schema < Caboose::Utilities::Schema
300
303
  [ :authentication , :string ], # :plain, :login, :cram_md5.
301
304
  [ :enable_starttls_auto , :boolean , { :default => true }]
302
305
  ],
303
- Caboose::Timezone => [
304
- [ :country_code , :string ],
305
- [ :name , :string ]
306
- ],
307
- Caboose::TimezoneAbbreviation => [
308
- [ :abbreviation , :string ],
309
- [ :name , :string ]
310
- ],
311
- Caboose::TimezoneOffset => [
312
- [ :timezone_id , :integer ],
313
- [ :abbreviation , :string ],
314
- [ :time_start , :integer ],
315
- [ :gmt_offset , :integer ],
316
- [ :dst , :boolean ]
317
- ],
318
306
  Caboose::User => [
319
307
  [ :first_name , :string ],
320
308
  [ :last_name , :string ],
@@ -326,10 +314,8 @@ class Caboose::Schema < Caboose::Utilities::Schema
326
314
  [ :state , :string ],
327
315
  [ :zip , :string ],
328
316
  [ :phone , :string ],
329
- [ :fax , :string ],
330
- [ :utc_offset , :float , { :default => -5 }],
331
- #[ :timezone , :string , { :default => 'America/Chicago' }],
332
- [ :timezone_id , :integer , { :defualt => 381 }], # Defaults to 'America/Chicago'
317
+ [ :fax , :string ],
318
+ [ :timezone , :string , { :default => 'Central Time (US & Canada)' }],
333
319
  [ :password , :string ],
334
320
  [ :password_reset_id , :string ],
335
321
  [ :password_reset_sent , :datetime ],
@@ -12,7 +12,7 @@ class Caboose::User < ActiveRecord::Base
12
12
  :large => '600x800>'
13
13
  }
14
14
  do_not_validate_attachment_file_type :image
15
- attr_accessible :id, :email, :first_name, :last_name, :username, :token, :password, :phone
15
+ attr_accessible :id, :email, :first_name, :last_name, :username, :token, :password, :phone, :timezone
16
16
 
17
17
  ADMIN_USER_ID = 1
18
18
  LOGGED_OUT_USER_ID = 2
@@ -1,15 +1,15 @@
1
1
  <%
2
- img = block.child('image_src')
3
- img_style = block.child('image_style').value.to_sym
4
- link = block.child('link').value
5
- align = block.child('align').value
6
- width = block.child('width').value
7
- height = block.child('height').value
8
- mt = block.child('margin_top').value.downcase
9
- mr = block.child('margin_right').value.downcase
10
- mb = block.child('margin_bottom').value.downcase
11
- ml = block.child('margin_left').value.downcase
12
- url = img && img.image ? img.image.url(img_style.downcase.to_sym) : nil
2
+ img = block.child_value('image_src')
3
+ img_style = block.child_value('image_style')
4
+ link = block.child_value('link')
5
+ align = block.child_value('align')
6
+ width = block.child_value('width')
7
+ height = block.child_value('height')
8
+ mt = block.child_value('margin_top').downcase
9
+ mr = block.child_value('margin_right').downcase
10
+ mb = block.child_value('margin_bottom').downcase
11
+ ml = block.child_value('margin_left').downcase
12
+ url = img ? img.url(img_style.downcase.to_sym) : nil
13
13
 
14
14
  img = nil
15
15
  if url && !url.include?('missing.png')
@@ -11,6 +11,7 @@
11
11
  <div class='field_with_explanation'><div id='page_<%= @page.id %>_hide' ></div><span class='explanation'>Whether or not this page is displayed in the menu.</span></div>
12
12
  <div class='field_with_explanation'><div id='page_<%= @page.id %>_custom_sort_children' ></div><span class='explanation'>Sort child pages alphabetically or <a href='/admin/pages/<%= @page.id %>/child-order'>custom</a>.</span></div>
13
13
  <div class='field_with_explanation'><div id='page_<%= @page.id %>_content_format' ></div><span class='explanation'>Specify whether or not you want to embed ruby code in your page.</span></div>
14
+ <div class='field_with_explanation'><div id='page_<%= @page.id %>_tags' ></div><span class='explanation'>Tags to help categorize your page. Use as many as you want, just separate by commas.</span></div>
14
15
 
15
16
  <%= render :partial => 'caboose/pages/admin_footer' %>
16
17
 
@@ -48,6 +49,9 @@ $(window).load(function() {
48
49
  modal = new CabooseModal(800);
49
50
  });
50
51
 
52
+ <%
53
+ tags = @page.page_tags.collect{ |t| t.tag }.join(', ')
54
+ %>
51
55
  $(document).ready(function() {
52
56
  m = new ModelBinder({
53
57
  name: 'Page',
@@ -55,15 +59,16 @@ $(document).ready(function() {
55
59
  update_url: '/admin/pages/<%= @page.id %>',
56
60
  authenticity_token: '<%= form_authenticity_token %>',
57
61
  attributes: [
58
- { name: 'title' , nice_name: 'Title' , type: 'text' , value: <%= raw Caboose.json(@page.title ) %> , width: 400 },
59
- { name: 'menu_title' , nice_name: 'Menu title' , type: 'text' , value: <%= raw Caboose.json(@page.menu_title ) %> , width: 400 },
60
- { name: 'parent_id' , nice_name: 'Parent' , type: 'select' , value: <%= @page.parent_id %> , width: 400, after_update: function() { update_uri(<%= @page.id %>); }, text: <%= raw (@page.parent_id == -1 ? "[No Parent]" : @page.parent.title).to_json %>, options_url: '/admin/pages/sitemap-options' },
61
- { name: 'slug' , nice_name: 'Slug' , type: 'text' , value: <%= raw Caboose.json(@page.slug ) %> , width: 400, after_update: function() { update_uri(<%= @page.id %>); } },
62
- { name: 'alias' , nice_name: 'Alias' , type: 'text' , value: <%= raw Caboose.json(@page.alias ) %> , width: 400, after_update: function() { update_uri(<%= @page.id %>); } },
63
- { name: 'redirect_url' , nice_name: 'Redirect URL' , type: 'text' , value: <%= raw Caboose.json(@page.redirect_url ) %> , width: 400 },
64
- { name: 'hide' , nice_name: 'Hide' , type: 'checkbox' , value: <%= raw @page.hide %> , width: 400 },
65
- { name: 'custom_sort_children' , nice_name: 'Custom sort children' , type: 'checkbox' , value: <%= raw @page.custom_sort_children %> , width: 400 },
66
- { name: 'content_format' , nice_name: 'Content format' , type: 'select' , value: <%= raw Caboose.json(@page.content_format) %>, width: 400, text: <%= raw Caboose.json(@page.content_format) %>, options_url: '/pages/format-options' },
62
+ { name: 'title' , nice_name: 'Title' , type: 'text' , value: <%= raw Caboose.json(@page.title ) %> , width: 400 },
63
+ { name: 'menu_title' , nice_name: 'Menu title' , type: 'text' , value: <%= raw Caboose.json(@page.menu_title ) %> , width: 400 },
64
+ { name: 'parent_id' , nice_name: 'Parent' , type: 'select' , value: <%= @page.parent_id %> , width: 400, after_update: function() { update_uri(<%= @page.id %>); }, text: <%= raw (@page.parent_id == -1 ? "[No Parent]" : @page.parent.title).to_json %>, options_url: '/admin/pages/sitemap-options' },
65
+ { name: 'slug' , nice_name: 'Slug' , type: 'text' , value: <%= raw Caboose.json(@page.slug ) %> , width: 400, after_update: function() { update_uri(<%= @page.id %>); } },
66
+ { name: 'alias' , nice_name: 'Alias' , type: 'text' , value: <%= raw Caboose.json(@page.alias ) %> , width: 400, after_update: function() { update_uri(<%= @page.id %>); } },
67
+ { name: 'redirect_url' , nice_name: 'Redirect URL' , type: 'text' , value: <%= raw Caboose.json(@page.redirect_url ) %> , width: 400 },
68
+ { name: 'hide' , nice_name: 'Hide' , type: 'checkbox' , value: <%= raw @page.hide %> , width: 400 },
69
+ { name: 'custom_sort_children' , nice_name: 'Custom sort children' , type: 'checkbox' , value: <%= raw @page.custom_sort_children %> , width: 400 },
70
+ { name: 'content_format' , nice_name: 'Content format' , type: 'select' , value: <%= raw Caboose.json(@page.content_format ) %> , width: 400, text: <%= raw Caboose.json(@page.content_format) %>, options_url: '/pages/format-options' },
71
+ { name: 'tags' , nice_name: 'Tags' , type: 'text' , value: <%= raw Caboose.json(tags ) %> , width: 400 }
67
72
  ]
68
73
  });
69
74
  });
@@ -4,6 +4,7 @@
4
4
  <p><div id='page_<%= @page.id %>_seo_title'></div></p>
5
5
  <p><div id='page_<%= @page.id %>_meta_keywords'></div></p>
6
6
  <p><div id='page_<%= @page.id %>_meta_description'></div></p>
7
+ <p id='widths'></p>
7
8
  <p><div id='page_<%= @page.id %>_meta_robots'></div></p>
8
9
  <p><div id='page_<%= @page.id %>_canonical_url'></div></p>
9
10
  <p><div id='page_<%= @page.id %>_fb_description'></div></p>
@@ -29,10 +30,34 @@ $(document).ready(function() {
29
30
  { name: 'meta_description' , nice_name: 'Meta Description' , type: 'textarea' , value: <%= raw Caboose.json(@page.meta_description) %>, width: 580, height: 80 },
30
31
  { name: 'fb_description' , nice_name: 'Facebook Description' , type: 'textarea' , value: <%= raw Caboose.json(@page.fb_description) %>, width: 580, height: 80 },
31
32
  { name: 'gp_description' , nice_name: 'Google+ Description' , type: 'textarea' , value: <%= raw Caboose.json(@page.gp_description) %>, width: 580, height: 80 }
32
- ]
33
+ ],
34
+ on_load: function() {
35
+ $('#page_<%= @page.id %>_meta_description').keyup(function() {
36
+ update_widths();
37
+ });
38
+ update_widths();
39
+ }
33
40
  });
34
41
  modal = new CabooseModal(600, 540);
42
+
35
43
  });
36
44
 
45
+ function update_widths()
46
+ {
47
+ var str = $('#page_<%= @page.id %>_meta_description').val();
48
+ var count = str.length;
49
+ var width = getTextWidth(str);
50
+ $('#widths').html('' + count + ' character' + (count == 1 ? '' : 's') + "<br />" + width + " pixel" + (width == 1 ? '' : 's'));
51
+ }
52
+
53
+ function getTextWidth(text)
54
+ {
55
+ var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
56
+ var context = canvas.getContext("2d");
57
+ context.font = "18px arial";
58
+ var metrics = context.measureText(text);
59
+ return metrics.width;
60
+ }
61
+
37
62
  </script>
38
63
  <% end %>
data/lib/caboose.rb CHANGED
@@ -53,11 +53,7 @@ module Caboose
53
53
  # Define asset collections
54
54
  mattr_accessor :javascripts, :stylesheets
55
55
  @@javascripts = []
56
- @@stylesheets = []
57
-
58
- # API key for timezonedb.com/api
59
- mattr_accessor :timezonedb_api_key
60
- @@timezonedb_api_key = ''
56
+ @@stylesheets = []
61
57
 
62
58
  # Session length (in hours)
63
59
  mattr_accessor :session_length
@@ -65,6 +61,10 @@ module Caboose
65
61
 
66
62
  # Parse rich text blocks
67
63
  mattr_accessor :parse_richtext_blocks
68
- @@parse_richtext_blocks = true
64
+ @@parse_richtext_blocks = true
65
+
66
+ # Default timezone
67
+ mattr_accessor :timezone
68
+ @@timezone = 'Central Time (US & Canada)'
69
69
 
70
70
  end
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.4.127'
2
+ VERSION = '0.4.128'
3
3
  end
@@ -57,20 +57,6 @@ namespace :caboose do
57
57
  ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", Caboose::session_length.hours.ago])
58
58
  end
59
59
 
60
- desc "Loads and refreshes the timezones from timezonedb.com"
61
- task :load_timezones => :environment do
62
- Caboose::Timezone.load_zones('/Users/william/Sites/repconnex/tmp/timezones')
63
- end
64
-
65
- desc "Loads and refreshes the timezones from timezonedb.com"
66
- task :test_timezones => :environment do
67
-
68
- d = DateTime.strptime("04/01/2014 10:00 am -0500", "%m/%d/%Y %I:%M %P %Z")
69
- puts d
70
- d = DateTime.strptime("04/01/2014 10:00 am -0700", "%m/%d/%Y %I:%M %P %Z")
71
- puts d
72
- end
73
-
74
60
  desc "Removes duplicate users"
75
61
  task :remove_duplicate_users => :environment do
76
62
  while true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.127
4
+ version: 0.4.128
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-29 00:00:00.000000000 Z
11
+ date: 2014-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -323,6 +323,7 @@ files:
323
323
  - app/models/caboose/page.rb
324
324
  - app/models/caboose/page_bar_generator.rb
325
325
  - app/models/caboose/page_permission.rb
326
+ - app/models/caboose/page_tag.rb
326
327
  - app/models/caboose/pager.rb
327
328
  - app/models/caboose/permanent_redirect.rb
328
329
  - app/models/caboose/permission.rb
@@ -340,9 +341,6 @@ files:
340
341
  - app/models/caboose/smtp_config.rb
341
342
  - app/models/caboose/states.rb
342
343
  - app/models/caboose/std_class.rb
343
- - app/models/caboose/timezone.rb
344
- - app/models/caboose/timezone_abbreviation.rb
345
- - app/models/caboose/timezone_offset.rb
346
344
  - app/models/caboose/user.rb
347
345
  - app/models/caboose/utilities/schema.rb
348
346
  - app/views/caboose/ab_variants/admin_edit.html.erb
@@ -1,75 +0,0 @@
1
- require 'httparty'
2
-
3
- class Caboose::Timezone < ActiveRecord::Base
4
- self.table_name = "timezones"
5
-
6
- has_many :timezone_offsets, :class_name => 'Caboose::TimezoneOffset'
7
- attr_accessible :id, :country_code, :name
8
-
9
- def self.load_zones(temp_dir = '/tmp', country_codes = ['US'])
10
- `curl -o #{temp_dir}/timezones.csv.zip http://timezonedb.com/files/timezonedb.csv.zip`
11
- `unzip #{temp_dir}/timezones.csv.zip -d #{temp_dir}/timezones`
12
-
13
- #Caboose::Timezone.destroy_all
14
- #Caboose::TimezoneOffset.destroy_all
15
-
16
- File.foreach("#{temp_dir}/timezones/zone.csv") do |line|
17
- data = CSV.parse_line(line)
18
- next if !country_codes.include?(data[1])
19
- next if Caboose::Timezone.where(:id => data[0].to_i).exists?
20
- Caboose::Timezone.create(
21
- :id => data[0].to_i,
22
- :country_code => data[1],
23
- :name => data[2]
24
- )
25
- end
26
-
27
- File.foreach("#{temp_dir}/timezones/timezone.csv") do |line|
28
- data = CSV.parse_line(line)
29
- tz_id = data[0].to_i
30
- next if !Caboose::Timezone.where(:id => tz_id).exists?
31
- next if Caboose::TimezoneOffset.where(:timezone_id => tz_id, :time_start => data[2].to_i).exists?
32
- Caboose::TimezoneOffset.create(
33
- :timezone_id => data[0].to_i,
34
- :abbreviation => data[1],
35
- :time_start => data[2],
36
- :gmt_offset => data[3],
37
- :dst => data[4]
38
- )
39
- end
40
-
41
- spec = Gem::Specification.find_by_name("caboose-cms")
42
- gem_root = spec.gem_dir
43
-
44
- File.foreach(gem_root + '/lib/sample_files/timezone_abbreviations.csv') do |line|
45
- data = CSV.parse_line(line)
46
- next if Caboose::TimezoneAbbreviation.where(:abbreviation => data[0]).exists?
47
- Caboose::TimezoneAbbreviation.create(
48
- :abbreviation => data[0],
49
- :name => data[1]
50
- )
51
- end
52
-
53
- `rm -rf #{temp_dir}/timezones`
54
- `rm -rf #{temp_dir}/timezones.csv.zip`
55
-
56
- end
57
-
58
- def local(utc_datetime)
59
- tzo = self.timezone_offsets.where('time_start < ?', utc_datetime.to_i).reorder('time_start desc').first
60
- return utc_datetime + tzo.gmt_offset.seconds
61
- end
62
-
63
- def string_format(d = DateTime.now.utc)
64
- tzo = self.timezone_offsets.where('time_start < ?', d.to_i).reorder('time_start desc').first
65
- total = tzo.gmt_offset.abs
66
- hours = (total/3600).floor
67
- x = total - (hours*3600)
68
- minutes = x > 0 ? (x/60).floor : 0
69
- seconds = total - (hours*3600) - (minutes*60)
70
- sign = tzo.gmt_offset >= 0 ? '+' : '-'
71
- hours = hours.to_s.rjust(2, '0')
72
- return "#{sign}#{hours}#{minutes}"
73
- end
74
-
75
- end
@@ -1,5 +0,0 @@
1
-
2
- class Caboose::TimezoneAbbreviation < ActiveRecord::Base
3
- self.table_name = "timezone_abbreviations"
4
- attr_accessible :id, :abbreviation, :name
5
- end
@@ -1,5 +0,0 @@
1
- class Caboose::TimezoneOffset < ActiveRecord::Base
2
- self.table_name = "timezone_offsets"
3
- belongs_to :timezone
4
- attr_accessible :id, :timezone_id, :abbreviation, :time_start, :gmt_offset, :dst
5
- end