maglove-widgets 1.0.0
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 +7 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +157 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +29 -0
- data/README.md +2 -0
- data/lib/maglove/widgets.rb +32 -0
- data/lib/maglove/widgets/banner.rb +28 -0
- data/lib/maglove/widgets/base.rb +36 -0
- data/lib/maglove/widgets/button.rb +60 -0
- data/lib/maglove/widgets/columns.rb +90 -0
- data/lib/maglove/widgets/container.rb +84 -0
- data/lib/maglove/widgets/heading.rb +35 -0
- data/lib/maglove/widgets/horizontal_rule.rb +25 -0
- data/lib/maglove/widgets/image.rb +63 -0
- data/lib/maglove/widgets/paragraph.rb +44 -0
- data/lib/maglove/widgets/scrollable_image.rb +34 -0
- data/lib/maglove/widgets/slider.rb +56 -0
- data/lib/maglove/widgets/video.rb +36 -0
- data/lib/maglove/widgets/yahoo_screen.rb +27 -0
- data/lib/maglove/widgets/youtube.rb +27 -0
- data/maglove-widgets.gemspec +21 -0
- metadata +107 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 747d243b052fb6e447af302a6a501cef1e5e6f16
|
4
|
+
data.tar.gz: 0cdc2815023a692cb50027edbf7c03be6f9d9890
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d13fa67542c94ff7c5d271d909adbee91fcdeaefca4c8300ca9617a9ca9f4cabe48dbd81cb858131ecd9652b003ce1c97651e934aaaffbea5e62a98e5321da02
|
7
|
+
data.tar.gz: 26c4c6fb495c36a6d3f84dd60605c0dbdfb3154d9053dc3cec09982f97fe4a46419ebc1cf33275f084d26e48ee9e1f65aa30da1702c65709485bee80348221ce
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
# kind_of? is a good way to check a type
|
2
|
+
Style/ClassCheck:
|
3
|
+
EnforcedStyle: kind_of?
|
4
|
+
|
5
|
+
# It's better to be more explicit about the type
|
6
|
+
Style/BracesAroundHashParameters:
|
7
|
+
Enabled: false
|
8
|
+
|
9
|
+
# specs sometimes have useless assignments, which is fine
|
10
|
+
Lint/UselessAssignment:
|
11
|
+
Exclude:
|
12
|
+
- '**/spec/**/*'
|
13
|
+
|
14
|
+
# We could potentially enable the 2 below:
|
15
|
+
Style/IndentHash:
|
16
|
+
Enabled: false
|
17
|
+
|
18
|
+
Style/AlignHash:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
# HoundCI doesn't like this rule
|
22
|
+
Style/DotPosition:
|
23
|
+
Enabled: false
|
24
|
+
|
25
|
+
# We allow !! as it's an easy way to convert ot boolean
|
26
|
+
Style/DoubleNegation:
|
27
|
+
Enabled: false
|
28
|
+
|
29
|
+
# Sometimes we allow a rescue block that doesn't contain code
|
30
|
+
Lint/HandleExceptions:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
# Cop supports --auto-correct.
|
34
|
+
Lint/UnusedBlockArgument:
|
35
|
+
Enabled: false
|
36
|
+
|
37
|
+
# Needed for $verbose
|
38
|
+
Style/GlobalVars:
|
39
|
+
Enabled: false
|
40
|
+
|
41
|
+
# We want to allow class Fastlane::Class
|
42
|
+
Style/ClassAndModuleChildren:
|
43
|
+
Enabled: false
|
44
|
+
|
45
|
+
# $? Exit
|
46
|
+
Style/SpecialGlobalVars:
|
47
|
+
Enabled: false
|
48
|
+
|
49
|
+
Metrics/AbcSize:
|
50
|
+
Enabled: false
|
51
|
+
|
52
|
+
Metrics/MethodLength:
|
53
|
+
Enabled: false
|
54
|
+
|
55
|
+
Metrics/CyclomaticComplexity:
|
56
|
+
Enabled: false
|
57
|
+
|
58
|
+
# The %w might be confusing for new users
|
59
|
+
Style/WordArray:
|
60
|
+
MinSize: 19
|
61
|
+
|
62
|
+
# raise and fail are both okay
|
63
|
+
Style/SignalException:
|
64
|
+
Enabled: false
|
65
|
+
|
66
|
+
# Better too much 'return' than one missing
|
67
|
+
Style/RedundantReturn:
|
68
|
+
Enabled: false
|
69
|
+
|
70
|
+
# Having if in the same line might not always be good
|
71
|
+
Style/IfUnlessModifier:
|
72
|
+
Enabled: false
|
73
|
+
|
74
|
+
# and and or is okay
|
75
|
+
Style/AndOr:
|
76
|
+
Enabled: false
|
77
|
+
|
78
|
+
# Configuration parameters: CountComments.
|
79
|
+
Metrics/ClassLength:
|
80
|
+
Max: 320
|
81
|
+
|
82
|
+
|
83
|
+
# Configuration parameters: AllowURI, URISchemes.
|
84
|
+
Metrics/LineLength:
|
85
|
+
Max: 370
|
86
|
+
|
87
|
+
# Configuration parameters: CountKeywordArgs.
|
88
|
+
Metrics/ParameterLists:
|
89
|
+
Max: 17
|
90
|
+
|
91
|
+
Metrics/PerceivedComplexity:
|
92
|
+
Max: 20
|
93
|
+
|
94
|
+
# Sometimes it's easier to read without guards
|
95
|
+
Style/GuardClause:
|
96
|
+
Enabled: false
|
97
|
+
|
98
|
+
# We allow both " and '
|
99
|
+
Style/StringLiterals:
|
100
|
+
Enabled: false
|
101
|
+
|
102
|
+
# something = if something_else
|
103
|
+
# that's confusing
|
104
|
+
Style/ConditionalAssignment:
|
105
|
+
Enabled: false
|
106
|
+
|
107
|
+
# Better to have too much self than missing a self
|
108
|
+
Style/RedundantSelf:
|
109
|
+
Enabled: false
|
110
|
+
|
111
|
+
# e.g.
|
112
|
+
# def self.is_supported?(platform)
|
113
|
+
# we may never use `platform`
|
114
|
+
Lint/UnusedMethodArgument:
|
115
|
+
Enabled: false
|
116
|
+
|
117
|
+
# the let(:key) { ... }
|
118
|
+
Lint/ParenthesesAsGroupedExpression:
|
119
|
+
Exclude:
|
120
|
+
- '**/spec/**/*'
|
121
|
+
|
122
|
+
# This would reject is_ in front of methods
|
123
|
+
# We use `is_supported?` everywhere already
|
124
|
+
Style/PredicateName:
|
125
|
+
Enabled: false
|
126
|
+
|
127
|
+
# We allow the $
|
128
|
+
Style/PerlBackrefs:
|
129
|
+
Enabled: false
|
130
|
+
|
131
|
+
# Disable '+ should be surrounded with a single space' for xcodebuild_spec.rb
|
132
|
+
Style/SpaceAroundOperators:
|
133
|
+
Exclude:
|
134
|
+
- '**/spec/actions_specs/xcodebuild_spec.rb'
|
135
|
+
|
136
|
+
AllCops:
|
137
|
+
Include:
|
138
|
+
- '**/fastlane/Fastfile'
|
139
|
+
Exclude:
|
140
|
+
- './vendor/**/*'
|
141
|
+
- db/schema.rb
|
142
|
+
|
143
|
+
# We're not there yet
|
144
|
+
Style/Documentation:
|
145
|
+
Enabled: false
|
146
|
+
|
147
|
+
# Added after upgrade to 0.38.0
|
148
|
+
Style/MutableConstant:
|
149
|
+
Enabled: false
|
150
|
+
|
151
|
+
# length > 0 is good
|
152
|
+
Style/ZeroLengthPredicate:
|
153
|
+
Enabled: false
|
154
|
+
|
155
|
+
# Adds complexity
|
156
|
+
Style/IfInsideElse:
|
157
|
+
Enabled: false
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
maglove-widgets (1.0.0)
|
5
|
+
bundler (~> 1.10)
|
6
|
+
haml (~> 4.0)
|
7
|
+
hamloft (~> 0.2.4)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
haml (4.0.7)
|
13
|
+
tilt
|
14
|
+
hamloft (0.2.4)
|
15
|
+
haml (~> 4.0)
|
16
|
+
nokogiri (~> 1.6)
|
17
|
+
mini_portile2 (2.1.0)
|
18
|
+
nokogiri (1.6.8.1)
|
19
|
+
mini_portile2 (~> 2.1.0)
|
20
|
+
tilt (2.0.5)
|
21
|
+
|
22
|
+
PLATFORMS
|
23
|
+
ruby
|
24
|
+
|
25
|
+
DEPENDENCIES
|
26
|
+
maglove-widgets!
|
27
|
+
|
28
|
+
BUNDLED WITH
|
29
|
+
1.12.4
|
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require "maglove/widgets/base"
|
2
|
+
require "maglove/widgets/banner"
|
3
|
+
require "maglove/widgets/button"
|
4
|
+
require "maglove/widgets/columns"
|
5
|
+
require "maglove/widgets/container"
|
6
|
+
require "maglove/widgets/heading"
|
7
|
+
require "maglove/widgets/horizontal_rule"
|
8
|
+
require "maglove/widgets/image"
|
9
|
+
require "maglove/widgets/paragraph"
|
10
|
+
require "maglove/widgets/scrollable_image"
|
11
|
+
require "maglove/widgets/slider"
|
12
|
+
require "maglove/widgets/video"
|
13
|
+
require "maglove/widgets/yahoo_screen"
|
14
|
+
require "maglove/widgets/youtube"
|
15
|
+
|
16
|
+
module Maglove
|
17
|
+
module Widgets
|
18
|
+
Hamloft.register_widget(Banner)
|
19
|
+
Hamloft.register_widget(Button)
|
20
|
+
Hamloft.register_widget(Columns)
|
21
|
+
Hamloft.register_widget(Container)
|
22
|
+
Hamloft.register_widget(Heading)
|
23
|
+
Hamloft.register_widget(HorizontalRule)
|
24
|
+
Hamloft.register_widget(Image)
|
25
|
+
Hamloft.register_widget(Paragraph)
|
26
|
+
Hamloft.register_widget(ScrollableImage)
|
27
|
+
Hamloft.register_widget(Slider)
|
28
|
+
Hamloft.register_widget(Video)
|
29
|
+
Hamloft.register_widget(YahooScreen)
|
30
|
+
Hamloft.register_widget(Youtube)
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Banner < Base
|
4
|
+
def identifier
|
5
|
+
"banner"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
style: "dark",
|
11
|
+
alignment: "center"
|
12
|
+
}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
module Helpers
|
16
|
+
def banner_widget(options = {}, &block)
|
17
|
+
widget_block(Widgets::Banner.new(options)) do |widget|
|
18
|
+
haml_tag :div, class: "banner-outer align-#{widget.options[:alignment]}" do
|
19
|
+
haml_tag :div, class: "banner banner-#{widget.options[:style]}" do
|
20
|
+
yield if block
|
21
|
+
drop_container
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Base
|
4
|
+
include Hamloft::Helpers
|
5
|
+
attr_accessor :options
|
6
|
+
|
7
|
+
def identifier
|
8
|
+
"base"
|
9
|
+
end
|
10
|
+
|
11
|
+
def defaults
|
12
|
+
{}
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(options)
|
16
|
+
@options = defaults.merge(options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def typeloft_widget_options
|
20
|
+
attributes = {
|
21
|
+
:class => "_typeloft_widget",
|
22
|
+
:"data-widget-identifier" => identifier
|
23
|
+
}
|
24
|
+
@options.each do |k, v|
|
25
|
+
if k == :padding or k == :margin
|
26
|
+
[:top, :right, :bottom, :left].each do |dir|
|
27
|
+
attributes["data-attribute-#{k}_#{dir}"] = v
|
28
|
+
end
|
29
|
+
end
|
30
|
+
attributes["data-attribute-#{k}"] = v
|
31
|
+
end
|
32
|
+
attributes
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Button < Base
|
4
|
+
def identifier
|
5
|
+
"button"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
background_color: "#e6e6e6",
|
11
|
+
border_radius: "4px",
|
12
|
+
border_width: "1px",
|
13
|
+
border_style: "solid",
|
14
|
+
media: false,
|
15
|
+
size: "btn-lg",
|
16
|
+
style: "primary",
|
17
|
+
type: "btn-fit"
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def button_classes
|
22
|
+
classes = ["btn", "btn-#{@options[:style]}", @options[:size], @options[:type], "_typeloft_editable"]
|
23
|
+
classes.push("btn-media") if @options[:media]
|
24
|
+
classes.join(" ")
|
25
|
+
end
|
26
|
+
|
27
|
+
def button_options
|
28
|
+
result = { class: button_classes, href: (@options[:href] or "#"), style: button_styles }
|
29
|
+
result["data-media"] = @options[:media] if @options[:media] and !@options[:media].empty?
|
30
|
+
result
|
31
|
+
end
|
32
|
+
|
33
|
+
def button_styles
|
34
|
+
style_string @options, :border_radius, :border_width, :border_style, :border_color, :background_color do |sb|
|
35
|
+
sb.add(:border_style, "solid")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
module Helpers
|
40
|
+
def button_widget(options = {}, contents = nil, &block)
|
41
|
+
if options.class.name == "String"
|
42
|
+
contents = options
|
43
|
+
options = {}
|
44
|
+
end
|
45
|
+
widget_block(Widgets::Button.new(options)) do |widget|
|
46
|
+
haml_tag :a, widget.button_options do
|
47
|
+
if widget.options[:media] and !widget.options[:media].blank?
|
48
|
+
haml_tag :video do
|
49
|
+
haml_tag :source, { src: widget.options[:media], type: "video/mp4" }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
haml_concat(contents) if contents
|
53
|
+
yield if block
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Columns < Base
|
4
|
+
attr_reader :columns
|
5
|
+
attr_reader :column_count
|
6
|
+
attr_reader :total_columns
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
super(options)
|
10
|
+
@column_count = 0
|
11
|
+
column_array = @options[:columns].to_s.split("x")
|
12
|
+
if column_array.length == 1
|
13
|
+
@total_columns = column_array[0].to_i
|
14
|
+
@columns = Array.new(@total_columns) { 12 / @total_columns }
|
15
|
+
else
|
16
|
+
@total_columns = column_array.length
|
17
|
+
@columns = column_array
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def next_span
|
22
|
+
value = @columns[@column_count]
|
23
|
+
@column_count += 1
|
24
|
+
value
|
25
|
+
end
|
26
|
+
|
27
|
+
def row_options
|
28
|
+
{
|
29
|
+
class: "row row-#{@options[:style]}",
|
30
|
+
style: style_string(@options, :margin_bottom)
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
def identifier
|
35
|
+
"columns"
|
36
|
+
end
|
37
|
+
|
38
|
+
def defaults
|
39
|
+
{
|
40
|
+
columns: "2",
|
41
|
+
style: "default",
|
42
|
+
margin_bottom: "",
|
43
|
+
collapse_options: "sm"
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
module Helpers
|
48
|
+
def column(row, &block)
|
49
|
+
# get and increase span
|
50
|
+
next_span = row.next_span
|
51
|
+
if next_span
|
52
|
+
phone_cols = row.options[:collapse_options] == "xs" ? next_span : "12"
|
53
|
+
haml_tag :div, class: "column col-#{phone_cols} col-tablet-#{next_span} col-#{row.options[:collapse_options]}-#{next_span}" do
|
54
|
+
yield if block
|
55
|
+
drop_container
|
56
|
+
end
|
57
|
+
else
|
58
|
+
haml_tag :pre do
|
59
|
+
haml_concat "ERROR: Row does not allow column at position #{row.column_count}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def columns_widget(options = {}, &block)
|
65
|
+
widget_block(Widgets::Columns.new(options)) do |widget|
|
66
|
+
haml_tag :div, widget.row_options do
|
67
|
+
yield(widget) if block
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def columns_widget_compose(key, options = {}, &block)
|
73
|
+
columns_widget = Widgets::Columns.new(options)
|
74
|
+
items = variable(key, [])
|
75
|
+
# calculate row and column count
|
76
|
+
row_count = (items.length.to_f / columns_widget.total_columns).ceil
|
77
|
+
col_count = columns_widget.total_columns
|
78
|
+
(0...row_count).each do |row_index|
|
79
|
+
columns_widget(options) do |row|
|
80
|
+
(0...col_count).each do |col_index|
|
81
|
+
index = (row_index * col_count) + col_index
|
82
|
+
yield(row, items[index]) unless items[index].nil?
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Container < Base
|
4
|
+
def identifier
|
5
|
+
"container"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
animate: "none",
|
11
|
+
image_source: false,
|
12
|
+
image_position: "center_center",
|
13
|
+
image_size: "cover",
|
14
|
+
parallax_effect: "none",
|
15
|
+
background_color: "",
|
16
|
+
bg_color: "",
|
17
|
+
opacity: "",
|
18
|
+
border_radius: "",
|
19
|
+
border_width: "",
|
20
|
+
border_style: "",
|
21
|
+
style: "default",
|
22
|
+
padding_top: "",
|
23
|
+
padding_right: "",
|
24
|
+
padding_bottom: "",
|
25
|
+
padding_left: "",
|
26
|
+
min_height: "",
|
27
|
+
max_height: "",
|
28
|
+
margin_top: "",
|
29
|
+
margin_right: "",
|
30
|
+
margin_bottom: "",
|
31
|
+
margin_left: ""
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
def container_options
|
36
|
+
result = { class: container_classes, style: container_styles }
|
37
|
+
result["data-parallax-style"] = @options[:parallax_effect] if !@options[:parallax_effect].empty? and @options[:parallax_effect] != "none"
|
38
|
+
result
|
39
|
+
end
|
40
|
+
|
41
|
+
def image_options
|
42
|
+
{ class: "one-container-image", style: image_styles }
|
43
|
+
end
|
44
|
+
|
45
|
+
def container_classes
|
46
|
+
classes = ["one-container"]
|
47
|
+
classes.push("animate #{@options[:animate]}") if @options[:animate] != "none"
|
48
|
+
classes.push("container-#{@options[:style]}") unless @options[:style].empty?
|
49
|
+
classes.push("container-image-#{@options[:image_size]}") unless @options[:image_size].empty?
|
50
|
+
classes.push("container-parallax") if !@options[:parallax_effect].empty? and @options[:parallax_effect] != "none"
|
51
|
+
classes.join(" ")
|
52
|
+
end
|
53
|
+
|
54
|
+
def container_styles
|
55
|
+
style_string @options, :opacity, :border, :opacity, :border_radius, :border_width, :border_style, :margin do |sb|
|
56
|
+
sb.add(:background_color, @options[:background_color] == "custom" ? @options[:bg_color] : nil)
|
57
|
+
if @options[:background_color] == "overlay"
|
58
|
+
sb.add(:background_image, @options[:image_source], "linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url(<%= value %>)")
|
59
|
+
else
|
60
|
+
sb.add(:background_image, @options[:image_source], "url(<%= value %>)")
|
61
|
+
end
|
62
|
+
sb.add(:background_position, @options[:image_position], "<%= value.split('_').join(' ') %>")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def image_styles
|
67
|
+
style_string @options, :min_height, :max_height, :padding
|
68
|
+
end
|
69
|
+
|
70
|
+
module Helpers
|
71
|
+
def container_widget(options = {}, &block)
|
72
|
+
widget_block(Widgets::Container.new(options)) do |widget|
|
73
|
+
haml_tag :section, widget.container_options do
|
74
|
+
haml_tag :div, widget.image_options do
|
75
|
+
yield if block
|
76
|
+
drop_container
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Heading < Base
|
4
|
+
def identifier
|
5
|
+
"heading"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
type: "h1",
|
11
|
+
style: "default",
|
12
|
+
align: "left",
|
13
|
+
margin_bottom: "1em"
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
module Helpers
|
18
|
+
def heading_widget(options = {}, contents = nil, &block)
|
19
|
+
if options.class.name == "String"
|
20
|
+
contents = options
|
21
|
+
options = {}
|
22
|
+
end
|
23
|
+
widget_block(Widgets::Heading.new(options)) do |widget|
|
24
|
+
haml_tag :header, class: "#{widget.options[:style]} align-#{widget.options[:align]}", style: style_string(widget.options, :margin, :padding) do
|
25
|
+
haml_tag widget.options[:type], class: "_typeloft_editable _typeloft_widget_autoselect" do
|
26
|
+
haml_concat(contents) if contents
|
27
|
+
yield if block
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class HorizontalRule < Base
|
4
|
+
def identifier
|
5
|
+
"horizontal_rule"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
style: 'solid',
|
11
|
+
color: 'dark',
|
12
|
+
max_height: 'inherit'
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
module Helpers
|
17
|
+
def horizontal_rule_widget(options = {})
|
18
|
+
widget_block(Widgets::HorizontalRule.new(options)) do |widget|
|
19
|
+
haml_tag :hr, style: "max-height: #{widget.options[:max_height]}", class: "#{widget.options[:style]} #{widget.options[:color]}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Image < Base
|
4
|
+
def identifier
|
5
|
+
"image"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
style: "img-responsive",
|
11
|
+
align: "center",
|
12
|
+
source: false,
|
13
|
+
magnify: false,
|
14
|
+
margin_bottom: "0",
|
15
|
+
tooltip_icon: "bullhorn",
|
16
|
+
tooltip_text_alignment: "justify",
|
17
|
+
tooltip_text_size: "medium",
|
18
|
+
tooltip_position: "top-right",
|
19
|
+
tooltip_text: ""
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def image_classes
|
24
|
+
classes = ["image-widget"]
|
25
|
+
classes.push("align-#{@options[:align]}")
|
26
|
+
classes.push("popup-position-#{@options[:tooltip_position]}") if popup?
|
27
|
+
classes.join(" ")
|
28
|
+
end
|
29
|
+
|
30
|
+
def popup?
|
31
|
+
!@options[:tooltip_text].blank?
|
32
|
+
end
|
33
|
+
|
34
|
+
module Helpers
|
35
|
+
def image_widget(options = {})
|
36
|
+
widget_block(Widgets::Image.new(options)) do |widget|
|
37
|
+
haml_tag :div, class: widget.image_classes, style: style_string(widget.options, :margin, :padding) do
|
38
|
+
if widget.popup?
|
39
|
+
haml_tag :i, class: "popup fa fa-lg fa-#{widget.options[:tooltip_icon]}"
|
40
|
+
haml_tag :div, class: "popup-box", style: "font-size: #{widget.options[:tooltip_text_size]}, text-align: #{widget.options[:tooltip_text_alignment]};" do
|
41
|
+
haml_concat(widget.options[:tooltip_text])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
haml_tag :img, class: "image #{widget.options[:style]} #{widget.options[:magnify] ? 'magnific-image' : ''}", src: widget.options[:source]
|
45
|
+
haml_tag :div, class: "image-drop-target"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def image_widget_link(options = {})
|
51
|
+
widget_block(Widgets::Image.new(options)) do |widget|
|
52
|
+
haml_tag :div, class: "image-widget align-#{widget.options[:align]}" do
|
53
|
+
link options[:href] do
|
54
|
+
haml_tag :img, style: style_string(widget.options, :margin, :padding), class: "image #{widget.options[:style]} #{widget.options[:magnify] ? 'magnific-image' : ''}", src: widget.options[:source]
|
55
|
+
end
|
56
|
+
haml_tag :div, class: "image-drop-target"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Paragraph < Base
|
4
|
+
def identifier
|
5
|
+
"paragraph"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
style: "default",
|
11
|
+
align: "left",
|
12
|
+
size: "md",
|
13
|
+
margin_bottom: "1em",
|
14
|
+
drop_cap: "",
|
15
|
+
drop_cap_color: "#000000",
|
16
|
+
line_height: ""
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
module Helpers
|
21
|
+
def paragraph_widget(options = {}, contents = nil, &block)
|
22
|
+
if options.class.name == "String"
|
23
|
+
contents = options
|
24
|
+
options = {}
|
25
|
+
end
|
26
|
+
widget_block(Widgets::Paragraph.new(options)) do |widget|
|
27
|
+
haml_tag :div, style: style_string(widget.options, :margin, :padding), class: "paragraph #{widget.options[:style]} align-#{widget.options[:align]} size-#{widget.options[:size]}" do
|
28
|
+
unless widget.options[:drop_cap].empty?
|
29
|
+
haml_tag :span, class: "__dropcap", style: "color: #{widget.options[:drop_cap_color]};" do
|
30
|
+
haml_concat(widget.options[:drop_cap])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
haml_tag :span, class: "paragraph-content _typeloft_editable _typeloft_widget_autoselect", style: style_string(widget.options, :line_height) do
|
35
|
+
haml_concat(contents) if contents
|
36
|
+
yield if block
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class ScrollableImage < Base
|
4
|
+
def identifier
|
5
|
+
"scrollable_image"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
source: false,
|
11
|
+
show_navigation: true,
|
12
|
+
height: "400px",
|
13
|
+
margin_bottom: "0px"
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
module Helpers
|
18
|
+
def scrollable_image_widget(options = {})
|
19
|
+
widget_block(Widgets::ScrollableImage.new(options)) do |widget|
|
20
|
+
haml_tag :div, class: "scrollable-image-container #{widget.options[:show_navigation] ? 'show-navigation' : ''}", style: style_string(widget.options, :margin, :padding, :height) do
|
21
|
+
haml_tag :div, class: "scrollable-image-inner" do
|
22
|
+
haml_tag :img, class: "scrollable-image", src: widget.options[:source]
|
23
|
+
end
|
24
|
+
if widget.options[:show_navigation]
|
25
|
+
haml_tag :div, class: "scrollable-image-navigator scrollable-image-navigator-left"
|
26
|
+
haml_tag :div, class: "scrollable-image-navigator scrollable-image-navigator-right"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Slider < Base
|
4
|
+
def identifier
|
5
|
+
"slider"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
slides: "3",
|
11
|
+
height: "auto",
|
12
|
+
margin_bottom: "0px",
|
13
|
+
background_color: "#EEEEEE",
|
14
|
+
buttons_position: "bottom",
|
15
|
+
autoplay: "true",
|
16
|
+
autoplay_timeout: "3000"
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def slider_options
|
21
|
+
data = { class: slider_classes, autoplay: @options[:autoplay], autoplay_timeout: @options[:autoplay_timeout] }
|
22
|
+
{ class: "owl-carousel", style: slider_styles, data: data }
|
23
|
+
end
|
24
|
+
|
25
|
+
def slider_styles
|
26
|
+
style_string @options, :margin, :height, :background_color do |sb|
|
27
|
+
sb.add(:min_height, "120px")
|
28
|
+
sb.add(:overflow, "hidden")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def slider_classes
|
33
|
+
classes = ["owl-carousel", "owl-loaded", "owl-text-select-on", "owl-theme"]
|
34
|
+
classes.push("position-#{@options[:buttons_position]}") unless @options[:buttons_position].empty?
|
35
|
+
classes.join(" ")
|
36
|
+
end
|
37
|
+
|
38
|
+
module Helpers
|
39
|
+
def slider_widget(options = {}, &block)
|
40
|
+
widget_block(Widgets::Slider.new(options)) do |widget|
|
41
|
+
haml_tag :div, widget.slider_options do
|
42
|
+
yield if block
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def slider_item(options = {}, &block)
|
48
|
+
haml_tag :div, class: "item" do
|
49
|
+
yield if block
|
50
|
+
drop_container
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Video < Base
|
4
|
+
def identifier
|
5
|
+
"video"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
width: "640",
|
11
|
+
height: "360",
|
12
|
+
preload: "auto",
|
13
|
+
style: "default",
|
14
|
+
source: false,
|
15
|
+
poster: false,
|
16
|
+
autoplay: false,
|
17
|
+
controls: true,
|
18
|
+
loop: false,
|
19
|
+
margin_bottom: "0"
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
module Helpers
|
24
|
+
def video_widget(options = {})
|
25
|
+
widget_block(Widgets::Video.new(options)) do |widget|
|
26
|
+
haml_tag :div, class: "video-widget player-style-#{widget.options[:style]}" do
|
27
|
+
haml_tag :video, controls: true, poster: widget.options[:poster], style: "width: 100%" do
|
28
|
+
haml_tag :source, src: widget.options[:source].to_s, type: "video/mp4"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class YahooScreen < Base
|
4
|
+
def identifier
|
5
|
+
"yahoo_screen"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
yahoo_screen_id: "apple-iwatch-iphone-6-135616256",
|
11
|
+
width: "800",
|
12
|
+
height: "600"
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
module Helpers
|
17
|
+
def yahoo_screen_widget(options = {}, &block)
|
18
|
+
widget_block(Widgets::YahooScreen.new(options)) do |widget|
|
19
|
+
haml_tag :div, class: "flex-video widescreen", style: style_string(widget.options, :margin, :padding) do
|
20
|
+
haml_tag :iframe, src: "http://screen.yahoo.com/#{widget.options[:yahoo_screen_id]}.html?format=embed", type: "text/html", style: "max-width: 100%; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%;", allowfullscreen: "", frameborder: "0", webkitallowfullscreen: "", mozallowfullscreen: ""
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Maglove
|
2
|
+
module Widgets
|
3
|
+
class Youtube < Base
|
4
|
+
def identifier
|
5
|
+
"youtube"
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
youtube_id: "LFYNP40vfmE",
|
11
|
+
width: "800",
|
12
|
+
height: "600"
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
module Helpers
|
17
|
+
def youtube_widget(options = {}, &block)
|
18
|
+
widget_block(Widgets::Youtube.new(options)) do |widget|
|
19
|
+
haml_tag :div, class: "flex-video widescreen", style: style_string(widget.options, :margin, :padding) do
|
20
|
+
haml_tag :iframe, src: "https://www.youtube.com/embed/#{widget.options[:youtube_id]}", type: "text/html", style: "max-width: 100%; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%;", allowfullscreen: "", frameborder: "0", webkitallowfullscreen: "", mozallowfullscreen: ""
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "maglove-widgets"
|
6
|
+
s.version = "1.0.0"
|
7
|
+
s.licenses = ["BSD-3-Clause"]
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Tobias Strebitzer"]
|
10
|
+
s.email = ["tobias.strebitzer@magloft.com"]
|
11
|
+
s.homepage = "https://bitbucket.org/MagLoft/maglove-widgets"
|
12
|
+
s.summary = "MagLove Widgets Repository"
|
13
|
+
s.description = "This gem contains shared widgets for MagLove."
|
14
|
+
s.required_rubygems_version = '>= 2.4.7'
|
15
|
+
s.add_runtime_dependency "bundler", "~> 1.10"
|
16
|
+
s.add_runtime_dependency 'haml', "~> 4.0"
|
17
|
+
s.add_runtime_dependency 'hamloft', "~> 0.2.4"
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
20
|
+
s.require_path = 'lib'
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: maglove-widgets
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tobias Strebitzer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: haml
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: hamloft
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.2.4
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.2.4
|
55
|
+
description: This gem contains shared widgets for MagLove.
|
56
|
+
email:
|
57
|
+
- tobias.strebitzer@magloft.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- ".rubocop.yml"
|
64
|
+
- Gemfile
|
65
|
+
- Gemfile.lock
|
66
|
+
- README.md
|
67
|
+
- lib/maglove/widgets.rb
|
68
|
+
- lib/maglove/widgets/banner.rb
|
69
|
+
- lib/maglove/widgets/base.rb
|
70
|
+
- lib/maglove/widgets/button.rb
|
71
|
+
- lib/maglove/widgets/columns.rb
|
72
|
+
- lib/maglove/widgets/container.rb
|
73
|
+
- lib/maglove/widgets/heading.rb
|
74
|
+
- lib/maglove/widgets/horizontal_rule.rb
|
75
|
+
- lib/maglove/widgets/image.rb
|
76
|
+
- lib/maglove/widgets/paragraph.rb
|
77
|
+
- lib/maglove/widgets/scrollable_image.rb
|
78
|
+
- lib/maglove/widgets/slider.rb
|
79
|
+
- lib/maglove/widgets/video.rb
|
80
|
+
- lib/maglove/widgets/yahoo_screen.rb
|
81
|
+
- lib/maglove/widgets/youtube.rb
|
82
|
+
- maglove-widgets.gemspec
|
83
|
+
homepage: https://bitbucket.org/MagLoft/maglove-widgets
|
84
|
+
licenses:
|
85
|
+
- BSD-3-Clause
|
86
|
+
metadata: {}
|
87
|
+
post_install_message:
|
88
|
+
rdoc_options: []
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 2.4.7
|
101
|
+
requirements: []
|
102
|
+
rubyforge_project:
|
103
|
+
rubygems_version: 2.6.6
|
104
|
+
signing_key:
|
105
|
+
specification_version: 4
|
106
|
+
summary: MagLove Widgets Repository
|
107
|
+
test_files: []
|