Mercurial > libervia-web
changeset 239:b911f2b43fd4
browser_side: added input history in the unibox:
This functionality uses a file from the sat project:
use the -I parameter of pyjsbuild to add sat library
to your PYJSPATH. To ease also possible to use your
sat source directory instead of the library, you just
need to trick pyjsbuild with a symbolic link:
SAT=~/workspace/sat
if [[ ! -e $SAT/sat ]]; then ln -sf $SAT/src $SAT/sat; fi
This will allow you to import like that in libervia.py:
from sat.tools.frontend.misc import InputHistory
And then you can build with:
$PYJS/bin/pyjsbuild libervia --no-compile-inplace -m -I $SAT
author | souliane <souliane@mailoo.org> |
---|---|
date | Mon, 14 Oct 2013 20:54:13 +0200 |
parents | dec76d4536ad |
children | a565ce2facc0 |
files | browser_side/panels.py libervia.py |
diffstat | 2 files changed, 18 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/browser_side/panels.py Fri Oct 11 15:40:29 2013 +0200 +++ b/browser_side/panels.py Mon Oct 14 20:54:13 2013 +0200 @@ -33,7 +33,7 @@ from pyjamas.ui.HTML import HTML from pyjamas.ui.Image import Image from pyjamas.ui.ClickListener import ClickHandler -from pyjamas.ui.KeyboardListener import KEY_ENTER +from pyjamas.ui.KeyboardListener import KEY_ENTER, KEY_UP, KEY_DOWN from pyjamas.ui.MouseListener import MouseHandler from pyjamas.Timer import Timer from pyjamas import DOM @@ -217,6 +217,10 @@ self._timer.schedule(2000) + def history_cb(text): + self.setText(text) + Timer(10, lambda: self.setCursorPos(len(text))) + # if keycode == KEY_ENTER and not self.visible: if keycode == KEY_ENTER: if _txt: @@ -233,9 +237,14 @@ print "ERROR: Unknown target hook type" else: # we send the message to the selected target self._selected_cache.onTextEntered(_txt) + self.host._updateInputHistory(_txt) self.setText('') self._timeCb(None) # we remove the popup sender.cancelKey() + elif keycode == KEY_UP: + self.host._updateInputHistory(_txt, -1, history_cb) + elif keycode == KEY_DOWN: + self.host._updateInputHistory(_txt, +1, history_cb) else: self.__onComposing()
--- a/libervia.py Fri Oct 11 15:40:29 2013 +0200 +++ b/libervia.py Mon Oct 14 20:54:13 2013 +0200 @@ -33,6 +33,7 @@ from browser_side import panels, dialog from browser_side.jid import JID from browser_side.tools import html_sanitize +from sat.tools.frontend.misc import InputHistory MAX_MBLOG_CACHE = 500 # Max microblog entries kept in memories @@ -96,15 +97,17 @@ dump(o)""" else: if isinstance(errobj['message'], dict): - print("Error %s: %s" % (errobj['message']['faultCode'], errobj['message']['faultString'])) + print("Error %s: %s" % (errobj['message']['faultCode'], errobj['message']['faultString'])) else: - print("Error: %s" % errobj['message']) + print("Error: %s" % errobj['message']) + class RegisterCall(LiberviaJsonProxy): def __init__(self): LiberviaJsonProxy.__init__(self, "/register_api", ["isRegistered", "isConnected", "connect"]) + class BridgeCall(LiberviaJsonProxy): def __init__(self): LiberviaJsonProxy.__init__(self, "/json_api", @@ -146,7 +149,8 @@ Timer(notify=_timerCb).schedule(self.retry_delay) self.retry_delay *= 2 -class SatWebFrontend: + +class SatWebFrontend(InputHistory): def onModuleLoad(self): print "============ onModuleLoad ==============" panels.ChatPanel.registerClass() @@ -648,6 +652,7 @@ # TODO: chat state notification for groupchat pass + if __name__ == '__main__': pyjd.setup("http://localhost:8080/libervia.html") app = SatWebFrontend()