# HG changeset patch # User souliane # Date 1388404923 -3600 # Node ID 70ac3067d64182cfcac39757d7c327416fa98397 # Parent 5ad70625867a4904cd71f1fa7ca6fcbd86554313 browser_side: status can be edited with a click on it diff -r 5ad70625867a -r 70ac3067d641 browser_side/panels.py --- a/browser_side/panels.py Mon Dec 30 13:00:41 2013 +0100 +++ b/browser_side/panels.py Mon Dec 30 13:02:03 2013 +0100 @@ -891,20 +891,53 @@ return False -class StatusPanel(HTMLPanel): +class StatusPanel(HTMLPanel, ClickHandler, FocusHandler, KeyboardHandler): + + EMPTY_STATUS = '' + def __init__(self, host, status=''): self.host = host - self.status = status or ' ' + self.status = status HTMLPanel.__init__(self, self.__getContent()) self.setStyleName('statusPanel') + ClickHandler.__init__(self) + FocusHandler.__init__(self) + KeyboardHandler.__init__(self) + self.addClickListener(self) def __getContent(self): - return "%(status)s" % {'status': html_sanitize(self.status)} + return "%(status)s" % {'status': html_sanitize(self.status or self.EMPTY_STATUS)} def changeStatus(self, new_status): - self.status = new_status or ' ' + self.status = new_status self.setHTML(self.__getContent()) + def onClick(self, sender): + self.textarea = TextArea() + self.textarea.setStyleName('status-edit') + self.textarea.setText(self.status) + self.textarea.addKeyboardListener(self) + self.setVisible(False) + self.parent.insert(self.textarea, self.parent.getWidgetIndex(self)) + self.textarea.setFocus(True) + self.textarea.setSelectionRange(0, len(self.status)) + self.textarea.addFocusListener(self) + self.textarea.addKeyboardListener(self) + + def onKeyPress(self, sender, keycode, modifiers): + text = self.textarea.getText() + + if keycode == KEY_ENTER: + if text != self.status: + self.host.bridge.call('setStatus', None, self.host.status_panel.presence, text) + self.parent.remove(self.textarea) + self.setVisible(True) + + def onLostFocus(self, sender): + FocusHandler.onLostFocus(self, sender) + if sender == self.textarea: + self.onKeyPress(self, KEY_ENTER, None) + class PresenceStatusPanel(HorizontalPanel, ClickHandler): @@ -929,6 +962,8 @@ panel = HorizontalPanel() panel.add(self.presence_button) panel.add(self.status_panel) + panel.setCellVerticalAlignment(self.presence_button, 'baseline') + panel.setCellVerticalAlignment(self.status_panel, 'baseline') panel.setStyleName("marginAuto") self.add(panel) diff -r 5ad70625867a -r 70ac3067d641 public/libervia.css --- a/public/libervia.css Mon Dec 30 13:00:41 2013 +0100 +++ b/public/libervia.css Mon Dec 30 13:02:03 2013 +0100 @@ -133,7 +133,8 @@ } .header { - background-color: #eee; + background-color: #eee; + border-bottom: 1px solid #ddd; } /* Misc Pyjamas stuff */ @@ -576,12 +577,10 @@ margin: auto; text-align: center; width: 100%; - padding-top: 5px; - min-height: 30px; + padding: 5px 0px; text-shadow: 0 -1px 1px rgba(255,255,255,0.25); font-size: 1.2em; background-color: #eee; - border-bottom: 1px solid #ddd; } .presence-button { @@ -594,6 +593,14 @@ font-style: italic; font-weight: bold; color: #666; + cursor: pointer; +} + +.status-edit { + font-style: italic; + font-weight: bold; + color: #666; + height: 25px; } /* RegisterBox */