From: <tri...@us...> - 2007-11-28 10:02:20
|
Revision: 179 http://equanda.svn.sourceforge.net/equanda/?rev=179&view=rev Author: triathlon98 Date: 2007-11-28 02:02:16 -0800 (Wed, 28 Nov 2007) Log Message: ----------- EQ-92 add FomrTraversal component Added Paths: ----------- trunk/equanda-tapestry5/src/main/resources/org/equanda/tapestry5/resources/formtraversal.js Added: trunk/equanda-tapestry5/src/main/resources/org/equanda/tapestry5/resources/formtraversal.js =================================================================== --- trunk/equanda-tapestry5/src/main/resources/org/equanda/tapestry5/resources/formtraversal.js (rev 0) +++ trunk/equanda-tapestry5/src/main/resources/org/equanda/tapestry5/resources/formtraversal.js 2007-11-28 10:02:16 UTC (rev 179) @@ -0,0 +1,324 @@ +// assure first item in form gets focus + +function equandaFtFocus() +{ + var form=document.forms[0]; + if (form!=null) + { + var i, tr, td, elem, tbody; + for (i=0; i<form.elements.length; i++) + { + elem=form.elements[i]; + if (((elem.tagName=="INPUT" ) && ((elem.type=="text") || (elem.type=="checkbox"))) || (elem.tagName=="SELECT")) + { + if ((elem.style.display!="none") && !(elem.disabled) && (elem.className!="nodisplay")) + { + td=elem.parentNode; + tr=td.parentNode; + tbody=tr.parentNode; + if ((td.style.display!="none") && (td.className!="displayNone") && (tr.style.display!="none") && (tr.className!="displayNone") && (tbody.style.display!="none") && (tbody.className!="displayNone")) + { + elem.focus(); + if (elem.tagName=="INPUT") elem.select(); + break; + } + } + } + } + } +} + +// form traversal + +var equandaFt_SUBMIT_CLASS = "submitButton"; +var equandaFt_SKIP_FIELD_CLASS = "skipField"; +var equandaFtLastKeyTime = null; +var equandaFt_MAX_DEPTH_CHECK_VISIBILITY = 10; +// check so many parents to be visible + +function equandaFtInit() +{ + var agt = navigator.userAgent.toLowerCase(); + if ( agt.indexOf('msie') != -1 || agt.indexOf('opera') != -1 ) + { + // there is a problem with shift/ctrl keys to detect when they are pressed + // onkeydown=shift key can be checked (ctrl+enter doesn't work) + // onkeypress=ctrl key can be checked (shift+tab acts as default) + // document.onkeydown = KeyHandlerIE; + document.onkeypress = equandaFtKeyHandlerIE; + } + if ( agt.indexOf('gecko') != -1 ) + { + document.onkeypress = equandaFtKeyHandlerNetscape; + } +} + +function equandaFtGetStyleClass( element ) +{ + var nav = !(window.Event); + if ( nav ) + return element.getAttribute("class"); + else + return element.getAttribute("className"); +} + +function equandaFtGetCssRules( styleSheet ) +{ + var nav = !(window.Event); + if ( nav ) + return styleSheet.cssRules ? styleSheet.cssRules : null; + else + return styleSheet.rules; +} + +function equandaFtClassDisplayNone( className ) +{ + var i, j; + for ( i = 0 ; i < document.styleSheets.length ; i++ ) + { + var rules = equandaFtGetCssRules(document.styleSheets[i]); + for ( j = 0 ; j < rules.length ; j++ ) + { + var name = rules[j].selectorText; + if ( name != null ) + if ( ( (name.substring(1) == className) && (name.charAt(0) == '.' )) || + ( name.selectorText == className ) ) + { + return rules[j].style.display == "none"; + } + } + } + return false; +} + +function equandaFtHasClass( element, _className ) +{ + var classes = equandaFtGetStyleClass(element); + if ( classes == null || classes == "" ) return false; + while ( 1 == 1 ) + { + if ( classes.indexOf(" ") == -1 ) + { + if ( classes == _className ) return true; + break; + } + else + { + var className = classes.substring(0, classes.indexOf(" ")); + if ( className == _className ) return true; + classes = classes.substring(classes.indexOf(" ") + 1); + } + } + return false; +} + +function equandaFtIsVisible( element ) +{ + var depth = equandaFt_MAX_DEPTH_CHECK_VISIBILITY; + while ( depth > 0 && element != null && element.tagName != "FORM" ) + { + depth--; + if ( element.style.display == "none" ) return false; + var classes = equandaFtGetStyleClass(element); + if ( classes != null && classes != "" ) + { + while ( true ) + { + if ( classes.indexOf(" ") == -1 ) + { + if ( equandaFtClassDisplayNone(classes) ) return false; + if ( classes == equandaFt_SKIP_FIELD_CLASS ) return false; + break; + } + else + { + // Commented the next 2 lines. + // This is for the case of class="tabset_content tabset_content_active" in tabtastic. + // (I think it's correct to consider only the last class, like "tabset_content_active" in this case) + + // var className = classes.substring(0, classes.indexOf(" ")); + // if ( classDisplayNone(className)==true ) return false; + classes = classes.substring(classes.indexOf(" ") + 1); + } + } + } + element = element.parentNode; + } + return true; +} + +function equandaFtNetscapeKeyHandler( input, event ) +{ + var pos, i; + equandaFtLastKeyTime = new Date(); + if ( input.form ) + { + if ( event.which == 13 && event.ctrlKey ) + { + pos = equandaFtGetIndex(input); + var btn = null; + if ( pos + 1 == input.form.length ) pos = 0; + for ( i = pos + 1 ; i != pos ; i++ ) + { + if ( ( input.form[i].type == "submit" || input.form[i].type == "button" ) && + !(input.form[i].disabled) && input.form[i].style.display != "none" ) + { + if ( btn == null ) btn = input.form[i]; + if ( equandaFtHasClass(input.form[i], equandaFt_SUBMIT_CLASS) ) + { + input.form[i].click(); + return false; + } + } + if ( i == input.form.length - 1 ) i = -1; + } + if ( btn != null ) + { + btn.click(); + return false; + } + return false; + } + if ( event.which == 13 || event.keyCode == 9 ) + { + if ( event.which == 13 && + ( (( input.type == "submit" ) || ( input.type == "button" )) && equandaFtHasClass(input, equandaFt_SUBMIT_CLASS) ) ) + { + input.click(); + return false; + } + if ( event.which == 13 && input.tagName == 'TEXTAREA' ) + { + return true; + } + var direction = 1; + if ( event.shiftKey ) direction = -1; + pos = ( equandaFtGetIndex(input) + direction ) % input.form.length; + if ( pos == -1 ) pos = input.form.length - 1; + while ( 1 == 1 ) + { + if ( !input.form[ pos ].type ) + pos += direction; + else if ( input.form[ pos ].type == "hidden" ) + pos += direction; + else if ( input.form[ pos ].disabled ) + pos += direction; + else if ( input.form[ pos ].style.display == "none" ) + pos += direction; + else if ( !equandaFtIsVisible(input.form[ pos ] ) ) + pos += direction; + else + break; + if ( pos == input.form.length ) pos = 0; + if ( pos == -1 ) pos = input.form.length - 1; + } + input.form[ pos ].focus(); + return false; + } + } + return true; +} + +function equandaFtMicrosoftKeyHandler( input ) +{ + var pos, i; + equandaFtLastKeyTime = new Date(); + if ( event.keyCode == 10 && event.ctrlKey ) + { + pos = equandaFtGetIndex(input); + var btn = null; + if ( pos + 1 == input.form.length ) pos = 0; + for ( i = pos + 1 ; i != pos ; i++ ) + { + if ( ( input.form[i].type == "submit" || input.form[i].type == "button" ) && + !(input.form[i].disabled) && input.form[i].style.display != "none" ) + { + if ( btn == null ) btn = input.form[i]; + if ( equandaFtHasClass(input.form[i], equandaFt_SUBMIT_CLASS) ) + { + input.form[i].click(); + return true; + } + } + if ( i == input.form.length - 1 ) i = -1; + } + if ( btn != null ) + { + btn.click(); + return true; + } + return true; + } + if ( event.keyCode == 13 || event.keyCode == 9 ) + { + if ( event.keyCode == 13 && + ( (( input.type == "submit" ) || ( input.type == "button" )) && equandaFtHasClass(input, equandaFt_SUBMIT_CLASS) ) ) + { + input.form[pos].click(); + return false; + } + if ( event.keyCode == 13 && input.tagName == 'TEXTAREA' ) + { + return true; + } + var direction = 1; + if ( event.shiftKey ) direction = -1; + pos = ( equandaFtGetIndex(input) + direction) % input.form.length; + if ( pos == -1 ) pos = input.form.length - 1; + while ( 1 == 1 ) + { + if ( !input.form[ pos ].type ) + pos += direction; + else if ( input.form[ pos ].type == "hidden" ) + pos += direction; + else if ( input.form[ pos ].disabled ) + pos += direction; + else if ( input.form[ pos ].style.display == "none" ) + pos += direction; + else if ( !equandaFtIsVisible(input.form[ pos ] ) ) + pos += direction; + else + break; + if ( pos == input.form.length ) pos = 0; + if ( pos == -1 ) pos = input.form.length - 1; + } + input.form[ pos ].focus(); + input = input.form[pos]; + if ( input.type == "text" ) + { + if ( input.createTextRange ) + { + var v = input.value; + var r = input.createTextRange(); + r.moveStart('character', v.length); + r.select(); + } + } + return false; + } + return true; +} + +function equandaFtGetIndex( input ) +{ + if ( input.form != null ) + { + var index = -1, i = 0; + while ( i < input.form.length && index == -1 ) + if ( input.form[i] == input ) index = i; + else i++; + return index; + } + return 0; +} + +function equandaFtKeyHandlerIE() +{ + var target = event.target ? event.target : window.event.srcElement; + return equandaFtMicrosoftKeyHandler(target); +} +function equandaFtKeyHandlerNetscape( event ) +{ + var target = event.target ? event.target : window.event.srcElement; + return equandaFtNetscapeKeyHandler(target, event); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |