Créer un plugin jquery en nodeJs

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.
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
- 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
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
<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>
- <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>
<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
var jqueryPluginSkeleton = require('./jquery-plugin-skeleton');
$(function(){
$('.filters-list').jqueryPluginSkeleton({});
});
- var jqueryPluginSkeleton = require('./jquery-plugin-skeleton');
- $(function(){
- $('.filters-list').jqueryPluginSkeleton({});
- });
var jqueryPluginSkeleton = require('./jquery-plugin-skeleton');
$(function(){
$('.filters-list').jqueryPluginSkeleton({});
});
Voir le code dans github