vtenext/portal/js/modomt.js
2021-04-28 20:10:26 +02:00

263 lines
4.8 KiB
JavaScript

/*************************************
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
* SPDX-License-Identifier: AGPL-3.0-only
************************************/
//
// This script was created
// by Mircho Mirev
// mo /mo@momche.net/
//
// :: feel free to use it BUT
// :: if you want to use this code PLEASE send me a note
// :: and please keep this disclaimer intact
//
if ( document.ELEMENT_NODE == null )
{
document.ELEMENT_NODE = 1
document.TEXT_NODE = 3
}
function getSubNodeByName( hNode, sNodeName )
{
if( hNode != null )
{
var nNc = 0
var nC = 0
var hNodeChildren = hNode.childNodes
var hCNode = null
while( nC < hNodeChildren.length )
{
hCNode = hNodeChildren.item( nC++ )
if( ( hCNode.nodeType == 1 ) && ( hCNode.nodeName.toLowerCase() == sNodeName ) )
{
return hCNode
}
}
}
return null
}
function getPrevNodeSibling( hNode )
{
if( hNode != null )
{
do {
hNode = hNode.previousSibling
} while( hNode != null && hNode.nodeType != 1 )
return hNode
}
}
function getNextNodeSibling( hNode )
{
if( hNode != null )
{
do {
hNode = hNode.nextSibling
} while( hNode != null && hNode.nodeType != 1 )
return hNode
}
}
function getLastSubNodeByName( hNode, sNodeName )
{
if( hNode != null )
{
var nNc = 0
var nC = 0
var hNodeChildren = hNode.childNodes
var hCNode = null
var nLength = hNodeChildren.length - 1
while( nLength >=0 )
{
hCNode = hNodeChildren.item( nLength )
if( ( hCNode.nodeType == 1 ) && ( hCNode.nodeName.toLowerCase() == sNodeName ) )
{
return hCNode
}
nLength--
}
}
return null
}
function getSubNodeByProperty( hNode, sProperty, sPropValue )
{
if( hNode != null )
{
var nNc = 0
var nC = 0
var hNodeChildren = hNode.childNodes
var hCNode = null
var sAttribute
var hProp
sPropValue = sPropValue.toLowerCase()
while( nC < hNodeChildren.length )
{
hCNode = hNodeChildren.item( nC++ )
if( hCNode.nodeType == document.ELEMENT_NODE )
{
hProp = eval( 'hCNode.'+sProperty )
if( typeof( sPropValue ) != 'undefined' )
{
if( hProp.toLowerCase() == sPropValue )
{
return hCNode
}
}
else
{
return hCNode
}
}
nNc++
}
}
return null
}
function findAttribute( hNode, sAtt )
{
sAtt = sAtt.toLowerCase()
for( var nI = 0; nI < hNode.attributes.length; nI++ )
{
if( hNode.attributes.item( nI ).nodeName.toLowerCase() == sAtt )
{
return hNode.attributes.item( nI ).nodeValue
}
}
return null
}
function getSubNodeByAttribute( hNode, sAtt, sAttValue )
{
if( hNode != null )
{
var nNc = 0
var nC = 0
var hNodeChildren = hNode.childNodes
var hCNode = null
var sAttribute
sAttValue = sAttValue.toLowerCase()
while( nC < hNodeChildren.length )
{
hCNode = hNodeChildren.item( nC++ )
if( hCNode.nodeType == document.ELEMENT_NODE )
{
sAttribute = hCNode.getAttribute( sAtt )
if( sAttribute && sAttribute.toLowerCase() == sAttValue )
return hCNode
}
nNc++
}
}
return null
}
function getLastSubNodeByAttribute( hNode, sAtt, sAttValue )
{
if( hNode != null )
{
var nNc = 0
var nC = 0
var hNodeChildren = hNode.childNodes
var hCNode = null
var nLength = hNodeChildren.length - 1
while( nLength >= 0 )
{
hCNode = hNodeChildren.item( nLength )
if( hCNode.nodeType == document.ELEMENT_NODE )
{
sAttribute = hCNode.getAttribute( sAtt )
if( sAttribute && sAttribute.toLowerCase() == sAttValue )
return hCNode
}
nLength--
}
}
return null
}
function getParentByTagName( hNode, sParentTagName )
{
while( ( hNode.tagName ) && !( /(body|html)/i.test( hNode.tagName ) ) )
{
if( hNode.tagName == sParentTagName )
{
return hNode
}
hNode = hNode.parentNode
}
return null
}
function getParentByAttribute( hNode, sAtt, sAttValue )
{
while( ( hNode.tagName ) && !( /(body|html)/i.test( hNode.tagName ) ) )
{
//opera strangely returns non null result sometimes
var sAttr = hNode.getAttribute( sAtt )
if( sAttr != null && sAttr.toString().length > 0 )
{
if( sAttValue !== null )
{
if( sAttr == sAttValue )
{
return hNode
}
}
else
{
return hNode
}
}
hNode = hNode.parentNode
}
return null
}
function getParentByProperty( hNode, sProperty, sPropValue )
{
while( ( hNode.tagName ) && !( /(body|html)/i.test( hNode.tagName ) ) )
{
//opera strangely returns non null result sometimes
var hProp = eval( 'hNode.'+sProperty )
if( hProp != null && hProp.toString().length > 0 )
{
if( sPropValue !== null )
{
if( hProp == sPropValue )
{
return hNode
}
}
else
{
return hNode
}
}
hNode = hNode.parentNode
}
return null
}
function getNodeText( hNode )
{
if( hNode == null )
{
return ''
}
var sRes
if( hNode.hasChildNodes() )
{
sRes = hNode.childNodes.item(0).nodeValue
}
else
{
sRes = hNode.text
}
return sRes
}