ionica 0.0.1

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.
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Tomislav Pesut & Anna Andresian
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # Ionica
2
+ A gem that provides a lightweight grid system
@@ -0,0 +1,255 @@
1
+ $DEFAULT_RESOLUTION: 768
2
+
3
+ @mixin grid-column-styles($transition_duration)
4
+ transition: transform, $transition_duration
5
+ position: absolute
6
+ height: 100%
7
+ z-index: 1
8
+
9
+ @function map-length($map)
10
+ @return length(map-keys($map))
11
+
12
+ @function percentage-column($size, $number_of_columns)
13
+ @return to-percent($size * (100 / $number_of_columns))
14
+
15
+ @function to-percent($number)
16
+ @return $number * 1%
17
+
18
+ @mixin column($grid, $key)
19
+ @include grid-column-styles(map-get($grid, transition_duration))
20
+ $c: map-get($grid, $key)
21
+ $padding: map-get($grid, padding)
22
+ @include grid-column-with-offset(map-get($c, weight), map-get($grid, total_grid_weight), map-get($c, offset), $key, map-get($grid, core_columns), map-get($grid, resolution), map-get($grid, orientation), $grid, $padding)
23
+
24
+ @mixin generate-column-classes($grid, $class_name)
25
+ $num_columns: map-get($grid, num_columns)
26
+ $grid: map-merge($grid, (class_name: $class_name))
27
+ @for $i from 1 through $num_columns
28
+ .#{$class_name}-#{$i}
29
+ @include column($grid, $i)
30
+
31
+ @function grid($list, $breakpoints: 767, $padding: 0, $transition_duration: 500ms, $class_name: "amplify-ionica-grid-default-classname")
32
+ $breakpoints: parse-breakpoints($breakpoints)
33
+ $total_grid_weight: get-sum-of-column-weights($list)
34
+ $num_core_columns: get-num-core-columns($list)
35
+ $num_columns: length($list)
36
+ $core_columns: ()
37
+ $resolution: map-get($breakpoints, resolution)
38
+ $orientation: map-get($breakpoints, orientation)
39
+
40
+ $total_grid_weight: $total_grid_weight + (length($list) - 1) * $padding/100
41
+ $to_return: (total_grid_weight: $total_grid_weight, num_columns: $num_columns, resolution: $resolution, orientation: $orientation, padding: $padding)
42
+ $index: 1
43
+ $offset: 0
44
+ $to_return : map-merge($to_return, (class_name: $class_name, transition_duration: $transition_duration))
45
+
46
+ @each $column_param in $list
47
+
48
+ $column_weight: get-column-weight($column_param)
49
+ $column_padding: $padding/100
50
+ @if $index == 1
51
+ $column_padding: 0
52
+ $to_return: map-merge($to_return, ($index: (weight: $column_weight, offset: $offset + $column_padding)))
53
+
54
+ @if is-core-column-param($column_param) or $num_core_columns == 0
55
+ $core_columns: map-merge($core_columns, ($index: (weight: $column_weight)))
56
+ $index: $index + 1
57
+ $offset: $offset + $column_weight + $column_padding
58
+
59
+ $to_return: map-merge($to_return, (core_columns: $core_columns))
60
+ $total_core_column_weight: total-column-weights($core_columns) + (map-length($core_columns) - 1) * $padding/100
61
+ $to_return: map-merge($to_return, (total_core_column_weight: $total_core_column_weight))
62
+ @return $to_return
63
+
64
+ @function parse-breakpoints($breakpoints)
65
+ $to_return: ()
66
+ $breakpoints_resolution: null
67
+ $breakpoints_orientation: null
68
+
69
+ @if type-of($breakpoints) == map
70
+ $breakpoints_resolution: map-get($breakpoints, resolution)
71
+ $breakpoints_orientation: map-get($breakpoints, orientation)
72
+
73
+ @else
74
+ @if type-of($breakpoints) == number
75
+ $breakpoints_resolution: $breakpoints
76
+ $breakpoints_orientation: null
77
+
78
+ @else
79
+ $breakpoints: assert-type($breakpoints, string, "Expected a number or a string with value 'portrait' or 'landscape'. Got #{$breakpoints}.")
80
+ $breakpoints_orientation: $breakpoints
81
+ $breakpoints_resolution: null
82
+
83
+ @if is-not-null($breakpoints_resolution)
84
+ $breakpoints_resolution: assert-type($breakpoints_resolution, number, "Expected a number for resolution. Got #{type-of($breakpoints_resolution)}.")
85
+ @if $breakpoints_resolution < 0
86
+ @error "Expected resolution greater than 0. Got #{$breakpoints_resolution}."
87
+
88
+ @if is-not-null($breakpoints_orientation)
89
+ @if $breakpoints_orientation != "portrait" and $breakpoints_orientation != "landscape"
90
+ @error "Expected 'portrait' or 'landscape' as value of orientation. Got #{$breakpoints_orientation}."
91
+
92
+ @if $breakpoints_resolution == null and $breakpoints_orientation == null
93
+ $breakpoints_resolution: $DEFAULT_RESOLUTION
94
+
95
+ $to_return: map-merge($to_return, (resolution: $breakpoints_resolution))
96
+ $to_return: map-merge($to_return, (orientation: $breakpoints_orientation))
97
+
98
+ @return $to_return
99
+
100
+ @function assert-not-null($value, $error_message)
101
+ @if is-null($value)
102
+ @error $error_message
103
+ @return $error_message
104
+
105
+ @function is-null($value)
106
+ @return $value == null
107
+
108
+ @function is-not-null($value)
109
+ @return not is-null($value)
110
+
111
+ @function assert-type($value, $expected_type, $error_message)
112
+ @if type-of($value) != $expected_type
113
+ @error $error_message
114
+ @return $value
115
+
116
+ @function get-sum-of-column-weights($list)
117
+ $total_weight: 0
118
+
119
+ @each $column_param in $list
120
+ $total_weight: $total_weight + get-column-weight($column_param)
121
+
122
+ @return $total_weight
123
+
124
+ @function get-num-core-columns($list)
125
+ $num_core_columns: 0
126
+
127
+ @each $column_param in $list
128
+ @if is-core-column-param($column_param)
129
+ $num_core_columns: $num_core_columns + 1
130
+
131
+ @return $num_core_columns
132
+
133
+ @function get-column-weight($column_param)
134
+ @if type-of($column_param) == list
135
+ @return nth($column_param,1)
136
+
137
+ @if type-of($column_param) == number
138
+ @return $column_param
139
+
140
+ @function is-core-column-param($column_param)
141
+ @if type-of($column_param) == list
142
+ @return nth($column_param,2) == true
143
+ @return false
144
+ @if type-of($column_param) != number
145
+ @error "First parameter to grid has to be a list of numbers and/or lists"
146
+ @return false
147
+
148
+ @mixin grid-column-with-offset($column_weight, $total_column_weights, $offset, $index, $core_columns, $resolution, $orientation, $grid, $padding: 0)
149
+ @include grid-column($column_weight, $total_column_weights)
150
+ left: percentage-column($offset, $total_column_weights)
151
+
152
+ @if is-core-column($index, $core_columns)
153
+ @include extend-this-column($column_weight, $index, $core_columns, $resolution, $orientation, $padding)
154
+ @else
155
+ @include remove-this-column($column_weight, $total_column_weights, $offset, $resolution, $orientation, $grid)
156
+
157
+ @mixin grid-column($size, $number_of_columns)
158
+ width: percentage-column($size, $number_of_columns)
159
+
160
+ @function is-core-column($key, $core_columns)
161
+ @return map-get($core_columns, $key) != null
162
+
163
+ @mixin extend-this-column($column_weight, $column_index, $core_columns, $resolution, $orientation, $padding)
164
+ $total_weight: total-column-weights($core_columns) + (map-length($core_columns) - 1) * $padding/100
165
+
166
+ $columns_before_this_column: get-columns-with-index-less-than($column_index, $core_columns)
167
+ $num_columns_before_this_column: map-length($columns_before_this_column)
168
+
169
+ $width: percentage-column($column_weight, $total_weight)
170
+ $left: percentage-column(total-column-weights($columns_before_this_column) + $num_columns_before_this_column * $padding/100, $total_weight)
171
+ @include extend($resolution, $orientation, $width, $left)
172
+
173
+ @function total-column-weights($column_map)
174
+ $total_column_weights: 0
175
+ @each $index, $value in $column_map
176
+ $total_column_weights: $total_column_weights + map-get($value, weight)
177
+ @return $total_column_weights
178
+
179
+ @function get-columns-with-index-less-than($limit_index, $column_map)
180
+ $to_return : ()
181
+ @each $index, $value in $column_map
182
+ @if $index < $limit_index
183
+ $to_return: map-merge($to_return, ($index: $value))
184
+
185
+ @return $to_return
186
+
187
+ @mixin extend($r, $o, $width: 100%, $left: 0)
188
+ @include w-resolution-or-orientation($r, $o)
189
+ width: $width
190
+ left: $left
191
+
192
+ @mixin w-resolution-or-orientation($r, $o)
193
+ @if is-not-null($r)
194
+ @include w-lte($r)
195
+ @content
196
+
197
+ @if is-not-null($o)
198
+ @include w-orientation($o)
199
+ @content
200
+
201
+ @mixin w-lte($resolution)
202
+ @media only screen and (max-width: #{$resolution}px)
203
+ @content
204
+
205
+ @mixin w-orientation($orientation)
206
+ @media only screen and (orientation: #{$orientation})
207
+ @content
208
+
209
+ @mixin remove-this-column($column_weight, $total_grid_weight, $offset, $resolution, $orientation, $grid)
210
+ @if $offset < $total_grid_weight / 2
211
+ $distance: -100% - ($offset/$column_weight) * 101%
212
+ @include offscreen-left($distance, $resolution, $orientation, percentage-column($column_weight, $total_grid_weight), $grid)
213
+ @else
214
+ $distance: ($total_grid_weight - $offset)/$column_weight * 101%
215
+ @include offscreen-right($distance, $resolution, $orientation, percentage-column($column_weight, $total_grid_weight), $grid)
216
+
217
+ @mixin offscreen-left($distance, $resolution, $orientation, $column_width, $grid)
218
+ @include w-resolution-or-orientation($resolution, $orientation)
219
+ transform: translate3d($distance,0,0)
220
+ z-index: 0
221
+ .no-csstransforms3d &
222
+ left: -#{$column_width}
223
+
224
+ &.slide-in
225
+ transform: translate3d(100% + $distance, 0 ,0)
226
+
227
+ @include shift-core-columns($grid, $column_width, "right")
228
+
229
+ @mixin offscreen-right($distance, $resolution, $orientation, $column_width, $grid)
230
+ @include w-resolution-or-orientation($resolution, $orientation)
231
+ transform: translate3d($distance,0 ,0)
232
+ z-index: 0
233
+ .no-csstransforms3d &
234
+ left: 100%
235
+
236
+ &.slide-in
237
+ transform: translate3d(-100% + $distance, 0, 0)
238
+
239
+ @include shift-core-columns($grid, $column_width, "left")
240
+
241
+ @mixin shift-core-columns($grid, $shift_distance, $direction)
242
+ $core_columns: map-get($grid, core_columns)
243
+ $class_name: map-get($grid, class_name)
244
+ $total_core_weight: map-get($grid, total_core_column_weight)
245
+ $total_weight: map-get($grid, total_grid_weight)
246
+ $padding: map-get($grid, padding)
247
+ @each $index, $weight in $core_columns
248
+ $weight: map-get($weight, weight)
249
+ $this_column_in_percentages: ($weight / $total_core_weight) * 100%
250
+ $x_position: $this_column_in_percentages / ($this_column_in_percentages / $shift_distance)
251
+ & ~ .#{$class_name}-#{$index}
252
+ @if $direction == "right"
253
+ transform: translate3d($x_position + ($padding * ($total_core_weight / $total_weight) / $weight * 1%), 0, 0)
254
+ @if $direction == "left"
255
+ transform: translate3d(-$x_position - ($padding * ($total_core_weight / $total_weight) / $weight * 1%), 0, 0)
@@ -0,0 +1,4 @@
1
+ module Ionica
2
+ VERSION = '0.0.1'
3
+ end
4
+
data/lib/ionica.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'ionica/version'
2
+
3
+ module Ionica
4
+ class Engine < Rails::Engine
5
+ end
6
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ionica
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tomislav Pesut
9
+ - Anna Andresian
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2014-11-18 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: railties
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ description: A gem that provides a lightweight responsive grid
32
+ email:
33
+ - tpesut@amplify.com
34
+ - aandresian@amplify.com
35
+ executables: []
36
+ extensions: []
37
+ extra_rdoc_files: []
38
+ files:
39
+ - lib/ionica/version.rb
40
+ - lib/ionica.rb
41
+ - app/assets/stylesheets/ionica.sass
42
+ - LICENSE
43
+ - README.md
44
+ homepage: http://rubygems.org/gems/ionica
45
+ licenses:
46
+ - MIT
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ - app
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ requirements: []
65
+ rubyforge_project:
66
+ rubygems_version: 1.8.24
67
+ signing_key:
68
+ specification_version: 3
69
+ summary: A gem that provides a lightweight responsive grid
70
+ test_files: []