toolkit 0.3.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,7 @@
1
1
  require 'compass'
2
2
  require 'singularitygs'
3
3
  require 'sassy-strings'
4
+ require 'color-schemer'
4
5
 
5
6
  extension_path = File.expand_path(File.join(File.dirname(__FILE__), ".."))
6
7
  Compass::Frameworks.register('toolkit', :path => extension_path)
@@ -3,6 +3,16 @@
3
3
  ////////////////////////
4
4
  @import 'compass';
5
5
 
6
+ //////////////////////////////
7
+ // Compass Extension Imports
8
+ //////////////////////////////
9
+ @import 'color-schemer';
10
+
11
+ ////////////////////////
12
+ // Import Border Box Awesomesauce
13
+ ////////////////////////
14
+ @import 'toolkit/box-sizing';
15
+
6
16
  ////////////////////////
7
17
  // Import Intrinsic Ratio
8
18
  ////////////////////////
@@ -3,6 +3,11 @@
3
3
  ////////////////////////
4
4
  @import 'compass';
5
5
 
6
+ //////////////////////////////
7
+ // Compass Extension Imports
8
+ //////////////////////////////
9
+ @import 'color-schemer';
10
+
6
11
  ////////////////////////
7
12
  // Import Border Box Awesomesauce
8
13
  ////////////////////////
@@ -1,10 +1,6 @@
1
- ////////////////////////
2
- // Cheat at CSS
3
- //
4
- // Applies a natural box layout model to all elements.
5
- // From http://paulirish.com/2012/box-sizing-border-box-ftw/
6
- ////////////////////////
7
- @import "compass/css3/box-sizing";
8
- *,
9
- *:after,
10
- *:before { @include box-sizing('border-box'); }
1
+ //////////////////////////////
2
+ // Box Sizing anda wesome Border Box!
3
+ //////////////////////////////
4
+ @import "box-sizing";
5
+
6
+ *, *:after, *:before { @include box-sizing('border-box'); }
@@ -0,0 +1,31 @@
1
+ @import "compass/css3/shared";
2
+
3
+ $legacy-support-for-ie6: true !default;
4
+ $legacy-support-for-ie7: true !default;
5
+
6
+ //////////////////////////////
7
+ // Updated Box Sizing mixin, allowing for behavior support
8
+ //////////////////////////////
9
+ @mixin box-sizing($bs) {
10
+ $bs: unquote($bs);
11
+ @include experimental(box-sizing, $bs,
12
+ -moz, -webkit, not -o, not -ms, not -khtml, official
13
+ );
14
+
15
+ @if $bs == 'border-box' {
16
+ @if $legacy-support-for-ie6 or $legacy-support-for-ie7 {
17
+ *behavior: stylesheet-url("../behaviors/box-sizing/boxsizing.php");
18
+ }
19
+ }
20
+ @else {
21
+ *behavior: none;
22
+ }
23
+ }
24
+
25
+ %border-box {
26
+ @include box-sizing('border-box');
27
+ }
28
+
29
+ %content-box {
30
+ @include box-sizing('content-box');
31
+ }
@@ -146,14 +146,14 @@ $replace-text-inline-element: false !default;
146
146
  // like I would like to or you would do by hand. This sucks, but it's the
147
147
  // only way to get it to work for now.
148
148
  //////////////////////////////
149
- @media (-webkit-max-device-pixel-ratio: 1.4), (max--moz-device-pixel-ratio: 1.4), (-o-max-device-pixel-ratio: 7/5), (min-resolution: 1.4dppx), (min-resolution: 134.4dpi) {
149
+ @media (max-resolution: 1.4dppx), (-webkit-max-device-pixel-ratio: 1.4), (max--moz-device-pixel-ratio: 1.4), (max-resolution: 134.4dpi) {
150
150
  background: {
151
151
  image: $sprite-map;
152
152
  repeat: no-repeat;
153
153
  }
154
154
  @include sprite($sprite-map, $sprite);
155
155
  }
156
- @media (-webkit-max-device-pixel-ratio: 1.5), (max--moz-device-pixel-ratio: 1.5), (-o-max-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx), (min-resolution: 144dpi) {
156
+ @media (min-resolution: 1.5dppx), (-webkit-max-device-pixel-ratio: 1.5), (max--moz-device-pixel-ratio: 1.5), (min-resolution: 144dpi) {
157
157
  background: {
158
158
  image: $retina-map;
159
159
  repeat: no-repeat;
@@ -40,30 +40,24 @@
40
40
  @mixin style-external-links($base-url: false, $scheme: 'all') {
41
41
  @if $base-url {
42
42
  @if $scheme == 'plain' {
43
- a[href^="http://#{$base-url}"],
44
- a[href^="http://www.#{$base-url}"] {
43
+ a[href^="http://"][href*="#{$base-url}"] {
45
44
  @content;
46
45
  }
47
46
  }
48
47
  @else if $scheme == 'secure' {
49
- a[href^="https://#{$base-url}"],
50
- a[href^="https://www.#{$base-url}"] {
48
+ a[href^="https://"][href*="#{$base-url}"] {
51
49
  @content;
52
50
  }
53
51
  }
54
52
  @else if $scheme == 'all' {
55
- a[href^="http://#{$base-url}"],
56
- a[href^="http://www.#{$base-url}"],
57
- a[href^="https://#{$base-url}"],
58
- a[href^="https://www.#{$base-url}"] {
53
+ a[href^="http"][href*="#{$base-url}"] {
59
54
  @content;
60
55
  }
61
56
  }
62
57
  }
63
58
  @else {
64
59
  @if $scheme == 'all' {
65
- a[href^="http://"],
66
- a[href^="https://"] {
60
+ a[href^="http"] {
67
61
  @content;
68
62
  }
69
63
  }
@@ -80,7 +74,7 @@
80
74
  }
81
75
  }
82
76
 
83
- $legacy-support-for-ie: true !default;
77
+ $legacy-support-for-ie: $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 !default;
84
78
 
85
79
  //////////////////////////////
86
80
  // Syle Internal Links
@@ -0,0 +1,399 @@
1
+ /**
2
+ * box-sizing Polyfill
3
+ *
4
+ * A polyfill for box-sizing: border-box for IE6 & IE7.
5
+ *
6
+ * JScript
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU Lesser General Public License as published
10
+ * by the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ * GNU Lesser General Public License for more details.
17
+ *
18
+ * See <http://www.gnu.org/licenses/lgpl-3.0.txt>
19
+ *
20
+ * @category JScript
21
+ * @package box-sizing-polyfill
22
+ * @author Christian Schepp Schaefer <schaepp@gmx.de> <http://twitter.com/derSchepp>
23
+ * @copyright 2012 Christian Schepp Schaefer
24
+ * @license http://www.gnu.org/copyleft/lesser.html The GNU LESSER GENERAL PUBLIC LICENSE, Version 3.0
25
+ * @link http://github.com/Schepp/box-sizing-polyfill
26
+ *
27
+ * PREFACE:
28
+ *
29
+ * This box-sizing polyfill is based on previous work done by Erik Arvidsson,
30
+ * which he published in 2002 on http://webfx.eae.net/dhtml/boxsizing/boxsizing.html.
31
+ *
32
+ * USAGE:
33
+ *
34
+ * Add the behavior/HTC after every `box-sizing: border-box;` that you assign:
35
+ *
36
+ * box-sizing: border-box;
37
+ * *behavior: url(/scripts/boxsizing.htc);`
38
+ *
39
+ * Prefix the `behavior` property with a star, like seen above, so it will only be seen by
40
+ * IE6 & IE7, not by IE8+ who already implement box-sizing.
41
+ *
42
+ * The URL to the HTC file must be relative to your HTML(!) document, not relative to your CSS.
43
+ * That's why I'd advise you to use absolute paths like in the example.
44
+ *
45
+ */
46
+ <component lightWeight="true">
47
+ <attach event="onpropertychange" onevent="checkPropertyChange()" />
48
+ <attach event="ondetach" onevent="restore()" />
49
+ <attach event="onresize" for="window" onevent="update()" />
50
+ <script type="text/javascript">
51
+ //<![CDATA[
52
+
53
+ var viewportwidth = (typeof window.innerWidth != 'undefined' ? window.innerWidth : element.document.documentElement.clientWidth);
54
+
55
+ // Shortcut for the document object
56
+ var doc = element.document;
57
+
58
+ // Buffer for multiple resize events
59
+ var resizetimeout = null;
60
+
61
+ // Don't apply box-sizing to certain elements
62
+ var apply = false;
63
+ switch(element.nodeName){
64
+ case '#comment':
65
+ case 'HTML':
66
+ case 'HEAD':
67
+ case 'TITLE':
68
+ case 'SCRIPT':
69
+ case 'STYLE':
70
+ case 'LINK':
71
+ case 'META':
72
+ break;
73
+
74
+ default:
75
+ apply = true;
76
+ break;
77
+ }
78
+
79
+ /*
80
+ * update gets called during resize events, then waits until there are no further resize events, and finally triggers a recalculation
81
+ */
82
+ function update(){
83
+ if(resizetimeout !== null){
84
+ window.clearTimeout(resizetimeout);
85
+ }
86
+ resizetimeout = window.setTimeout(function(){
87
+ restore();
88
+ init();
89
+ resizetimeout = null;
90
+ },100);
91
+ }
92
+
93
+ /*
94
+ * restore gets called when the behavior is being detached (see event binding at the top),
95
+ * resets everything like it was before applying the behavior
96
+ */
97
+ function restore(){
98
+ if(apply){
99
+ element.runtimeStyle.removeAttribute("width");
100
+ element.runtimeStyle.removeAttribute("height");
101
+ }
102
+ }
103
+
104
+ /*
105
+ * init gets called once at the start and then never again,
106
+ * triggers box-sizing calculations and updates width and height
107
+ */
108
+ function init(){
109
+ if(apply){
110
+ updateBorderBoxWidth();
111
+ updateBorderBoxHeight();
112
+ }
113
+ }
114
+
115
+ /*
116
+ * checkPropertyChange gets called as soon as an element property changes
117
+ * (see event binding at the top), it then checks if any property influencing its
118
+ * dimensions was changed and if yes recalculates width and height
119
+ */
120
+ function checkPropertyChange(){
121
+ if(apply){
122
+ var pn = event.propertyName;
123
+ if(pn === "style.boxSizing" && element.style.boxSizing === ""){
124
+ element.style.removeAttribute("boxSizing");
125
+ element.runtimeStyle.removeAttribute("boxSizing");
126
+ element.runtimeStyle.removeAttribute("width");
127
+ element.runtimeStyle.removeAttribute("height");
128
+ }
129
+ switch (pn){
130
+ case "style.width":
131
+ case "style.borderLeftWidth":
132
+ case "style.borderLeftStyle":
133
+ case "style.borderRightWidth":
134
+ case "style.borderRightStyle":
135
+ case "style.paddingLeft":
136
+ case "style.paddingRight":
137
+ updateBorderBoxWidth();
138
+ break;
139
+
140
+ case "style.height":
141
+ case "style.borderTopWidth":
142
+ case "style.borderTopStyle":
143
+ case "style.borderBottomWidth":
144
+ case "style.borderBottomStyle":
145
+ case "style.paddingTop":
146
+ case "style.paddingBottom":
147
+ updateBorderBoxHeight();
148
+ break;
149
+
150
+ case "className":
151
+ case "style.boxSizing":
152
+ updateBorderBoxWidth();
153
+ updateBorderBoxHeight();
154
+ break;
155
+ }
156
+ }
157
+ }
158
+
159
+ /*
160
+ * Helper function, taken from Dean Edward's IE7 framework,
161
+ * added by Schepp on 12.06.2010.
162
+ * http://code.google.com/p/ie7-js/
163
+ *
164
+ * Allows us to convert from relative to pixel-values.
165
+ */
166
+ function getPixelValue(value){
167
+ var PIXEL = /^\d+(px)?$/i;
168
+ if (PIXEL.test(value)) return parseInt(value);
169
+ var style = element.style.left;
170
+ var runtimeStyle = element.runtimeStyle.left;
171
+ element.runtimeStyle.left = element.currentStyle.left;
172
+ element.style.left = value || 0;
173
+ value = parseInt(element.style.pixelLeft);
174
+ element.style.left = style;
175
+ element.runtimeStyle.left = runtimeStyle;
176
+
177
+ return value;
178
+ }
179
+
180
+ function getPixelWidth(object, value){
181
+ // For Pixel Values
182
+ var PIXEL = /^\d+(px)?$/i;
183
+ if (PIXEL.test(value)) return parseInt(value);
184
+
185
+ // For Percentage Values
186
+ var PERCENT = /^[\d\.]+%$/i;
187
+ if (PERCENT.test(value)){
188
+ try{
189
+ parentWidth = getPixelWidth(object.parentElement,(object.parentElement.currentStyle.width != "auto" ? object.parentElement.currentStyle.width : "100%"));
190
+ value = (parseFloat(value) / 100) * parentWidth;
191
+ }
192
+ catch(e){
193
+ value = (parseFloat(value) / 100) * element.document.documentElement.clientWidth;
194
+ }
195
+ return parseInt(value);
196
+ }
197
+
198
+ // For EM Values
199
+ var style = object.style.left;
200
+ var runtimeStyle = object.runtimeStyle.left;
201
+ object.runtimeStyle.left = object.currentStyle.left;
202
+ object.style.left = value || 0;
203
+ value = parseInt(object.style.pixelLeft);
204
+ object.style.left = style;
205
+ object.runtimeStyle.left = runtimeStyle;
206
+
207
+ return value;
208
+ }
209
+
210
+ function getPixelHeight(object, value){
211
+ // For Pixel Values
212
+ var PIXEL = /^\d+(px)?$/i;
213
+ if (PIXEL.test(value)) return parseInt(value);
214
+
215
+ // For Percentage Values
216
+ var PERCENT = /^[\d\.]+%$/i;
217
+ if (PERCENT.test(value)){
218
+ try{
219
+ if(object.parentElement.currentStyle.height != "auto"){
220
+ switch(object.parentElement.nodeName){
221
+ default:
222
+ parentHeight = getPixelHeight(object.parentElement,object.parentElement.currentStyle.height);
223
+ if(parentHeight !== "auto"){
224
+ value = (parseFloat(value) / 100) * parentHeight;
225
+ }
226
+ else {
227
+ value = "auto";
228
+ }
229
+ break;
230
+
231
+ case 'HTML':
232
+ parentHeight = element.document.documentElement.clientHeight;
233
+ if(parentHeight !== "auto"){
234
+ value = (parseFloat(value) / 100) * parentHeight;
235
+ }
236
+ else {
237
+ value = "auto";
238
+ }
239
+ break;
240
+ }
241
+ if(value !== "auto") value = parseInt(value);
242
+ }
243
+ else {
244
+ value = "auto";
245
+ }
246
+ }
247
+ catch(e){
248
+ value = "auto";
249
+ }
250
+ return value;
251
+ }
252
+
253
+ // For EM Values
254
+ var style = object.style.left;
255
+ var runtimeStyle = object.runtimeStyle.left;
256
+ object.runtimeStyle.left = object.currentStyle.left;
257
+ object.style.left = value || 0;
258
+ value = parseInt(object.style.pixelLeft);
259
+ object.style.left = style;
260
+ object.runtimeStyle.left = runtimeStyle;
261
+
262
+ return value;
263
+ }
264
+
265
+
266
+ /*
267
+ * getBorderWidth & friends
268
+ * Border width getters
269
+ */
270
+ function getBorderWidth(sSide){
271
+ if(element.currentStyle["border" + sSide + "Style"] == "none"){
272
+ return 0;
273
+ }
274
+ var n = getPixelValue(element.currentStyle["border" + sSide + "Width"]);
275
+ return n || 0;
276
+ }
277
+ function getBorderLeftWidth() { return getBorderWidth("Left"); }
278
+ function getBorderRightWidth() { return getBorderWidth("Right"); }
279
+ function getBorderTopWidth() { return getBorderWidth("Top"); }
280
+ function getBorderBottomWidth() { return getBorderWidth("Bottom"); }
281
+
282
+
283
+ /*
284
+ * getPadding & friends
285
+ * Padding width getters
286
+ */
287
+ function getPadding(sSide) {
288
+ var n = getPixelValue(element.currentStyle["padding" + sSide]);
289
+ return n || 0;
290
+ }
291
+ function getPaddingLeft() { return getPadding("Left"); }
292
+ function getPaddingRight() { return getPadding("Right"); }
293
+ function getPaddingTop() { return getPadding("Top"); }
294
+ function getPaddingBottom() { return getPadding("Bottom"); }
295
+
296
+
297
+
298
+ /*
299
+ * getBoxSizing
300
+ * Get the box-sizing value for the current element
301
+ */
302
+ function getBoxSizing(){
303
+ var s = element.style;
304
+ var cs = element.currentStyle
305
+ if(typeof s.boxSizing != "undefined" && s.boxSizing != ""){
306
+ return s.boxSizing;
307
+ }
308
+ if(typeof s["box-sizing"] != "undefined" && s["box-sizing"] != ""){
309
+ return s["box-sizing"];
310
+ }
311
+ if(typeof cs.boxSizing != "undefined" && cs.boxSizing != ""){
312
+ return cs.boxSizing;
313
+ }
314
+ if(typeof cs["box-sizing"] != "undefined" && cs["box-sizing"] != ""){
315
+ return cs["box-sizing"];
316
+ }
317
+ return getDocumentBoxSizing();
318
+ }
319
+
320
+
321
+ /*
322
+ * getDocumentBoxSizing
323
+ * Get the default document box sizing (check for quirks mode)
324
+ */
325
+ function getDocumentBoxSizing(){
326
+ if(doc.compatMode === null || doc.compatMode === "BackCompat"){
327
+ return "border-box";
328
+ }
329
+ return "content-box"
330
+ }
331
+
332
+
333
+ /*
334
+ * setBorderBoxWidth & friends
335
+ * Width and height setters
336
+ */
337
+ function setBorderBoxWidth(n){
338
+ element.runtimeStyle.width = Math.max(0, n - getBorderLeftWidth() -
339
+ getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
340
+ }
341
+ function setBorderBoxHeight(n){
342
+ element.runtimeStyle.height = Math.max(0, n - getBorderTopWidth() -
343
+ getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
344
+ }
345
+ function setContentBoxWidth(n){
346
+ element.runtimeStyle.width = Math.max(0, n + getBorderLeftWidth() +
347
+ getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
348
+ }
349
+ function setContentBoxHeight(n){
350
+ element.runtimeStyle.height = Math.max(0, n + getBorderTopWidth() +
351
+ getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
352
+ }
353
+
354
+
355
+ /*
356
+ * updateBorderBoxWidth & updateBorderBoxHeight
357
+ *
358
+ */
359
+ function updateBorderBoxWidth() {
360
+ if(getDocumentBoxSizing() == getBoxSizing()){
361
+ return;
362
+ }
363
+ var csw = element.currentStyle.width;
364
+ if(csw != "auto"){
365
+ csw = getPixelWidth(element,csw);
366
+ if(getBoxSizing() == "border-box"){
367
+ setBorderBoxWidth(parseInt(csw));
368
+ }
369
+ else{
370
+ setContentBoxWidth(parseInt(csw));
371
+ }
372
+ }
373
+ }
374
+
375
+ function updateBorderBoxHeight() {
376
+ if(getDocumentBoxSizing() == getBoxSizing()){
377
+ return;
378
+ }
379
+ var csh = element.currentStyle.height;
380
+ if(csh != "auto"){
381
+ csh = getPixelHeight(element,csh);
382
+ if(csh !== "auto"){
383
+ if(getBoxSizing() == "border-box"){
384
+ setBorderBoxHeight(parseInt(csh));
385
+ }
386
+ else{
387
+ setContentBoxHeight(parseInt(csh));
388
+ }
389
+ }
390
+ }
391
+ }
392
+
393
+
394
+ // Run the calculations
395
+ init();
396
+
397
+ //]]>
398
+ </script>
399
+ </component>
@@ -0,0 +1,23 @@
1
+ <?php
2
+ /*
3
+ This file is a wrapper, for use in PHP environments, which serves boxsizing.htc using the
4
+ correct content-type, so that IE will recognize it as a behavior. Simply specify the
5
+ behavior property to fetch this .php file instead of the .htc directly:
6
+
7
+ //
8
+ // Reset box sizing
9
+ //
10
+ * {
11
+ margin: 0;
12
+ @include box-sizing(border-box);
13
+ *behavior: url(/sites/all/libraries/boxsizing/boxsizing.php);
14
+ }
15
+
16
+ This is only necessary when the web server is not configured to serve .htc files with
17
+ the text/x-component content-type, and cannot easily be configured to do so (as is the
18
+ case with some shared hosting providers).
19
+ */
20
+
21
+ header( 'Content-type: text/x-component' );
22
+ include( 'boxsizing.htc' );
23
+ ?>
@@ -0,0 +1,4 @@
1
+ description "Box Sizing Polyfill Install"
2
+
3
+ file 'behaviors/box-sizing/boxsizing.htc'
4
+ file 'behaviors/box-sizing/boxsizing.php'
metadata CHANGED
@@ -3,10 +3,10 @@ name: toolkit
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
- - 0
7
- - 3
8
6
  - 1
9
- version: 0.3.1
7
+ - 0
8
+ - 0
9
+ version: 1.0.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sam Richard
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-04-11 00:00:00 +01:00
19
+ date: 2013-04-11 00:00:00 -04:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -74,6 +74,20 @@ dependencies:
74
74
  version: "0.1"
75
75
  type: :runtime
76
76
  version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: color-schemer
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ segments:
85
+ - 0
86
+ - 2
87
+ - 3
88
+ version: 0.2.3
89
+ type: :runtime
90
+ version_requirements: *id005
77
91
  description: Toolkit for Progressive Enhancement and Responsive Web Design
78
92
  email:
79
93
  - sam@snug.ug
@@ -90,6 +104,7 @@ files:
90
104
  - stylesheets/_toolkit-no-css.scss
91
105
  - stylesheets/_toolkit.scss
92
106
  - stylesheets/toolkit/_border-box.scss
107
+ - stylesheets/toolkit/_box-sizing.scss
93
108
  - stylesheets/toolkit/_children-of-ie.scss
94
109
  - stylesheets/toolkit/_clearfix.scss
95
110
  - stylesheets/toolkit/_colours.scss
@@ -100,6 +115,9 @@ files:
100
115
  - stylesheets/toolkit/_selectors.scss
101
116
  - stylesheets/toolkit/_triangle.scss
102
117
  - stylesheets/toolkit/_vertical-center.scss
118
+ - templates/box-sizing/behaviors/box-sizing/boxsizing.htc
119
+ - templates/box-sizing/behaviors/box-sizing/boxsizing.php
120
+ - templates/box-sizing/manifest.rb
103
121
  - templates/project/_base.scss
104
122
  - templates/project/manifest.rb
105
123
  - templates/rwd/_base.scss