JSFiddle - React, Tailwind, and code Playground

by Wonderfoule

HTML

<select id="rating">
            <option value="1">Mauvais</option>
            <option value="2">Moyen</option>
            <option value="3">Bien</option>
            <option value="4">Très bien</option>
            <option value="5">Excellent</option>
        </select>
        <div class="rateit bigstars" data-rateit-starwidth="32" data-rateit-starheight="32" data-rateit-backingfld="#rating"></div>

CSS

.rateit {
    display: -moz-inline-box;
    display: inline-block;
    position: relative;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -o-user-select: none;
    -ms-user-select: none;
    user-select: none;
    -webkit-touch-callout: none;
}

.rateit .rateit-range
{
    position: relative;
    display: -moz-inline-box;
    display: inline-block;
    background: url(star.gif);
    height: 16px;
    outline: none;
}

.rateit .rateit-range * {
    display:block;
}

/* for IE 6 */
* html .rateit, * html .rateit .rateit-range
{
    display: inline;
}

/* for IE 7 */
* + html .rateit, * + html .rateit .rateit-range
{
    display: inline;
}

.rateit .rateit-hover, .rateit .rateit-selected
{
    position: absolute;
    left: 0px;
}

.rateit .rateit-hover-rtl, .rateit .rateit-selected-rtl
{
    left: auto;
    right: 0px;
}

.rateit .rateit-hover
{
    background: url(star.gif) left -32px;
}

.rateit .rateit-hover-rtl
{
    background-position: right -32px;
}

.rateit .rateit-selected
{
    background: url(star.gif) left -16px;
}

.rateit .rateit-selected-rtl
{
    background-position: right -16px;
}

.rateit .rateit-preset
{
    background: url(star.gif) left -48px;
}

.rateit .rateit-preset-rtl
{
    background: url(star.gif) left -48px;
}

.rateit button.rateit-reset
{
    background: url(delete.gif) 0 0;
    width: 16px;
    height: 16px;
    display: -moz-inline-box;
    display: inline-block;
    float: left;
    outline: none;
    border:none;
    padding: 0;
}

.rateit button.rateit-reset:hover, .rateit button.rateit-reset:focus
{
    background-position: 0 -16px;
}

div.bigstars div.rateit-range
{
    background: url(http://clients.wonderful.fr/test-rating/star-white32.png);
    height: 32px;
}
 
div.bigstars div.rateit-hover
{
    background: url(http://clients.wonderful.fr/test-rating/star-gold32.png);
}
 
div.bigstars div.rateit-selected
{
    background:...

JavaScript

/*! RateIt | v1.0.22 / 05/27/2014 | https://rateit.codeplex.com/license
    http://rateit.codeplex.com | Twitter: @gjunge
*/
(function ($) {
    $.rateit = {
        aria: {
            resetLabel: 'reset rating',
            ratingLabel: 'rating'
        }
    };

    $.fn.rateit = function (p1, p2) {
        //quick way out.
        var index = 1;
        var options = {}; var mode = 'init';
        var capitaliseFirstLetter = function (string) {
            return string.charAt(0).toUpperCase() + string.substr(1);
        };

        if (this.length === 0) { return this; }


        var tp1 = $.type(p1);
        if (tp1 == 'object' || p1 === undefined || p1 === null) {
            options = $.extend({}, $.fn.rateit.defaults, p1); //wants to init new rateit plugin(s).
        }
        else if (tp1 == 'string' && p1 !== 'reset' && p2 === undefined) {
            return this.data('rateit' + capitaliseFirstLetter(p1)); //wants to get a value.
        }
        else if (tp1 == 'string') {
            mode = 'setvalue';
        }

        return this.each(function () {
            var item = $(this);


            //shorten all the item.data('rateit-XXX'), will save space in closure compiler, will be like item.data('XXX') will become x('XXX')
            var itemdata = function (key, value) {

                if (value != null) {
                    //update aria values
                    var ariakey = 'aria-value' + ((key == 'value') ? 'now' : key);
                    var range = item.find('.rateit-range');
                    if (range.attr(ariakey) != undefined) {
                        range.attr(ariakey, value);
                    }

                }

                arguments[0] = 'rateit' + capitaliseFirstLetter(key);
                return item.data.apply(item, arguments); ////Fix for WI: 523
            };

            //handle programmatic reset
            if (p1 == 'reset') {
                var setup = itemdata('init'); //get initial value
       ...