kanpachi 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/bower.json +1 -0
  4. data/kanpachi.gemspec +1 -1
  5. data/lib/kanpachi/doc/template/components/bootstrap/.bower.json +34 -0
  6. data/lib/kanpachi/doc/template/components/bootstrap/Gruntfile.js +421 -0
  7. data/lib/kanpachi/doc/template/components/bootstrap/LICENSE +21 -0
  8. data/lib/kanpachi/doc/template/components/bootstrap/README.md +173 -0
  9. data/lib/kanpachi/doc/template/components/bootstrap/bower.json +24 -0
  10. data/lib/kanpachi/doc/template/{source/stylesheets → components/bootstrap/dist/css}/bootstrap-theme.css +0 -0
  11. data/lib/kanpachi/doc/template/{source/stylesheets → components/bootstrap/dist/css}/bootstrap-theme.css.map +0 -0
  12. data/lib/kanpachi/doc/template/{source/stylesheets → components/bootstrap/dist/css}/bootstrap-theme.min.css +0 -0
  13. data/lib/kanpachi/doc/template/{source/stylesheets → components/bootstrap/dist/css}/bootstrap.css +0 -0
  14. data/lib/kanpachi/doc/template/{source/stylesheets → components/bootstrap/dist/css}/bootstrap.css.map +0 -0
  15. data/lib/kanpachi/doc/template/{source/stylesheets → components/bootstrap/dist/css}/bootstrap.min.css +0 -0
  16. data/lib/kanpachi/doc/template/components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  17. data/lib/kanpachi/doc/template/components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +229 -0
  18. data/lib/kanpachi/doc/template/components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  19. data/lib/kanpachi/doc/template/components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  20. data/lib/kanpachi/doc/template/{source/javascripts → components/bootstrap/dist/js}/bootstrap.js +0 -0
  21. data/lib/kanpachi/doc/template/{source/javascripts → components/bootstrap/dist/js}/bootstrap.min.js +0 -0
  22. data/lib/kanpachi/doc/template/components/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  23. data/lib/kanpachi/doc/template/components/bootstrap/fonts/glyphicons-halflings-regular.svg +229 -0
  24. data/lib/kanpachi/doc/template/components/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  25. data/lib/kanpachi/doc/template/components/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  26. data/lib/kanpachi/doc/template/components/bootstrap/grunt/bs-glyphicons-data-generator.js +34 -0
  27. data/lib/kanpachi/doc/template/components/bootstrap/grunt/bs-lessdoc-parser.js +236 -0
  28. data/lib/kanpachi/doc/template/components/bootstrap/grunt/bs-raw-files-generator.js +31 -0
  29. data/lib/kanpachi/doc/template/components/bootstrap/grunt/shrinkwrap.js +28 -0
  30. data/lib/kanpachi/doc/template/components/bootstrap/js/affix.js +137 -0
  31. data/lib/kanpachi/doc/template/components/bootstrap/js/alert.js +88 -0
  32. data/lib/kanpachi/doc/template/components/bootstrap/js/button.js +107 -0
  33. data/lib/kanpachi/doc/template/components/bootstrap/js/carousel.js +205 -0
  34. data/lib/kanpachi/doc/template/components/bootstrap/js/collapse.js +170 -0
  35. data/lib/kanpachi/doc/template/components/bootstrap/js/dropdown.js +147 -0
  36. data/lib/kanpachi/doc/template/components/bootstrap/js/modal.js +243 -0
  37. data/lib/kanpachi/doc/template/components/bootstrap/js/popover.js +110 -0
  38. data/lib/kanpachi/doc/template/components/bootstrap/js/scrollspy.js +153 -0
  39. data/lib/kanpachi/doc/template/components/bootstrap/js/tab.js +125 -0
  40. data/lib/kanpachi/doc/template/components/bootstrap/js/tooltip.js +399 -0
  41. data/lib/kanpachi/doc/template/components/bootstrap/js/transition.js +48 -0
  42. data/lib/kanpachi/doc/template/components/bootstrap/less/alerts.less +67 -0
  43. data/lib/kanpachi/doc/template/components/bootstrap/less/badges.less +55 -0
  44. data/lib/kanpachi/doc/template/components/bootstrap/less/bootstrap.less +49 -0
  45. data/lib/kanpachi/doc/template/components/bootstrap/less/breadcrumbs.less +26 -0
  46. data/lib/kanpachi/doc/template/components/bootstrap/less/button-groups.less +226 -0
  47. data/lib/kanpachi/doc/template/components/bootstrap/less/buttons.less +159 -0
  48. data/lib/kanpachi/doc/template/components/bootstrap/less/carousel.less +232 -0
  49. data/lib/kanpachi/doc/template/components/bootstrap/less/close.less +33 -0
  50. data/lib/kanpachi/doc/template/components/bootstrap/less/code.less +63 -0
  51. data/lib/kanpachi/doc/template/components/bootstrap/less/component-animations.less +29 -0
  52. data/lib/kanpachi/doc/template/components/bootstrap/less/dropdowns.less +213 -0
  53. data/lib/kanpachi/doc/template/components/bootstrap/less/forms.less +438 -0
  54. data/lib/kanpachi/doc/template/components/bootstrap/less/glyphicons.less +233 -0
  55. data/lib/kanpachi/doc/template/components/bootstrap/less/grid.less +84 -0
  56. data/lib/kanpachi/doc/template/components/bootstrap/less/input-groups.less +162 -0
  57. data/lib/kanpachi/doc/template/components/bootstrap/less/jumbotron.less +44 -0
  58. data/lib/kanpachi/doc/template/components/bootstrap/less/labels.less +64 -0
  59. data/lib/kanpachi/doc/template/components/bootstrap/less/list-group.less +110 -0
  60. data/lib/kanpachi/doc/template/components/bootstrap/less/media.less +56 -0
  61. data/lib/kanpachi/doc/template/components/bootstrap/less/mixins.less +929 -0
  62. data/lib/kanpachi/doc/template/components/bootstrap/less/modals.less +139 -0
  63. data/lib/kanpachi/doc/template/components/bootstrap/less/navbar.less +616 -0
  64. data/lib/kanpachi/doc/template/components/bootstrap/less/navs.less +242 -0
  65. data/lib/kanpachi/doc/template/components/bootstrap/less/normalize.less +423 -0
  66. data/lib/kanpachi/doc/template/components/bootstrap/less/pager.less +55 -0
  67. data/lib/kanpachi/doc/template/components/bootstrap/less/pagination.less +88 -0
  68. data/lib/kanpachi/doc/template/components/bootstrap/less/panels.less +241 -0
  69. data/lib/kanpachi/doc/template/components/bootstrap/less/popovers.less +133 -0
  70. data/lib/kanpachi/doc/template/components/bootstrap/less/print.less +101 -0
  71. data/lib/kanpachi/doc/template/components/bootstrap/less/progress-bars.less +80 -0
  72. data/lib/kanpachi/doc/template/components/bootstrap/less/responsive-utilities.less +92 -0
  73. data/lib/kanpachi/doc/template/components/bootstrap/less/scaffolding.less +134 -0
  74. data/lib/kanpachi/doc/template/components/bootstrap/less/tables.less +233 -0
  75. data/lib/kanpachi/doc/template/components/bootstrap/less/theme.less +247 -0
  76. data/lib/kanpachi/doc/template/components/bootstrap/less/thumbnails.less +36 -0
  77. data/lib/kanpachi/doc/template/components/bootstrap/less/tooltip.less +95 -0
  78. data/lib/kanpachi/doc/template/components/bootstrap/less/type.less +293 -0
  79. data/lib/kanpachi/doc/template/components/bootstrap/less/utilities.less +56 -0
  80. data/lib/kanpachi/doc/template/components/bootstrap/less/variables.less +829 -0
  81. data/lib/kanpachi/doc/template/components/bootstrap/less/wells.less +29 -0
  82. data/lib/kanpachi/doc/template/components/bootstrap/package.json +70 -0
  83. data/lib/kanpachi/doc/template/components/bootstrap/test-infra/README.md +100 -0
  84. data/lib/kanpachi/doc/template/components/bootstrap/test-infra/npm-shrinkwrap.canonical.json +1 -0
  85. data/lib/kanpachi/doc/template/components/bootstrap/test-infra/requirements.txt +1 -0
  86. data/lib/kanpachi/doc/template/components/bootstrap/test-infra/s3_cache.py +107 -0
  87. data/lib/kanpachi/doc/template/components/bootstrap/test-infra/sauce_browsers.yml +83 -0
  88. data/lib/kanpachi/doc/template/components/bootstrap/test-infra/uncached-npm-install.sh +4 -0
  89. data/lib/kanpachi/doc/template/components/html5shiv/.bower.json +6 -7
  90. data/lib/kanpachi/doc/template/components/html5shiv/Gruntfile.js +61 -0
  91. data/lib/kanpachi/doc/template/components/html5shiv/bower.json +15 -0
  92. data/lib/kanpachi/doc/template/components/html5shiv/dist/html5shiv-printshiv.js +498 -10
  93. data/lib/kanpachi/doc/template/components/html5shiv/dist/html5shiv-printshiv.min.js +4 -0
  94. data/lib/kanpachi/doc/template/components/html5shiv/dist/html5shiv.js +300 -7
  95. data/lib/kanpachi/doc/template/components/html5shiv/dist/html5shiv.min.js +4 -0
  96. data/lib/kanpachi/doc/template/components/html5shiv/package.json +16 -0
  97. data/lib/kanpachi/doc/template/components/html5shiv/readme.md +3 -3
  98. data/lib/kanpachi/doc/template/source/javascripts/all.coffee +1 -1
  99. data/lib/kanpachi/doc/template/source/layouts/layout.slim +1 -1
  100. data/lib/kanpachi/response.rb +13 -5
  101. data/lib/kanpachi/version.rb +1 -1
  102. metadata +93 -12
@@ -0,0 +1,29 @@
1
+ //
2
+ // Wells
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Base class
7
+ .well {
8
+ min-height: 20px;
9
+ padding: 19px;
10
+ margin-bottom: 20px;
11
+ background-color: @well-bg;
12
+ border: 1px solid @well-border;
13
+ border-radius: @border-radius-base;
14
+ .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
15
+ blockquote {
16
+ border-color: #ddd;
17
+ border-color: rgba(0,0,0,.15);
18
+ }
19
+ }
20
+
21
+ // Sizes
22
+ .well-lg {
23
+ padding: 24px;
24
+ border-radius: @border-radius-large;
25
+ }
26
+ .well-sm {
27
+ padding: 9px;
28
+ border-radius: @border-radius-small;
29
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "bootstrap",
3
+ "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development.",
4
+ "version": "3.1.1",
5
+ "keywords": [
6
+ "bootstrap",
7
+ "css"
8
+ ],
9
+ "homepage": "http://getbootstrap.com",
10
+ "author": "Twitter, Inc.",
11
+ "scripts": {
12
+ "test": "grunt test"
13
+ },
14
+ "style": "./dist/css/bootstrap.css",
15
+ "less": "./less/bootstrap.less",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/twbs/bootstrap.git"
19
+ },
20
+ "bugs": {
21
+ "url": "https://github.com/twbs/bootstrap/issues"
22
+ },
23
+ "license": {
24
+ "type": "MIT",
25
+ "url": "https://github.com/twbs/bootstrap/blob/master/LICENSE"
26
+ },
27
+ "devDependencies": {
28
+ "btoa": "~1.1.1",
29
+ "canonical-json": "~0.0.3",
30
+ "grunt": "~0.4.2",
31
+ "grunt-banner": "~0.2.0",
32
+ "grunt-contrib-clean": "~0.5.0",
33
+ "grunt-contrib-concat": "~0.3.0",
34
+ "grunt-contrib-connect": "~0.6.0",
35
+ "grunt-contrib-copy": "~0.5.0",
36
+ "grunt-contrib-csslint": "~0.2.0",
37
+ "grunt-contrib-cssmin": "~0.7.0",
38
+ "grunt-contrib-jade": "~0.9.1",
39
+ "grunt-contrib-jshint": "~0.8.0",
40
+ "grunt-contrib-less": "~0.9.0",
41
+ "grunt-contrib-qunit": "~0.4.0",
42
+ "grunt-contrib-uglify": "~0.3.0",
43
+ "grunt-contrib-watch": "~0.5.3",
44
+ "grunt-csscomb": "~2.0.1",
45
+ "grunt-exec": "0.4.3",
46
+ "grunt-html-validation": "~0.1.13",
47
+ "grunt-jekyll": "~0.4.1",
48
+ "grunt-jscs-checker": "~0.3.0",
49
+ "grunt-saucelabs": "~5.0.0",
50
+ "grunt-sed": "~0.1.1",
51
+ "load-grunt-tasks": "~0.3.0",
52
+ "markdown": "~0.5.0"
53
+ },
54
+ "jspm": {
55
+ "main": "js/bootstrap",
56
+ "directories": {
57
+ "example": "examples",
58
+ "lib": "dist"
59
+ },
60
+ "shim": {
61
+ "js/bootstrap": {
62
+ "imports": "jquery",
63
+ "exports": "$"
64
+ }
65
+ },
66
+ "buildConfig": {
67
+ "uglify": true
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,100 @@
1
+ ## What does `s3_cache.py` do?
2
+
3
+ ### In general
4
+ `s3_cache.py` maintains a cache, stored in an Amazon S3 (Simple Storage Service) bucket, of a given directory whose contents are considered non-critical and are completely & solely determined by (and should be able to be regenerated from) a single given file.
5
+
6
+ The SHA-256 hash of the single file is used as the key for the cache. The directory is stored as a gzipped tarball.
7
+
8
+ All the tarballs are stored in S3's Reduced Redundancy Storage (RRS) storage class, since this is cheaper and the data is non-critical.
9
+
10
+ `s3_cache.py` itself never deletes cache entries; deletion should either be done manually or using automatic S3 lifecycle rules on the bucket.
11
+
12
+ Similar to git, `s3_cache.py` makes the assumption that [SHA-256 will effectively never have a collision](http://stackoverflow.com/questions/4014090/is-it-safe-to-ignore-the-possibility-of-sha-collisions-in-practice).
13
+
14
+
15
+ ### For Bootstrap specifically
16
+ `s3_cache.py` is used to cache the npm packages that our Grunt tasks depend on and the RubyGems that Jekyll depends on. (Jekyll is needed to compile our docs to HTML so that we can run them thru an HTML5 validator.)
17
+
18
+ For npm, the `node_modules` directory is cached based on our `npm-shrinkwrap.canonical.json` file.
19
+
20
+ For RubyGems, the `gemdir` of the current RVM-selected Ruby is cached based on the `pseudo_Gemfile.lock` file generated by our Travis build script.
21
+ `pseudo_Gemfile.lock` contains the versions of Ruby and Jekyll that we're using (read our `.travis.yml` for details).
22
+
23
+
24
+ ## Why is `s3_cache.py` necessary?
25
+ `s3_cache.py` is used to speed up Bootstrap's Travis builds. Installing npm packages and RubyGems used to take up a significant fraction of our total build times. Also, at the time that `s3_cache.py` was written, npm was occasionally unreliable.
26
+
27
+ Travis does offer built-in caching on their paid plans, but this do-it-ourselves S3 solution is significantly cheaper since we only need caching and not Travis' other paid features.
28
+
29
+
30
+ ## Setup
31
+
32
+ ### Overview
33
+ 1. Create an Amazon Web Services (AWS) account.
34
+ 2. Create an Identity & Access Management (IAM) user, and note their credentials.
35
+ 3. Create an S3 bucket.
36
+ 4. Set permissions on the bucket to grant the user read+write access.
37
+ 5. Set the user credentials as secure Travis environment variables.
38
+
39
+ ### In detail
40
+ 1. Create an AWS account.
41
+ 2. Login to the [AWS Management Console](https://console.aws.amazon.com).
42
+ 3. Go to the IAM Management Console.
43
+ 4. Create a new user (named e.g. `travis-ci`) and generate an access key for them. Note both the Access Key ID and the Secret Access Key.
44
+ 5. Note the user's ARN (Amazon Resource Name), which can be found in the "Summary" tab of the user browser. This will be of the form: `arn:aws:iam::XXXXXXXXXXXXXX:user/the-username-goes-here`
45
+ 6. Note the user's access key, which can be found in the "Security Credentials" tab of the user browser.
46
+ 7. Go to the S3 Management Console.
47
+ 8. Create a new bucket. For a non-publicly-accessible bucket (like Bootstrap uses), it's recommended that the bucket name be random to increase security. On most *nix machines, you can easily generate a random UUID to use as the bucket name using Python:
48
+
49
+ ```bash
50
+ python -c "import uuid; print(uuid.uuid4())"
51
+ ```
52
+
53
+ 9. Determine and note what your bucket's ARN is. The ARN for an S3 bucket is of the form: `arn:aws:s3:::the-bucket-name-goes-here`
54
+ 10. In the bucket's Properties pane, in the "Permissions" section, click the "Edit bucket policy" button.
55
+ 11. Input and submit an IAM Policy that grants the user at least read+write rights to the bucket. AWS has a policy generator and some examples to help with crafting the policy. Here's the policy that Bootstrap uses, with the sensitive bits censored:
56
+
57
+ ```json
58
+ {
59
+ "Version": "2012-10-17",
60
+ "Id": "PolicyTravisReadWriteNoAdmin",
61
+ "Statement": [
62
+ {
63
+ "Sid": "StmtXXXXXXXXXXXXXX",
64
+ "Effect": "Allow",
65
+ "Principal": {
66
+ "AWS": "arn:aws:iam::XXXXXXXXXXXXXX:user/travis-ci"
67
+ },
68
+ "Action": [
69
+ "s3:AbortMultipartUpload",
70
+ "s3:GetObjectVersion",
71
+ "s3:ListBucket",
72
+ "s3:DeleteObject",
73
+ "s3:DeleteObjectVersion",
74
+ "s3:GetObject",
75
+ "s3:PutObject"
76
+ ],
77
+ "Resource": [
78
+ "arn:aws:s3:::XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
79
+ "arn:aws:s3:::XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/*"
80
+ ]
81
+ }
82
+ ]
83
+ }
84
+ ```
85
+
86
+ 12. If you want deletion from the cache to be done automatically based on age (like Bootstrap does): In the bucket's Properties pane, in the "Lifecycle" section, add a rule to expire/delete files based on creation date.
87
+ 13. Install the [`travis` RubyGem](https://github.com/travis-ci/travis): `gem install travis`
88
+ 14. Encrypt the environment variables:
89
+
90
+ ```bash
91
+ travis encrypt --repo twbs/bootstrap "AWS_ACCESS_KEY_ID=XXX"
92
+ travis encrypt --repo twbs/bootstrap "AWS_SECRET_ACCESS_KEY=XXX"
93
+ travis encrypt --repo twbs/bootstrap "TWBS_S3_BUCKET=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
94
+ ```
95
+
96
+ 14. Add the resulting secure environment variables to `.travis.yml`.
97
+
98
+
99
+ ## Usage
100
+ Read `s3_cache.py`'s source code and Bootstrap's `.travis.yml` for how to invoke and make use of `s3_cache.py`.
@@ -0,0 +1 @@
1
+ {"dependencies":{"btoa":{"from":"btoa@~1.1.1","version":"1.1.1"},"canonical-json":{"from":"canonical-json@~0.0.3","version":"0.0.4"},"grunt":{"dependencies":{"async":{"from":"async@~0.1.22","version":"0.1.22"},"coffee-script":{"from":"coffee-script@~1.3.3","version":"1.3.3"},"colors":{"from":"colors@~0.6.0","version":"0.6.2"},"dateformat":{"from":"dateformat@1.0.2-1.2.3","version":"1.0.2-1.2.3"},"eventemitter2":{"from":"eventemitter2@~0.4.13","version":"0.4.13"},"exit":{"from":"exit@~0.1.1","version":"0.1.2"},"findup-sync":{"dependencies":{"lodash":{"from":"lodash@~1.0.1","version":"1.0.1"}},"from":"findup-sync@~0.1.2","version":"0.1.2"},"getobject":{"from":"getobject@~0.1.0","version":"0.1.0"},"glob":{"dependencies":{"graceful-fs":{"from":"graceful-fs@~1.2.0","version":"1.2.3"},"inherits":{"from":"inherits@1","version":"1.0.0"}},"from":"glob@~3.1.21","version":"3.1.21"},"hooker":{"from":"hooker@~0.2.3","version":"0.2.3"},"iconv-lite":{"from":"iconv-lite@~0.2.11","version":"0.2.11"},"js-yaml":{"dependencies":{"argparse":{"dependencies":{"underscore":{"from":"underscore@1.4.x","version":"1.4.4"},"underscore.string":{"from":"underscore.string@~2.3.1","version":"2.3.3"}},"from":"argparse@~ 0.1.11","version":"0.1.15"},"esprima":{"from":"esprima@~ 1.0.2","version":"1.0.4"}},"from":"js-yaml@~2.0.5","version":"2.0.5"},"lodash":{"from":"lodash@~0.9.2","version":"0.9.2"},"minimatch":{"dependencies":{"lru-cache":{"from":"lru-cache@2","version":"2.5.0"},"sigmund":{"from":"sigmund@~1.0.0","version":"1.0.0"}},"from":"minimatch@~0.2.9","version":"0.2.14"},"nopt":{"dependencies":{"abbrev":{"from":"abbrev@1","version":"1.0.4"}},"from":"nopt@~1.0.10","version":"1.0.10"},"rimraf":{"dependencies":{"graceful-fs":{"from":"graceful-fs@~1.1","version":"1.1.14"}},"from":"rimraf@~2.0.3","version":"2.0.3"},"underscore.string":{"from":"underscore.string@~2.2.1","version":"2.2.1"},"which":{"from":"which@~1.0.5","version":"1.0.5"}},"from":"grunt@~0.4.2","version":"0.4.2"},"grunt-banner":{"from":"grunt-banner@~0.2.0","version":"0.2.0"},"grunt-contrib-clean":{"dependencies":{"rimraf":{"from":"rimraf@~2.2.1","version":"2.2.6"}},"from":"grunt-contrib-clean@~0.5.0","version":"0.5.0"},"grunt-contrib-concat":{"from":"grunt-contrib-concat@~0.3.0","version":"0.3.0"},"grunt-contrib-connect":{"dependencies":{"connect":{"dependencies":{"batch":{"from":"batch@0.5.0","version":"0.5.0"},"buffer-crc32":{"from":"buffer-crc32@0.2.1","version":"0.2.1"},"bytes":{"from":"bytes@0.2.1","version":"0.2.1"},"cookie":{"from":"cookie@0.1.0","version":"0.1.0"},"cookie-signature":{"from":"cookie-signature@1.0.1","version":"1.0.1"},"debug":{"from":"debug@>= 0.7.3 < 1","version":"0.7.4"},"fresh":{"from":"fresh@0.2.0","version":"0.2.0"},"methods":{"from":"methods@0.1.0","version":"0.1.0"},"multiparty":{"dependencies":{"readable-stream":{"dependencies":{"core-util-is":{"from":"core-util-is@~1.0.0","version":"1.0.1"},"debuglog":{"from":"debuglog@0.0.2","version":"0.0.2"}},"from":"readable-stream@~1.1.9","version":"1.1.10"},"stream-counter":{"from":"stream-counter@~0.2.0","version":"0.2.0"}},"from":"multiparty@2.2.0","version":"2.2.0"},"negotiator":{"from":"negotiator@0.3.0","version":"0.3.0"},"pause":{"from":"pause@0.0.1","version":"0.0.1"},"qs":{"from":"qs@0.6.6","version":"0.6.6"},"raw-body":{"from":"raw-body@1.1.2","version":"1.1.2"},"send":{"dependencies":{"mime":{"from":"mime@~1.2.9","version":"1.2.11"},"range-parser":{"from":"range-parser@0.0.4","version":"0.0.4"}},"from":"send@0.1.4","version":"0.1.4"},"uid2":{"from":"uid2@0.0.3","version":"0.0.3"}},"from":"connect@~2.12.0","version":"2.12.0"},"connect-livereload":{"from":"connect-livereload@~0.3.0","version":"0.3.2"},"open":{"from":"open@0.0.4","version":"0.0.4"}},"from":"grunt-contrib-connect@~0.6.0","version":"0.6.0"},"grunt-contrib-copy":{"from":"grunt-contrib-copy@~0.5.0","version":"0.5.0"},"grunt-contrib-csslint":{"dependencies":{"csslint":{"dependencies":{"parserlib":{"from":"parserlib@~0.2.2","version":"0.2.4"}},"from":"csslint@~0.10.0","version":"0.10.0"}},"from":"grunt-contrib-csslint@~0.2.0","version":"0.2.0"},"grunt-contrib-cssmin":{"dependencies":{"clean-css":{"dependencies":{"commander":{"from":"commander@2.0.x","version":"2.0.0"}},"from":"clean-css@~2.0.0","version":"2.0.8"},"grunt-lib-contrib":{"dependencies":{"zlib-browserify":{"from":"zlib-browserify@0.0.1","version":"0.0.1"}},"from":"grunt-lib-contrib@~0.6.0","version":"0.6.1"}},"from":"grunt-contrib-cssmin@~0.7.0","version":"0.7.0"},"grunt-contrib-jade":{"dependencies":{"grunt-lib-contrib":{"dependencies":{"zlib-browserify":{"from":"zlib-browserify@0.0.1","version":"0.0.1"}},"from":"grunt-lib-contrib@~0.6.1","version":"0.6.1"},"jade":{"dependencies":{"character-parser":{"from":"character-parser@1.2.0","version":"1.2.0"},"commander":{"from":"commander@2.0.0","version":"2.0.0"},"constantinople":{"dependencies":{"uglify-js":{"dependencies":{"async":{"from":"async@~0.2.6","version":"0.2.10"},"optimist":{"dependencies":{"wordwrap":{"from":"wordwrap@~0.0.2","version":"0.0.2"}},"from":"optimist@~0.3.5","version":"0.3.7"},"source-map":{"dependencies":{"amdefine":{"from":"amdefine@>=0.0.4","version":"0.1.0"}},"from":"source-map@~0.1.7","version":"0.1.31"},"uglify-to-browserify":{"from":"uglify-to-browserify@~1.0.0","version":"1.0.2"}},"from":"uglify-js@~2.4.0","version":"2.4.12"}},"from":"constantinople@~1.0.2","version":"1.0.2"},"mkdirp":{"from":"mkdirp@~0.3.5","version":"0.3.5"},"monocle":{"dependencies":{"readdirp":{"dependencies":{"minimatch":{"dependencies":{"lru-cache":{"from":"lru-cache@2","version":"2.5.0"},"sigmund":{"from":"sigmund@~1.0.0","version":"1.0.0"}},"from":"minimatch@>=0.2.4","version":"0.2.14"}},"from":"readdirp@~0.2.3","version":"0.2.5"}},"from":"monocle@1.1.50","version":"1.1.50"},"transformers":{"dependencies":{"css":{"dependencies":{"css-parse":{"from":"css-parse@1.0.4","version":"1.0.4"},"css-stringify":{"from":"css-stringify@1.0.5","version":"1.0.5"}},"from":"css@~1.0.8","version":"1.0.8"},"promise":{"dependencies":{"is-promise":{"from":"is-promise@~1","version":"1.0.0"}},"from":"promise@~2.0","version":"2.0.0"},"uglify-js":{"dependencies":{"optimist":{"dependencies":{"wordwrap":{"from":"wordwrap@~0.0.2","version":"0.0.2"}},"from":"optimist@~0.3.5","version":"0.3.7"},"source-map":{"dependencies":{"amdefine":{"from":"amdefine@>=0.0.4","version":"0.1.0"}},"from":"source-map@~0.1.7","version":"0.1.31"}},"from":"uglify-js@~2.2.5","version":"2.2.5"}},"from":"transformers@2.1.0","resolved":"https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz","version":"2.1.0"},"with":{"dependencies":{"uglify-js":{"dependencies":{"async":{"from":"async@~0.2.6","version":"0.2.10"},"optimist":{"dependencies":{"wordwrap":{"from":"wordwrap@~0.0.2","version":"0.0.2"}},"from":"optimist@~0.3.5","version":"0.3.7"},"source-map":{"dependencies":{"amdefine":{"from":"amdefine@>=0.0.4","version":"0.1.0"}},"from":"source-map@~0.1.7","version":"0.1.31"},"uglify-to-browserify":{"from":"uglify-to-browserify@~1.0.0","version":"1.0.2"}},"from":"uglify-js@2.4.0","version":"2.4.0"}},"from":"with@~2.0.0","version":"2.0.0"}},"from":"jade@~1.0.2","version":"1.0.2"},"lodash-node":{"from":"lodash-node@~2.4.1","version":"2.4.1"}},"from":"grunt-contrib-jade@~0.9.1","version":"0.9.1"},"grunt-contrib-jshint":{"dependencies":{"jshint":{"dependencies":{"cli":{"dependencies":{"glob":{"dependencies":{"inherits":{"from":"inherits@2","version":"2.0.1"}},"from":"glob@>= 3.1.4","version":"3.2.8"}},"from":"cli@0.4.x","version":"0.4.5"},"console-browserify":{"from":"console-browserify@0.1.x","version":"0.1.6"},"htmlparser2":{"dependencies":{"domelementtype":{"from":"domelementtype@1","version":"1.1.1"},"domhandler":{"from":"domhandler@2.1","version":"2.1.0"},"domutils":{"from":"domutils@1.1","version":"1.1.6"},"readable-stream":{"dependencies":{"string_decoder":{"from":"string_decoder@~0.10.x","version":"0.10.25"}},"from":"readable-stream@1.0","version":"1.0.25"}},"from":"htmlparser2@3.3.x","version":"3.3.0"},"minimatch":{"dependencies":{"lru-cache":{"from":"lru-cache@2","version":"2.5.0"},"sigmund":{"from":"sigmund@~1.0.0","version":"1.0.0"}},"from":"minimatch@0.x.x","version":"0.2.14"},"shelljs":{"from":"shelljs@0.1.x","version":"0.1.4"},"underscore":{"from":"underscore@1.4.x","version":"1.4.4"}},"from":"jshint@~2.4.0","version":"2.4.3"}},"from":"grunt-contrib-jshint@~0.8.0","version":"0.8.0"},"grunt-contrib-less":{"dependencies":{"chalk":{"dependencies":{"ansi-styles":{"from":"ansi-styles@~1.0.0","version":"1.0.0"},"has-color":{"from":"has-color@~0.1.0","version":"0.1.4"},"strip-ansi":{"from":"strip-ansi@~0.1.0","version":"0.1.1"}},"from":"chalk@~0.4.0","version":"0.4.0"},"grunt-lib-contrib":{"dependencies":{"zlib-browserify":{"from":"zlib-browserify@0.0.1","version":"0.0.1"}},"from":"grunt-lib-contrib@~0.6.1","version":"0.6.1"},"less":{"dependencies":{"clean-css":{"dependencies":{"commander":{"from":"commander@2.0.x","version":"2.0.0"}},"from":"clean-css@2.0.x","version":"2.0.8"},"mime":{"from":"mime@1.2.x","version":"1.2.11"},"mkdirp":{"from":"mkdirp@~0.3.5","version":"0.3.5"},"request":{"dependencies":{"aws-sign2":{"from":"aws-sign2@~0.5.0","version":"0.5.0"},"forever-agent":{"from":"forever-agent@~0.5.0","version":"0.5.2"},"form-data":{"dependencies":{"async":{"from":"async@~0.2.9","version":"0.2.10"},"combined-stream":{"dependencies":{"delayed-stream":{"from":"delayed-stream@0.0.5","version":"0.0.5"}},"from":"combined-stream@~0.0.4","version":"0.0.4"}},"from":"form-data@~0.1.0","version":"0.1.2"},"hawk":{"dependencies":{"boom":{"from":"boom@0.4.x","version":"0.4.2"},"cryptiles":{"from":"cryptiles@0.2.x","version":"0.2.2"},"hoek":{"from":"hoek@0.9.x","version":"0.9.1"},"sntp":{"from":"sntp@0.2.x","version":"0.2.4"}},"from":"hawk@~1.0.0","version":"1.0.0"},"http-signature":{"dependencies":{"asn1":{"from":"asn1@0.1.11","version":"0.1.11"},"assert-plus":{"from":"assert-plus@0.1.2","version":"0.1.2"},"ctype":{"from":"ctype@0.5.2","version":"0.5.2"}},"from":"http-signature@~0.10.0","version":"0.10.0"},"json-stringify-safe":{"from":"json-stringify-safe@~5.0.0","version":"5.0.0"},"node-uuid":{"from":"node-uuid@~1.4.0","version":"1.4.1"},"oauth-sign":{"from":"oauth-sign@~0.3.0","version":"0.3.0"},"qs":{"from":"qs@~0.6.0","version":"0.6.6"},"tough-cookie":{"dependencies":{"punycode":{"from":"punycode@>=0.2.0","version":"1.2.3"}},"from":"tough-cookie@>=0.12.0","version":"0.12.1"},"tunnel-agent":{"from":"tunnel-agent@~0.3.0","version":"0.3.0"}},"from":"request@>=2.12.0","version":"2.33.0"},"source-map":{"dependencies":{"amdefine":{"from":"amdefine@>=0.0.4","version":"0.1.0"}},"from":"source-map@0.1.x","version":"0.1.31"}},"from":"less@~1.6.0","version":"1.6.3"}},"from":"grunt-contrib-less@~0.9.0","version":"0.9.0"},"grunt-contrib-qunit":{"dependencies":{"grunt-lib-phantomjs":{"dependencies":{"eventemitter2":{"from":"eventemitter2@~0.4.9","version":"0.4.13"},"phantomjs":{"dependencies":{"adm-zip":{"from":"adm-zip@0.2.1","version":"0.2.1"},"kew":{"from":"kew@~0.1.7","version":"0.1.7"},"mkdirp":{"from":"mkdirp@0.3.5","version":"0.3.5"},"ncp":{"from":"ncp@0.4.2","version":"0.4.2"},"npmconf":{"dependencies":{"config-chain":{"dependencies":{"proto-list":{"from":"proto-list@~1.2.1","version":"1.2.2"}},"from":"config-chain@~1.1.1","version":"1.1.8"},"inherits":{"from":"inherits@~1.0.0","version":"1.0.0"},"ini":{"from":"ini@~1.1.0","version":"1.1.0"},"nopt":{"dependencies":{"abbrev":{"from":"abbrev@1","version":"1.0.4"}},"from":"nopt@2","version":"2.1.2"},"once":{"from":"once@~1.1.1","version":"1.1.1"},"osenv":{"from":"osenv@0.0.3","version":"0.0.3"},"semver":{"from":"semver@~1.1.0","version":"1.1.4"}},"from":"npmconf@0.0.24","version":"0.0.24"},"rimraf":{"from":"rimraf@~2.2.2","version":"2.2.6"},"which":{"from":"which@~1.0.5","version":"1.0.5"}},"from":"phantomjs@~1.9.0-1","version":"1.9.7-1"},"semver":{"from":"semver@~1.0.14","version":"1.0.14"},"temporary":{"dependencies":{"package":{"from":"package@>= 1.0.0 < 1.2.0","version":"1.0.1"}},"from":"temporary@~0.0.4","version":"0.0.8"}},"from":"grunt-lib-phantomjs@~0.5.0","version":"0.5.0"}},"from":"grunt-contrib-qunit@~0.4.0","version":"0.4.0"},"grunt-contrib-uglify":{"dependencies":{"chalk":{"dependencies":{"ansi-styles":{"from":"ansi-styles@~1.0.0","version":"1.0.0"},"has-color":{"from":"has-color@~0.1.0","version":"0.1.4"},"strip-ansi":{"from":"strip-ansi@~0.1.0","version":"0.1.1"}},"from":"chalk@~0.4.0","version":"0.4.0"},"grunt-lib-contrib":{"dependencies":{"zlib-browserify":{"from":"zlib-browserify@0.0.1","version":"0.0.1"}},"from":"grunt-lib-contrib@~0.6.1","version":"0.6.1"},"uglify-js":{"dependencies":{"async":{"from":"async@~0.2.6","version":"0.2.10"},"optimist":{"dependencies":{"wordwrap":{"from":"wordwrap@~0.0.2","version":"0.0.2"}},"from":"optimist@~0.3.5","version":"0.3.7"},"source-map":{"dependencies":{"amdefine":{"from":"amdefine@>=0.0.4","version":"0.1.0"}},"from":"source-map@~0.1.7","version":"0.1.31"},"uglify-to-browserify":{"from":"uglify-to-browserify@~1.0.0","version":"1.0.2"}},"from":"uglify-js@~2.4.0","version":"2.4.12"}},"from":"grunt-contrib-uglify@~0.3.0","version":"0.3.2"},"grunt-contrib-watch":{"dependencies":{"gaze":{"dependencies":{"globule":{"dependencies":{"glob":{"dependencies":{"graceful-fs":{"from":"graceful-fs@~1.2.0","version":"1.2.3"},"inherits":{"from":"inherits@1","version":"1.0.0"}},"from":"glob@~3.1.21","version":"3.1.21"},"lodash":{"from":"lodash@~1.0.1","version":"1.0.1"},"minimatch":{"dependencies":{"lru-cache":{"from":"lru-cache@2","version":"2.5.0"},"sigmund":{"from":"sigmund@~1.0.0","version":"1.0.0"}},"from":"minimatch@~0.2.11","version":"0.2.14"}},"from":"globule@~0.1.0","version":"0.1.0"}},"from":"gaze@~0.4.0","version":"0.4.3"},"tiny-lr":{"dependencies":{"debug":{"from":"debug@~0.7.2","version":"0.7.4"},"faye-websocket":{"from":"faye-websocket@~0.4.3","version":"0.4.4"},"noptify":{"dependencies":{"nopt":{"dependencies":{"abbrev":{"from":"abbrev@1","version":"1.0.4"}},"from":"nopt@~2.0.0","version":"2.0.0"}},"from":"noptify@latest","version":"0.0.3"},"qs":{"from":"qs@~0.5.2","version":"0.5.6"}},"from":"tiny-lr@0.0.4","version":"0.0.4"}},"from":"grunt-contrib-watch@~0.5.3","version":"0.5.3"},"grunt-csscomb":{"dependencies":{"csscomb":{"dependencies":{"commander":{"from":"commander@2.0.0","version":"2.0.0"},"gonzales-pe":{"from":"gonzales-pe@2.0.x","version":"2.0.2"},"minimatch":{"dependencies":{"lru-cache":{"from":"lru-cache@2","version":"2.5.0"},"sigmund":{"from":"sigmund@~1.0.0","version":"1.0.0"}},"from":"minimatch@0.2.12","version":"0.2.12"},"vow":{"from":"vow@0.3.11","version":"0.3.11"},"vow-fs":{"dependencies":{"node-uuid":{"from":"node-uuid@1.4.0","version":"1.4.0"},"vow-queue":{"from":"vow-queue@0.0.2","version":"0.0.2"}},"from":"vow-fs@0.2.3","version":"0.2.3"}},"from":"csscomb@~2.0.0","version":"2.0.4"}},"from":"grunt-csscomb@~2.0.1","version":"2.0.1"},"grunt-exec":{"from":"grunt-exec@0.4.3","version":"0.4.3"},"grunt-html-validation":{"dependencies":{"colors":{"from":"colors@~0.6.0","version":"0.6.2"},"request":{"dependencies":{"aws-sign":{"from":"aws-sign@~0.3.0","version":"0.3.0"},"cookie-jar":{"from":"cookie-jar@~0.3.0","version":"0.3.0"},"forever-agent":{"from":"forever-agent@~0.5.0","version":"0.5.2"},"form-data":{"dependencies":{"async":{"from":"async@~0.2.9","version":"0.2.10"},"combined-stream":{"dependencies":{"delayed-stream":{"from":"delayed-stream@0.0.5","version":"0.0.5"}},"from":"combined-stream@~0.0.4","version":"0.0.4"}},"from":"form-data@~0.1.0","version":"0.1.2"},"hawk":{"dependencies":{"boom":{"from":"boom@0.4.x","version":"0.4.2"},"cryptiles":{"from":"cryptiles@0.2.x","version":"0.2.2"},"hoek":{"from":"hoek@0.9.x","version":"0.9.1"},"sntp":{"from":"sntp@0.2.x","version":"0.2.4"}},"from":"hawk@~1.0.0","version":"1.0.0"},"http-signature":{"dependencies":{"asn1":{"from":"asn1@0.1.11","version":"0.1.11"},"assert-plus":{"from":"assert-plus@0.1.2","version":"0.1.2"},"ctype":{"from":"ctype@0.5.2","version":"0.5.2"}},"from":"http-signature@~0.10.0","version":"0.10.0"},"json-stringify-safe":{"from":"json-stringify-safe@~5.0.0","version":"5.0.0"},"mime":{"from":"mime@~1.2.9","version":"1.2.11"},"node-uuid":{"from":"node-uuid@~1.4.0","version":"1.4.1"},"oauth-sign":{"from":"oauth-sign@~0.3.0","version":"0.3.0"},"qs":{"from":"qs@~0.6.0","version":"0.6.6"},"tunnel-agent":{"from":"tunnel-agent@~0.3.0","version":"0.3.0"}},"from":"request@~2.27.0","version":"2.27.0"},"w3cjs":{"dependencies":{"commander":{"from":"commander@2.0.x","version":"2.0.0"},"superagent":{"dependencies":{"cookiejar":{"from":"cookiejar@1.3.0","version":"1.3.0"},"debug":{"from":"debug@~0.7.2","version":"0.7.4"},"emitter-component":{"from":"emitter-component@1.0.0","version":"1.0.0"},"formidable":{"from":"formidable@1.0.14","version":"1.0.14"},"methods":{"from":"methods@0.0.1","version":"0.0.1"},"mime":{"from":"mime@1.2.5","version":"1.2.5"},"qs":{"from":"qs@0.6.5","version":"0.6.5"},"reduce-component":{"from":"reduce-component@1.0.1","version":"1.0.1"}},"from":"superagent@~0.15.7","version":"0.15.7"},"superagent-proxy":{"dependencies":{"proxy-agent":{"dependencies":{"http-proxy-agent":{"dependencies":{"agent-base":{"from":"agent-base@~1.0.1","version":"1.0.1"},"debug":{"from":"debug@~0.7.2","version":"0.7.4"},"extend":{"from":"extend@~1.2.0","version":"1.2.1"}},"from":"http-proxy-agent@0","version":"0.2.4"},"https-proxy-agent":{"dependencies":{"agent-base":{"from":"agent-base@~1.0.1","version":"1.0.1"},"debug":{"from":"debug@~0.7.2","version":"0.7.4"},"extend":{"from":"extend@~1.2.0","version":"1.2.1"}},"from":"https-proxy-agent@0","version":"0.3.3"},"lru-cache":{"from":"lru-cache@~2.3.1","version":"2.3.1"},"socks-proxy-agent":{"dependencies":{"agent-base":{"from":"agent-base@~1.0.1","version":"1.0.1"},"extend":{"from":"extend@~1.2.0","version":"1.2.1"},"rainbowsocks":{"dependencies":{"debug":{"from":"debug@~0.7.2","version":"0.7.4"}},"from":"rainbowsocks@~0.1.0","version":"0.1.1"}},"from":"socks-proxy-agent@0","version":"0.1.0"}},"from":"proxy-agent@~0.0.2","version":"0.0.2"}},"from":"superagent-proxy@~0.2.0","version":"0.2.0"}},"from":"w3cjs@~0.1.22","version":"0.1.24"}},"from":"grunt-html-validation@~0.1.13","version":"0.1.13"},"grunt-jekyll":{"dependencies":{"tmp":{"from":"tmp@0.0.21","version":"0.0.21"}},"from":"grunt-jekyll@~0.4.1","version":"0.4.1"},"grunt-jscs-checker":{"dependencies":{"hooker":{"from":"hooker@0.2.3","version":"0.2.3"},"jscs":{"dependencies":{"colors":{"from":"colors@0.6.0-1","resolved":"https://registry.npmjs.org/colors/-/colors-0.6.0-1.tgz","version":"0.6.0-1"},"commander":{"dependencies":{"keypress":{"from":"keypress@0.1.x","version":"0.1.0"}},"from":"commander@1.2.0","version":"1.2.0"},"esprima":{"from":"esprima@1.0.3","version":"1.0.3"},"glob":{"dependencies":{"inherits":{"from":"inherits@2","version":"2.0.1"}},"from":"glob@3.2.7","version":"3.2.7"},"minimatch":{"dependencies":{"lru-cache":{"from":"lru-cache@2","version":"2.5.0"},"sigmund":{"from":"sigmund@~1.0.0","version":"1.0.0"}},"from":"minimatch@0.2.12","version":"0.2.12"},"vow":{"from":"vow@0.3.9","version":"0.3.9"},"vow-fs":{"dependencies":{"node-uuid":{"from":"node-uuid@1.4.0","version":"1.4.0"},"vow-queue":{"from":"vow-queue@0.0.2","version":"0.0.2"}},"from":"vow-fs@0.2.3","version":"0.2.3"},"xmlbuilder":{"dependencies":{"underscore":{"from":"underscore@>=1.5.x","version":"1.6.0"}},"from":"xmlbuilder@1.1.2","version":"1.1.2"}},"from":"jscs@~1.2.0","version":"1.2.4"},"lodash.assign":{"dependencies":{"lodash._basecreatecallback":{"dependencies":{"lodash._setbinddata":{"dependencies":{"lodash._isnative":{"from":"lodash._isnative@~2.4.1","version":"2.4.1"},"lodash.noop":{"from":"lodash.noop@~2.4.1","version":"2.4.1"}},"from":"lodash._setbinddata@~2.4.1","version":"2.4.1"},"lodash.bind":{"dependencies":{"lodash._createwrapper":{"dependencies":{"lodash._basebind":{"dependencies":{"lodash._basecreate":{"dependencies":{"lodash._isnative":{"from":"lodash._isnative@~2.4.1","version":"2.4.1"},"lodash.noop":{"from":"lodash.noop@~2.4.1","version":"2.4.1"}},"from":"lodash._basecreate@~2.4.1","version":"2.4.1"},"lodash.isobject":{"from":"lodash.isobject@~2.4.1","version":"2.4.1"}},"from":"lodash._basebind@~2.4.1","version":"2.4.1"},"lodash._basecreatewrapper":{"dependencies":{"lodash._basecreate":{"dependencies":{"lodash._isnative":{"from":"lodash._isnative@~2.4.1","version":"2.4.1"},"lodash.noop":{"from":"lodash.noop@~2.4.1","version":"2.4.1"}},"from":"lodash._basecreate@~2.4.1","version":"2.4.1"},"lodash.isobject":{"from":"lodash.isobject@~2.4.1","version":"2.4.1"}},"from":"lodash._basecreatewrapper@~2.4.1","version":"2.4.1"},"lodash.isfunction":{"from":"lodash.isfunction@~2.4.1","version":"2.4.1"}},"from":"lodash._createwrapper@~2.4.1","version":"2.4.1"},"lodash._slice":{"from":"lodash._slice@~2.4.1","version":"2.4.1"}},"from":"lodash.bind@~2.4.1","version":"2.4.1"},"lodash.identity":{"from":"lodash.identity@~2.4.1","version":"2.4.1"},"lodash.support":{"dependencies":{"lodash._isnative":{"from":"lodash._isnative@~2.4.1","version":"2.4.1"}},"from":"lodash.support@~2.4.1","version":"2.4.1"}},"from":"lodash._basecreatecallback@~2.4.1","version":"2.4.1"},"lodash._objecttypes":{"from":"lodash._objecttypes@~2.4.1","version":"2.4.1"},"lodash.keys":{"dependencies":{"lodash._isnative":{"from":"lodash._isnative@~2.4.1","version":"2.4.1"},"lodash._shimkeys":{"from":"lodash._shimkeys@~2.4.1","version":"2.4.1"},"lodash.isobject":{"from":"lodash.isobject@~2.4.1","version":"2.4.1"}},"from":"lodash.keys@~2.4.1","version":"2.4.1"}},"from":"lodash.assign@2.4.1","version":"2.4.1"},"vow":{"from":"vow@0.4.0","version":"0.4.0"}},"from":"grunt-jscs-checker@~0.3.0","version":"0.3.2"},"grunt-saucelabs":{"dependencies":{"colors":{"from":"colors@~0.6.2","version":"0.6.2"},"lodash":{"from":"lodash@~2.4.1","version":"2.4.1"},"q":{"from":"q@~1.0.0","version":"1.0.0"},"request":{"dependencies":{"aws-sign2":{"from":"aws-sign2@~0.5.0","version":"0.5.0"},"forever-agent":{"from":"forever-agent@~0.5.0","version":"0.5.2"},"form-data":{"dependencies":{"async":{"from":"async@~0.2.9","version":"0.2.10"},"combined-stream":{"dependencies":{"delayed-stream":{"from":"delayed-stream@0.0.5","version":"0.0.5"}},"from":"combined-stream@~0.0.4","version":"0.0.4"}},"from":"form-data@~0.1.0","version":"0.1.2"},"hawk":{"dependencies":{"boom":{"from":"boom@0.4.x","version":"0.4.2"},"cryptiles":{"from":"cryptiles@0.2.x","version":"0.2.2"},"hoek":{"from":"hoek@0.9.x","version":"0.9.1"},"sntp":{"from":"sntp@0.2.x","version":"0.2.4"}},"from":"hawk@~1.0.0","version":"1.0.0"},"http-signature":{"dependencies":{"asn1":{"from":"asn1@0.1.11","version":"0.1.11"},"assert-plus":{"from":"assert-plus@0.1.2","version":"0.1.2"},"ctype":{"from":"ctype@0.5.2","version":"0.5.2"}},"from":"http-signature@~0.10.0","version":"0.10.0"},"json-stringify-safe":{"from":"json-stringify-safe@~5.0.0","version":"5.0.0"},"mime":{"from":"mime@~1.2.9","version":"1.2.11"},"node-uuid":{"from":"node-uuid@~1.4.0","version":"1.4.1"},"oauth-sign":{"from":"oauth-sign@~0.3.0","version":"0.3.0"},"qs":{"from":"qs@~0.6.0","version":"0.6.6"},"tough-cookie":{"dependencies":{"punycode":{"from":"punycode@>=0.2.0","version":"1.2.3"}},"from":"tough-cookie@>=0.12.0","version":"0.12.1"},"tunnel-agent":{"from":"tunnel-agent@~0.3.0","version":"0.3.0"}},"from":"request@~2.33.0","version":"2.33.0"},"sauce-tunnel":{"dependencies":{"request":{"dependencies":{"aws-sign":{"from":"aws-sign@~0.3.0","version":"0.3.0"},"cookie-jar":{"from":"cookie-jar@~0.3.0","version":"0.3.0"},"forever-agent":{"from":"forever-agent@~0.5.0","version":"0.5.2"},"form-data":{"dependencies":{"async":{"from":"async@~0.2.7","version":"0.2.10"},"combined-stream":{"dependencies":{"delayed-stream":{"from":"delayed-stream@0.0.5","version":"0.0.5"}},"from":"combined-stream@~0.0.4","version":"0.0.4"}},"from":"form-data@0.0.8","version":"0.0.8"},"hawk":{"dependencies":{"boom":{"dependencies":{"hoek":{"from":"hoek@0.9.x","version":"0.9.1"}},"from":"boom@0.4.x","version":"0.4.2"},"cryptiles":{"from":"cryptiles@0.2.x","version":"0.2.2"},"hoek":{"from":"hoek@0.8.x","version":"0.8.5"},"sntp":{"dependencies":{"hoek":{"from":"hoek@0.9.x","version":"0.9.1"}},"from":"sntp@0.2.x","version":"0.2.4"}},"from":"hawk@~0.13.0","version":"0.13.1"},"http-signature":{"dependencies":{"asn1":{"from":"asn1@0.1.11","version":"0.1.11"},"assert-plus":{"from":"assert-plus@0.1.2","version":"0.1.2"},"ctype":{"from":"ctype@0.5.2","version":"0.5.2"}},"from":"http-signature@~0.9.11","version":"0.9.11"},"json-stringify-safe":{"from":"json-stringify-safe@~4.0.0","version":"4.0.0"},"mime":{"from":"mime@~1.2.9","version":"1.2.11"},"node-uuid":{"from":"node-uuid@~1.4.0","version":"1.4.1"},"oauth-sign":{"from":"oauth-sign@~0.3.0","version":"0.3.0"},"qs":{"from":"qs@~0.6.0","version":"0.6.6"},"tunnel-agent":{"from":"tunnel-agent@~0.3.0","version":"0.3.0"}},"from":"request@~2.21.0","version":"2.21.0"}},"from":"sauce-tunnel@~1.1.1","version":"1.1.2"},"saucelabs":{"from":"saucelabs@~0.1.1","version":"0.1.1"}},"from":"grunt-saucelabs@~5.0.0","version":"5.0.1"},"grunt-sed":{"dependencies":{"replace":{"dependencies":{"colors":{"from":"colors@0.5.x","version":"0.5.1"},"minimatch":{"dependencies":{"lru-cache":{"from":"lru-cache@2","version":"2.5.0"},"sigmund":{"from":"sigmund@~1.0.0","version":"1.0.0"}},"from":"minimatch@~0.2.9","version":"0.2.14"},"nomnom":{"dependencies":{"underscore":{"from":"underscore@~1.4.4","version":"1.4.4"}},"from":"nomnom@1.6.x","version":"1.6.2"}},"from":"replace@~0.2.4","version":"0.2.9"}},"from":"grunt-sed@~0.1.1","version":"0.1.1"},"load-grunt-tasks":{"dependencies":{"findup-sync":{"dependencies":{"glob":{"dependencies":{"graceful-fs":{"from":"graceful-fs@~1.2.0","version":"1.2.3"},"inherits":{"from":"inherits@1","version":"1.0.0"},"minimatch":{"dependencies":{"lru-cache":{"from":"lru-cache@2","version":"2.5.0"},"sigmund":{"from":"sigmund@~1.0.0","version":"1.0.0"}},"from":"minimatch@~0.2.11","version":"0.2.14"}},"from":"glob@~3.1.21","version":"3.1.21"},"lodash":{"from":"lodash@~1.0.1","version":"1.0.1"}},"from":"findup-sync@~0.1.2","version":"0.1.2"},"globule":{"dependencies":{"glob":{"dependencies":{"inherits":{"from":"inherits@2","version":"2.0.1"}},"from":"glob@~3.2.7","version":"3.2.8"},"lodash":{"from":"lodash@~2.4.1","version":"2.4.1"},"minimatch":{"dependencies":{"lru-cache":{"from":"lru-cache@2","version":"2.5.0"},"sigmund":{"from":"sigmund@~1.0.0","version":"1.0.0"}},"from":"minimatch@~0.2.9","version":"0.2.14"}},"from":"globule@~0.2.0","version":"0.2.0"}},"from":"load-grunt-tasks@~0.3.0","version":"0.3.0"},"markdown":{"dependencies":{"nopt":{"dependencies":{"abbrev":{"from":"abbrev@1","version":"1.0.4"}},"from":"nopt@~2.1.1","version":"2.1.2"}},"from":"markdown@~0.5.0","version":"0.5.0"}},"name":"bootstrap","version":"3.1.1"}
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env python2.7
2
+ from __future__ import absolute_import, unicode_literals, print_function, division
3
+
4
+ from sys import argv
5
+ from os import environ, stat, remove as _delete_file
6
+ from os.path import isfile, dirname, basename, abspath
7
+ from hashlib import sha256
8
+ from subprocess import check_call as run
9
+
10
+ from boto.s3.connection import S3Connection
11
+ from boto.s3.key import Key
12
+ from boto.exception import S3ResponseError
13
+
14
+
15
+ NEED_TO_UPLOAD_MARKER = '.need-to-upload'
16
+ BYTES_PER_MB = 1024 * 1024
17
+ try:
18
+ BUCKET_NAME = environ['TWBS_S3_BUCKET']
19
+ except KeyError:
20
+ raise SystemExit("TWBS_S3_BUCKET environment variable not set!")
21
+
22
+
23
+ def _sha256_of_file(filename):
24
+ hasher = sha256()
25
+ with open(filename, 'rb') as input_file:
26
+ hasher.update(input_file.read())
27
+ file_hash = hasher.hexdigest()
28
+ print('sha256({}) = {}'.format(filename, file_hash))
29
+ return file_hash
30
+
31
+
32
+ def _delete_file_quietly(filename):
33
+ try:
34
+ _delete_file(filename)
35
+ except (OSError, IOError):
36
+ pass
37
+
38
+
39
+ def _tarball_size(directory):
40
+ kib = stat(_tarball_filename_for(directory)).st_size // BYTES_PER_MB
41
+ return "{} MiB".format(kib)
42
+
43
+
44
+ def _tarball_filename_for(directory):
45
+ return abspath('./{}.tar.gz'.format(basename(directory)))
46
+
47
+
48
+ def _create_tarball(directory):
49
+ print("Creating tarball of {}...".format(directory))
50
+ run(['tar', '-czf', _tarball_filename_for(directory), '-C', dirname(directory), basename(directory)])
51
+
52
+
53
+ def _extract_tarball(directory):
54
+ print("Extracting tarball of {}...".format(directory))
55
+ run(['tar', '-xzf', _tarball_filename_for(directory), '-C', dirname(directory)])
56
+
57
+
58
+ def download(directory):
59
+ _delete_file_quietly(NEED_TO_UPLOAD_MARKER)
60
+ try:
61
+ print("Downloading {} tarball from S3...".format(friendly_name))
62
+ key.get_contents_to_filename(_tarball_filename_for(directory))
63
+ except S3ResponseError as err:
64
+ open(NEED_TO_UPLOAD_MARKER, 'a').close()
65
+ print(err)
66
+ raise SystemExit("Cached {} download failed!".format(friendly_name))
67
+ print("Downloaded {}.".format(_tarball_size(directory)))
68
+ _extract_tarball(directory)
69
+ print("{} successfully installed from cache.".format(friendly_name))
70
+
71
+
72
+ def upload(directory):
73
+ _create_tarball(directory)
74
+ print("Uploading {} tarball to S3... ({})".format(friendly_name, _tarball_size(directory)))
75
+ key.set_contents_from_filename(_tarball_filename_for(directory))
76
+ print("{} cache successfully updated.".format(friendly_name))
77
+ _delete_file_quietly(NEED_TO_UPLOAD_MARKER)
78
+
79
+
80
+ if __name__ == '__main__':
81
+ # Uses environment variables:
82
+ # AWS_ACCESS_KEY_ID -- AWS Access Key ID
83
+ # AWS_SECRET_ACCESS_KEY -- AWS Secret Access Key
84
+ argv.pop(0)
85
+ if len(argv) != 4:
86
+ raise SystemExit("USAGE: s3_cache.py <download | upload> <friendly name> <dependencies file> <directory>")
87
+ mode, friendly_name, dependencies_file, directory = argv
88
+
89
+ conn = S3Connection()
90
+ bucket = conn.lookup(BUCKET_NAME, validate=False)
91
+ if bucket is None:
92
+ raise SystemExit("Could not access bucket!")
93
+
94
+ dependencies_file_hash = _sha256_of_file(dependencies_file)
95
+
96
+ key = Key(bucket, dependencies_file_hash)
97
+ key.storage_class = 'REDUCED_REDUNDANCY'
98
+
99
+ if mode == 'download':
100
+ download(directory)
101
+ elif mode == 'upload':
102
+ if isfile(NEED_TO_UPLOAD_MARKER): # FIXME
103
+ upload(directory)
104
+ else:
105
+ print("No need to upload anything.")
106
+ else:
107
+ raise SystemExit("Unrecognized mode {!r}".format(mode))
@@ -0,0 +1,83 @@
1
+ [
2
+ # Docs: https://saucelabs.com/docs/platforms/webdriver
3
+
4
+ {
5
+ browserName: "safari",
6
+ platform: "OS X 10.9"
7
+ },
8
+ # {
9
+ # browserName: "googlechrome",
10
+ # platform: "OS X 10.9",
11
+ # version: "31"
12
+ # },
13
+ {
14
+ browserName: "firefox",
15
+ platform: "OS X 10.9"
16
+ },
17
+
18
+ # Mac Opera not currently supported by Sauce Labs
19
+
20
+ {
21
+ browserName: "internet explorer",
22
+ version: "11",
23
+ platform: "Windows 8.1"
24
+ },
25
+ {
26
+ browserName: "internet explorer",
27
+ version: "10",
28
+ platform: "Windows 8"
29
+ },
30
+ # {
31
+ # browserName: "internet explorer",
32
+ # version: "9",
33
+ # platform: "Windows 7"
34
+ # },
35
+ # {
36
+ # browserName: "internet explorer",
37
+ # version: "8",
38
+ # platform: "Windows 7"
39
+ # },
40
+
41
+ # { # Unofficial
42
+ # browserName: "internet explorer",
43
+ # version: "7",
44
+ # platform: "Windows XP"
45
+ # },
46
+
47
+ {
48
+ browserName: "googlechrome",
49
+ platform: "Windows 8.1"
50
+ },
51
+ {
52
+ browserName: "firefox",
53
+ platform: "Windows 8.1"
54
+ },
55
+
56
+ # Win Opera 15+ not currently supported by Sauce Labs
57
+
58
+ {
59
+ browserName: "iphone",
60
+ platform: "OS X 10.9",
61
+ version: "7"
62
+ },
63
+
64
+ # iOS Chrome not currently supported by Sauce Labs
65
+
66
+ # Linux (unofficial)
67
+ {
68
+ browserName: "googlechrome",
69
+ platform: "Linux"
70
+ },
71
+ {
72
+ browserName: "firefox",
73
+ platform: "Linux"
74
+ }
75
+
76
+ # Android Chrome not currently supported by Sauce Labs
77
+
78
+ # { # Android Browser (super-unofficial)
79
+ # browserName: "android",
80
+ # version: "4.0",
81
+ # platform: "Linux"
82
+ # }
83
+ ]
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+ cp test-infra/npm-shrinkwrap.canonical.json npm-shrinkwrap.json
3
+ npm install
4
+ rm npm-shrinkwrap.json
@@ -1,24 +1,23 @@
1
1
  {
2
2
  "name": "html5shiv",
3
- "version": "3.7.0",
3
+ "version": "3.7.1",
4
4
  "main": [
5
- "dist/html5shiv.js",
6
- "dist/html5shiv-printshiv.js"
5
+ "dist/html5shiv.js"
7
6
  ],
8
7
  "ignore": [
9
8
  "**/.*",
10
- "*.json",
9
+ "composer.json",
11
10
  "test",
12
11
  "build",
13
12
  "src",
14
13
  "build.xml"
15
14
  ],
16
15
  "homepage": "https://github.com/aFarkas/html5shiv",
17
- "_release": "3.7.0",
16
+ "_release": "3.7.1",
18
17
  "_resolution": {
19
18
  "type": "version",
20
- "tag": "3.7.0",
21
- "commit": "a4d4dcbe0875ba10c4c56c54454ae93031d59584"
19
+ "tag": "3.7.1",
20
+ "commit": "eb0bd4173238ba59da4dfa43090008bd18d3bd64"
22
21
  },
23
22
  "_source": "git://github.com/aFarkas/html5shiv.git",
24
23
  "_target": "~3.7.0",
@@ -0,0 +1,61 @@
1
+ /*global module:false*/
2
+ module.exports = function(grunt){
3
+
4
+
5
+ // Project configuration.
6
+ grunt.initConfig({
7
+ pkg: grunt.file.readJSON('package.json'),
8
+ bower: grunt.file.readJSON('bower.json'),
9
+ copy: {
10
+ demo: {
11
+ files: [
12
+ {expand: true, src: ['src/*'], dest: 'dist/', filter: 'isFile', flatten: true}
13
+ ]
14
+ }
15
+ },
16
+
17
+ uglify: {
18
+ options: {
19
+ beautify: {
20
+ ascii_only : true
21
+ },
22
+ preserveComments: 'some'
23
+ },
24
+ html5shiv: {
25
+ files: [{
26
+ expand: true, // Enable dynamic expansion.
27
+ cwd: 'src/', // Src matches are relative to this path.
28
+ src: ['**/*.js'], // Actual pattern(s) to match.
29
+ dest: 'dist/', // Destination path prefix.
30
+ ext: '.min.js'
31
+ }]
32
+ }
33
+ },
34
+ watch: {
35
+ js: {
36
+ files: ['src/**/*.js'],
37
+ tasks: ['copy', 'uglify', 'bytesize']
38
+ }
39
+ },
40
+ bytesize: {
41
+ all: {
42
+ src: [
43
+ 'dist/**.min.js'
44
+ ]
45
+ }
46
+ }
47
+ });
48
+
49
+
50
+ // Default task.
51
+
52
+
53
+
54
+ grunt.loadNpmTasks('grunt-contrib-copy');
55
+ grunt.loadNpmTasks('grunt-contrib-uglify');
56
+ grunt.loadNpmTasks('grunt-contrib-watch');
57
+ grunt.loadNpmTasks('grunt-bytesize');
58
+
59
+ grunt.registerTask('default', ['copy', 'uglify', 'bytesize', 'watch']);
60
+
61
+ };