Créer un plugin jquery en nodeJs

admin

by Julien Gustin

July 10, 2018

0

Voici le squelette d’un plugin jQuery utilisable avec require en NodeJs.

Ce plugin ne fait que rajouter une classe badge-primary lors d’un clique sur les éléments .badge de l’élément du plugin jQuery.

  1. import $ from 'jquery'
  2. const jqueryPluginSkeleton = (($) => {
  3. const NAME = 'jqueryPluginSkeleton';
  4. const DATA_KEY = 'jits.jqueryPluginSkeleton';
  5. class jqueryPluginSkeleton {
  6. constructor(element, params) {
  7. this._element = element;
  8. this._params = params;
  9. this.setEvents();
  10. };
  11. setEvents(){
  12. let self = this;
  13. $('.badge', this._element).click(function(e){
  14. self.click($(e.target));
  15. });
  16. }
  17. click($badge) {
  18. if($badge.hasClass(this._params.selectedClass)){
  19. $badge.addClass(this._params.defaultClass)
  20. .removeClass(this._params.selectedClass);
  21. }else{
  22. $badge.addClass(this._params.selectedClass)
  23. .removeClass(this._params.defaultClass);
  24. }
  25. this.loadItems();
  26. }
  27. loadItems(){
  28. console.log('Load at:' + $(this._element).data('url'));
  29. // ...
  30. }
  31. // Static
  32. static _jQueryInterface(config) {
  33. const defauts =
  34. {
  35. selectedClass: "badge-primary",
  36. defaultClass: "badge-disabled",
  37. };
  38. let params = $.extend(defauts, config);
  39. return this.each(function () {
  40. const $element = $(this);
  41. let data = $element.data(DATA_KEY);
  42. if (!data) {
  43. data = new badgeFilters(this, params);
  44. $element.data(DATA_KEY, data);
  45. }
  46. })
  47. }
  48. }
  49. /**
  50. * ------------------------------------------------------------------------
  51. * jQuery
  52. * ------------------------------------------------------------------------
  53. */
  54. $.fn[NAME] = jqueryPluginSkeleton._jQueryInterface;
  55. $.fn[NAME].Constructor = jqueryPluginSkeleton;
  56. $.fn[NAME].noConflict = function () {
  57. $.fn[NAME] = JQUERY_NO_CONFLICT
  58. return jqueryPluginSkeleton._jQueryInterface
  59. };
  60. return jqueryPluginSkeleton;
  61. })($);
  62. export default jqueryPluginSkeleton
import $ from 'jquery'

const jqueryPluginSkeleton = (($) => {

    const NAME  = 'jqueryPluginSkeleton';
    const DATA_KEY  = 'jits.jqueryPluginSkeleton';

    class jqueryPluginSkeleton {

        constructor(element, params) {
            this._element = element;
            this._params = params;
            this.setEvents();
        };

        setEvents(){
            let self = this;
            $('.badge', this._element).click(function(e){
                self.click($(e.target));
            });
        }

        click($badge) {
            if($badge.hasClass(this._params.selectedClass)){
                $badge.addClass(this._params.defaultClass)
                      .removeClass(this._params.selectedClass);
            }else{
                $badge.addClass(this._params.selectedClass)
                      .removeClass(this._params.defaultClass);
            }
            this.loadItems();
        }

        loadItems(){
            console.log('Load at:' + $(this._element).data('url'));
            // ...
        }

        // Static
        static _jQueryInterface(config) {
            const defauts  =
                {
                    selectedClass: "badge-primary",
                    defaultClass: "badge-disabled",
                };
            let params = $.extend(defauts, config);
            return this.each(function () {
                const $element = $(this);
                let data = $element.data(DATA_KEY);
                if (!data) {
                    data = new badgeFilters(this, params);
                    $element.data(DATA_KEY, data);
                }
            })
        }
    }

    /**
     * ------------------------------------------------------------------------
     * jQuery
     * ------------------------------------------------------------------------
     */

    $.fn[NAME]             = jqueryPluginSkeleton._jQueryInterface;
    $.fn[NAME].Constructor = jqueryPluginSkeleton;
    $.fn[NAME].noConflict  = function () {
        $.fn[NAME] = JQUERY_NO_CONFLICT
        return jqueryPluginSkeleton._jQueryInterface
    };
    return jqueryPluginSkeleton;
})($);

export default jqueryPluginSkeleton

Exemple :

HTML

  1. <div class="filters-list collapse pt-2" id="main-filters-list" data-url="/most-recent">
  2. <a href="#" class="badge badge-primary all">All</a>
  3. <a href="#" class="badge badge-disabled">Culture</a>
  4. <a href="#" class="badge badge-disabled">Politic</a>
  5. </div>
<div class="filters-list collapse pt-2" id="main-filters-list" data-url="/most-recent">  
 <a href="#" class="badge badge-primary all">All</a>  
 <a href="#" class="badge badge-disabled">Culture</a>  
 <a href="#" class="badge badge-disabled">Politic</a>
 </div>

JS

  1. var jqueryPluginSkeleton = require('./jquery-plugin-skeleton');
  2. $(function(){
  3. $('.filters-list').jqueryPluginSkeleton({});
  4. });
var jqueryPluginSkeleton = require('./jquery-plugin-skeleton');

$(function(){
   $('.filters-list').jqueryPluginSkeleton({});
});

Voir le code dans github