Coder Social home page Coder Social logo

league-of-legends-devs / league-tooltips Goto Github PK

View Code? Open in Web Editor NEW
4.0 3.0 1.0 554 KB

[discontinued] Express middleware for League of Legends tooltips : champions, items, summoner spells, runes and masteries.

Home Page: https://tooltips.lol-item-sets-generator.org

License: MIT License

JavaScript 59.15% CSS 15.44% HTML 25.41%
riot-api league-tooltips tooltip express-middleware league-of-legends champion summoner-spells masteries runes legends-tooltips

league-tooltips's Introduction

league-tooltips

Express middleware for League of Legends tooltips : champions, items, summoner spells, runes, masteries and champion spells.

stability-stable

npm version Known Vulnerabilities dependency status devdependency status downloads

NPM

Champion tooltip

more screenshots here

Demo : here

Used in production by feeder.lol-item-sets-generator.org.

Compatibility

Server

Requires Node 4.0.0 or upper.

Client

BEWARE ! The client part is not compatible with modern front end frameworks (with dynamic DOM elements). See the #1 issue for more informations.

Working on :

  • Internet Explorer 11
  • Most modern browsers

Installation

npm install --save league-tooltips

How to use

Server :

const express = require('express');
const leagueTips = require('league-tooltips');

const app = express();

app.use(leagueTips('RIOT_API_KEY', leagueTips.REGIONS.EUROPE_WEST));

app.listen(3000);

Client :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Test</title>
    <script src="/league-tips.min.js"></script>
  </head>
  <body>
    <main>
      <div class="league-tooltip" data-champion="103">
        <!-- This div will show the Ahri tooltip on hover (Ahri ID : 103) -->
      </div>
    </main>
  </body>
</html>

You must set the league-tootip class and one of these data-* attributes :

  • data-champion : <champion id>

e.g. : data-champion="103" (Ahri)

  • data-item : <item id>

e.g. : data-item="3027" (Rod of Ages)

  • data-summonerspell : <summonerspell id>

e.g. : data-summonerspell="4" (Flash)

  • data-rune : <rune id>

e.g. : data-rune="5311" (Greater Seal of Critical Chance)

  • data-mastery : <mastery id>

e.g. : data-mastery="6111" (Fury)

  • data-championspell : id.key (. is a separator)

e.g. : data-championspell="103.Q"

The value must be the ID (from the Riot API) of the element you want to show. If an element has more than one tag in this list, the list order will define the priority and the first occurrence will be used.

API

leagueTips(apiKey, region, options) is an express middleware.

It will return a function (req, res, next) {}.

apiKey

required

The Riot API key. You can get one here.

region

required

The location of the servers to query. Riot has multiple servers across the world at different locations. They are exported in the REGIONS constant.

Allowed values :

  • REGIONS.BRAZIL: 'br'
  • REGIONS.EUROPE: 'eune'
  • REGIONS.EUROPE_WEST: 'euw'
  • REGIONS.KOREA: 'kr'
  • REGIONS.JAPAN: 'jp'
  • REGIONS.LATIN_AMERICA_NORTH: 'lan'
  • REGIONS.LATIN_AMERICA_SOUTH: 'las'
  • REGIONS.NORTH_AMERICA: 'na'
  • REGIONS.OCEANIA: 'oce'
  • REGIONS.RUSSIA: 'ru'
  • REGIONS.TURKEY: 'tr'

options

optional, default values :

options = {
  url: '/',
  fileName: 'league-tips.min.js',
  cors: { // the CORS default options are only set if the 'cors' option is defined
    origin: '*',
    methods: 'GET,PUT,POST,DELETE',
    headers: 'Content-Type'
  },
  cache: {
    TTL: 60 * 60 * 12,
    redis: { // the Redis default options are only set if the 'redis' option is defined, otherwise : fallback to in-memory caching
      host: 'localhost',
      port: 6379,
      prefix: 'league-tooltips_'
    }
  },
  prod: false
};

- url (String)

default value : '/' (e.g. : /tooltips)

The route where the static files and the datas will be served.

- fileName (String)

default value : league-tips.min.js

The name of the Javasript file that will be served to the client.

e.g.

leagueTips('<API_KEY>', '<REGION>', { url: '/tooltips', fileName: 'league-tips.min.js' })

will serve the file at /tootips/league-tips.min.js.

- cors (Object)

CORS properties. No CORS if this property is undefined.

  • origin (String), defaults to '*' if cors is defined
  • methods (String), defaults to 'GET,PUT,POST,DELETE' if cors is defined
  • headers (String), defaults to 'Content-Type' if cors is defined

- cache (Object)

The datas can be cached in two ways : in-memory caching (by default) or with Redis.

  • TTL: (Number), defaults to 60*60*12 (43200 seconds)
  • redis: // fallback to in-memory caching if no Redis configuration
    • host: (String), defaults to 'localhost'
    • port: (Integer), defaults to 6379
    • host: (String), defaults to 'league-tooltips_'

- prod (Boolean)

default value : false

Defines wether the script runs in a production environment or not. Set to true for a production environment.

Language

You can change the language by setting the leagueTooltips.locale value. The locale is the language of the retrieved datas (e.g., en_US, es_ES, fr_FR ...).

Debug

This module uses the debug module. In order to show the debug logs, you must enable the debugging logs.

  • Server : you must set the league-tooltips:* value in the DEBUG environment variable :
  • Linux : export DEBUG=league-tooltips:*
  • Windows : set DEBUG=league-tooltips:*
  • Browser : type the following in the console : leagueTooltips.debug.enable('*')

How does it work ?

The express middleware will retrieve the required datas from the Riot API and store them. It will also serve a javascript file that must be executed by the client.

e.g.

app.use(leagueTips('RIOT_API_KEY', 'euw', { url: '/tooltips', fileName: 'league-tips.min.js' }));

will serve the javascript file with the /tooltips/league-tips.min.js route.

The JS file will listen to the onmouseover events of all elements that have the league-tooltip class and show a tooltip when it triggers. Every mouse hover will launch a query to the /tooltips/ api route (if not stored in the browser cache) and retrieve the datas to show in the tooltip.

TODO

Release :

  • IE9 compatibility
  • Champion passives
  • Display 'Energy' instead of 'Mana' for manaless champions
  • Allow to choose between setting the data id or the data key in data-*
  • Add the mouseover listener to the newly created tooltips in the DOM (using Mutation Observers) in order to be compatible with modern front end frameworks - see #1
  • Make the API return the proper HTTP error code (usually always 200)
  • Modular client file

Ideas :

  • Serve the templates in league-tooltips.min.js as lodash template in order to prevent direct templates requests to the server
  • Use CSS modules
  • Champion.GG integration ?
  • Serve the rendered tooltip.html file with express ? => { renderServerSide : true }. Otherwise, use express-state.
  • Custom tooltip.html in middleware config
  • Start the queries before the mouseover event triggers and cache the results
  • Export the client files in a league-tooltips-client module with the Universal Module Definition
  • Cancel the client requests if the user no longer hovers the tooltip element (RxJS style ?)

License

MIT License

Copyright (c) 2016-2018 Nicolas COUTIN

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Anyway, if you earn money on my open source work, I will fucking end you :)

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.