[Checkins] SVN: z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/ added nick name and pretty css to chat demo.

Paul Carduner paulcarduner at gmail.com
Sat Jul 7 11:26:28 EDT 2007


Log message for revision 77572:
  added nick name and pretty css to chat demo.

Changed:
  U   z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/browser.py
  D   z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/browser.pyc
  U   z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.css
  U   z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.pt
  U   z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.py
  U   z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/configure.zcml

-=-
Modified: z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/browser.py
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/browser.py	2007-07-07 14:46:24 UTC (rev 77571)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/browser.py	2007-07-07 15:26:27 UTC (rev 77572)
@@ -22,6 +22,7 @@
 from zope.app.container.interfaces import INameChooser
 from zope.traversing.browser import absoluteURL
 from zope.security.proxy import removeSecurityProxy
+from zope.app.session.interfaces import ISession
 from z3c.form import form, button, field
 from z3c.form.interfaces import IWidgets
 from z3c.formui import layout
@@ -29,9 +30,27 @@
 
 from z3c.formjsdemo.chat import chat, interfaces
 
+SESSION_KEY = 'z3c.formjsdemo.chat'
+
 ChatCSSViewlet = CSSViewlet('chat.css')
 ChatJSViewlet = JavaScriptViewlet('chat.js')
 
+
+class SessionProperty(object):
+
+    def __init__(self, name, default=None):
+        self.name = name
+        self.default = default
+
+    def __get__(self, inst, klass):
+        session = ISession(inst.request)[SESSION_KEY]
+        return session.get(self.name, self.default)
+
+    def __set__(self, inst, value):
+        session = ISession(inst.request)[SESSION_KEY]
+        session[self.name] = value
+
+
 class ChatRoomAddForm(layout.FormLayoutSupport, form.AddForm):
 
     label = "Add a Chat Room"
@@ -53,14 +72,30 @@
 
 class IButtons(zope.interface.Interface):
     send = jsaction.JSButton(title=u'Send')
+    connect = jsaction.JSButton(title=u'Connect')
 
 class IFields(zope.interface.Interface):
     message = zope.schema.TextLine(title=u"Message")
+    nick = zope.schema.TextLine(title=u"Nick")
 
 class ChatForm(layout.FormLayoutSupport, form.Form):
     buttons = button.Buttons(IButtons)
     fields = field.Fields(IFields)
 
+    nick = SessionProperty('nick')
+
+    @jsaction.handler(buttons['connect'])
+    def handleConnect(self, selecter):
+        nickId = self.widgets['nick'].id
+        messageId = self.widgets['message'].id
+        return '''$.get("joinChatRoom", {nick: $("#%s").val()}, function(data){
+                                $("#%s").attr("disabled", "true");
+                                $("#connect").addClass("translucent");
+                                $("#online").removeClass("translucent");
+                                $("#%s").removeAttr("disabled");
+                             });
+                             ''' % (nickId, nickId, messageId)
+
     @jsaction.handler(buttons['send'])
     def handleSend(self, selecter):
         messageId = self.widgets['message'].id
@@ -77,17 +112,19 @@
         self.widgets.update()
 
 
-def renderMessage(message):
-    return '<div class="message">%s</div>' % message
+def renderMessage(nick, message):
+    return '<div class="message"><span class="nick">%s:</span>%s</div>' % (nick, message)
 
 
 class AddMessageView(object):
 
+    nick = SessionProperty('nick')
+
     def __call__(self):
         message = self.request.get('message')
         if message is not None:
-            self.context.addMessage(message)
-        return renderMessage(message)
+            self.context.addMessage(self.nick, message)
+        return renderMessage(self.nick, message)
 
 
 class GetMessagesView(object):
@@ -95,6 +132,15 @@
     def __call__(self):
         index = int(self.request.get('index'))
         result = ""
-        for message in self.context.messages[index:]:
-            result += renderMessage(message)
+        for nick, message in self.context.messages[index:]:
+            result += renderMessage(nick, message)
         return result
+
+
+class JoinChatRoomView(object):
+
+    nick = SessionProperty('nick')
+
+    def __call__(self):
+        self.nick = self.request.get('nick')
+        return "Connected as %s" % self.nick

Deleted: z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/browser.pyc
===================================================================
(Binary files differ)

Modified: z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.css
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.css	2007-07-07 14:46:24 UTC (rev 77571)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.css	2007-07-07 15:26:27 UTC (rev 77572)
@@ -1 +1,62 @@
-//css
\ No newline at end of file
+body{
+  background: #eee;
+}
+
+#content{
+  background: #aaa;
+  width: 90ex;
+  margin: auto;
+  margin-top: 20px;
+  border: 1px solid black;
+  padding: 0;
+  -moz-border-radius: 0 0 10px 10px;
+}
+
+#header{
+  font-size: xx-large;
+  padding: .2ex;
+  margin: 0;
+  background: black;
+  color: white;
+}
+
+.translucent{
+  opacity: .25;
+}
+
+#form-widgets-nick{
+  width: 20ex;
+}
+
+#form-widgets-message{
+  width: 90%;
+}
+
+#form-buttons-send{
+  width: 9%;
+}
+
+#connect{
+  margin: 1ex;
+}
+
+#controls{
+  margin: 1ex;
+}
+
+#chat-window{
+  height: 40ex;
+  border: 1px dashed black;
+  padding: 1ex;
+  overflow: auto;
+  margin: 1ex;
+  background: white;
+}
+
+.message{
+}
+
+.nick{
+  margin-right: 1ex;
+  font-weight: bold;
+}
\ No newline at end of file

Modified: z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.pt
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.pt	2007-07-07 14:46:24 UTC (rev 77571)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.pt	2007-07-07 15:26:27 UTC (rev 77572)
@@ -1,10 +1,13 @@
 <h1 id="header" tal:content="context/topic">Topic</h1> 
-<div id="chat-window">
-  <div tal:repeat="message context/messages"
-       tal:content="message" />
+<div id="connect">
+  <span tal:content="structure string:nick: ${view/widgets/nick/render}" />
+  <div tal:replace="structure view/actions/connect/render" />
 </div>
-<div id="controls">
-  <div tal:replace="structure view/widgets/message/render" />
-  <div tal:repeat="action view/actions/values"
-       tal:replace="structure action/render" />
+<div id="online" class="translucent">
+  <div id="chat-window">
+  </div>
+  <div id="controls">
+    <div tal:replace="structure view/widgets/message/render" />
+    <div tal:replace="structure view/actions/send/render" />
+  </div>
 </div>
\ No newline at end of file

Modified: z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.py
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.py	2007-07-07 14:46:24 UTC (rev 77571)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/chat.py	2007-07-07 15:26:27 UTC (rev 77572)
@@ -35,5 +35,5 @@
         self.messages = PersistentList()
 
 
-    def addMessage(self, message):
-        self.messages.append(message)
+    def addMessage(self, nick, message):
+        self.messages.append((nick, message))

Modified: z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/configure.zcml
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/configure.zcml	2007-07-07 14:46:24 UTC (rev 77571)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/chat/configure.zcml	2007-07-07 15:26:27 UTC (rev 77572)
@@ -52,6 +52,14 @@
       permission="zope.Public"
       />
 
+  <z3c:pagelet
+      name="joinChatRoom"
+      for=".interfaces.IChatRoom"
+      class=".browser.JoinChatRoomView"
+      layer="z3c.formjsdemo.layer.IDemoBrowserLayer"
+      permission="zope.Public"
+      />
+
   <zrt-resource
       name="chat.css"
       file="chat.css"



More information about the Checkins mailing list