govuk_frontend_toolkit 0.43.2 → 0.44.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -8,6 +8,12 @@ Just include `govuk_frontend_toolkit` in your `Gemfile`. It
8
8
  automatically attaches itself to your asset path so the static/SCSS
9
9
  files will be available to the asset pipeline.
10
10
 
11
+ ### Development
12
+
13
+ If you are installing from git, ensure you enable submodules like so:
14
+
15
+ gem 'govuk_frontend_toolkit', :git => "https://github.com/alphagov/govuk_frontend_toolkit_gem.git", :submodules => true
16
+
11
17
  You will need to check that the gem is included while in development. Often
12
18
  asset related gems are in a bundler group called `assets`. Old Rails projects
13
19
  do not inluded this in development by default so you need to ensure bundler is
@@ -20,7 +26,9 @@ included using the following lines at the top of the `/config/application.rb`:
20
26
  # Bundler.require(:default, :assets, Rails.env)
21
27
  end
22
28
 
23
- You will also need to ensure that the correct assets are precompiled for
29
+ ### Production
30
+
31
+ You will need to ensure that the correct assets are precompiled for
24
32
  production. These are set using the variable `config.assets.precompile` in
25
33
  `/config/application.rb`. An example of what this may look like is:
26
34
 
data/app/assets/README.md CHANGED
@@ -655,7 +655,7 @@ var test = new GOVUK.MultivariateTest({
655
655
  });
656
656
  ```
657
657
 
658
- If you have a complex test, it may be worth extending MultivariateTest with
658
+ If you have a complex test, it may be worth extending MultivariateTest with
659
659
  your own. Callbacks can be strings which will call a method of that name
660
660
  on the current object.
661
661
 
@@ -669,6 +669,35 @@ Takes these options:
669
669
 
670
670
  Full documentation on how to design multivariate tests, use the data in GA and construct hypothesis tests is on its way soon.
671
671
 
672
+ ## Primary Links
673
+
674
+ `GOVUK.PrimaryList` hides elements in a list which don't have a supplied
675
+ selector, they will then be shown when the user clicks. `GOVUK.primaryLinks` is
676
+ a helper to add this behaviour to many elements.
677
+
678
+ Example markup:
679
+
680
+ ```html
681
+ <ul id="primary-list">
682
+ <li class="primary-item">Item 1</li>
683
+ <li>Item 2</li>
684
+ <li>Item 3</li>
685
+ </ul>
686
+ ```
687
+
688
+ To add it to all lists which have items with the class `primary-item` use
689
+ something like:
690
+
691
+ ```javascript
692
+ GOVUK.primaryLinks.init('.primary-item');
693
+ ```
694
+
695
+ Or to add it just to that list you could use:
696
+
697
+ ```javascript
698
+ new GOVUK.PrimaryList($('#primary-list'), '.primary-item');
699
+ ```
700
+
672
701
 
673
702
  ## Licence
674
703
 
@@ -0,0 +1,49 @@
1
+ (function() {
2
+ "use strict";
3
+ window.GOVUK = window.GOVUK || {};
4
+
5
+ // Only show the first {n} items in a list, documentation is in the README.md
6
+ var PrimaryList = function(el, selector){
7
+ this.$el = $(el);
8
+ this.$extraLinks = this.$el.find('li:not('+selector+')');
9
+ // only hide more than one extra link
10
+ if(this.$extraLinks.length > 1){
11
+ this.addToggleLink();
12
+ this.hideExtraLinks();
13
+ }
14
+ }
15
+ PrimaryList.prototype = {
16
+ toggleText: function(){
17
+ if(this.$extraLinks.length > 1){
18
+ return '+'+ this.$extraLinks.length +' others';
19
+ } else {
20
+ return '+'+ this.$extraLinks.length +' other';
21
+ }
22
+ },
23
+ addToggleLink: function(){
24
+ this.$toggleLink = $('<a href="#">'+ this.toggleText() + '</a>')
25
+ this.$toggleLink.click($.proxy(this.toggleLinks, this));
26
+ this.$toggleLink.insertAfter(this.$el);
27
+ },
28
+ toggleLinks: function(e){
29
+ e.preventDefault();
30
+ this.$toggleLink.remove();
31
+ this.showExtraLinks();
32
+ },
33
+ hideExtraLinks: function(){
34
+ this.$extraLinks.addClass('visuallyhidden');
35
+ },
36
+ showExtraLinks: function(){
37
+ this.$extraLinks.removeClass('visuallyhidden');
38
+ }
39
+ };
40
+ GOVUK.PrimaryList = PrimaryList;
41
+
42
+ GOVUK.primaryLinks = {
43
+ init: function(selector){
44
+ $(selector).parent().each(function(i, el){
45
+ new GOVUK.PrimaryList(el, selector);
46
+ });
47
+ }
48
+ }
49
+ }());
@@ -0,0 +1,49 @@
1
+ describe('primary-links', function(){
2
+ var shortList, mediumList, longList;
3
+
4
+ beforeEach(function () {
5
+ shortList = $('<ul><li class="primary">one</li><li>two</li></ul>');
6
+ mediumList = $('<ul><li class="primary">one</li><li>two</li><li>three</li></ul>');
7
+ longList = $('<ul><li class="primary">one</li><li class="primary">two</li><li>three</li><li>four</li></ul>');
8
+ });
9
+
10
+ it('visually hides extra links', function(){
11
+ var list = new GOVUK.PrimaryList(mediumList, '.primary');
12
+
13
+ expect(mediumList.find('.visuallyhidden').length).toBe(2);
14
+ });
15
+
16
+ it('creates appropriate toggle text', function(){
17
+ var short = new GOVUK.PrimaryList(shortList, '.primary');
18
+ var medium = new GOVUK.PrimaryList(mediumList, '.primary');
19
+
20
+ expect(short.toggleText()).toEqual('+1 other');
21
+ expect(medium.toggleText()).toEqual('+2 others');
22
+ });
23
+
24
+ it('add a toggle link', function(){
25
+ var container = $('<div>').append(mediumList);
26
+ var list = new GOVUK.PrimaryList(mediumList, '.primary');
27
+
28
+ expect(container.find('a').length).toBe(1);
29
+ });
30
+
31
+ it('show extra links when toggled', function(){
32
+ var list = new GOVUK.PrimaryList(mediumList, '.primary');
33
+ var event = { preventDefault: function(){} };
34
+ spyOn(event, 'preventDefault');
35
+ spyOn(list, 'showExtraLinks');
36
+
37
+ list.toggleLinks(event);
38
+ expect(event.preventDefault).toHaveBeenCalled();
39
+ expect(list.showExtraLinks).toHaveBeenCalled();
40
+ });
41
+
42
+ it('only adds toggle if more than one extra link', function(){
43
+ var short = new GOVUK.PrimaryList(shortList, '.primary');
44
+ var medium = new GOVUK.PrimaryList(mediumList, '.primary');
45
+
46
+ expect(shortList.find('.visuallyhidden').length).toBe(0);
47
+ expect(mediumList.find('.visuallyhidden').length).toBe(2);
48
+ });
49
+ });
@@ -1,7 +1,7 @@
1
- /* CSS 3 Mixins
1
+ // CSS 3 Mixins
2
+
3
+ // Add them as you need them. This should let us manage vendor prefixes in one place.
2
4
 
3
- Add them as you need them. This should let us manage vendor prefixes in one place.
4
- */
5
5
 
6
6
  @mixin border-radius($radius) {
7
7
  -webkit-border-radius: $radius;
@@ -1,20 +1,18 @@
1
- /* Cross-browser shims
1
+ // Cross-browser shims
2
+ // Ways of normalising properties across browsers.
2
3
 
3
- Ways of normalising properties across browsers.
4
- */
5
4
  @import "_conditionals";
6
5
 
7
6
  // From: https://blog.mozilla.org/webdev/2009/02/20/cross-browser-inline-block/
8
7
 
9
- /* Usage:
10
- @include inline-block
8
+ // Usage:
9
+ //
10
+ // @include inline-block
11
+ // or
12
+ // @include inline-block("250px")
13
+ //
14
+ // which gives a min-height to the inline-block elements.
11
15
 
12
- or
13
-
14
- @include inline-block("250px")
15
-
16
- which gives a min-height to the inline-block elements.
17
- */
18
16
 
19
17
  @mixin inline-block($min-height: "") {
20
18
  display: -moz-inline-stack;
@@ -37,13 +35,12 @@
37
35
  }
38
36
 
39
37
 
40
- /* Contain floats usage:
41
-
42
- .this-has-floated-children {
43
- @extend %contain-floats;
44
- }
38
+ // Contain floats usage:
39
+ //
40
+ // .this-has-floated-children {
41
+ // @extend %contain-floats;
42
+ // }
45
43
 
46
- */
47
44
 
48
45
  %contain-floats {
49
46
  &:after {
@@ -2,25 +2,22 @@
2
2
  @import '../_css3.scss';
3
3
  @import '../_conditionals.scss';
4
4
 
5
- /*
5
+ // Mixin and defaults for making buttons on GOV.UK services.
6
6
 
7
- Mixin and defaults for making buttons on GOV.UK services.
7
+ // For guidance, see: https://www.gov.uk/service-manual/design-and-content/resources/buttons.html
8
8
 
9
- For guidance, see: https://www.gov.uk/service-manual/design-and-content/resources/buttons.html
9
+ // Example usage:
10
10
 
11
- Example usage:
11
+ // .button{
12
+ // @include button;
13
+ // }
14
+ // .button-secondary{
15
+ // @include button($grey-3);
16
+ // }
17
+ // .button-warning{
18
+ // @include button($red);
19
+ // }
12
20
 
13
- .button{
14
- @include button;
15
- }
16
- .button-secondary{
17
- @include button($grey-3);
18
- }
19
- .button-warning{
20
- @include button($red);
21
- }
22
-
23
- */
24
21
 
25
22
  @mixin button($colour: $button-colour){
26
23
  // Colour
@@ -1,4 +1,4 @@
1
- /* Player overrides */
1
+ // Player overrides
2
2
 
3
3
  @mixin media-player {
4
4
  display: block;
@@ -1,3 +1,3 @@
1
1
  module GovUKFrontendToolkit
2
- VERSION = "0.43.2"
2
+ VERSION = "0.44.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_frontend_toolkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.43.2
4
+ version: 0.44.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-18 00:00:00.000000000 Z
12
+ date: 2014-03-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -203,6 +203,7 @@ files:
203
203
  - app/assets/images/player-icon-rewind.png
204
204
  - app/assets/images/player-icon-volume.png
205
205
  - app/assets/javascripts/govuk/multivariate-test.js
206
+ - app/assets/javascripts/govuk/primary-links.js
206
207
  - app/assets/javascripts/govuk/stop-scrolling-at-footer.js
207
208
  - app/assets/javascripts/govuk_toolkit.js
208
209
  - app/assets/javascripts/stageprompt.js
@@ -210,6 +211,7 @@ files:
210
211
  - app/assets/jenkins.sh
211
212
  - app/assets/package.json
212
213
  - app/assets/spec/MultivariateTestSpec.js
214
+ - app/assets/spec/PrimaryLinksSpec.js
213
215
  - app/assets/stylesheets/.gitkeep
214
216
  - app/assets/stylesheets/_colours.scss
215
217
  - app/assets/stylesheets/_conditionals.scss
@@ -238,7 +240,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
238
240
  version: '0'
239
241
  segments:
240
242
  - 0
241
- hash: -1878013936912249459
243
+ hash: 4141806898857661575
242
244
  required_rubygems_version: !ruby/object:Gem::Requirement
243
245
  none: false
244
246
  requirements:
@@ -247,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
249
  version: '0'
248
250
  segments:
249
251
  - 0
250
- hash: -1878013936912249459
252
+ hash: 4141806898857661575
251
253
  requirements: []
252
254
  rubyforge_project:
253
255
  rubygems_version: 1.8.23