def __init__(self, username): # tested '''initialises a few values, and registers the page for comet i/o.''' self.included = set([]) self.username = username self.pageid = uidgen(self.username) from_comet['register_new_page'](self.pageid) return
def process_type1(self, handlers): # tested ''' For all registered "tags" of "type 1", this method processes: tag -> handler function as long as more specific instructions of either "type 2" : (tag, attribute) -> handler function, or "type 3" : (tag, attribute, keyword) -> handler function have not been defined. ''' for tag in handlers: for elem in self.tree.getiterator(tag): do_it = True if tag in self.handlers2: # may need to skip for attr in elem.attrib: if attr in self.handlers2[tag]: do_it = False break if tag in self.handlers3: # may need to skip for attr in elem.attrib: if attr in self.handlers3[tag]: keyword = self.extract_keyword(elem, attr) if keyword in self.handlers3[tag][attr]: do_it = False break if do_it: uid = self.pageid + "_" + uidgen(self.username) handlers[tag](self, elem, uid) return
def insert_interactive_objects(page): '''inserts the interactive objects required in a slideshow''' if not page.includes("slideshow_included"): return for div in page.tree.getiterator("div"): if 'class' in div.attrib: if div.attrib['class'] == "presentation": # add slide with interpreter new_div = Element("div") new_div.attrib['class'] = "slide" # new_div is not processed by set_overflow above which is why # we must set this property explictly. new_div.attrib['style'] = "height: 70%; overflow: auto;" new_div.attrib['id'] = "crunchy_interpreter" pre = SubElement(new_div, "pre", title="interpreter") # the following text is at least 50 characters # with a non-space character at the end. This is to allow # the creation of a list with "short" titles to select # a given slide. # see slides.js line 100 pre.text = "# Crunchy Interpreter #" uid = page.pageid + "_" + uidgen(page.username) plugin['services'].insert_interpreter(page, pre, uid) div.append(new_div) # add slide with editor new_div2 = Element("div") new_div2.attrib['class'] = "slide" # new_div2 is not processed by set_overflow above ... new_div2.attrib['style'] = "height: 70%; overflow: auto;" new_div2.attrib['id'] = "crunchy_editor" pre2 = SubElement(new_div2, "pre", title="editor") # same as above. pre2.text = "# Crunchy editor #" uid = page.pageid + "_" + uidgen(page.username) plugin['services'].insert_editor(page, pre2, uid) div.append(new_div2) return
def process_handlers3(self): # tested ''' For all registered "tags" of "type 3", this method processes: (tag, attribute, keyword) -> handler function ''' for tag in self.handlers3: for elem in list(self.tree.iter(tag)): # elem.attrib size may change during the loop attributes = dict(elem.attrib) for attr in attributes: if attr in self.handlers3[tag]: keyword = self.extract_keyword(elem, attr) if keyword in self.handlers3[tag][attr]: self.handlers3[tag][attr][keyword]( self, elem, self.pageid + "_" + uidgen(self.username)) break
def process_handlers2(self): # tested ''' For all registered "tags" of "type 2", this method processes: (tag, attribute) -> handler function as long as more specific instructions of "type 3" : (tag, attribute, keyword) -> handler function have not been defined. ''' for tag in self.handlers2: for elem in self.tree.getiterator(tag): # elem.attrib size may change during the loop attributes = dict(elem.attrib) for attr in attributes: if attr in self.handlers2[tag]: do_it = True if attr in self.handlers3[tag]: keyword = self.extract_keyword(elem, attr) if keyword in self.handlers3[tag][attr]: do_it = False if do_it: uid = self.pageid + "_" + uidgen(self.username) self.handlers2[tag][attr](self, elem, uid) return