blob: 87741f90d4b97954aeb5b5eeb4f204d3321354e6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
/*!
* jQuery Once 2.0.0-alpha.9
* http://github.com/robloach/jquery-once
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
/**
* Universal Module Definition
*
* jQuery is a dependency, so we wrap the code with a UMD pattern in order to
* allow loading jQuery and jQuery Once through a module definition like
* CommonJS, AMD, or otherwise.
*
* @see {@link http://github.com/umdjs/umd}
*/
(function (factory) {
"use strict";
if (typeof exports === "object") {
// CommonJS
factory(require("jquery"));
} else if (typeof define === "function" && define.amd) {
// AMD
define(["jquery"], factory);
} else {
// Global object
factory(jQuery);
}
}(function ($) {
"use strict";
/**
* Filter elements by whether they have not yet been processed.
*
* @param {string} id
* The data id used to determine whether the given elements have already
* been processed or not.
*
* @returns jQuery element collection of elements that have now run once by
* the given id.
*
* @example
* // Change the color to green only once.
* $('p').once('changecolor').css('color', 'green');
*
* @see removeOnce
* @see findOnce
* @this jQuery
*
* @global
* @public
*/
$.fn.once = function (id) {
id = id || "once";
if (typeof id !== "string") {
throw new Error("jQuery.once() parameter MUST be a string");
}
// Build the name for the data identifier. Generate a new unique id if the
// id parameter is not provided.
var name = "jquery-once-" + id;
// Filter the elements by which do not have the data yet.
return this.filter(function() {
return $(this).data(name) !== true;
}).data(name, true);
};
/**
* Removes the once data from the given elements, based on the given ID.
*
* @param {string} id
* A required string representing the name of the data id which should be used
* when filtering the elements. This only filters elements that have already
* been processed by the once function. The id should be the same id that
* was originally passed to the once() function.
*
* @returns jQuery element collection of elements that now have their once
* data removed.
*
* @example
* // Remove once data with the "changecolor" ID.
* $('p').removeOnce('changecolor').each(function() {
* // This function is called for all elements that had their once removed.
* });
*
* @see once
* @this jQuery
*
* @global
* @public
*/
$.fn.removeOnce = function (id) {
// Filter through the elements to find the once'd elements.
return this.findOnce(id).removeData("jquery-once-" + id);
};
/**
* Filters elements that have already been processed once.
*
* @param {string} id
* A required string representing the name of the data id which should be used
* when filtering the elements. This only filters elements that have already
* been processed by the once function. The id should be the same id that
* was originally passed to the once() function.
*
* @returns jQuery element collection of elements that have been run once.
*
* @example
* // Find all elements that have the changecolor'ed once.
* $('p').findOnce('changecolor').each(function() {
* // This function is called for all elements that has already once'd.
* });
*
* @see once
* @this jQuery
*
* @global
* @public
*/
$.fn.findOnce = function (id) {
// Filter the elements by which do have the data.
var name = "jquery-once-" + id;
return this.filter(function() {
return $(this).data(name) === true;
});
};
}));
|