Files
Chamilo/plugin/mindmap/edit-mindmap/vendor/js/kampfer/dom.js
2025-04-10 12:36:07 +02:00

165 lines
4.5 KiB
JavaScript

/*global kampfer*/
kampfer.provide('dom');
kampfer.dom.create = function(name) {
return kampfer.global.document.createElement(name);
};
kampfer.dom.addClass = function(elem, value) {
var classNames, i, l,
setClass, c, cl;
if ( value && typeof value === "string" ) {
classNames = value.split( /\s+/ );
if ( elem.nodeType === 1 ) {
if ( !elem.className && classNames.length === 1 ) {
elem.className = value;
} else {
setClass = " " + elem.className + " ";
for ( c = 0, cl = classNames.length; c < cl; c++ ) {
if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
setClass += classNames[ c ] + " ";
}
}
elem.className = setClass.trim();
}
}
}
};
kampfer.dom.removeClass = function(elem, value) {
var classNames, i, l, className, c, cl;
if ( (value && typeof value === "string") || value === undefined ) {
classNames = ( value || "" ).split( /\s+/ );
if ( elem.nodeType === 1 && elem.className ) {
if ( value ) {
className = (" " + elem.className + " ").replace( /[\n\t\r]/g, " " );
for ( c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[ c ] + " ", " ");
}
//elem.className = kampfer.string.trim( className );
elem.className = className.trim();
} else {
elem.className = "";
}
}
}
};
kampfer.dom.getComputedStyle = function(element, property) {
var doc = kampfer.global.document;
if(doc.defaultView && doc.defaultView.getComputedStyle) {
var styles = doc.defaultView.getComputedStyle(element, null);
if(styles) {
// element.style[..] is undefined for browser specific styles
// as 'filter'.
return styles[property] || styles.getPropertyValue(property);
}
}
return '';
};
//for IE
kampfer.dom.getCascadedStyle = function(element, style) {
return element.currentStyle ? element.currentStyle[style] : null;
};
kampfer.dom.getStyle = function(element, style) {
return kampfer.dom.getComputedStyle(element, style) ||
kampfer.dom.getCascadedStyle(element, style) ||
element.style[style];
};
//需要输入正确的javascript格式名
//TODO 处理样式名
kampfer.dom.setStyle = function(element, name, value) {
if( kampfer.isDefAndNotNull(value) &&
kampfer.type(name) === 'string' ) {
element.style[name] = value;
} else if( kampfer.isObject(name) ) {
for(var attr in name) {
kampfer.dom.setStyle(element, attr, name[attr]);
}
}
};
// http://code.jquery.com/jquery-1.8.3.js
kampfer.dom.getWindow = function(elem) {
return kampfer.isWindow(elem) ?
elem :
elem.nodeType === 9 ?
elem.defaultView || elem.parentWindow :
false;
};
// http://code.jquery.com/jquery-1.8.3.js
kampfer.dom.scrollLeft = function(elem, val) {
var win = kampfer.dom.getWindow( elem ),
prop = 'pageXOffset',
method = 'scrollLeft';
if ( val === undefined ) {
return win ? (prop in win) ? win[ prop ] :
win.document.documentElement[ method ] :
elem[ method ];
}
if ( win ) {
win.scrollTo( val, kampfer.dom.scrollTop( win ));
} else {
elem[ method ] = val;
}
};
// http://code.jquery.com/jquery-1.8.3.js
kampfer.dom.scrollTop = function(elem, val) {
var win = kampfer.dom.getWindow( elem ),
prop = 'pageYOffset',
method = 'scrollTop';
if ( val === undefined ) {
return win ? (prop in win) ? win[ prop ] :
win.document.documentElement[ method ] :
elem[ method ];
}
if ( win ) {
win.scrollTo( kampfer.dom.scrollLeft( win ), val);
} else {
elem[ method ] = val;
}
};
//http://www.cnblogs.com/rubylouvre/archive/2011/05/30/1583523.html
kampfer.dom.contains = function(parent, child) {
if(parent.compareDocumentPosition) {
return parent === child || !!(parent.compareDocumentPosition(child) & 16);
}
if(parent.contains && child.nodeType === 1) {
return parent.contains(child) && parent !== child;
}
while( (child = child.parentNode) ) {
if(child === parent) {
return true;
}
}
return false;
};