spans 0.4.0 → 1.1.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.
data/lib/spans/engine.rb CHANGED
@@ -1,5 +0,0 @@
1
- module Spans
2
- class Engine < ::Rails::Engine
3
- require 'inline-blocks'
4
- end
5
- end
@@ -0,0 +1,14 @@
1
+ require 'grids'
2
+
3
+ module Spans
4
+ class Importer < Grids::Importer
5
+ private
6
+ def extension_regex
7
+ /\.spans$/
8
+ end
9
+
10
+ def template_path
11
+ File.join(File.expand_path('../', __FILE__), 'spans.scss.erb')
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ @import 'spaceless';
2
+
3
+ @mixin <%= name %>-spans {
4
+ @include spaceless;
5
+ margin-right: <%= name %>-gutter-x(-1);
6
+
7
+ & > * {
8
+ display: inline-block;
9
+ vertical-align: top;
10
+ margin-right: <%= name %>-gutter-x(1);
11
+ }
12
+ }
13
+
14
+ .<%= name %>-spans { @include <%= name %>-spans; }
15
+
16
+ @for $i from 1 through $<%= name %>-modules-x-count {
17
+ .<%= name %>-spans .span#{$i} { width: <%= name %>-modules-x($i); }
18
+ .<%= name %>-spans .gap#{$i} { padding-left: <%= name %>-modules-gap-x($i); }
19
+ }
data/lib/spans/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Spans
2
- VERSION = "0.4.0"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/spans.rb CHANGED
@@ -1,5 +1,18 @@
1
1
  require "spans/engine"
2
+ require 'spans/importer'
2
3
  require "spans/version"
3
4
 
4
5
  module Spans
6
+ # def self.load_paths
7
+ # [
8
+ # File.expand_path('../../app/assets/javascripts/', __FILE__),
9
+ # ]
10
+ # end
11
+
12
+ # if defined? Rails
13
+ # class Engine < ::Rails::Engine
14
+ # end
15
+ # end
16
+
17
+ Sass.load_paths << Importer.new('.')
5
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spans
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,24 +9,40 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-07 00:00:00.000000000 Z
12
+ date: 2013-02-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: inline-blocks
15
+ name: spaceless
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - '='
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.0.3
21
+ version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - '='
27
+ - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: 0.0.3
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: grids
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.2'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.2'
30
46
  description: Extremely simple scss grid system.
31
47
  email:
32
48
  - abc@oktoberliner.ru
@@ -34,11 +50,9 @@ executables: []
34
50
  extensions: []
35
51
  extra_rdoc_files: []
36
52
  files:
37
- - app/assets/javascripts/spans/hashgrid.js
38
- - app/assets/javascripts/spans.js.coffee
39
- - app/assets/stylesheets/spans/grid.css.scss
40
- - app/assets/stylesheets/spans.css.scss
41
53
  - lib/spans/engine.rb
54
+ - lib/spans/importer.rb
55
+ - lib/spans/spans.scss.erb
42
56
  - lib/spans/version.rb
43
57
  - lib/spans.rb
44
58
  - MIT-LICENSE
@@ -58,7 +72,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
72
  version: '0'
59
73
  segments:
60
74
  - 0
61
- hash: 3283207008503999020
75
+ hash: -892031560827161286
62
76
  required_rubygems_version: !ruby/object:Gem::Requirement
63
77
  none: false
64
78
  requirements:
@@ -67,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
81
  version: '0'
68
82
  segments:
69
83
  - 0
70
- hash: 3283207008503999020
84
+ hash: -892031560827161286
71
85
  requirements: []
72
86
  rubyforge_project:
73
87
  rubygems_version: 1.8.23
@@ -1,424 +0,0 @@
1
- /**
2
- * hashgrid (jQuery version, adapters are on the way)
3
- * http://github.com/dotjay/hashgrid
4
- * Version 8, 06 Oct 2012
5
- * Written by Jon Gibbins
6
- *
7
- * Contibutors:
8
- * James Aitken, http://loonypandora.co.uk/
9
- * Tom Arnold, http://www.tomarnold.de/
10
- * Sean Coates, http://seancoates.com/
11
- * Phil Dokas, http://jetless.org/
12
- * Andrew Jaswa, http://andrewjaswa.com/
13
- * Callum Macrae, http://lynx.io/
14
- */
15
-
16
- /**
17
- * @license Copyright 2011 Analog Coop Limited
18
- *
19
- * Licensed under the Apache License, Version 2.0 (the "License");
20
- * you may not use this file except in compliance with the License.
21
- * You may obtain a copy of the License at
22
- *
23
- * http://www.apache.org/licenses/LICENSE-2.0
24
- *
25
- * Unless required by applicable law or agreed to in writing, software
26
- * distributed under the License is distributed on an "AS IS" BASIS,
27
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28
- * See the License for the specific language governing permissions and
29
- * limitations under the License.
30
- */
31
-
32
- /**
33
- * Usage
34
- *
35
- * // The basic #grid setup looks like this
36
- * var grid = new hashgrid();
37
- *
38
- * // But there are a whole bunch of additional options you can set
39
- * var grid = new hashgrid({
40
- * id: 'mygrid', // set a custom id for the grid container
41
- * modifierKey: 'alt', // optional 'ctrl', 'alt' or 'shift'
42
- * showGridKey: 's', // key to show the grid
43
- * holdGridKey: 'enter', // key to hold the grid in place
44
- * foregroundKey: 'f', // key to toggle foreground/background
45
- * jumpGridsKey: 'd', // key to cycle through the grid classes
46
- * numberOfGrids: 2, // number of grid classes used
47
- * classPrefix: 'myclass', // prefix for the grid classes
48
- * cookiePrefix: 'mygrid' // prefix for the cookie name
49
- * });
50
- */
51
-
52
-
53
- /**
54
- * Make sure we have the library
55
- * TODO: Use an adapter
56
- */
57
- if (typeof jQuery == "undefined") {
58
- alert("Hashgrid: jQuery not loaded. Make sure it's linked to your pages.");
59
- }
60
-
61
-
62
- /**
63
- * hashgrid overlay
64
- * @constructor
65
- */
66
- spans = {};
67
- spans.hashgrid = function(set) {
68
-
69
- var options = {
70
- id: 'grid', // id for the grid container
71
- modifierKey: null, // optional 'ctrl', 'alt' or 'shift'
72
- showGridKey: 'g', // key to show the grid
73
- holdGridKey: 'h', // key to hold the grid in place
74
- foregroundKey: 'f', // key to toggle foreground/background
75
- jumpGridsKey: 'j', // key to cycle through the grid classes
76
- numberOfGrids: 1, // number of grid classes used
77
- classPrefix: 'grid-', // prefix for the grid classes
78
- cookiePrefix: 'hashgrid', // prefix for the cookie name
79
- container: $('body')
80
- },
81
- alreadyDown,
82
- classNumber = 1,
83
- gridLines,
84
- gridWidth,
85
- i,
86
- line,
87
- lineHeight,
88
- numGridLines,
89
- overlay,
90
- overlayCookie,
91
- overlayEl,
92
- overlayOn = false,
93
- overlayVert,
94
- overlayZState = 'B',
95
- overlayZBackground = -1,
96
- overlayZForeground = 9999,
97
- pageHeight,
98
- setKey,
99
- state,
100
- sticky = false,
101
- top;
102
-
103
- // Apply options
104
- if (typeof set == 'object') {
105
- for (setKey in set) {
106
- options[setKey] = set[setKey];
107
- }
108
- }
109
- else if (typeof set == 'string') {
110
- options.id = set;
111
- }
112
-
113
- // Remove any conflicting overlay
114
- if ($('#' + options.id).length > 0) {
115
- $('#' + options.id).remove();
116
- }
117
-
118
- // Create overlay, hidden before adding to DOM
119
- overlayEl = $('<div></div>');
120
- overlayEl
121
- .attr('id', options.id)
122
- .css({
123
- display: 'none',
124
- pointerEvents: 'none'
125
- });
126
- options.container.prepend(overlayEl);
127
- overlay = $('#' + options.id);
128
-
129
- // Unless a custom z-index is set, ensure the overlay will be behind everything
130
- if (overlay.css('z-index') == 'auto') overlay.css('z-index', overlayZBackground);
131
-
132
- // Override the default overlay height with the actual page height
133
- pageHeight = parseFloat($(document).height());
134
- overlay.height(pageHeight);
135
-
136
- // Add the first grid line so that we can measure it
137
- overlay.append('<div id="' + options.id + '-horiz" class="horiz first-line">');
138
-
139
- // Position off-screen and display to calculate height
140
- top = overlay.css("top");
141
- overlay.css({
142
- top: '-999px',
143
- display: 'block'
144
- });
145
-
146
- // Calculate the number of grid lines needed
147
- line = $('#' + options.id + '-horiz');
148
- lineHeight = line.outerHeight();
149
-
150
- // Hide and reset top
151
- overlay.css({
152
- display: 'none',
153
- top: top
154
- });
155
-
156
- // Break on zero line height
157
- if (lineHeight <= 0) {
158
- return false;
159
- }
160
-
161
- // Add the remaining grid lines
162
- numGridLines = Math.floor(pageHeight / lineHeight);
163
- gridLines = '';
164
-
165
- for (i = numGridLines - 1; i >= 1; i--) {
166
- gridLines += '<div class="horiz"></div>';
167
- }
168
- overlay.append(gridLines);
169
-
170
- // vertical grid
171
- overlay.append($('<div class="vert-container"></div>'));
172
- overlayVert = overlay.children('.vert-container');
173
- gridWidth = overlay.width();
174
- overlayVert.css({width: gridWidth, position: 'absolute', top: 0});
175
- overlayVert.append('<div class="vert first-line">&nbsp;</div>');
176
-
177
- // 30 is an arbitrarily large number...
178
- // can't calculate the margin width properly
179
- gridLines = '';
180
- for (i = 0; i < 30; i++) {
181
- gridLines += '<div class="vert">&nbsp;</div>';
182
- }
183
- overlayVert.append(gridLines);
184
- overlayVert.children()
185
- .height(pageHeight)
186
- .css({ display: 'inline-block' });
187
-
188
- // Check for saved state
189
- overlayCookie = readCookie(options.cookiePrefix + options.id);
190
- if (typeof overlayCookie == 'string') {
191
- state = overlayCookie.split('-');
192
- state[2] = Number(state[2]);
193
- if ((typeof state[2] == 'number') && !isNaN(state[2])) {
194
- classNumber = state[2].toFixed(0);
195
- overlay.addClass(options.classPrefix + classNumber);
196
- }
197
- if (state[1] == 'F') {
198
- overlayZState = 'F';
199
- overlay.css('z-index', overlayZForeground);
200
- }
201
- if (state[0] == '1') {
202
- overlayOn = true;
203
- sticky = true;
204
- showOverlay();
205
- }
206
- }
207
- else {
208
- overlay.addClass(options.classPrefix + classNumber);
209
- }
210
-
211
- // Keyboard controls
212
- $(document).bind('keydown', keydownHandler);
213
- $(document).bind('keyup', keyupHandler);
214
-
215
- /**
216
- * Helpers
217
- */
218
-
219
- function getModifier(e) {
220
- if (options.modifierKey == null) return true; // Bypass by default
221
- var m = true;
222
- switch(options.modifierKey) {
223
- case 'ctrl':
224
- m = (e.ctrlKey ? e.ctrlKey : false);
225
- break;
226
-
227
- case 'alt':
228
- m = (e.altKey ? e.altKey : false);
229
- break;
230
-
231
- case 'shift':
232
- m = (e.shiftKey ? e.shiftKey : false);
233
- break;
234
- }
235
- return m;
236
- }
237
-
238
- function getKey(e) {
239
- var k = false, c = (e.keyCode ? e.keyCode : e.which);
240
- // Handle keywords
241
- if (c == 13) k = 'enter';
242
- // Handle letters
243
- else k = String.fromCharCode(c).toLowerCase();
244
- return k;
245
- }
246
-
247
- function saveState() {
248
- createCookie(options.cookiePrefix + options.id, (sticky ? '1' : '0') + '-' + overlayZState + '-' + classNumber, 1);
249
- }
250
-
251
- function showOverlay() {
252
- overlay.show();
253
- overlayVert.css({width: overlay.width()});
254
- // hide any vertical blocks that aren't at the top of the viewport
255
- overlayVert.children('.vert').each(function () {
256
- var vCol = $(this);
257
- vCol.css('display','inline-block');
258
- if (vCol.offset().top > vCol.parent().offset().top) {
259
- vCol.hide();
260
- }
261
- });
262
- }
263
-
264
- /**
265
- * Event handlers
266
- */
267
-
268
- alreadyDown = {};
269
-
270
- function keydownHandler(e) {
271
- var k,
272
- m,
273
- source = e.target.tagName.toLowerCase();
274
-
275
- if ((source == 'input') || (source == 'textarea') || (source == 'select')) {
276
- return true;
277
- }
278
-
279
- m = getModifier(e);
280
- if (!m) {
281
- return true;
282
- }
283
-
284
- k = getKey(e);
285
- if (!k) {
286
- return true;
287
- }
288
-
289
- if (alreadyDown[k]) {
290
- return true;
291
- }
292
- alreadyDown[k] = true;
293
-
294
- switch(k) {
295
- case options.showGridKey:
296
- if (!overlayOn) {
297
- showOverlay();
298
- overlayOn = true;
299
- }
300
- else if (sticky) {
301
- overlay.hide();
302
- overlayOn = false;
303
- sticky = false;
304
- saveState();
305
- }
306
- break;
307
- case options.holdGridKey:
308
- if (overlayOn && !sticky) {
309
- // Turn sticky overlay on
310
- sticky = true;
311
- saveState();
312
- }
313
- break;
314
- case options.foregroundKey:
315
- if (overlayOn) {
316
- // Toggle sticky overlay z-index
317
- if (overlay.css('z-index') == overlayZForeground) {
318
- overlay.css('z-index', overlayZBackground);
319
- overlayZState = 'B';
320
- }
321
- else {
322
- overlay.css('z-index', overlayZForeground);
323
- overlayZState = 'F';
324
- }
325
- saveState();
326
- }
327
- break;
328
- case options.jumpGridsKey:
329
- if (overlayOn && (options.numberOfGrids > 1)) {
330
- // Cycle through the available grids
331
- overlay.removeClass(options.classPrefix + classNumber);
332
- classNumber++;
333
- if (classNumber > options.numberOfGrids) classNumber = 1;
334
- overlay.addClass(options.classPrefix + classNumber);
335
- showOverlay();
336
- if (/webkit/.test( navigator.userAgent.toLowerCase() )) {
337
- forceRepaint();
338
- }
339
- saveState();
340
- }
341
- break;
342
- }
343
-
344
- return true;
345
- }
346
-
347
- function keyupHandler(e) {
348
- var k,
349
- m = getModifier(e);
350
-
351
- if (!m) {
352
- return true;
353
- }
354
-
355
- k = getKey(e);
356
- alreadyDown[k] = false;
357
-
358
- if (k && (k == options.showGridKey) && !sticky) {
359
- overlay.hide();
360
- overlayOn = false;
361
- }
362
-
363
- return true;
364
- }
365
-
366
- /**
367
- * Cookie functions
368
- *
369
- * By Peter-Paul Koch:
370
- * http://www.quirksmode.org/js/cookies.html
371
- */
372
- function createCookie(name, value, days) {
373
- var date,
374
- expires = "";
375
-
376
- if (days) {
377
- date = new Date();
378
- date.setTime( date.getTime() + (days*24*60*60*1000) );
379
- expires = "; expires=" + date.toGMTString();
380
- }
381
-
382
- document.cookie = name + "=" + value + expires + "; path=/";
383
- }
384
-
385
- function readCookie(name) {
386
- var c,
387
- ca = document.cookie.split(';'),
388
- i = 0,
389
- len = ca.length,
390
- nameEQ = name + "=";
391
-
392
- for (; i < len; i++) {
393
- c = ca[i];
394
-
395
- while (c.charAt(0) == ' ') {
396
- c = c.substring(1, c.length);
397
- }
398
-
399
- if (c.indexOf(nameEQ) == 0) {
400
- return c.substring(nameEQ.length, c.length);
401
- }
402
- }
403
- return null;
404
- }
405
-
406
- function eraseCookie(name) {
407
- createCookie(name, "", -1);
408
- }
409
-
410
- /**
411
- * Forces a repaint (because WebKit has issues)
412
- * http://www.sitepoint.com/forums/showthread.php?p=4538763
413
- * http://www.phpied.com/the-new-game-show-will-it-reflow/
414
- */
415
- function forceRepaint() {
416
- var ss = document.styleSheets[0];
417
- try {
418
- ss.addRule('.xxxxxx', 'position: relative');
419
- ss.removeRule(ss.rules.length - 1);
420
- } catch(e) {}
421
- }
422
-
423
- return {};
424
- };
@@ -1,49 +0,0 @@
1
- # = require spans/hashgrid
2
-
3
- class spans.Helper
4
- constructor: (options) -> @grid = new spans.hashgrid(options)
5
-
6
- class spans.Flexgrid
7
- constructor: (@sampleFontSize, @sampleAtomWidth, @sampleAtomHeight, @modulesXCount, @modulesYCount) ->
8
- @ratio = (@modulesYCount * @sampleAtomHeight) / (@modulesXCount * @sampleAtomWidth)
9
- @heightToFontSize = (@modulesYCount * @sampleAtomHeight) / @sampleFontSize
10
- $(window).resize @newFontSize
11
- @newFontSize()
12
-
13
- newFontSize: =>
14
- min = Math.min($(window).innerHeight(), $(window).innerWidth() * @ratio)
15
- fontSize = min / @heightToFontSize
16
- $('body').css(fontSize: "#{fontSize}px")
17
-
18
-
19
- # new spans.ToWidthFitter(16 / 1024)
20
- class spans.ToWidthFitter
21
- constructor: (@sampleFontToSampleWidth) ->
22
- $(window).resize @newFontSize
23
- @newFontSize()
24
-
25
- newFontSize: =>
26
-
27
- console.log($(window).innerHeight() * @sampleFontToSampleWidth)
28
- $('html').css(fontSize: "#{$(window).innerWidth() * @sampleFontToSampleWidth}px")
29
-
30
- # new spans.ToHeightFitter(16 / 768)
31
- class spans.ToHeightFitter
32
- constructor: (@sampleFontToSampleHeight) ->
33
- $(window).resize @newFontSize
34
- @newFontSize()
35
-
36
- newFontSize: =>
37
- $('html').css(fontSize: "#{$(window).innerHeight() * @sampleFontToSampleHeight}px")
38
-
39
-
40
- # new spans.ToWindowFitter(16 / 768, 1024 / 768)
41
- class spans.ToWindowFitter
42
- constructor: (@sampleFontToSampleHeight, @sampleWidthToSampleHeight) ->
43
- $(window).resize @newFontSize
44
- @newFontSize()
45
-
46
- newFontSize: =>
47
- min = Math.min($(window).innerHeight(), $(window).innerWidth() / @sampleWidthToSampleHeight)
48
- fontSize = min * @sampleFontToSampleHeight
49
- $('html').css(fontSize: "#{fontSize}px")
@@ -1,25 +0,0 @@
1
- // based on http://hashgrid.com/
2
-
3
- #grid {
4
- width: modules-x($modules-x-count);
5
- position: absolute;
6
- top: 0;
7
- left: 0;
8
- overflow: hidden;
9
-
10
- .vert-container {
11
- @extend .spans;
12
- }
13
- .vert{
14
- @extend .span1;
15
- box-sizing: border-box;
16
- background: rgba(255, 0, 0, 0.1);
17
- }
18
-
19
- .horiz{
20
- height: y(1);
21
- box-sizing: border-box;
22
- background: rgba(255, 0, 0, 0.1);
23
- margin-bottom: y(1);
24
- }
25
- }
@@ -1,47 +0,0 @@
1
- @import 'inline-blocks';
2
-
3
- @function x($t: 1) { @return $atom-x * $t; }
4
- @function y($t: 1) { @return $atom-y * $t; }
5
- @function gutter-x($t: 1) { @return $gutter-x * $t; }
6
- @function gutter-y($t: 1) { @return $gutter-y * $t; }
7
- @function modules-x($m) { @return x($module-width * $m) + gutter-x($m - 1); }
8
- @function modules-y($m) { @return y($module-height * $m) + gutter-y($m - 1); }
9
- @function modules-gap-x($m) { @return modules-x($m) + gutter-x(1); }
10
- @function modules-gap-y($m) { @return modules-y($m) + gutter-y(1); }
11
- @function full-page-width() { @return modules-x($modules-x-count) }
12
-
13
- @mixin spans {
14
- @include inline-blocks;
15
- margin-right: -1 * gutter-x(1);
16
-
17
- & > * {
18
- @include inline-block;
19
- margin-right: gutter-x(1);
20
- }
21
- }
22
-
23
- @mixin size-scale($times) {
24
- $atom-y: $atom-y / $times;
25
- $atom-x: $atom-x / $times;
26
- @content;
27
- $atom-y: $atom-y * $times;
28
- $atom-x: $atom-x * $times;
29
- }
30
-
31
- // deprecated
32
- @mixin flex-grid-scale($times) {
33
- font-size: #{$times}em;
34
- @include size-scale { @content; }
35
- }
36
-
37
- .spans { @include spans; }
38
-
39
- @for $i from 1 through $modules-x-count {
40
- .spans .span#{$i} { width: modules-x($i); }
41
- }
42
-
43
- @for $i from 1 through $modules-x-count {
44
- .spans .gap#{$i} { padding-left: modules-gap-x($i); }
45
- }
46
-
47
- @import 'spans/grid';