[Checkins] SVN: Sandbox/pcardune/zobby/ adding intial workings of
zobby, an ajax-heavy web app
Paul Carduner
paulcarduner at gmail.com
Wed May 2 18:41:26 EDT 2007
Log message for revision 75032:
adding intial workings of zobby, an ajax-heavy web app
Changed:
A Sandbox/pcardune/zobby/
A Sandbox/pcardune/zobby/src/
A Sandbox/pcardune/zobby/src/zobby/
A Sandbox/pcardune/zobby/src/zobby/__init__.py
A Sandbox/pcardune/zobby/src/zobby/browser/
A Sandbox/pcardune/zobby/src/zobby/browser/__init__.py
A Sandbox/pcardune/zobby/src/zobby/browser/bl.gif
A Sandbox/pcardune/zobby/src/zobby/browser/br.gif
A Sandbox/pcardune/zobby/src/zobby/browser/browser.py
A Sandbox/pcardune/zobby/src/zobby/browser/client.js
A Sandbox/pcardune/zobby/src/zobby/browser/client.pt
A Sandbox/pcardune/zobby/src/zobby/browser/configure.zcml
A Sandbox/pcardune/zobby/src/zobby/browser/ml.gif
A Sandbox/pcardune/zobby/src/zobby/browser/mr.gif
A Sandbox/pcardune/zobby/src/zobby/browser/ms.jpg
A Sandbox/pcardune/zobby/src/zobby/browser/tl.gif
A Sandbox/pcardune/zobby/src/zobby/browser/tr.gif
A Sandbox/pcardune/zobby/src/zobby/browser/zobby.css
A Sandbox/pcardune/zobby/src/zobby/browser/zobby.png
A Sandbox/pcardune/zobby/src/zobby/configure.zcml
A Sandbox/pcardune/zobby/src/zobby/interfaces.py
A Sandbox/pcardune/zobby/src/zobby/zobby-configure.zcml
A Sandbox/pcardune/zobby/src/zobby/zobby.py
-=-
Added: Sandbox/pcardune/zobby/src/zobby/__init__.py
===================================================================
Property changes on: Sandbox/pcardune/zobby/src/zobby/__init__.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Sandbox/pcardune/zobby/src/zobby/browser/__init__.py
===================================================================
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/__init__.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Sandbox/pcardune/zobby/src/zobby/browser/bl.gif
===================================================================
(Binary files differ)
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/bl.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: Sandbox/pcardune/zobby/src/zobby/browser/br.gif
===================================================================
(Binary files differ)
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/br.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: Sandbox/pcardune/zobby/src/zobby/browser/browser.py
===================================================================
--- Sandbox/pcardune/zobby/src/zobby/browser/browser.py 2007-05-02 22:38:10 UTC (rev 75031)
+++ Sandbox/pcardune/zobby/src/zobby/browser/browser.py 2007-05-02 22:41:24 UTC (rev 75032)
@@ -0,0 +1,39 @@
+from jsonserver.jsonrpc import MethodPublisher
+
+from zobby.zobby import Session
+
+class ZobbyHandler(MethodPublisher):
+ """simple json-rpc view class with two methods"""
+
+ def newSession(self, name):
+ self.context[name] = Session()
+ return "Created a new session named %s"% name
+
+ def getSessions(self):
+ return list(self.context.keys())
+
+ def testConnection(self):
+ return "You are successfully connected to %s" % self.context.__name__
+
+ def connectUser(self, username):
+ self.context.addUser(username)
+ return "You have been connected to the server with username %s" % username
+
+ def disconnectUser(self, username):
+ self.context.removeUser(username)
+ return "You have been disconnected from the server."
+
+class SessionHandler(MethodPublisher):
+ """simple json-rpc view class for handling sessions."""
+
+ def testConnection(self):
+ return "You are successfully connected to session %s" % self.context.__name__
+
+ def sendChat(self, message, index):
+ self.context.addChatMessage(message)
+ return list(self.context.chatMessages[index:])
+
+ def getChatMessages(self, index):
+ return list(self.context.chatMessages[index:])
+
+
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/browser.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Sandbox/pcardune/zobby/src/zobby/browser/client.js
===================================================================
--- Sandbox/pcardune/zobby/src/zobby/browser/client.js 2007-05-02 22:38:10 UTC (rev 75031)
+++ Sandbox/pcardune/zobby/src/zobby/browser/client.js 2007-05-02 22:41:24 UTC (rev 75032)
@@ -0,0 +1,147 @@
+function roundCorners(element){
+ $(element).wrap('<div class="dialog"><div class="bd">'+
+ '<div class="c"><div class="s"></div></div></div></div>');
+ $('div.dialog')
+ .prepend('<div class="hd">'+
+ '<div class="c"></div></div>')
+ .append('<div class="ft">'+
+ '<div class="c"></div></div>');
+}
+
+
+
+var jsonrpc = imprt("jsonrpc");
+var pythonkw = imprt("pythonkw");
+var address=".";
+var server=null;
+var connected=false;
+var session=null;
+var running=false;
+
+function connect(){
+ if (server == null){
+ try{server = new jsonrpc.ServiceProxy(address, ["testConnection",
+ "connectUser",
+ "disconnectUser",
+ "newSession",
+ "getSessions"]);
+ }catch(e){alert(e);}
+ var username = $("#connectUsername").attr("value");
+ server.connectUser(username,
+ function(result, err){
+ $("#message").html(result);
+ $("#connectUsername").attr("disabled", true);
+ $("#connectButton")
+ .attr("value", "Disconnect")
+ .unbind("click")
+ .click(disconnect);
+ ping();
+ getSessions();
+ });
+ }
+}
+
+function disconnect(){
+ server.disconnectUser($("#connectUsername").attr("value"),
+ function(result, err){
+ $("#message").html(result);
+ $("#connectUsername").attr("disabled", false);
+ $("#connectButton")
+ .attr("value", "Connect")
+ .unbind("click")
+ .click(connect);
+ });
+}
+
+function ping(){
+ server.testConnection(pingCallback)
+}
+function pingCallback(resp, err){
+ if (!err){
+ connected=true;
+ $("#status").html(resp);
+ }
+ else{
+ connected=false;
+ $("#status").html(''+err);
+ }
+}
+
+function joinSession(name){
+ session = null;
+ $("#chatbox").html("");
+ try{session = new jsonrpc.ServiceProxy(address+'/'+name, ["testConnection",
+ "sendChat","getChatMessages"]);
+ }catch(e){alert(e);}
+ session.testConnection(function(result,err){
+ $("#workspaceMessage").html(result);
+ $("#workspace").show();
+ if (running == false){
+ runSessionLoop();
+ }
+ });
+}
+
+function closeSession(){
+ session=null;
+}
+
+function runSessionLoop(){
+ running = true;
+ updateChatMessages();
+ ping();
+ if (session){
+ t=setTimeout("runSessionLoop()",1000);
+ }
+}
+
+function sendChatMessage(event){
+ if (event.which != 13){ return null; }
+
+ session.sendChat(new pythonkw.PythonKw({'message': $('#chatInput').attr('value'),
+ 'index': $('#chatbox div').length}),
+ function(result, err){
+ $("#chatInput").attr('value','');
+ })
+}
+
+function updateChatMessages(){
+ session.getChatMessages($("#chatbox div").length,
+ function (result, err){
+ $.each(result, function(i, value){
+ $("#chatbox").prepend($("<div></div>").html(value));
+ });
+ });
+}
+
+function getSessions(){
+ server.getSessions(function (result,err){
+ $("#sessions").html("");
+ $.each(result,function(i,name){
+ link = $('<input type="button" />').attr("value", name);
+ link.click(function(){joinSession(name); return null;});
+ $("<li></li>").html(link).appendTo("#sessions");
+ })
+ });
+}
+
+function createNewSession(){
+ server.newSession($("#newSessionName").attr('value'), function(result,err){
+ $("#message").html(result);
+ getSessions();
+ });
+}
+
+function initializeApp(){
+ $("#connectButton").click(connect);
+ $("#newSession").click(createNewSession);
+ $("#sendChatInput").click(sendChatMessage);
+ $("#chatInput").keydown(sendChatMessage);
+ $("#workspace").hide();
+}
+
+
+$(document).ready(function() {
+ initializeApp();
+ roundCorners("#insideWrapper");
+ });
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/client.js
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Sandbox/pcardune/zobby/src/zobby/browser/client.pt
===================================================================
--- Sandbox/pcardune/zobby/src/zobby/browser/client.pt 2007-05-02 22:38:10 UTC (rev 75031)
+++ Sandbox/pcardune/zobby/src/zobby/browser/client.pt 2007-05-02 22:41:24 UTC (rev 75032)
@@ -0,0 +1,39 @@
+<html>
+ <head>
+ <title>Zobby Client</title>
+ <script type="text/javascript" src="/++resource++jsolait/jsolait.js"></script>
+ <script type="text/javascript" src="/++resource++jquery.js"></script>
+ <script type="text/javascript" src="/++resource++client.js"></script>
+ <link rel="stylesheet" href="/++resource++zobby.css" type="text/css">
+ </head>
+ <body>
+ <div id="wrapper">
+ <div id="insideWrapper">
+ <h1 id="header">
+ <img src="/++resource++zobby.png" />
+ </h1>
+ <h4 id="subheader"><u>The</u> web based collaborative editor.</h4>
+ <div id="app">
+ <div id="status" class="sunk"></div>
+ <div id="message"></div>
+ <ul id="sessions"></ul>
+ <div id="actions">
+ <div id="connectActions">
+ <label for="connectUsername">Username:</label>
+ <input id="connectUsername" type="text" />
+ <input id="connectButton" type="button" value="Connect" />
+ <input id="newSession" type="button" value="New Session"/>
+ <input id="newSessionName" type="text" />
+ </div>
+ </div>
+ <div id="workspace" class="sunk">
+ <div id="workspaceMessage" class="sunk"></div>
+ <div id="chatbox" class="sunk"></div>
+ <input id="chatInput" type="text" class="sunk"/>
+ <input id="sendChatInput" type="button" value="Send" />
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
\ No newline at end of file
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/client.pt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Sandbox/pcardune/zobby/src/zobby/browser/configure.zcml
===================================================================
--- Sandbox/pcardune/zobby/src/zobby/browser/configure.zcml 2007-05-02 22:38:10 UTC (rev 75031)
+++ Sandbox/pcardune/zobby/src/zobby/browser/configure.zcml 2007-05-02 22:41:24 UTC (rev 75032)
@@ -0,0 +1,93 @@
+<configure xmlns:jsonrpc="http://namespaces.zope.org/jsonrpc"
+ xmlns="http://namespaces.zope.org/browser"
+ xmlns:help="http://namespaces.zope.org/help"
+ i18n_domain="zope"
+ >
+
+ <addform
+ label="Add Zobby"
+ name="addZobby.html"
+ permission="zope.ManageContent"
+ schema="..interfaces.IZobbyApplication"
+ content_factory="..zobby.ZobbyApplication"
+ />
+
+ <addMenuItem
+ title="Zobby"
+ class="..zobby.ZobbyApplication"
+ view="addZobby.html"
+ permission="zope.ManageContent"
+ />
+
+ <page
+ for="..interfaces.IZobbyApplication"
+ name="index.html"
+ template="client.pt"
+ permission="zope.View"
+ menu="zmi_views"
+ title="View"
+ />
+ <jsonrpc:view
+ for="..interfaces.IZobbyApplication"
+ permission="zope.View"
+ methods="testConnection newSession getSessions connectUser disconnectUser"
+ class=".browser.ZobbyHandler"
+ />
+ <jsonrpc:view
+ for="..interfaces.ISession"
+ permission="zope.View"
+ methods="testConnection sendChat getChatMessages"
+ class=".browser.SessionHandler"
+ />
+ <resource
+ name="client.js"
+ file="client.js"
+ permission="zope.View"
+ />
+ <resource
+ name="zobby.css"
+ file="zobby.css"
+ permission="zope.View"
+ />
+ <resource
+ name="zobby.png"
+ file="zobby.png"
+ permission="zope.View"
+ />
+ <resource
+ name="tl.gif"
+ file="tl.gif"
+ permission="zope.View"
+ />
+ <resource
+ name="tr.gif"
+ file="tr.gif"
+ permission="zope.View"
+ />
+ <resource
+ name="ml.gif"
+ file="ml.gif"
+ permission="zope.View"
+ />
+ <resource
+ name="mr.gif"
+ file="mr.gif"
+ permission="zope.View"
+ />
+ <resource
+ name="bl.gif"
+ file="bl.gif"
+ permission="zope.View"
+ />
+ <resource
+ name="br.gif"
+ file="br.gif"
+ permission="zope.View"
+ />
+ <resource
+ name="ms.jpg"
+ file="ms.jpg"
+ permission="zope.View"
+ />
+
+</configure>
\ No newline at end of file
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/configure.zcml
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Sandbox/pcardune/zobby/src/zobby/browser/ml.gif
===================================================================
(Binary files differ)
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/ml.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: Sandbox/pcardune/zobby/src/zobby/browser/mr.gif
===================================================================
(Binary files differ)
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/mr.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: Sandbox/pcardune/zobby/src/zobby/browser/ms.jpg
===================================================================
(Binary files differ)
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/ms.jpg
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: Sandbox/pcardune/zobby/src/zobby/browser/tl.gif
===================================================================
(Binary files differ)
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/tl.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: Sandbox/pcardune/zobby/src/zobby/browser/tr.gif
===================================================================
(Binary files differ)
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/tr.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: Sandbox/pcardune/zobby/src/zobby/browser/zobby.css
===================================================================
--- Sandbox/pcardune/zobby/src/zobby/browser/zobby.css 2007-05-02 22:38:10 UTC (rev 75031)
+++ Sandbox/pcardune/zobby/src/zobby/browser/zobby.css 2007-05-02 22:41:24 UTC (rev 75032)
@@ -0,0 +1,141 @@
+body {
+ background: #fff;
+}
+
+#wrapper {
+ background: #fff;
+ width: 75%;
+ padding: 20px;
+ margin: 0px auto;
+ border: 0px solid #999;
+}
+
+.sunk {
+ border-top: 1px solid black;
+ border-left: 1px solid #555;
+ border-bottom: 1px solid white;
+ border-right: 1px solid #ccc;
+}
+
+#header {
+ margin-top: -10px;
+}
+
+#subheader {
+ margin-top: -40px;
+ float: right;
+ color: white;
+ font-size: small;
+}
+
+#status {
+ background: #ccc;
+ padding: 3px;
+}
+
+#workspace {
+ margin: auto;
+ margin-top: 10px;
+ padding: 10px;
+ background: #777;
+}
+
+#workspaceMessage {
+ background: #ffc;
+ border: 1px solid #aa0;
+ padding: 3px;
+ font-size: small;
+}
+
+#chatbox {
+ height: 15em;
+ overflow: auto;
+ border: 1px solid #999;
+ background: white;
+ margin-bottom: 5px;
+ margin-top: 5px;
+ padding: 5px;
+ font-family: courier, serif;
+ font-size: small;
+}
+
+#chatbox div {
+ border-bottom: 1px dotted #ccc;
+ font-family: courier, serif;
+ font-size: small;
+}
+
+#chatInput {
+ width: 100%;
+ font-family: courier, serif;
+ font-size: small;
+}
+
+input {
+ border: 1px solid #999;
+ margin: 2px;
+ background: #eee;
+ border-top: 1px solid white;
+ border-left: 1px solid #ccc;
+ border-bottom: 1px solid black;
+ border-right: 1px solid #555;
+}
+
+input[type=text]{
+ border-top: 1px solid black;
+ border-left: 1px solid #555;
+ border-bottom: 1px solid white;
+ border-right: 1px solid #ccc;
+}
+
+
+
+
+
+
+
+
+.dialog {
+ margin:0px auto;
+ min-width:20em;
+}
+
+.dialog .hd .c,
+.dialog .ft .c {
+ font-size:1px; /* ensure minimum height */
+ height:13px;
+}
+
+.dialog .ft .c {
+ height:14px;
+}
+
+.dialog .hd {
+ background:transparent url(/++resource++tl.gif) no-repeat 0px 0px;
+}
+
+.dialog .hd .c {
+ background:transparent url(/++resource++tr.gif) no-repeat right 0px;
+}
+
+.dialog .bd {
+ background:transparent url(/++resource++ml.gif) repeat-y 0px 0px;
+}
+
+.dialog .bd .c {
+ background:transparent url(/++resource++mr.gif) repeat-y right 0px;
+}
+
+.dialog .bd .c .s {
+ margin:0px 8px 0px 4px;
+ background:#808080 url(/++resource++ms.jpg) repeat-x 0px 0px;
+ padding:1em;
+}
+
+.dialog .ft {
+ background:transparent url(/++resource++bl.gif) no-repeat 0px 0px;
+}
+
+.dialog .ft .c {
+ background:transparent url(/++resource++br.gif) no-repeat right 0px;
+}
\ No newline at end of file
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/zobby.css
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Sandbox/pcardune/zobby/src/zobby/browser/zobby.png
===================================================================
(Binary files differ)
Property changes on: Sandbox/pcardune/zobby/src/zobby/browser/zobby.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: Sandbox/pcardune/zobby/src/zobby/configure.zcml
===================================================================
--- Sandbox/pcardune/zobby/src/zobby/configure.zcml 2007-05-02 22:38:10 UTC (rev 75031)
+++ Sandbox/pcardune/zobby/src/zobby/configure.zcml 2007-05-02 22:41:24 UTC (rev 75032)
@@ -0,0 +1,20 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+ i18n_domain="zope">
+
+ <class class="zobby.zobby.ZobbyApplication">
+ <require permission="zope.View"
+ interface=".interfaces.IZobbyApplication" />
+ <require permission="zope.ManageContent"
+ set_schema=".interfaces.IZobbyApplication" />
+ </class>
+
+ <class class="zobby.zobby.Session">
+ <require permission="zope.View"
+ interface=".interfaces.ISession" />
+ <require permission="zope.View"
+ set_schema=".interfaces.ISession" />
+ </class>
+
+ <include package=".browser" />
+
+</configure>
\ No newline at end of file
Property changes on: Sandbox/pcardune/zobby/src/zobby/configure.zcml
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Sandbox/pcardune/zobby/src/zobby/interfaces.py
===================================================================
--- Sandbox/pcardune/zobby/src/zobby/interfaces.py 2007-05-02 22:38:10 UTC (rev 75031)
+++ Sandbox/pcardune/zobby/src/zobby/interfaces.py 2007-05-02 22:41:24 UTC (rev 75032)
@@ -0,0 +1,22 @@
+from zope.interface import Interface, Attribute
+from zope.app.container.interfaces import IContainer
+
+
+class IZobbyApplication(IContainer):
+ """A Zobby Session."""
+
+ users = Attribute("users")
+
+ def addUser(self, username):
+ """Connect a user to the app."""
+
+ def removeUser(self, username):
+ """Remove a user from the app."""
+
+class ISession(IContainer):
+ """A zobby session.... contains documents"""
+
+ chatMessages = Attribute("chat messages")
+
+ def addChatMessage(message):
+ """Add a message to the chat."""
Property changes on: Sandbox/pcardune/zobby/src/zobby/interfaces.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Sandbox/pcardune/zobby/src/zobby/zobby-configure.zcml
===================================================================
--- Sandbox/pcardune/zobby/src/zobby/zobby-configure.zcml 2007-05-02 22:38:10 UTC (rev 75031)
+++ Sandbox/pcardune/zobby/src/zobby/zobby-configure.zcml 2007-05-02 22:41:24 UTC (rev 75032)
@@ -0,0 +1 @@
+<include package="zobby" />
Property changes on: Sandbox/pcardune/zobby/src/zobby/zobby-configure.zcml
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Sandbox/pcardune/zobby/src/zobby/zobby.py
===================================================================
--- Sandbox/pcardune/zobby/src/zobby/zobby.py 2007-05-02 22:38:10 UTC (rev 75031)
+++ Sandbox/pcardune/zobby/src/zobby/zobby.py 2007-05-02 22:41:24 UTC (rev 75032)
@@ -0,0 +1,35 @@
+from persistent import Persistent
+from persistent.list import PersistentList
+from zope.interface import implements
+from zope.app.container import btree
+
+import interfaces
+
+
+class ZobbyApplication(btree.BTreeContainer):
+ """The Zobby Application object"""
+ implements(interfaces.IZobbyApplication)
+
+ def __init__(self):
+ super(ZobbyApplication, self).__init__()
+ self.users = PersistentList()
+
+ def addUser(self, username):
+ """Connects a user to the app."""
+ self.users.append(username)
+
+ def removeUser(self, username):
+ """disconnect a user from the app."""
+ self.users.remove(username)
+
+
+class Session(btree.BTreeContainer):
+ """a Zobby Session."""
+ implements(interfaces.ISession)
+
+ def __init__(self):
+ super(Session, self).__init__()
+ self.chatMessages = PersistentList()
+
+ def addChatMessage(self, message):
+ self.chatMessages.append(message)
Property changes on: Sandbox/pcardune/zobby/src/zobby/zobby.py
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the Checkins
mailing list