egroupware/api/js/jquery/blueimp/js/blueimp-helper.js

192 lines
5.4 KiB
JavaScript

/*
* blueimp helper JS 1.2.0
* https://github.com/blueimp/Gallery
*
* Copyright 2013, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
/* global define, window, document */
(function () {
'use strict';
function extend(obj1, obj2) {
var prop;
for (prop in obj2) {
if (obj2.hasOwnProperty(prop)) {
obj1[prop] = obj2[prop];
}
}
return obj1;
}
function Helper(query) {
if (!this || this.find !== Helper.prototype.find) {
// Called as function instead of as constructor,
// so we simply return a new instance:
return new Helper(query);
}
this.length = 0;
if (query) {
if (typeof query === 'string') {
query = this.find(query);
}
if (query.nodeType || query === query.window) {
// Single HTML element
this.length = 1;
this[0] = query;
} else {
// HTML element collection
var i = query.length;
this.length = i;
while (i) {
i -= 1;
this[i] = query[i];
}
}
}
}
Helper.extend = extend;
Helper.contains = function (container, element) {
do {
element = element.parentNode;
if (element === container) {
return true;
}
} while (element);
return false;
};
Helper.parseJSON = function (string) {
return window.JSON && JSON.parse(string);
};
extend(Helper.prototype, {
find: function (query) {
var container = this[0] || document;
if (typeof query === 'string') {
if (container.querySelectorAll) {
query = container.querySelectorAll(query);
} else if (query.charAt(0) === '#') {
query = container.getElementById(query.slice(1));
} else {
query = container.getElementsByTagName(query);
}
}
return new Helper(query);
},
hasClass: function (className) {
if (!this[0]) {
return false;
}
return new RegExp('(^|\\s+)' + className +
'(\\s+|$)').test(this[0].className);
},
addClass: function (className) {
var i = this.length,
element;
while (i) {
i -= 1;
element = this[i];
if (!element.className) {
element.className = className;
return this;
}
if (this.hasClass(className)) {
return this;
}
element.className += ' ' + className;
}
return this;
},
removeClass: function (className) {
var regexp = new RegExp('(^|\\s+)' + className + '(\\s+|$)'),
i = this.length,
element;
while (i) {
i -= 1;
element = this[i];
element.className = element.className.replace(regexp, ' ');
}
return this;
},
on: function (eventName, handler) {
var eventNames = eventName.split(/\s+/),
i,
element;
while (eventNames.length) {
eventName = eventNames.shift();
i = this.length;
while (i) {
i -= 1;
element = this[i];
if (element.addEventListener) {
element.addEventListener(eventName, handler, false);
} else if (element.attachEvent) {
element.attachEvent('on' + eventName, handler);
}
}
}
return this;
},
off: function (eventName, handler) {
var eventNames = eventName.split(/\s+/),
i,
element;
while (eventNames.length) {
eventName = eventNames.shift();
i = this.length;
while (i) {
i -= 1;
element = this[i];
if (element.removeEventListener) {
element.removeEventListener(eventName, handler, false);
} else if (element.detachEvent) {
element.detachEvent('on' + eventName, handler);
}
}
}
return this;
},
empty: function () {
var i = this.length,
element;
while (i) {
i -= 1;
element = this[i];
while (element.hasChildNodes()) {
element.removeChild(element.lastChild);
}
}
return this;
},
first: function () {
return new Helper(this[0]);
}
});
if (typeof define === 'function' && define.amd) {
define(function () {
return Helper;
});
} else {
window.blueimp = window.blueimp || {};
window.blueimp.helper = Helper;
}
}());