Mercurial > libervia-web
view libervia/pages/_browser/bridge.py @ 1346:cda5537c71d6
browser (photos/album): videos integrations:
videos can now be added to an album, the alternative media player is then used to display
them. Slides options are used to remove pagination and slidebar from slideshow (they don't
play well with media player), and video are reset when its slide is exited.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 25 Aug 2020 08:31:56 +0200 |
parents | 8998f01088ac |
children | b28025a7cc28 |
line wrap: on
line source
from browser import window import javascript class Bridge: def __getattr__(self, attr): return lambda *args, **kwargs: self.call(attr, *args, **kwargs) def on_load(self, xhr, ev, callback, errback): if xhr.status == 200: ret = javascript.JSON.parse(xhr.response) if callback is not None: if ret is None: callback() else: callback(ret) elif xhr.status == 502: # PROXY_ERROR is used for bridge error ret = javascript.JSON.parse(xhr.response) if errback is not None: errback(ret) else: print(f"bridge called failed: code: {xhr.response}, text: {xhr.statusText}") if errback is not None: errback({"fullname": "InternalError", "message": xhr.statusText}) def call(self, method_name, *args, callback, errback, **kwargs): xhr = window.XMLHttpRequest.new() xhr.bind('load', lambda ev: self.on_load(xhr, ev, callback, errback)) xhr.bind('error', lambda ev: errback( {"fullname": "ConnectionError", "message": xhr.statusText})) xhr.open("POST", f"/_bridge/{method_name}", True) data = javascript.JSON.stringify({ "args": args, "kwargs": kwargs, }) xhr.setRequestHeader('X-Csrf-Token', window.csrf_token) xhr.send(data)