[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