Rollmorad/tools/editor/js/af_Toolkit.js
2015-11-15 23:18:06 +00:00

195 lines
4.4 KiB
JavaScript

function af_var_dump(obj) {
var str = typeof(obj) + '\n';
for (x in obj) {
str += x + ' = ' + obj[x] + '\n';
}
return str;
}
af_CSS = {
addClass: function(element, className) {
element.className += ' ' + className;
},
removeClass: function(element, className) {
if (!element || !element.className) {
return;
}
var classes = element.className.split(' ');
var newclasses = new Array();
for (var i = 0; i < classes.length; ++i) {
if (classes[i] != className) {
newclasses.push(classes[i]);
}
}
element.className = newclasses.join(' ');
},
getElementsByClass: function(pattern, node, tag) {
node = node || document;
tag = tag || '*';
var nodes = new Array();
var elements = node.getElementsByTagName(tag);
for (var i = 0; i < elements.length; ++i) {
if (pattern.test(elements[i].className)) {
nodes.push(elements[i]);
}
}
return nodes;
},
getPosition: function(element) {
var coords = {x:0, y:0};
var e = element;
do {
coords.x += e.offsetLeft;
coords.y += e.offsetTop;
e = e.offsetParent;
} while (e && e.offsetParent)
return coords;
},
getDimensions: function(element, includeBorder) {
if (includeBorder) {
return {width:element.offsetWidth, height:element.offsetHeight};
} else {
// @TODO: check IE compatibility
return {width:element.clientWidth, height:element.clientHeight};
}
}
}
af_Events = {
addEventListener: function(element, event, handler, capture) {
if (element.addEventListener) {
element.addEventListener(event, handler, false);
return;
}
if (element.attachEvent) {
// @TODO: find a cleaner solution
var mname = '_____on'+event;
element[mname] = handler;
element.attachEvent('on' + event, function(event) { return element[mname](event); });
}
},
removeEventListener: function(element, event, handler) {
if (element.removeEventListener) {
element.removeEventListener(event, handler, false);
return;
}
if (element.detachEvent) {
// @TODO: remove handler from element
element.detachEvent('on' + event, handler);
}
},
addOnEvent: function(element, event, handler) {
event = 'on' + event;
var tmp = element[event];
if (typeof tmp != 'function') {
element[event] = handler;
} else {
element[event] = function(e) {
if (tmp) {
tmp(e);
}
handler(e);
}
}
},
stopEvent: function(event) {
if (typeof window.event != 'undefined') {
window.event.cancelBubble = true;
window.event.returnValue = false;
} else {
event.preventDefault();
event.stopPropagation();
}
},
getMousePosition: function(event) {
if (event.pageX || event.pageY) {
return {x: event.pageX, y:event.pageY};
}
return {
x: event.clientX + document.body.scrollLeft - document.body.clientLeft,
y: event.clientY + document.body.scrollTop - document.body.clientTop
};
}
}
function af_AJAX() {
var that = this;
that.enabled = true;
if (typeof XMLHttpRequest == 'undefined') {
try {
XMLHttpRequest = function() {
return new ActiveXObject('Microsoft.XMLHTTP');
}
} catch (msex) {}
}
if (typeof XMLHttpRequest == 'undefined') {
that.enabled = false;
}
that.getSync = function(url) {
req = new XMLHttpRequest();
req.open('GET', url, false);
req.send(null);
return req;
}
that.getAsync = function(url, callback) {
req = new XMLHttpRequest();
req.open('GET', url);
req.onreadystatechange = function() {
if (req.readyState == 4) {
callback(req);
}
}
req.send(null);
}
that.postSync = function(url, data) {
req = new XMLHttpRequest();
req.open('POST', url, false);
var encodedData = that.urlencode(data);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", encodedData.length);
req.setRequestHeader("Connection", "close");
req.send(encodedData);
return req;
}
that.postAsync = function(url, data, callback) {
req = new XMLHttpRequest();
req.open('POST', url);
req.onreadystatechange = function() {
if (req.readyState == 4) {
callback(req);
}
}
req.send(that.urlencode(data));
}
that.urlencode = function(data) {
encodedData = new Array();
for (i in data) {
encodedData.push(i + '=' + encodeURIComponent(data[i]));
}
return encodedData.join('&');
}
}