devlato/react-easter

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# react-easter

Easily add Easter eggs to your React app


[![Build Status](https://travis-ci.org/devlato/react-easter.svg?branch=master)](https://travis-ci.org/devlato/react-easter)
[![Coverage Status](https://coveralls.io/repos/github/devlato/react-easter/badge.svg?branch=master)](https://coveralls.io/github/devlato/react-easter?branch=master)
[![Code Climate](https://codeclimate.com/github/devlato/react-easter/badges/gpa.svg)](https://codeclimate.com/github/devlato/react-easter)
[![Issue Count](https://codeclimate.com/github/devlato/react-easter/badges/issue_count.svg)](https://codeclimate.com/github/devlato/react-easter)
[![npm version](https://badge.fury.io/js/react-easter.svg)](https://badge.fury.io/js/react-easter)


## Installation

With npm:

```sh
$ npm install --save-dev react-easter
```

Or with Yarn:

```sh
$ yarn add react-easter
```


## Usage

The usage is very simple, there is just a couple of props to pass.

```jsx
const EasterEgg = require('react-easter');

// ...

render() {
  return (
    <EasterEgg
        keys={/* Array of keys to type to trigger the easter egg */}
        simultaneous={/* Add this prop if keys should be pressed all together */}
        timeout={/* Duration to show your easter egg, easter egg is displayed forever if prop is not set */}>
      {/* Your easter egg JSX goes here */}
    </EasterEgg>
  );
}
```

You can add `react-easter` anywhere in your component hierarchy, because it adds a global
keyboard events listener and doesn't stops any event bubbling.

For example:

```jsx
const EasterEgg = require('react-easter');


export default class YourComponent extends React.Component {
  render() {
    const konamiCode = [
      'arrowup',
      'arrowup',
      'arrowdown',
      'arrowdown',
      'arrowleft',
      'arrowright',
      'arrowleft',
      'arrowright',
      'b',
      'a',
      'enter'
    ];

    return (
      <EasterEgg keys={konamiCode}
                 timeout={5000}>
        <div class="overlay">
          <iframe class="sexy-nude-geek-girls-playing-mario"
                  src="https://www.youtube.com/embed/DLzxrzFCyOs?autoplay=1"
                  frameborder="0"
                  allowfullscreen />
        </div>
      </EasterEgg>
    );
  }
}
```


## Props

* `keys` – Just array of string representing each button to be pressed;
* `simultaneous` – Set this prop if user should press buttons all together;
* `timeout` – Amount of time in milliseconds while easter egg is displayed.


## Supported keys

All alphabetic letters and numbers could be passed as is, i.e. letter "a" is just "a".

If you use `simultaneous` mode and you have the `Shift` button in your hotkey combination,
please set the unmodified buttons.

For example, to have a `Shift+!` hotkey, you should pass `keys={["shift", "1"]}`,
because "Shift" and "1" pressed together produce "!".


## Dependencies

Project uses [react-shortcut](https://www.npmjs.com/package/react-shortcut) to handle keyboard shortcuts.


## Test coverage

Library has ~100% test coverage:

```sh
$ npm run test:coverage

> react-easter@1.0.0 test:coverage ~/projects/react-easter
> NODE_ENV=test jest --coverage --no-cache --config .jestrc

 PASS  test/Component.js
  <EasterEgg />
    ✓ Should render (16ms)
    ✓ Should handle keys sequently without timeout (1032ms)
    ✓ Should handle keys sequently with timeout (1011ms)

--------------|----------|----------|----------|----------|----------------|
File          |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |
--------------|----------|----------|----------|----------|----------------|
All files     |      100 |    77.78 |      100 |      100 |                |
 Component.js |      100 |    77.78 |      100 |      100 |                |
--------------|----------|----------|----------|----------|----------------|
Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        3.831s
Ran all test suites.
```


## Code style

Library is 100% compatible with [airbnb-base](https://www.npmjs.com/package/eslint-config-airbnb-base) for ES5.


## Available commands

Library has the following commands available:

* Run the tests:

  ```
  $ npm test
  ```

* Run the tests and display test coverage:

  ```
  $ npm run test:coverage
  ```

* Run the linter:

  ```
  $ npm run lint
  ```

## Build

No building required, library is implemented with ES5 React syntax for better compatibility and shipped as is.


## License

Library is shipped "as is" under MIT License.


## Contributing

Feel free to contribute but don't forget to test everything properly.


[![NPM](https://nodei.co/npm/react-easter.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/react-easter/)