# The basic idea is somewhat that of a shadow dom. # # ElementView wraps a single div with whatever content you want (derive to implement the view) # # It must have an element, which is drawn. Draw returns the div or whatever. An ElementView # does not draw itself, but rather is drawn. # # Listviews provide structure # class ElementView def initialize @element = nil end #abstract function that should return the single element that is being represented # the element is also stored in @element def draw raise "implement me to return an Element" end # helper function to create an element with possible classes, id and text # The first argument is a bit haml inspired, so "tagname.classname" is the format # but if tagname is ommited it will default to div # also several classnames may be given # if one of the names ends in a ! (bang) it will be assigned as the id # second argument is optional, but if given will be added as text (content) to the newly # created Element # return the new Element, which is not linked into the dom at that point (see << and add*) def div(name_class = "div" , text = nil) name , clazz = name_class.split(".") name = "div" if name.empty? element = $document.create_element(name) element.text = text if text return element unless clazz if( clazz.is_a? Array ) clazz.each { |c| add_class_or_id( element , cl )} else add_class_or_id element , clazz end element end def add_class_or_id element , class_or_id return element unless class_or_id if class_or_id[-1] == "!" element.id = class_or_id[0 ... -1] else element.add_class class_or_id end element end # wrap the @element variable with the given element # so if wrapper ==
the new @element will be