tenon 1.0.56 → 1.0.57
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 +4 -4
- data/app/assets/javascripts/tenon/features/tenon_content/column_sizing.js.coffee +1 -1
- data/app/decorators/tenon/asset_decorator.rb +4 -0
- data/app/helpers/tenon/asset_helper.rb +34 -18
- data/app/helpers/tenon/piece_helper.rb +77 -0
- data/app/helpers/tenon/tenon_content_helper.rb +6 -6
- data/app/models/tenon/asset.rb +1 -0
- data/app/models/tenon/photo.rb +4 -1
- data/app/models/tenon/tenon_content/piece.rb +35 -1
- data/app/views/tenon/assets/_asset.json.jbuilder +1 -1
- data/app/views/tenon/tenon_content/piece_types/display/_image.html.haml +2 -2
- data/app/views/tenon/tenon_content/piece_types/form/_image.html.haml +1 -1
- data/config/initializers/tenon.rb +51 -14
- data/lib/tasks/tenon_tasks.rake +43 -4
- data/lib/tenon/asset_style_generator.rb +2 -1
- data/lib/tenon/config/breakpoints.rb +77 -0
- data/lib/tenon/config/grid.rb +21 -0
- data/lib/tenon/proxy_attachment.rb +1 -1
- data/lib/tenon/version.rb +1 -1
- data/lib/tenon.rb +2 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fa377e208a93cb3c4055726e4426d6c19071b95
|
4
|
+
data.tar.gz: 4a579c1c5d84967166901b55a7f4b99f64e6c7a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e40afd867429f2e8022e558b10817730a56371cbb28fa678a86e07bca8c47f7ae474cabdbbbad876bd7868fd8f38a7637ce4c03baa3bc35164b1860bb9cfa9d7
|
7
|
+
data.tar.gz: 18ad631a0e525d60ee8397df3eacf4b5e9c936d85de9d59879a0f69b75d97332b1a49c1d8ce18eac0c9e0215af079df1495f3f86bda7b00ba77ae0492512fc03
|
@@ -28,7 +28,7 @@ class Tenon.features.tenonContent.ColumnSizing
|
|
28
28
|
@_setSizes(word, newClass, siblingClass, newSiblingClass)
|
29
29
|
|
30
30
|
_decreaseFrom: (word, num) =>
|
31
|
-
unless num <=
|
31
|
+
unless num <= 1
|
32
32
|
siblingClass = @_numberToWord(@_words.length - num)
|
33
33
|
newSiblingClass = @_numberToWord(@_words.length - num + 1)
|
34
34
|
newClass = @_numberToWord(num - 1)
|
@@ -2,11 +2,11 @@ module Tenon
|
|
2
2
|
module AssetHelper
|
3
3
|
def asset_icon(asset)
|
4
4
|
if asset.attachment.exists?(:thumbnail)
|
5
|
-
|
5
|
+
image = image_tag(asset.attachment.url(:thumbnail))
|
6
6
|
else
|
7
|
-
|
7
|
+
image = image_tag(default_asset_thumbnail(asset))
|
8
8
|
end
|
9
|
-
asset_icon_link(asset,
|
9
|
+
asset_icon_link(asset, image)
|
10
10
|
end
|
11
11
|
|
12
12
|
def asset_icon_link(asset, icon)
|
@@ -17,6 +17,23 @@ module Tenon
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
def asset_tile(asset)
|
21
|
+
if asset.attachment.exists?(:tile)
|
22
|
+
image = image_tag(asset.attachment.url(:tile))
|
23
|
+
else
|
24
|
+
image = image_tag(default_asset_thumbnail(asset))
|
25
|
+
end
|
26
|
+
asset_tile_link(asset, image)
|
27
|
+
end
|
28
|
+
|
29
|
+
def asset_tile_link(asset, icon)
|
30
|
+
if asset.is_image?
|
31
|
+
link_to(icon, [:crop, asset], crop_options(asset))
|
32
|
+
else
|
33
|
+
link_to(icon, asset.attachment.url, target: '_')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
20
37
|
def default_asset_thumbnail(asset)
|
21
38
|
if asset && asset.attachment_content_type.match('video')
|
22
39
|
'tenon/thumb-video.png'
|
@@ -26,22 +43,21 @@ module Tenon
|
|
26
43
|
end
|
27
44
|
|
28
45
|
private
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
46
|
+
def crop_options(asset)
|
47
|
+
{
|
48
|
+
class: 'asset-crop',
|
49
|
+
data: {
|
50
|
+
'asset-id' => asset.id,
|
51
|
+
'post-crop-handler' => 'Tenon.features.AssetListPostCropHandler'
|
52
|
+
}
|
36
53
|
}
|
37
|
-
|
38
|
-
end
|
54
|
+
end
|
39
55
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
56
|
+
def default_options
|
57
|
+
{
|
58
|
+
'data-modal-remote' => true,
|
59
|
+
'data-modal-title' => 'Edit Asset'
|
60
|
+
}
|
61
|
+
end
|
45
62
|
end
|
46
|
-
end
|
47
63
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Tenon
|
2
|
+
module PieceHelper
|
3
|
+
def piece_image_tag(piece, options = {})
|
4
|
+
responsive_image_tag(piece, options, Tenon.config.breakpoints.front_end)
|
5
|
+
end
|
6
|
+
|
7
|
+
def backend_piece_image_tag(piece, options = {})
|
8
|
+
responsive_image_tag(piece, options, Tenon.config.breakpoints.back_end)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
# Returns the actual image_tag
|
13
|
+
def responsive_image_tag(piece, options = {}, breakpoints)
|
14
|
+
srcset = generate_srcset(piece)
|
15
|
+
sizes = generate_sizes(piece, breakpoints)
|
16
|
+
# Let's just use an plain image_tag if responsive styles haven't been
|
17
|
+
# generated. We'll test for :x2000 to determine if that's the case
|
18
|
+
if piece.image.attachment.exists?(computed_style(piece, 'x2000'))
|
19
|
+
image_tag(piece.image.url(default_style(piece, breakpoints)), options.merge(srcset: srcset, sizes: sizes))
|
20
|
+
else
|
21
|
+
image_tag(piece.image.url(:_medium), options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Figure out the default style based on the largest size at the largest
|
26
|
+
# breakpoint for browsers that don't support srcset. This is at least
|
27
|
+
# better than always serving the largest style (:x2000).
|
28
|
+
def default_style(piece, breakpoints)
|
29
|
+
sizes = breakpoints[:full]
|
30
|
+
|
31
|
+
# calculate the image size at :full breakpoint based on the piece width
|
32
|
+
image_size = (piece.sizes[piece_size(piece).to_sym] / 12 * content_size(sizes, piece)).to_i
|
33
|
+
|
34
|
+
# round up to nearest 200
|
35
|
+
image_size = image_size.round(-2)
|
36
|
+
image_size += 100 if (image_size / 100).odd?
|
37
|
+
|
38
|
+
default_style = computed_style(piece, "x#{image_size}").to_sym
|
39
|
+
|
40
|
+
piece.image.attachment.exists?(default_style) ? default_style : :_medium
|
41
|
+
end
|
42
|
+
|
43
|
+
# Iterate through the defined breakpoints and lookup the tenon_content
|
44
|
+
# sizes for the piece's row's item type. Use sizes[:default] width if
|
45
|
+
# item_type-specific tenon_content width not defined.
|
46
|
+
def generate_sizes(piece, breakpoints)
|
47
|
+
breakpoints.map do |name, sizes|
|
48
|
+
"(min-width: #{sizes[:browser]}px) #{(piece.sizes[piece_size(piece).to_sym] / 12 * 100 * content_size(sizes, piece) / sizes[:browser]).to_i}vw"
|
49
|
+
end.join(', ')
|
50
|
+
end
|
51
|
+
|
52
|
+
# Build the srcset values from the list of piece styles (2000px-200px)
|
53
|
+
def generate_srcset(piece)
|
54
|
+
piece.styles.map do |name, width|
|
55
|
+
if piece.image.attachment.exists?(computed_style(piece, name).to_sym)
|
56
|
+
"#{piece.image.attachment.url(computed_style(piece, name).to_sym)} #{width}w"
|
57
|
+
else
|
58
|
+
"#{piece.image.attachment.url(:original)} #{width}w"
|
59
|
+
end
|
60
|
+
end.join(', ')
|
61
|
+
end
|
62
|
+
|
63
|
+
# Handle 'twelve' pieces that have size set to '' in the db
|
64
|
+
def piece_size(piece)
|
65
|
+
piece_size = piece.size == '' ? 'twelve' : piece.size
|
66
|
+
end
|
67
|
+
|
68
|
+
def computed_style(piece, style)
|
69
|
+
computed_style = "#{piece.image.style_prefix}_#{style}"
|
70
|
+
end
|
71
|
+
|
72
|
+
# Return the width of tenon_content for this piece, or the :default size
|
73
|
+
def content_size(sizes, piece)
|
74
|
+
sizes[piece.row.item_type.demodulize.downcase.to_sym] || sizes[:default]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -28,18 +28,18 @@ module Tenon
|
|
28
28
|
|
29
29
|
def tenon_content_sizes
|
30
30
|
links = []
|
31
|
-
Tenon.config.
|
32
|
-
links << link_to(name.to_s.titleize, '#', class: 'btn btn-white', data: { size: size_for_breakpoint(
|
31
|
+
Tenon.config.breakpoints.front_end.each do |name, widths|
|
32
|
+
links << link_to(name.to_s.titleize, '#', class: 'btn btn-white', data: { size: size_for_breakpoint(widths[:default]) })
|
33
33
|
end
|
34
|
-
last = Tenon.config.
|
34
|
+
last = Tenon.config.breakpoints.front_end.values.last
|
35
35
|
links << link_to('Mobile', '#', class: 'btn btn-white', data: { size: 320, mobile: true })
|
36
36
|
links.join('').html_safe
|
37
37
|
end
|
38
38
|
|
39
39
|
def size_for_breakpoint(breakpoint)
|
40
|
-
content_cols = Tenon.config.
|
41
|
-
gutter_width = Tenon.config.
|
42
|
-
columns = Tenon.config.
|
40
|
+
content_cols = Tenon.config.grid.content_columns[:default]
|
41
|
+
gutter_width = Tenon.config.grid.gutter
|
42
|
+
columns = Tenon.config.grid.columns
|
43
43
|
(((breakpoint + gutter_width) / columns.to_f) * content_cols) - gutter_width
|
44
44
|
end
|
45
45
|
end
|
data/app/models/tenon/asset.rb
CHANGED
data/app/models/tenon/photo.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
module Tenon
|
2
2
|
class Photo < ActiveRecord::Base
|
3
3
|
belongs_to :gallery, class_name: 'Gallery', foreign_key: 'gallery_id', inverse_of: :photos
|
4
|
-
has_asset :file, styles: {
|
4
|
+
has_asset :file, styles: {
|
5
|
+
original: '800x800>',
|
6
|
+
thumbnail: '300x300#' # DEPRECATED
|
7
|
+
}
|
5
8
|
default_scope { order(:list_order) }
|
6
9
|
end
|
7
10
|
end
|
@@ -2,9 +2,43 @@ module Tenon
|
|
2
2
|
module TenonContent
|
3
3
|
class Piece < ActiveRecord::Base
|
4
4
|
self.table_name = 'tenon_tenon_content_pieces'
|
5
|
+
attr_reader :sizes, :styles
|
6
|
+
|
7
|
+
def sizes
|
8
|
+
# to translate between the stored piece size in words and a number for math
|
9
|
+
{
|
10
|
+
:one => 1.0,
|
11
|
+
:two => 2.0,
|
12
|
+
:three => 3.0,
|
13
|
+
:four => 4.0,
|
14
|
+
:five => 5.0,
|
15
|
+
:six => 6.0,
|
16
|
+
:seven => 7.0,
|
17
|
+
:eight => 8.0,
|
18
|
+
:nine => 9.0,
|
19
|
+
:ten => 10.0,
|
20
|
+
:eleven => 11.0,
|
21
|
+
:twelve => 12.0
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def styles
|
26
|
+
Hash[(1..10).map{|n| ["x#{n*200}", (n*200).to_s]}]
|
27
|
+
end
|
5
28
|
|
6
29
|
# Scopes, attachments, etc.
|
7
|
-
has_asset :image, styles: {
|
30
|
+
has_asset :image, styles: {
|
31
|
+
x2000: '2000>',
|
32
|
+
x1800: '1800>',
|
33
|
+
x1600: '1600>',
|
34
|
+
x1400: '1400>',
|
35
|
+
x1200: '1200>',
|
36
|
+
x1000: '1000>',
|
37
|
+
x800: '800>',
|
38
|
+
x600: '600>',
|
39
|
+
x400: '400>',
|
40
|
+
x200: '200>'
|
41
|
+
}
|
8
42
|
|
9
43
|
# Relationships
|
10
44
|
belongs_to :row, class_name: '::Tenon::TenonContent::Row'
|
@@ -1,9 +1,9 @@
|
|
1
1
|
.tn-tc-image{class: piece.stretch_to_fill? ? 'stretch' : ''}
|
2
2
|
- if piece.image.present?
|
3
3
|
- if piece.link_url.blank?
|
4
|
-
=
|
4
|
+
= piece_image_tag(piece)
|
5
5
|
- else
|
6
|
-
= link_to
|
6
|
+
= link_to piece_image_tag(piece), piece.link_url, target: '_'
|
7
7
|
- else
|
8
8
|
= image_tag('tenon/thumb-doc.png')
|
9
9
|
- if piece.show_caption
|
@@ -4,7 +4,7 @@
|
|
4
4
|
= f.hidden_field :stretch_to_fill
|
5
5
|
.image{class: f.object.stretch_to_fill? ? 'stretch' : ''}
|
6
6
|
- if f.object.image
|
7
|
-
=
|
7
|
+
= backend_piece_image_tag(f.object)
|
8
8
|
- else
|
9
9
|
= link_to(new_item_asset_path, class: 'add-image', data: {'modal-remote' => true, 'modal-title' => "Select Image", 'modal-handler' => 'Tenon.features.tenonContent.AssetAttachment'}) do
|
10
10
|
%span Add Image
|
@@ -2,21 +2,43 @@
|
|
2
2
|
# by the site developer. There is a Settings module built into Tenon
|
3
3
|
# where you can expose other settings to your client.
|
4
4
|
Tenon.configure do |config|
|
5
|
-
#
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
5
|
+
# Define all your breakpoints and associated tenon_content widths.
|
6
|
+
# This is necessary because you may have multiple models with tenon_content
|
7
|
+
# with different maximum widths and therefore different widths at various
|
8
|
+
# breakpoints. By getting more precise with these widths we can serve the
|
9
|
+
# most efficient responsive images to the front end.
|
10
|
+
# config.breakpoints.front_end = {
|
11
|
+
# full: {
|
12
|
+
# browser: 1920, # the width of the browser for this breakpoint
|
13
|
+
# default: 1920, # default tenon_content width for piece's without specific widths
|
14
|
+
# page: 1920, # the width of tenon_content for Pages
|
15
|
+
# post: 1920 # the width of tenon_content for Posts
|
16
|
+
# },
|
17
|
+
# desktop: {
|
18
|
+
# browser: 1400,
|
19
|
+
# default: 1400,
|
20
|
+
# page: 1400,
|
21
|
+
# post: 1400
|
22
|
+
# },
|
23
|
+
# laptop: {
|
24
|
+
# browser: 960,
|
25
|
+
# default: 960,
|
26
|
+
# page: 960,
|
27
|
+
# post: 960
|
28
|
+
# },
|
29
|
+
# tablet: {
|
30
|
+
# browser: 768,
|
31
|
+
# default: 768,
|
32
|
+
# page: 768,
|
33
|
+
# post: 768
|
34
|
+
# }
|
35
|
+
# }
|
15
36
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
37
|
+
# config.grid.columns = 24
|
38
|
+
# config.grid.gutter = 20
|
39
|
+
# config.grid.content_columns = {
|
40
|
+
# default: 18
|
41
|
+
# }
|
20
42
|
|
21
43
|
# Set platform hints color(s)
|
22
44
|
config.client_color = '#9c0f17'
|
@@ -47,4 +69,19 @@ Tenon.configure do |config|
|
|
47
69
|
|
48
70
|
# If you need to add further config options you can add them
|
49
71
|
# in lib/tenon.rb as attr_accessors to Tenon::Configuration
|
72
|
+
|
73
|
+
# config.front_end is DEPRECATED as of 1.0.57
|
74
|
+
config.front_end = {
|
75
|
+
breakpoints: {
|
76
|
+
desktop: 1400,
|
77
|
+
laptop: 960,
|
78
|
+
tablet: 768
|
79
|
+
},
|
80
|
+
columns: 24,
|
81
|
+
gutter: 20,
|
82
|
+
|
83
|
+
content_columns: {
|
84
|
+
default: 18
|
85
|
+
}
|
86
|
+
}
|
50
87
|
end
|
data/lib/tasks/tenon_tasks.rake
CHANGED
@@ -1,4 +1,43 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
namespace :tenon do
|
2
|
+
desc "Generate Asset responsive styles"
|
3
|
+
task :generate_responsive_styles => :environment do
|
4
|
+
styles = [
|
5
|
+
:tenon_tenon_content_piece_image_x2000,
|
6
|
+
:tenon_tenon_content_piece_image_x1800,
|
7
|
+
:tenon_tenon_content_piece_image_x1600,
|
8
|
+
:tenon_tenon_content_piece_image_x1400,
|
9
|
+
:tenon_tenon_content_piece_image_x1200,
|
10
|
+
:tenon_tenon_content_piece_image_x1000,
|
11
|
+
:tenon_tenon_content_piece_image_x800,
|
12
|
+
:tenon_tenon_content_piece_image_x600,
|
13
|
+
:tenon_tenon_content_piece_image_x400,
|
14
|
+
:tenon_tenon_content_piece_image_x200
|
15
|
+
]
|
16
|
+
|
17
|
+
item_assets = Tenon::ItemAsset.where(item_type: 'Tenon::TenonContent::Piece').pluck(:asset_id).uniq
|
18
|
+
|
19
|
+
# only reprocess assets that are referenced by Pieces, and only do them once each even if they are referenced by multiple pieces
|
20
|
+
Tenon::Asset.find(item_assets).each_with_index do |asset, i|
|
21
|
+
print "(#{i+1}/#{item_assets.count}) #{asset.attachment_file_name} "
|
22
|
+
styles.each do |style|
|
23
|
+
asset.attachment.reprocess! style
|
24
|
+
print '.'
|
25
|
+
$stdout.flush
|
26
|
+
end
|
27
|
+
puts ''
|
28
|
+
end
|
29
|
+
puts 'Done!'
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Regenerate all Asset styles"
|
33
|
+
task :regenerate_asset_styles => :environment do
|
34
|
+
total_assets = Tenon::Asset.all.count
|
35
|
+
|
36
|
+
Tenon::Asset.all.each_with_index do |asset, i|
|
37
|
+
puts "(#{i+1}/#{total_assets}) #{asset.attachment_file_name} "
|
38
|
+
asset.attachment.reprocess!
|
39
|
+
end
|
40
|
+
puts 'Done!'
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Tenon
|
2
|
+
class Configuration
|
3
|
+
attr_accessor :breakpoints
|
4
|
+
|
5
|
+
def breakpoints
|
6
|
+
@breakpoints ||= BreakpointConfiguration.new
|
7
|
+
end
|
8
|
+
|
9
|
+
class BreakpointConfiguration
|
10
|
+
attr_accessor :front_end, :back_end, :grid
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
# Define all your breakpoints and associated tenon_content widths.
|
14
|
+
# This is necessary because you may have multiple models with tenon_content
|
15
|
+
# with different maximum widths and therefore different widths at various
|
16
|
+
# breakpoints. By getting more precise with these widths we can serve the
|
17
|
+
# most efficient responsive images to the front end.
|
18
|
+
@front_end = {
|
19
|
+
full: {
|
20
|
+
browser: 1920, # the width of the browser for this breakpoint
|
21
|
+
default: 1920, # default tenon_content width for piece's without specific widths
|
22
|
+
page: 1920, # the width of tenon_content for Pages
|
23
|
+
post: 1920 # the width of tenon_content for Posts
|
24
|
+
},
|
25
|
+
desktop: {
|
26
|
+
browser: 1400,
|
27
|
+
default: 1400,
|
28
|
+
page: 1400,
|
29
|
+
post: 1400
|
30
|
+
},
|
31
|
+
laptop: {
|
32
|
+
browser: 960,
|
33
|
+
default: 960,
|
34
|
+
page: 960,
|
35
|
+
post: 960
|
36
|
+
},
|
37
|
+
tablet: {
|
38
|
+
browser: 768,
|
39
|
+
default: 768,
|
40
|
+
page: 768,
|
41
|
+
post: 768
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
# set up the back-end breakpoints and associated tenon_content widths since
|
46
|
+
# we know what they always are
|
47
|
+
@back_end = {
|
48
|
+
full: {
|
49
|
+
browser: 1920,
|
50
|
+
default: 1225
|
51
|
+
},
|
52
|
+
desktop: {
|
53
|
+
browser: 1400,
|
54
|
+
default: 740
|
55
|
+
},
|
56
|
+
laptop: {
|
57
|
+
browser: 960,
|
58
|
+
default: 680
|
59
|
+
},
|
60
|
+
tablet: {
|
61
|
+
browser: 768,
|
62
|
+
default: 750
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
@grid = {
|
67
|
+
columns: 24,
|
68
|
+
gutter: 20,
|
69
|
+
|
70
|
+
content_columns: {
|
71
|
+
default: 18
|
72
|
+
}
|
73
|
+
}
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Tenon
|
2
|
+
class Configuration
|
3
|
+
attr_accessor :grid
|
4
|
+
|
5
|
+
def grid
|
6
|
+
@grid ||= GridConfiguration.new
|
7
|
+
end
|
8
|
+
|
9
|
+
class GridConfiguration
|
10
|
+
attr_accessor :columns, :gutter, :content_columns
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@columns = 24
|
14
|
+
@gutter = 20
|
15
|
+
@content_columns = {
|
16
|
+
default: 18
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/tenon/version.rb
CHANGED
data/lib/tenon.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tenon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.57
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- factor[e] design initiative
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: better_errors
|
@@ -1110,6 +1110,7 @@ files:
|
|
1110
1110
|
- app/helpers/tenon/i18n_helper.rb
|
1111
1111
|
- app/helpers/tenon/item_version_helper.rb
|
1112
1112
|
- app/helpers/tenon/nav_helper.rb
|
1113
|
+
- app/helpers/tenon/piece_helper.rb
|
1113
1114
|
- app/helpers/tenon/platform_hints_helper.rb
|
1114
1115
|
- app/helpers/tenon/tenon_content_helper.rb
|
1115
1116
|
- app/helpers/tenon/tenon_helper.rb
|
@@ -1378,7 +1379,9 @@ files:
|
|
1378
1379
|
- lib/tenon/asset_style_generator.rb
|
1379
1380
|
- lib/tenon/can_be_foreign.rb
|
1380
1381
|
- lib/tenon/can_have_comments.rb
|
1382
|
+
- lib/tenon/config/breakpoints.rb
|
1381
1383
|
- lib/tenon/config/events.rb
|
1384
|
+
- lib/tenon/config/grid.rb
|
1382
1385
|
- lib/tenon/engine.rb
|
1383
1386
|
- lib/tenon/factories/assets.rb
|
1384
1387
|
- lib/tenon/factories/comments.rb
|