PageSourceSearch

https://energizewayland.org/wp-content/plugins/the-events-calendar…/attrchange/js/attrchange.js?ver=6.10.3

js energizewayland.org collected 2026-09-24 13:37:54 UTC 4,432 bytes, 124 lines download raw bytes

1/*
2A simple jQuery function that can add listeners on attribute change.
3http://meetselva.github.io/attrchange/
4
5About License:
6Copyright (C) 2013-2014 Selvakumar Arumugam
7You may use attrchange plugin under the terms of the MIT Licese.
8https://github.com/meetselva/attrchange/blob/master/MIT-License.txt
9 */
10(function($) {
11	function isDOMAttrModifiedSupported() {
12		var p = document.createElement('p');
13		var flag = false;
14
15		if (p.addEventListener) {
16			p.addEventListener('DOMAttrModified', function() {
17				flag = true
18			}, false);
19		} else if (p.attachEvent) {
20			p.attachEvent('onDOMAttrModified', function() {
21				flag = true
22			});
23		} else { return false; }
24		p.setAttribute('id', 'target');
25		return flag;
26	}
27
28	function checkAttributes(chkAttr, e) {
29		if (chkAttr) {
30			var attributes = this.data('attr-old-value');
31
32			if (e.attributeName.indexOf('style') >= 0) {
33				if (!attributes['style'])
34					attributes['style'] = {}; //initialize
35				var keys = e.attributeName.split('.');
36				e.attributeName = keys[0];
37				e.oldValue = attributes['style'][keys[1]]; //old value
38				e.newValue = keys[1] + ':'
39						+ this.prop("style")[$.camelCase(keys[1])]; //new value
40				attributes['style'][keys[1]] = e.newValue;
41			} else {
42				e.oldValue = attributes[e.attributeName];
43				e.newValue = this.attr(e.attributeName);
44				attributes[e.attributeName] = e.newValue;
45			}
46
47			this.data('attr-old-value', attributes); //update the old value object
48		}
49	}
50
51	//initialize Mutation Observer
52	var MutationObserver = window.MutationObserver
53			|| window.WebKitMutationObserver;
54
55	$.fn.attrchange = function(a, b) {
56		if (typeof a == 'object') {//core
57			var cfg = {
58				trackValues : false,
59				callback : $.noop
60			};
61			//backward compatibility
62			if (typeof a === "function") { cfg.callback = a; } else { $.extend(cfg, a); }
63
64			if (cfg.trackValues) { //get attributes old value
65				this.each(function(i, el) {
66					var attributes = {};
67					for ( var attr, i = 0, attrs = el.attributes, l = attrs.length; i < l; i++) {
68						attr = attrs.item(i);
69						attributes[attr.nodeName] = attr.value;
70					}
71					$(this).data('attr-old-value', attributes);
72				});
73			}
74
75			if (MutationObserver) { //Modern Browsers supporting MutationObserver
76				var mOptions = {
77					subtree : false,
78					attributes : true,
79					attributeOldValue : cfg.trackValues
80				};
81				var observer = new MutationObserver(function(mutations) {
82					mutations.forEach(function(e) {
83						var _this = e.target;
84						//get new value if trackValues is true
85						if (cfg.trackValues) {							
86							e.newValue = $(_this).attr(e.attributeName);
87						}						
88						if (typeof $(this).data('attrchange-tdisconnect') === 'undefined') { //disconnected logically
89							cfg.callback.call(_this, e);
90						}
91					});
92				});
93
94				return this.data('attrchange-method', 'Mutation Observer')
95						.data('attrchange-obs', observer).each(function() {
96							observer.observe(this, mOptions);
97						});
98			} else if (isDOMAttrModifiedSupported()) { //Opera
99				//Good old Mutation Events
100				return this.data('attrchange-method', 'DOMAttrModified').on('DOMAttrModified', function(event) {
101					if (event.originalEvent) { event = event.originalEvent; }//jQuery normalization is not required 
102					event.attributeName = event.attrName; //property names to be consistent with MutationObserver
103					event.oldValue = event.prevValue; //property names to be consistent with MutationObserver
104					if (typeof $(this).data('attrchange-tdisconnect') === 'undefined') { //disconnected logically
105						cfg.callback.call(this, event);
106					}
107				});
108			} else if ('onpropertychange' in document.body) { //works only in IE		
109				return this.data('attrchange-method', 'propertychange').on('propertychange', function(e) {
110					e.attributeName = window.event.propertyName;
111					//to set the attr old value
112					checkAttributes.call($(this), cfg.trackValues, e);
113					if (typeof $(this).data('attrchange-tdisconnect') === 'undefined') { //disconnected logically
114						cfg.callback.call(this, e);
115					}
116				});
117			}
118			return this;
119		} else if (typeof a == 'string' && $.fn.attrchange.hasOwnProperty('extensions') &&
120				$.fn.attrchange['extensions'].hasOwnProperty(a)) { //extensions/options
121			return $.fn.attrchange['extensions'][a].call(this, b);
122		}
123	}
124})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.