govuk_frontend_toolkit 5.0.0 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/CHANGELOG.md +6 -0
- data/app/assets/VERSION.txt +1 -1
- data/app/assets/docs/javascript.md +44 -17
- data/app/assets/javascripts/govuk/shim-links-with-button-role.js +15 -40
- data/app/assets/spec/unit/shim-links-with-button-role.spec.js +7 -7
- data/app/assets/stylesheets/_font_stack.scss +15 -9
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9323b826f363ecc6b9568dcc5db77a364425fac2
         | 
| 4 | 
            +
              data.tar.gz: db6f03750e7435ee005300a65deabb26bc5cd136
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4eef6173b14e493c9f8e2c82346663c793769b005574db6bd8778c5e7366a0bae880a0b65b23c9723009ea46ada2d60343b52edd24291e82f6f8b0c6cd082e02
         | 
| 7 | 
            +
              data.tar.gz: 9fab80347956b8e584c7d4bf46da2de0a72ca36362c90d1de4fb72ee32762844f73a9e04c759c7b29051843a76538276262ed48f8c84b962bcd3cbe1efe49dd0
         | 
    
        data/app/assets/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,9 @@ | |
| 1 | 
            +
            # 5.0.1
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            - Fix role="button" click shim ([PR #347](https://github.com/alphagov/govuk_frontend_toolkit/pull/347))
         | 
| 4 | 
            +
            - Make font variables lowercase ([PR #348](https://github.com/alphagov/govuk_frontend_toolkit/pull/348))
         | 
| 5 | 
            +
            - Update selection button documentation ([PR #350](https://github.com/alphagov/govuk_frontend_toolkit/pull/350))
         | 
| 6 | 
            +
             | 
| 1 7 | 
             
            # 5.0.0
         | 
| 2 8 |  | 
| 3 9 | 
             
            This release includes two breaking changes:
         | 
    
        data/app/assets/VERSION.txt
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            5.0. | 
| 1 | 
            +
            5.0.1
         | 
| @@ -51,7 +51,7 @@ The simplest module looks like: | |
| 51 51 | 
             
            ```javascript
         | 
| 52 52 | 
             
            ;(function(Modules) {
         | 
| 53 53 | 
             
              'use strict'
         | 
| 54 | 
            -
             | 
| 54 | 
            +
             | 
| 55 55 | 
             
              Modules.SomeModule = function() {
         | 
| 56 56 | 
             
                this.start = function($element) {
         | 
| 57 57 | 
             
                  // module code
         | 
| @@ -342,40 +342,67 @@ and stop the elements before they get to the bottom. | |
| 342 342 |  | 
| 343 343 | 
             
            ## Selection buttons
         | 
| 344 344 |  | 
| 345 | 
            -
             | 
| 345 | 
            +
            `GOVUK.SelectionButtons` adds classes to a parent `<label>` of a radio button or checkbox, allowing you to style it based on the input’s state. Given this example HTML structure:
         | 
| 346 346 |  | 
| 347 | 
            -
             | 
| 348 | 
            -
             | 
| 349 | 
            -
             | 
| 347 | 
            +
            ```html
         | 
| 348 | 
            +
            <label>
         | 
| 349 | 
            +
              <input type="radio" name="size" value="medium" />
         | 
| 350 | 
            +
              Medium size
         | 
| 351 | 
            +
            </label>
         | 
| 352 | 
            +
            ```
         | 
| 350 353 |  | 
| 351 | 
            -
            When the input is focused or its `checked` attribute is set, classes are added to  | 
| 354 | 
            +
            When the input is focused or its `checked` attribute is set, representative classes are added to the label.
         | 
| 352 355 |  | 
| 353 356 | 
             
            ### Usage
         | 
| 354 357 |  | 
| 355 358 | 
             
            #### GOVUK.SelectionButtons
         | 
| 356 359 |  | 
| 357 | 
            -
            To apply this behaviour to elements  | 
| 360 | 
            +
            To apply this behaviour to elements that follow the above HTML, call the `GOVUK.SelectionButtons` constructor with a jQuery collection of the inputs:
         | 
| 358 361 |  | 
| 359 | 
            -
            ```
         | 
| 360 | 
            -
            var $buttons = $( | 
| 362 | 
            +
            ```javascript
         | 
| 363 | 
            +
            var $buttons = $('label input[type=radio], label input[type=checkbox]')
         | 
| 361 364 | 
             
            var selectionButtons = new GOVUK.SelectionButtons($buttons)
         | 
| 362 365 | 
             
            ```
         | 
| 363 366 |  | 
| 364 | 
            -
             | 
| 367 | 
            +
            If you want to bind your events to the document instead of the elements directly (delegated events) you can call `GOVUK.SelectionButtons` with a selector string:
         | 
| 365 368 |  | 
| 369 | 
            +
            ```javascript
         | 
| 370 | 
            +
            var selectionButtons = new GOVUK.SelectionButtons('label input[type=radio], label input[type=checkbox]')
         | 
| 366 371 | 
             
            ```
         | 
| 367 | 
            -
             | 
| 372 | 
            +
             | 
| 373 | 
            +
            This will bind all events to the document meaning any new elements (for example, by AJAX) that match this selector will automatically gain this functionality.
         | 
| 374 | 
            +
             | 
| 375 | 
            +
            If you do add elements that need this functionality dynamically to the page, you will need to initialise their state. You can do this by calling `SelectionButtons.setInitialState` with the same selector string:
         | 
| 376 | 
            +
             | 
| 377 | 
            +
            ```javascript
         | 
| 378 | 
            +
            var buttonSelector = 'label input[type=radio], label input[type=checkbox]'
         | 
| 379 | 
            +
            var selectionButtons = new GOVUK.SelectionButtons(buttonSelector)
         | 
| 368 380 | 
             
            ```
         | 
| 369 381 |  | 
| 370 | 
            -
             | 
| 382 | 
            +
            then later, after adding more elements:
         | 
| 383 | 
            +
             | 
| 384 | 
            +
            ```javascript
         | 
| 385 | 
            +
            selectionButtons.setInitialState(buttonSelector)
         | 
| 386 | 
            +
            ```
         | 
| 371 387 |  | 
| 372 388 | 
             
            The classes that get added to the `<label>` tags can be passed in as options:
         | 
| 373 389 |  | 
| 390 | 
            +
            ```javascript
         | 
| 391 | 
            +
            var $buttons = $('label input[type=radio], label input[type=checkbox]')
         | 
| 392 | 
            +
            var selectionButtons = new GOVUK.SelectionButtons($buttons, {
         | 
| 393 | 
            +
              focusedClass: 'selectable-focused',
         | 
| 394 | 
            +
              selectedClass: 'selectable-selected'
         | 
| 395 | 
            +
            })
         | 
| 374 396 | 
             
            ```
         | 
| 375 | 
            -
            var $buttons = $("label input[type='radio'], label input[type='checkbox']")
         | 
| 376 | 
            -
            var selectionButtons = new GOVUK.SelectionButtons($buttons, { focusedClass : 'selectable-focused', selectedClass : 'selectable-selected' })
         | 
| 377 397 |  | 
| 378 | 
            -
             | 
| 398 | 
            +
            or, using delegated events:
         | 
| 399 | 
            +
             | 
| 400 | 
            +
            ```javascript
         | 
| 401 | 
            +
            var buttonSelector = 'label input[type=radio], label input[type=checkbox]'
         | 
| 402 | 
            +
            var selectionButtons = new GOVUK.SelectionButtons($buttonSelector, {
         | 
| 403 | 
            +
              focusedClass: 'selectable-focused',
         | 
| 404 | 
            +
              selectedClass: 'selectable-selected'
         | 
| 405 | 
            +
            })
         | 
| 379 406 | 
             
            ```
         | 
| 380 407 |  | 
| 381 408 | 
             
            #### destroy method
         | 
| @@ -384,7 +411,7 @@ The returned instance object includes a `destroy` method to remove all events bo | |
| 384 411 |  | 
| 385 412 | 
             
            Using any of the `selectionButtons` objects created above, it can be called like so:
         | 
| 386 413 |  | 
| 387 | 
            -
            ```
         | 
| 414 | 
            +
            ```javascript
         | 
| 388 415 | 
             
            selectionButtons.destroy();
         | 
| 389 416 | 
             
            ```
         | 
| 390 417 |  | 
| @@ -392,7 +419,7 @@ selectionButtons.destroy(); | |
| 392 419 |  | 
| 393 420 | 
             
            The previous method of calling selection buttons is now deprecated. If you need to call them using this method, you will need to define this function:
         | 
| 394 421 |  | 
| 395 | 
            -
            ```
         | 
| 422 | 
            +
            ```javascript
         | 
| 396 423 | 
             
            GOVUK.selectionButtons = function (elms, opts) {
         | 
| 397 424 | 
             
              new GOVUK.SelectionButtons(elms, opts)
         | 
| 398 425 | 
             
            }
         | 
| @@ -1,13 +1,12 @@ | |
| 1 1 | 
             
            // javascript 'shim' to trigger the click event of element(s)
         | 
| 2 2 | 
             
            // when the space key is pressed.
         | 
| 3 3 | 
             
            //
         | 
| 4 | 
            -
            //  | 
| 5 | 
            -
            //  | 
| 4 | 
            +
            // Created since some Assistive Technologies (for example some Screenreaders)
         | 
| 5 | 
            +
            // Will tell a user to press space on a 'button', so this functionality needs to be shimmed
         | 
| 6 | 
            +
            // See https://github.com/alphagov/govuk_elements/pull/272#issuecomment-233028270
         | 
| 6 7 | 
             
            //
         | 
| 7 | 
            -
            //  | 
| 8 | 
            -
            //  | 
| 9 | 
            -
            // codes if there becomes a need to do so. For example:
         | 
| 10 | 
            -
            // GOVUK.shimLinksWithButtonRole.init({ selector: '[role="button"]' });
         | 
| 8 | 
            +
            // Usage instructions:
         | 
| 9 | 
            +
            // GOVUK.shimLinksWithButtonRole.init();
         | 
| 11 10 | 
             
            ;(function (global) {
         | 
| 12 11 | 
             
              'use strict'
         | 
| 13 12 |  | 
| @@ -16,40 +15,16 @@ | |
| 16 15 |  | 
| 17 16 | 
             
              GOVUK.shimLinksWithButtonRole = {
         | 
| 18 17 |  | 
| 19 | 
            -
                 | 
| 20 | 
            -
             | 
| 21 | 
            -
                   | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
                // event behaviour (not a typical anonymous function for resuse if needed)
         | 
| 30 | 
            -
                triggerClickOnTarget: function triggerClickOnTarget (event) {
         | 
| 31 | 
            -
                  // if the code from this event is in the keycodes array then
         | 
| 32 | 
            -
                  if ($.inArray(event.which, this.config.keycodes) !== -1) {
         | 
| 33 | 
            -
                    event.preventDefault()
         | 
| 34 | 
            -
                    // trigger the target's click event
         | 
| 35 | 
            -
                    event.target.click()
         | 
| 36 | 
            -
                  }
         | 
| 37 | 
            -
                },
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                // By default this will find all links with role attribute set to
         | 
| 40 | 
            -
                // 'button' and will trigger their click event when the space key (32) is pressed.
         | 
| 41 | 
            -
                // @method init
         | 
| 42 | 
            -
                // @param  {Object}   customConfig                object to override default configuration
         | 
| 43 | 
            -
                //         {String}   customConfig.selector       a selector for the elements to be 'clicked'
         | 
| 44 | 
            -
                //         {Array}    customConfig.keycodes       an array of javascript keycode values to match against that when pressed will trigger the click
         | 
| 45 | 
            -
                init: function init (customConfig) {
         | 
| 46 | 
            -
                  // extend the default config with any custom attributes passed in
         | 
| 47 | 
            -
                  this.config = $.extend(this.config, customConfig)
         | 
| 48 | 
            -
                  // if we have found elements then:
         | 
| 49 | 
            -
                  if ($(this.config.selector).length > 0) {
         | 
| 50 | 
            -
                    // listen to 'document' for keyup event on the elements and fire the triggerClickOnTarget
         | 
| 51 | 
            -
                    $(document).on('keyup', this.config.selector, this.triggerClickOnTarget.bind(this))
         | 
| 52 | 
            -
                  }
         | 
| 18 | 
            +
                init: function init () {
         | 
| 19 | 
            +
                  // listen to 'document' for keydown event on the any elements that should be buttons.
         | 
| 20 | 
            +
                  $(document).on('keydown', '[role="button"]', function (event) {
         | 
| 21 | 
            +
                    // if the keyCode (which) is 32 it's a space, let's simulate a click.
         | 
| 22 | 
            +
                    if (event.which === 32) {
         | 
| 23 | 
            +
                      event.preventDefault()
         | 
| 24 | 
            +
                      // trigger the target's click event
         | 
| 25 | 
            +
                      event.target.click()
         | 
| 26 | 
            +
                    }
         | 
| 27 | 
            +
                  })
         | 
| 53 28 | 
             
                }
         | 
| 54 29 |  | 
| 55 30 | 
             
              }
         | 
| @@ -7,7 +7,7 @@ describe('shim-links-with-button-role', function () { | |
| 7 7 | 
             
              var GOVUK = window.GOVUK
         | 
| 8 8 |  | 
| 9 9 | 
             
              var $buttonLink
         | 
| 10 | 
            -
              var  | 
| 10 | 
            +
              var keyDownEvent
         | 
| 11 11 |  | 
| 12 12 | 
             
              beforeEach(function () {
         | 
| 13 13 | 
             
                $buttonLink = $('<a role="button">Button</a>')
         | 
| @@ -15,8 +15,8 @@ describe('shim-links-with-button-role', function () { | |
| 15 15 | 
             
                  $buttonLink.addClass('clicked')
         | 
| 16 16 | 
             
                })
         | 
| 17 17 | 
             
                $(document.body).append($buttonLink)
         | 
| 18 | 
            -
                 | 
| 19 | 
            -
                 | 
| 18 | 
            +
                keyDownEvent = $.Event('keydown')
         | 
| 19 | 
            +
                keyDownEvent.target = $buttonLink.get(0)
         | 
| 20 20 | 
             
                GOVUK.shimLinksWithButtonRole.init()
         | 
| 21 21 | 
             
              })
         | 
| 22 22 |  | 
| @@ -28,14 +28,14 @@ describe('shim-links-with-button-role', function () { | |
| 28 28 | 
             
              it('should trigger event on space', function () {
         | 
| 29 29 | 
             
                // Ideally we’d test the page loading functionality but that seems hard to
         | 
| 30 30 | 
             
                // do within a Jasmine context. Settle for checking a bound event trigger.
         | 
| 31 | 
            -
                 | 
| 32 | 
            -
                $(document).trigger( | 
| 31 | 
            +
                keyDownEvent.which = 32 // Space character
         | 
| 32 | 
            +
                $(document).trigger(keyDownEvent)
         | 
| 33 33 | 
             
                expect($buttonLink.hasClass('clicked')).toBe(true)
         | 
| 34 34 | 
             
              })
         | 
| 35 35 |  | 
| 36 36 | 
             
              it('should not trigger event on tab', function () {
         | 
| 37 | 
            -
                 | 
| 38 | 
            -
                $(document).trigger( | 
| 37 | 
            +
                keyDownEvent.which = 9 // Tab character
         | 
| 38 | 
            +
                $(document).trigger(keyDownEvent)
         | 
| 39 39 | 
             
                expect($buttonLink.hasClass('clicked')).toBe(false)
         | 
| 40 40 | 
             
              })
         | 
| 41 41 | 
             
            })
         | 
| @@ -1,19 +1,25 @@ | |
| 1 1 | 
             
            //  GOV.UK font stacks, referred to in typography.scss
         | 
| 2 2 |  | 
| 3 | 
            -
            // Allow uppercase letters in font stack variable names
         | 
| 4 | 
            -
            // scss-lint:disable NameFormat
         | 
| 5 | 
            -
             | 
| 6 3 | 
             
            // New Transport Light
         | 
| 7 | 
            -
            $ | 
| 8 | 
            -
            $ | 
| 4 | 
            +
            $nta-light: "nta", Arial, sans-serif;
         | 
| 5 | 
            +
            $nta-light-tabular: "ntatabularnumbers", $nta-light;
         | 
| 9 6 |  | 
| 10 7 | 
             
            // Helvetica Regular
         | 
| 11 | 
            -
            $ | 
| 8 | 
            +
            $helvetica-regular: "HelveticaNeue", "Helvetica Neue", "Arial", "Helvetica", sans-serif;
         | 
| 12 9 |  | 
| 13 10 | 
             
            // Allow font stack to be overridden
         | 
| 14 11 | 
             
            // Not all apps using toolkit use New Transport
         | 
| 15 | 
            -
            $toolkit-font-stack: $ | 
| 16 | 
            -
            $toolkit-font-stack-tabular: $ | 
| 12 | 
            +
            $toolkit-font-stack: $nta-light !default;
         | 
| 13 | 
            +
            $toolkit-font-stack-tabular: $nta-light-tabular !default;
         | 
| 17 14 |  | 
| 18 15 | 
             
            // Font reset for print
         | 
| 19 | 
            -
            $ | 
| 16 | 
            +
            $print-reset: sans-serif;
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            // Fallback variable names after renaming previous uppercase names to be lowercase
         | 
| 19 | 
            +
            // @deprecated, please only use the lowercase versions
         | 
| 20 | 
            +
            // Make an exception to the linting as these are still used a lot
         | 
| 21 | 
            +
            // scss-lint:disable NameFormat
         | 
| 22 | 
            +
            $NTA-Light: $nta-light;
         | 
| 23 | 
            +
            $NTA-Light-Tabular: $nta-light-tabular;
         | 
| 24 | 
            +
            $Helvetica-Regular: $helvetica-regular;
         | 
| 25 | 
            +
            $Print-reset: $print-reset;
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: govuk_frontend_toolkit
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 5.0. | 
| 4 | 
            +
              version: 5.0.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Government Digital Service
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-11-22 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rails
         |