Created
September 22, 2016 05:04
-
-
Save anton-kotik/1213f391eb762c7aba237de0c435f4ee to your computer and use it in GitHub Desktop.
jQuery Plugin Template
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* jQuery Plugin Template | |
* | |
* @see http://stefangabos.ro/jquery/jquery-plugin-boilerplate-revisited/ | |
*/ | |
!(function($) { | |
'use strict'; | |
$.pluginName = function (element, options) { | |
// plugin's default options | |
// this is private property and is accessible only from inside the plugin | |
var defaults = { | |
param1: 'value1', | |
param2: 'value2', | |
param3: 'value3', | |
// if your plugin is event-driven, you may provide callback capabilities | |
// for its events. execute these functions before or after events of your | |
// plugin, so that users may customize those particular events without | |
// changing the plugin's code | |
onFoo: function() {} | |
} | |
// to avoid confusions, use "plugin" to reference the | |
// current instance of the object | |
var plugin = this; | |
// this will hold the merged default, and user-provided options | |
// plugin's properties will be available through this object like: | |
// plugin.settings.propertyName from inside the plugin or | |
// element.data('pluginName').settings.propertyName from outside the plugin, | |
// where "element" is the element the plugin is attached to; | |
plugin.settings = {} | |
var $element = $(element), // reference to the jQuery version of DOM element | |
element = element; // reference to the actual DOM element (WTF???) | |
// the "constructor" method that gets called when the object is created | |
plugin.init = function () { | |
// the plugin's final properties are the merged default and | |
// user-provided options (if any) | |
plugin.settings = $.extend({}, defaults, options); | |
// code goes here | |
} | |
// public methods | |
// these methods can be called like: | |
// plugin.methodName(arg1, arg2, ... argn) from inside the plugin or | |
// element.data('pluginName').publicMethod(arg1, arg2, ... argn) from outside | |
// the plugin, where "element" is the element the plugin is attached to; | |
plugin.publicMethod = function () { | |
// ... | |
} | |
// private methods | |
// these methods can be called only from inside the plugin like: | |
// methodName(arg1, arg2, ... argn) | |
var foo_private_method = function () { | |
// ... | |
} | |
// fire up the plugin! | |
// call the "constructor" method | |
plugin.init(); | |
} | |
$.fn.pluginName = function (options) { | |
// iterate through the DOM elements we are attaching the plugin to | |
return this.each(function () { | |
// if plugin has not already been attached to the element | |
if (undefined == $(this).data('pluginName')) { | |
// create a new instance of the plugin | |
// pass the DOM element and the user-provided options as arguments | |
var plugin = new $.pluginName(this, options); | |
// in the jQuery version of the element | |
// store a reference to the plugin object | |
// you can later access the plugin and its methods and properties like | |
// element.data('pluginName').publicMethod(arg1, arg2, ... argn) or | |
// element.data('pluginName').settings.propertyName | |
$(this).data('pluginName', plugin); | |
} | |
}); | |
} | |
})(jQuery); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment