def replaceLinks(self, tagname="a", use_page_href=True, ajaxify=False): """ replaces <tag href="#pagename">sometext</tag> with: Hyperlink("sometext", "pagename"). Hyperlinks use the History module so the notification will come in on an onHistoryChanged. """ self._clear_hyperlinks() tags = self.findTags(tagname) pageloc = Window.getLocation() pagehref = pageloc.getPageHref() for el in tags: href = el.href l = href.split("#") if len(l) != 2: continue if use_page_href and not l[0].startswith(pagehref): continue token = l[1] if not token: continue html = DOM.getInnerHTML(el) parent = DOM.getParent(el) index = DOM.getChildIndex(parent, el) if ajaxify: token = '!%s' % token hl = Hyperlink(TargetHistoryToken=token, HTML=html, Element=DOM.createSpan()) DOM.insertChild(parent, hl.getElement(), index) parent.removeChild(el) self.children.insert(index, hl) hl.setParent(self) self.hyperlinks.append(hl)
def onBrowserEvent(self, event): if DOM.eventGetType(event) == "click": td = self.getEventTargetCell(event) if td is None: return tr = DOM.getParent(td) body = DOM.getParent(tr) row = DOM.getChildIndex(body, tr) column = DOM.getChildIndex(tr, td) for listener in self.tableListeners: if hasattr(listener, 'onCellClicked'): listener.onCellClicked(self, row, column) else: listener(self)
def replaceLinks(self, tagname="a"): """ replaces <tag href="#pagename">sometext</tag> with: Hyperlink("sometext", "pagename") """ tags = self.findTags(tagname) pageloc = Window.getLocation() pagehref = pageloc.getPageHref() for el in tags: href = el.href l = href.split("#") if len(l) != 2: continue if l[0] != pagehref: continue token = l[1] if not token: continue html = DOM.getInnerHTML(el) parent = DOM.getParent(el) index = DOM.getChildIndex(parent, el) hl = Hyperlink(TargetHistoryToken=token, HTML=html, Element=DOM.createSpan()) DOM.insertChild(parent, hl.getElement(), index) self.children.insert(index, hl) parent.removeChild(el)
def insertChildBefore(new_elem, elem): """ Inserts an element "new_elem" before the element "elem". """ parent = DOM.getParent(elem) id = DOM.getChildIndex(parent, elem) DOM.insertChild(parent, new_elem, id)
def onBrowserEvent(self, event): DOM.eventPreventDefault(event) if not self.game.started: return td = self.getEventTargetCell(event) if not td: return tr = DOM.getParent(td) table = DOM.getParent(tr) row = DOM.getChildIndex(table, tr) column = DOM.getChildIndex(tr, td) target_cell = self.getCell(row, column) type = DOM.eventGetType(event) event_mapper = {'click': 'onClick', 'contextmenu': 'onRightClick', 'mousedown': 'onMouseDown', 'mouseup': 'onMouseUp', 'mouseout': 'onMouseLeave'} event_handler = event_mapper.get(type) if event_handler: getattr(self, event_handler)(target_cell)
def _onBrowserEvent(self, event, event_type): td = self.getEventTargetCell(event) if td is None: return tr = DOM.getParent(td) body = DOM.getParent(tr) row = DOM.getChildIndex(body, tr) column = DOM.getChildIndex(tr, td) if event_type == 'dblclick': lists = self.dbltableListeners else: lists = self.tableListeners for listener in lists: if event_type == 'click' and \ hasattr(listener, 'onCellClicked'): listener.onCellClicked(self, row, column) elif event_type == 'dblclick' and \ hasattr(listener, 'onCellDoubleClicked'): listener.onCellDoubleClicked(self, row, column) else: listener(self)
def getPrevSibling(elem): parent = DOM.getParent(elem) elem_index = DOM.getChildIndex(parent, elem) children = list(DOM.iterChildren(parent)) return children[elem_index - 1]