[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