/*\r
* pettanR system.js\r
- * version 0.5.8\r
+ * version 0.5.9\r
* \r
* \r
* Type\r
elm.innerHTML = html;\r
return elm.firstChild;\r
},\r
- getElementsByClassName: function( _elm, _className, opt_tagName){\r
+ getElementsByClassName: function( _elm, _className, opt_tagName ){\r
var _all = !opt_tagName || opt_tagName === '*',\r
- _nodes = _all === true ? ( _elm.all || _elm.getElementsByTagName( '*')) : _elm.getElementsByTagName( opt_tagName),\r
+ _nodes = _all === true ? ( _elm.all || _elm.getElementsByTagName( '*' )) : _elm.getElementsByTagName( opt_tagName ),\r
_node, _classes, ret = [];\r
- for( var i=0, l = _nodes.length; i<l; ++i){\r
- _node = _nodes[ i];\r
- _node.nodeType === 1 && this.hasClassName( _node, _className) === true && ret.push( _node);\r
+ for( var i=0, l = _nodes.length; i<l; ++i ){\r
+ _node = _nodes[ i ];\r
+ _node.nodeType === 1 && Util.hasClassName( _node, _className ) === true && ret.push( _node );\r
}\r
return ret;\r
+ \r
+ var sp = ' ', cn,\r
+ _cnames = _className.replace( /\s+/g, sp ).split( sp ),\r
+ _nodes = Util.copyArray( _livenodes );\r
+ \r
+ for( var i = _cnames.length; i; ){\r
+ cn = _cnames[ --i ];\r
+ for( var j = _nodes.length; j > 0; ){\r
+ _node = _nodes[ --j ];\r
+ if( _node.nodeType !== 1 || Util.hasClassName( _node, cn ) === false ){\r
+ _nodes.split( j, 1 );\r
+ --j;\r
+ };\r
+ };\r
+ };\r
},\r
getChildIndex: function( _parent, _child ){\r
var _children = _parent.getElementsByTagName( _child.tagName ),\r
getFileUID: function( FILEDATAorFILE ){\r
if( FILEDATAorFILE instanceof FileClass ){\r
return FILEDATAorFILE.getUID();\r
- }\r
+ };\r
\r
var uid = Util.getIndex( FILEDATA_RESITER, FILEDATAorFILE );\r
if( uid === -1 ){\r
uid = FILEDATA_RESITER.length;\r
FILEDATA_RESITER.push( FILEDATAorFILE );\r
- }\r
+ };\r
return uid;\r
},\r
getFileDataAccess: function( UIDorFILEorFILEDATA ){\r
} else\r
if( Util.getIndex( FILEDATA_RESITER, UIDorFILEorFILEDATA ) !== -1 ){\r
return UIDorFILEorFILEDATA;\r
- }\r
+ };\r
return null;\r
},\r
getChildren: function( UIDorFILEorFILEDATA ){\r
if( _ticket.fileUID === _uid && _ticket.eventType === _eventType && _ticket.callBack === _callback ){\r
EVENT_LISTENER_REGISTER.splice( i, 1 );\r
_ticket.kill();\r
- }\r
- }\r
+ };\r
+ };\r
},\r
getTreeAccess: function(){\r
\r
if( FILE_CONTROLER.getFileData( _tree.getCurrentFile() ) === _data ){\r
_treeAccess = TREE_ACCESS_ARRAY[ _tree.getUID() ];\r
_treeAccess && _treeAccess.dispatchFileEvent( _event );\r
- }\r
- }\r
- }\r
+ };\r
+ };\r
+ };\r
}\r
- }\r
+ };\r
\r
var TreeClass = function( apiuser, rootFileData ){\r
var PARENT_FILE_RESITER = [],\r
if( _type === Const.TREE.EVENT.UPDATE && _eventType === Const.FILE.EVENT.GET_SEQENTIAL_FILES ){\r
//_callback( _eventType, _targetFile );\r
AsyncCall.add( apiuser, _callback, [ _eventType, _targetFile ] );\r
- }\r
- }\r
- }\r
+ };\r
+ };\r
+ };\r
\r
this.getUID = function(){\r
return Util.getIndex( TREE_ACCESS_ARRAY, ACCESS );\r
while( PARENT_FILE_RESITER.length > 0 ){\r
_currentFile = PARENT_FILE_RESITER.shift();\r
_currentFile.destroy();\r
- }\r
+ };\r
\r
AsyncCall.remove( apiuser );\r
instance = apiuser = null;\r
return true;\r
- }\r
+ };\r
};\r
\r
var FileEventTicketClass = function( _uid, _eventType, _callback ){\r
*/\r
var KeyEvent = ( function(){\r
var EVENT_LIST_MAP = [],\r
+ LOCK_UP = [],\r
+ LOCK_DOWN = [],\r
application = null,\r
currentList = null;\r
\r
keyupTicket = null,\r
keyPress = null,\r
keypressTicket = null;\r
-\r
+ \r
+ function unlock( lock, key ){\r
+ lock.splice( Util.getIndex( lock, key ), 1 );\r
+ };\r
+ \r
function onKeyChange( e ){\r
var cancel = false,\r
type = e.type,\r
key = e.keyCode || e.charCode || e.which,\r
shift = Type.isBoolean( e.shiftKey ) === true ? e.shiftKey : ( e.modifiers & Event.SHIFT_MASK ),\r
ctrl = Type.isBoolean( e.ctrlKey ) === true ? e.ctrlKey : ( e.modifiers & Event.CONTROL_MASK ),\r
- t;\r
-\r
+ lock = type === 'keyup' ? LOCK_UP : LOCK_DOWN;\r
+ // block chattering\r
+ if( Util.getIndex( lock, key ) !== -1 ) return false;\r
+ lock.push( key );\r
+ AsyncCall.add( SUPER_USER_KEY, unlock, [ lock, key ] );\r
+ \r
if( key === 16 || shift === true ){\r
KeyEvent.shiftEnabled = type !== 'keyup';\r
};\r
if( key === 17 || ctrl === true ){\r
KeyEvent.ctrlEnabled = type !== 'keyup';\r
};\r
-\r
- for( var i=currentList.length; t = currentList[ --i ]; ){\r
+ for( var i=currentList.length, t; t = currentList[ --i ]; ){\r
if( Type.isFunction( t[ type ] ) === true && t.keyCode === key && ( t.shift === undefined || t.shift === shift ) && ( t.ctrl === undefined || t.ctrl === ctrl )){\r
+ \r
AsyncCall.add( t.apiuser, t[ type ], e );\r
cancel = true;\r
};\r
if( _handler !== this.keydown ) return false;\r
} else {\r
if( _handler !== this.keyup ) return false;\r
- }\r
- }\r
+ };\r
+ };\r
if( _keyCode && _keyCode !== this.keyCode ) return false;\r
if( _shift && _shift !== this.shift ) return false;\r
if( _ctrl && _ctrl !== this.ctrl ) return false;\r
\r
return true;\r
}\r
- }\r
+ };\r
\r
function registerEvent( _apiuser, _type, _onKeydown, _onKeyup, _keyCode, _shift, _ctrl ){\r
var _uid = _apiuser.getUID(),\r
} else\r
if( _type === 'cursol' ){\r
\r
- }\r
+ };\r
},\r
remove: function( _apiuser, _type, _handler, _keyCode, _shift, _ctrl ){\r
var _list = EVENT_LIST_MAP[ _apiuser.getUID() ],\r
elmA.innerHTML = _newValue;\r
elmA.style.display = 'block';\r
\r
- onUpdate && _newValue !== value && onUpdate( _newValue, value );\r
+ onUpdate && _newValue !== value && AsyncCall.add( apiuser, onUpdate, [ _newValue, value ] );\r
\r
value = _newValue;\r
focus = false;\r
};\r
instance.value( value );\r
MouseEvent.add( apiuser, elmWrapper, 'click', instance.focus );\r
- }\r
+ };\r
\r
var ButtonClass = function( apiuser, uiGroup, elmWrapper, onUpdate ){\r
var instance = this,\r
\r
function onClick(){\r
focus = true;\r
- onUpdate();\r
+ // onUpdate();\r
+ AsyncCall.add( apiuser, onUpdate );\r
return false;\r
};\r
this.focus = function(){\r
MouseEvent.remove( apiuser, elmWrapper );\r
apiuser = uiGroup = elmWrapper = onUpdate = instance = null;\r
};\r
- }\r
+ };\r
\r
var FileInputClass = function( apiuser, uiGroup, elmWrapper, onUpdate, validater, elmFileInput ){\r
var elmFilePath = Util.getElementsByClassName( elmWrapper, 'file-path' )[ 0 ],\r
if( focus === true ){\r
OptionControl.update( instance, _value );\r
};\r
- Type.isFunction( onUpdate ) === true && onUpdate( _value );\r
+ Type.isFunction( onUpdate ) === true && AsyncCall.add( apiuser, onUpdate, [ _value ] );\r
break;\r
- }\r
- }\r
- }\r
+ };\r
+ };\r
+ };\r
return value;\r
};\r
this.selectIndex = function(){\r
KeyEvent.remove( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 27 );\r
KeyEvent.remove( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 9 );\r
KeyEvent.updateCurrentListener( _apiuser );\r
- }\r
- }\r
+ };\r
+ };\r
\r
function onKeyDown( e ){\r
if( currentItem === null ) return true;\r
- var keyCode = e.keyCode,\r
+ var keyCode = e.keyCode || e.charCode,\r
_index = Util.getIndex( currentList, currentItem );\r
if( keyCode === 13 || keyCode === 27 || keyCode === 9 || keyCode === 18 || e.altKey === true ){ // 13.return 27.esc 9.tab 18.alt\r
keyCode === 9 && tabShift( _index, e.shiftKey === true ? -1 : 1 );\r
currentItem && currentItem.blur( keyCode );\r
};\r
return false;\r
- }\r
+ };\r
\r
function tabShift( _index, _way ){\r
var l = currentList.length,\r