mirror of
https://github.com/VTECRM/vtenext.git
synced 2026-02-26 16:18:47 +00:00
263 lines
4.8 KiB
JavaScript
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
|
|
} |