Giter VIP home page Giter VIP logo

react-easter's Introduction

react-easter

Easily add Easter eggs to your React app

Build Status Coverage Status Code Climate Issue Count npm version

Installation

With npm:

$ npm install --save-dev react-easter

Or with Yarn:

$ yarn add react-easter

Usage

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

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:

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 to handle keyboard shortcuts.

Test coverage

Library has ~100% test coverage:

$ npm run test:coverage

> [email protected] 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 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

react-easter's People

Contributors

devlato avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

luigiplr el1f kbrown

react-easter's Issues

Callback when Egg is triggered

It would be terrific to have a callback in order to customize the container easlier.

use case:
I want to hide the content of a page, replacing it with a pong board when the user inputs the correct code. Right now I can only pass the component to render so I could use a fullscreen modal to cover the content of the page but it would be even better to just set a state taht'd hide my components content while the egg is active.

It could be something like:

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 */}
        onsuccess={/* Callback to call when the code is correctly inserted*/}
        ontimeout={/* Callback to call when the timer runs out*/}>
      {/* Your easter egg JSX goes here */}
    </EasterEgg>
  );
}
`

Imports

Should work with React version > 15 <= 17.x ideally

RFE | Typescript

if possible, please add a new declaration (.d.ts) file containing declare module 'react-easter';

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.