def _dispatchEvent(sender, evt, useCap): if evt is None: evt = wnd().event else: try: sender = get_main_frame().gobject_wrap(sender) # webkit HACK! evt = get_main_frame().gobject_wrap(evt) # webkit HACK! except: pass listener = None curElem = sender #print "_dispatchEvent", sender, evt, evt.type cap = getCaptureElement() listener = get_listener(cap) if cap and (listener is not None): #print "capture _dispatchEvent", cap, listener dispatchEvent(evt, cap, listener) evt.stopPropagation() return while curElem and (get_listener(curElem) is None): #print "no parent listener", curElem, getParent(curElem) curElem = getParent(curElem) if curElem and getNodeType(curElem) != 1: curElem = None listener = get_listener(curElem) if listener is not None: dispatchEvent(evt, curElem, listener)
def _onsubmit(self, form, event, something): print form, event, something try: event = get_main_frame().gobject_wrap(event) # webkit HACK! form = get_main_frame().gobject_wrap(form) # webkit HACK! except: pass if self.iframe: self.__formAction = form.action return self._listener.onFormSubmit()
def _onsubmit(self, form, event, something): print form, event, something try: event = get_main_frame().gobject_wrap(event) # webkit HACK! form = get_main_frame().gobject_wrap(form) # webkit HACK! except: pass if self.iframe is not None: self.__formAction = form.action return self._listener.onFormSubmit()
def init(): print "init", get_main_frame(), pyjd.is_desktop if get_main_frame() is None: if pyjd.is_desktop: pyjd.add_setup_callback(init) # pyjd.add_pre_run_callback(_first_notify) return global historyToken historyToken = '' hash = wnd().location.hash if hash and len(hash) > 0: historyToken = hash[1:]
def onReadyStateChange(self, xmlHttp, event, ignorearg): try: xmlHttp = get_main_frame().gobject_wrap(xmlHttp) # HACK! except: pass # hula / XUL print xmlHttp.readyState if xmlHttp.readyState != 4: return # TODO - delete xmlHttp.onreadystatechange localHandler = handlers.get(xmlHttp) del handlers[xmlHttp] responseText = xmlHttp.responseText print "headers", xmlHttp.getAllResponseHeaders() status = xmlHttp.status handler = None xmlHttp = None print "status", status print "local handler", localHandler # XXX HACK! webkit wrapper returns 0 not 200! if status == 0: print "HACK ALERT! webkit wrapper returns 0 not 200!" if status == 200 or status == 0: localHandler.onCompletion(responseText) else : localHandler.onError(responseText, status)
def browser_event_cb(view, event, from_window): global sCaptureElem #print "sCaptureElem", sCaptureElem if event is None: event = wnd().event else: try: event = get_main_frame().gobject_wrap(event) # webkit HACK! except: pass #print "browser_event_cb", event et = eventGetType(event) #print "browser_event_cb", event, et if et == "resize": onResize() return if et == 'mouseout': #print "mouse out", event _dispatchCapturedMouseoutEvent(event) if (et == 'keyup' or et == 'keydown' or et == 'keypress' or et == 'change'): return _dispatchCapturedEvent(event) else: return _dispatchCapturedMouseEvent(event)
def asyncGetImpl(self, user, pwd, url, handler): mf = get_main_frame() url = self._convertUrlToAbsolute(url) xmlHttp = self.doCreateXmlHTTPRequest() print dir(xmlHttp) print user, pwd, url, handler #try : if mf.platform == 'webkit': xmlHttp.open("GET", url, True, user, pwd) else: xmlHttp.open("GET", url) xmlHttp.setRequestHeader("Content-Type", "text/plain charset=utf-8") # TODO: xmlHttp.onreadystatechange = self.onReadyStateChange if mf.platform == 'webkit' or mf.platform == 'mshtml': mf._addXMLHttpRequestEventListener(xmlHttp, "onreadystatechange", self.onReadyStateChange) else: mf._addXMLHttpRequestEventListener(xmlHttp, "load", self.onLoad) handlers[xmlHttp] = handler xmlHttp.send('') return True
def __gwt_handler(self, view, evt, from_window): try: evt = get_main_frame().gobject_wrap(evt) # webkit HACK! except: pass listener = DOM.get_listener(self.elem) if listener is not None: listener.onBrowserEvent(evt);
def __gwt_handler(self, view, evt, from_window): try: evt = get_main_frame().gobject_wrap(evt) # webkit HACK! except: pass listener = DOM.get_listener(self.elem) if listener is not None: listener.onBrowserEvent(evt)
def hookEvents(self, iframe, form, listener): # TODO: might have to fix this, use DOM.set_listener() self._listener = listener if iframe is not None: wf = mf = get_main_frame() self._onload_listener = mf.addEventListener(iframe, "load", self._onload) self._onsubmit_listener = mf.addEventListener(form, "onsubmit", self._onsubmit)
def hookEvents(self, iframe, form, listener): # TODO: might have to fix this, use DOM.set_listener() self._listener = listener if iframe: wf = mf = get_main_frame() self._onload_listener = mf.addEventListener( iframe, "load", self._onload) self._onsubmit_listener = mf.addEventListener(form, "onsubmit", self._onsubmit)
def sinkEvents(element, bits): """ Set which events should be captured on a given element and passed to the registered listener. To set the listener, use setEventListener(). @param bits: A combination of bits; see ui.Event for bit values """ mask = getEventsSunk(element) ^ bits eventbitsmap[element] = bits if not mask: return bits = mask if not bits: return #cb = lambda x,y,z: _dispatchEvent(y) cb = _dispatchEvent mf = get_main_frame() if (bits & 0x00001): mf.addEventListener(element, "click", cb) if (bits & 0x00002): mf.addEventListener(element, "dblclick", cb) if (bits & 0x00004): mf.addEventListener(element, "mousedown", cb) if (bits & 0x00008): mf.addEventListener(element, "mouseup", cb) if (bits & 0x00010): mf.addEventListener(element, "mouseover", cb) if (bits & 0x00020): mf.addEventListener(element, "mouseout", cb) if (bits & 0x00040): mf.addEventListener(element, "mousemove", cb) if (bits & 0x00080): mf.addEventListener(element, "keydown", cb) if (bits & 0x00100): mf.addEventListener(element, "keypress", cb) if (bits & 0x00200): mf.addEventListener(element, "keyup", cb) if (bits & 0x00400): mf.addEventListener(element, "change", cb) if (bits & 0x00800): mf.addEventListener(element, "focus", cb) if (bits & 0x01000): mf.addEventListener(element, "blur", cb) if (bits & 0x02000): mf.addEventListener(element, "losecapture", cb) if (bits & 0x04000): mf.addEventListener(element, "scroll", cb) if (bits & 0x08000): mf.addEventListener(element, "load", cb) if (bits & 0x10000): mf.addEventListener(element, "error", cb) if (bits & 0x20000): mf.addEventListener(element, "contextmenu", cb)
def init(): mf = get_main_frame() mf._addWindowEventListener("click", browser_event_cb) mf._addWindowEventListener("change", browser_event_cb) mf._addWindowEventListener("mouseout", browser_event_cb) mf._addWindowEventListener("mousedown", browser_event_cb) mf._addWindowEventListener("mouseup", browser_event_cb) mf._addWindowEventListener("resize", browser_event_cb) mf._addWindowEventListener("keyup", browser_event_cb) mf._addWindowEventListener("keydown", browser_event_cb) mf._addWindowEventListener("keypress", browser_event_cb) mf._addWindowEventListener("mousewheel", browser_event_cb)
def getModuleBaseURL(): import os.path # get original app base s = get_main_frame().getUri() # pull out the directory part s = os.path.dirname(s) if len(s) > 0: return s + "/" return ""
def hookEvents(self): elem = self.elem; win = elem.contentWindow; mf = get_main_frame() mf._addWindowEventListener('keydown', self.__gwt_handler, win) mf._addWindowEventListener('keyup', self.__gwt_handler, win) mf._addWindowEventListener('keypress', self.__gwt_handler, win) mf._addWindowEventListener('mousedown', self.__gwt_handler, win) mf._addWindowEventListener('mouseup', self.__gwt_handler, win) mf._addWindowEventListener('mousemove', self.__gwt_handler, win) mf._addWindowEventListener('mouseover', self.__gwt_handler, win) mf._addWindowEventListener('mouseout', self.__gwt_handler, win) mf._addWindowEventListener('click', self.__gwt_handler, win) mf._addWindowEventListener('focus', self.__gwt_focus_handler, win) mf._addWindowEventListener('blur', self.__gwt_blur_handler, win)
def hookEvents(self): elem = self.elem win = elem.contentWindow mf = get_main_frame() mf._addWindowEventListener('keydown', self.__gwt_handler, win) mf._addWindowEventListener('keyup', self.__gwt_handler, win) mf._addWindowEventListener('keypress', self.__gwt_handler, win) mf._addWindowEventListener('mousedown', self.__gwt_handler, win) mf._addWindowEventListener('mouseup', self.__gwt_handler, win) mf._addWindowEventListener('mousemove', self.__gwt_handler, win) mf._addWindowEventListener('mouseover', self.__gwt_handler, win) mf._addWindowEventListener('mouseout', self.__gwt_handler, win) mf._addWindowEventListener('click', self.__gwt_handler, win) mf._addWindowEventListener('focus', self.__gwt_focus_handler, win) mf._addWindowEventListener('blur', self.__gwt_blur_handler, win)
def browser_event_cb(view, event, from_window): try: event = get_main_frame().gobject_wrap(event) # webkit HACK! except: pass #print "browser_event_cb", event et = eventGetType(event) #print "browser_event_cb", event, et if et == "resize": onResize() return elif et == 'mouseout': #print "mouse out", event return _dispatchCapturedMouseoutEvent(event) elif et == 'keyup' or et == 'keydown' or et == 'keypress' or et == 'change': return _dispatchCapturedEvent(event) else: return _dispatchCapturedMouseEvent(event)
def asyncPostImpl(self, user, pwd, url, postData, handler, return_xml, content_type): mf = get_main_frame() xmlHttp = self.doCreateXmlHTTPRequest() url = self._convertUrlToAbsolute(url) print "xmlHttp", user, pwd, url, postData, handler, dir(xmlHttp) #try : if mf.platform == 'webkit' or mf.platform == 'mshtml': xmlHttp.open("POST", url, True, '', '') else: # EEK! xmlhttprequest.open in xpcom is a miserable bastard. #xmlHttp.open("POST", url, True, '', '') print url, xmlHttp.open("POST", url) xmlHttp.setRequestHeader("Content-Type", content_type) xmlHttp.setRequestHeader("Content-Length", str(len(postData))) #for c in Cookies.get_crumbs(): # xmlHttp.setRequestHeader("Set-Cookie", c) # print "setting cookie", c if mf.platform == 'webkit' or mf.platform == 'mshtml': mf._addXMLHttpRequestEventListener(xmlHttp, "onreadystatechange", self.onReadyStateChange) else: mf._addXMLHttpRequestEventListener(xmlHttp, "load", self.onLoad) handlers[xmlHttp] = handler xmlHttp.send(postData) return True #except: #del xmlHttp.onreadystatechange handler = None xmlHttp = None localHandler.onError(str(e)) return False
def getModuleBaseURL(): # get original app base s = get_main_frame().getUri() #s = doc().location.href # Pull off any hash. i = s.find('#') if i != -1: s = s[:i] # Pull off any query string. i = s.find('?') if i != -1: s = s[:i] # Rip off everything after the last slash. i = s.rfind('/') if i != -1: s = s[:i] if len(s) > 0: return s + "/" return ""
def sinkEvents(element, bits): """ Set which events should be captured on a given element and passed to the registered listener. To set the listener, use setEventListener(). @param bits: A combination of bits; see ui.Event for bit values """ mask = getEventsSunk(element) ^ bits eventbitsmap[element] = bits if not mask: return bits = mask if not bits: return mf = get_main_frame() if hasattr(mf, "_addEventListener"): aev = mf._addEventListener else: aev = mf.addEventListener #cb = lambda x,y,z: _dispatchEvent(y) cb = _dispatchEvent # mozilla stupidly has DOMMouseScroll... sinkEventsMozilla(element, bits) bit = 1 while bits: if bit > bits: raise RuntimeError("sinkEvents: bit outruns bits") if (bits & bit): for event_name in Event.eventbits[bit][1]: aev(element, event_name, cb) bits ^= bit bit <<= 1
def __clearTimeout(self, tid): return get_main_frame().window.clearTimeout(tid)
def doCreateXmlHTTPRequest(self): return get_main_frame().getXmlHttpRequest()
def __setInterval(self, periodMillis): return get_main_frame().window.setInterval(self.__fire, periodMillis)
def setBooleanAttribute(elem, attr, value): mf = get_main_frame() setattr(elem, mf.mash_attrib(attr), value)
def getBooleanAttribute(elem, attr): mf = get_main_frame() return bool(getattr(elem, mf.mash_attrib(attr)))
def getElemAttribute(elem, attr): mf = get_main_frame() if not elem.hasAttribute(attr): return str(getattr(elem, mf.mash_attrib(attr))) return str(elem.getAttribute(attr))
def __clearInterval(self, tid): return get_main_frame().window.clearInterval(tid)
def getAttribute(elem, attr): mf = get_main_frame() return str(getattr(elem, attr))
def __setTimeout(self, delayMillis): return get_main_frame().window.setTimeout(self.__fire, delayMillis)
def __clearTimeout(self,tid): return get_main_frame().window.clearTimeout(tid)
def alert(txt): get_main_frame()._alert(txt)
def setIntStyleAttribute(elem, attr, value): mf = get_main_frame() if hasattr(elem.style, 'setProperty'): elem.style.setProperty(mf.mash_attrib(attr), str(value), "") else: elem.style.setAttribute(mf.mash_attrib(attr), str(value), "")
def asyncImpl(self, method, user, pwd, url, postData, handler, returnxml=False, content_type=None, headers=None): if headers is None: headers = {} if user and pwd and not "Authorization" in headers: import base64 headers["Authorization"] = 'Basic %s' % (base64.b64encode('%s:%s' % (user, pwd))) if postData is not None and not "Content-Length" in headers: headers["Content-Length"] = str(len(postData)) if content_type is not None: headers["Content-Type"] = content_type if not "Content-Type" in headers: if returnxml: headers["Content-Type"] = "application/xml; charset=utf-8" else: headers["Content-Type"] = "text/plain; charset=utf-8" #for c in Cookies.get_crumbs(): # xmlHttp.setRequestHeader("Set-Cookie", c) # print "setting cookie", c mf = get_main_frame() xmlHttp = self.doCreateXmlHTTPRequest() url = self._convertUrlToAbsolute(url) print "xmlHttp", method, user, pwd, url, postData, handler, dir(xmlHttp) #try : if mf.platform == 'webkit' or mf.platform == 'mshtml': xmlHttp.open(method, url, True, '', '') else: # EEK! xmlhttprequest.open in xpcom is a miserable bastard. #xmlHttp.open("POST", url, True, '', '') print url, xmlHttp.open(method, url) for h in headers: if isinstance(headers[h], str): xmlHttp.setRequestHeader(h, headers[h]) else: hval = ';'.join([str(i) for i in headers[h]]) xmlHttp.setRequestHeader(h, hval) #if not "Set-Cookie" in headers: # headers["Set-Cookie"] = [] #for c in Cookies.get_crumbs(): # headers["Set-Cookie"].append(c) # print "setting cookie", c if mf.platform == 'webkit' or mf.platform == 'mshtml': mf._addXMLHttpRequestEventListener(xmlHttp, "onreadystatechange", self.onReadyStateChange) else: mf._addXMLHttpRequestEventListener(xmlHttp, "load", self.onLoad) handlers[xmlHttp] = handler xmlHttp.send(postData) return True #except: #del xmlHttp.onreadystatechange handler = None xmlHttp = None localHandler.onError(str(e)) return False
def getIntAttribute(elem, attr): mf = get_main_frame() return int(getattr(elem, attr))