| Viewing file:  HTMLSelectElement.py (4.64 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
#########################################################################
 # File Name:            HTMLSelectElement.py
 #
 #
 """
 WWW: http://4suite.com/4DOM         e-mail: support@4suite.com
 
 Copyright (c) 2000 Fourthought Inc, USA.   All Rights Reserved.
 See  http://4suite.com/COPYRIGHT  for license and copyright information
 """
 
 from xml.dom import implementation
 from xml.dom import IndexSizeErr
 from xml.dom.html.HTMLElement import HTMLElement
 import string
 
 class HTMLSelectElement(HTMLElement):
 
 def __init__(self, ownerDocument, nodeName='SELECT'):
 HTMLElement.__init__(self, ownerDocument, nodeName)
 
 def _get_type(self):
 if self._get_multiple():
 return 'select-multiple'
 return 'select-one'
 
 def _get_selectedIndex(self):
 options = self._get_options()
 for ctr in range(len(options)):
 node = options.item(ctr)
 if node._get_selected() == 1:
 return ctr
 return -1
 
 def _set_selectedIndex(self,index):
 options = self._get_options()
 if index < 0 or index >= len(options):
 raise IndexSizeErr()
 
 for ctr in range(len(options)):
 node = options.item(ctr)
 if ctr == index:
 node._set_selected(1)
 else:
 node._set_selected(0)
 
 def _get_value(self):
 options = self._get_options()
 node = options.item(self._get_selectedIndex())
 if node.hasAttribute('VALUE'):
 value = node.getAttribute('VALUE')
 elif node.firstChild:
 value = node.firstChild.data
 else:
 value = ''
 return value
 
 def _set_value(self,value):
 # This doesn't seem to do anything in browsers
 pass
 
 def _get_length(self):
 return self._get_options()._get_length()
 
 def _get_options(self):
 children = self.getElementsByTagName('OPTION')
 return implementation._4dom_createHTMLCollection(children)
 
 def _get_disabled(self):
 if self.getAttributeNode('DISABLED'):
 return 1
 return 0
 
 def _set_disabled(self,disabled):
 if disabled:
 self.setAttribute('DISABLED', 'DISABLED')
 else:
 self.removeAttribute('DISABLED')
 
 def _get_multiple(self):
 if self.getAttributeNode('MULTIPLE'):
 return 1
 return 0
 
 def _set_multiple(self,mult):
 if mult:
 self.setAttribute('MULTIPLE', 'MULTIPLE')
 else:
 self.removeAttribute('MULTIPLE')
 
 def _get_name(self):
 return self.getAttribute('NAME')
 
 def _set_name(self,name):
 self.setAttribute('NAME',name)
 
 def _get_size(self):
 rt = self.getAttribute('SIZE')
 if rt != None:
 return string.atoi(rt)
 return -1
 
 def _set_size(self,size):
 self.setAttribute('SIZE',str(size))
 
 def _get_tabIndex(self):
 return string.atoi(self.getAttribute('TABINDEX'))
 
 def _set_tabIndex(self,tabindex):
 self.setAttribute('TABINDEX',str(tabindex))
 
 def add(self,newElement,beforeElement):
 self.insertBefore(newElement,beforeElement)
 
 def remove(self,index):
 if index < 0 or index >= self._get_length:
 return
 hc = self._get_options()
 node = hc.item(index)
 self.removeChild(node)
 
 def _get_form(self):
 parent = self.parentNode
 while parent:
 if parent.nodeName == "FORM":
 return parent
 parent = parent.parentNode
 return None
 
 ### Attribute Access Mappings ###
 
 _readComputedAttrs = HTMLElement._readComputedAttrs.copy()
 _readComputedAttrs.update ({
 'type'          : _get_type,
 'length'        : _get_length,
 'options'       : _get_options,
 'form'          : _get_form,
 'selectedIndex' : _get_selectedIndex,
 'value'         : _get_value,
 'disabled'      : _get_disabled,
 'multiple'      : _get_multiple,
 'name'          : _get_name,
 'size'          : _get_size,
 'tabIndex'      : _get_tabIndex,
 })
 
 _writeComputedAttrs = HTMLElement._writeComputedAttrs.copy()
 _writeComputedAttrs.update ({
 'selectedIndex' : _set_selectedIndex,
 'value'         : _set_value,
 'disabled'      : _set_disabled,
 'multiple'      : _set_multiple,
 'name'          : _set_name,
 'size'          : _set_size,
 'tabIndex'      : _set_tabIndex,
 })
 
 _readOnlyAttrs = filter(lambda k,m=_writeComputedAttrs: not m.has_key(k),
 HTMLElement._readOnlyAttrs + _readComputedAttrs.keys())
 
 |