[Checkins] SVN: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/ adding calculator demo.

Paul Carduner paulcarduner at gmail.com
Thu Jun 28 23:49:09 EDT 2007


Log message for revision 77202:
  adding calculator demo.

Changed:
  A   Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/
  A   Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/__init__.py
  A   Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/browser.py
  A   Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/calculator.css
  A   Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/calculator.pt
  A   Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/configure.zcml

-=-
Added: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/__init__.py
===================================================================


Property changes on: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/browser.py
===================================================================
--- Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/browser.py	                        (rev 0)
+++ Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/browser.py	2007-06-29 03:49:08 UTC (rev 77202)
@@ -0,0 +1,112 @@
+import os.path
+import zope.interface
+from zope.viewlet.viewlet import CSSViewlet
+from z3c.form import form, button, field
+from z3c.formui import layout
+from z3c.formjs import jsbutton, jsevent, interfaces
+
+CalculatorCSSViewlet = CSSViewlet('calculator.css')
+
+class IGridButton(interfaces.IJSButton):
+    """A button within the grid."""
+
+class Literal(jsbutton.JSButton):
+    zope.interface.implements(IGridButton)
+
+class Operator(jsbutton.JSButton):
+    zope.interface.implements(IGridButton)
+
+class IButtons(zope.interface.Interface):
+    one = Literal(title=u'1')
+    two = Literal(title=u'2')
+    three = Literal(title=u'3')
+    add = Operator(title=u'+')
+
+    four = Literal(title=u'4')
+    five = Literal(title=u'5')
+    six = Literal(title=u'6')
+    subtract = Operator(title=u'-')
+
+    seven = Literal(title=u'7')
+    eight = Literal(title=u'8')
+    nine = Literal(title=u'9')
+    multiply = Operator(title=u'*')
+
+    zero = Literal(title=u'0')
+    decimal = Literal(title=u'.')
+    equal = Operator(title=u'=')
+    divide = Operator(title=u'/')
+
+    clear = jsbutton.JSButton(title=u"C")
+
+
+class GridButtonActions(button.ButtonActions):
+
+    cols = 4
+
+    def grid(self):
+        rows = []
+        current = []
+        for button in self.values():
+            if not IGridButton.providedBy(button.field):
+                continue
+            current.append(button)
+            if len(current) == self.cols:
+                rows.append(current)
+                current = []
+        if current:
+            current += [None]*(self.cols-len(current))
+            rows.append(current)
+        return rows
+
+
+class CalculatorForm(layout.FormLayoutSupport, form.Form):
+
+    buttons = button.Buttons(IButtons)
+
+    def updateActions(self):
+        self.actions = GridButtonActions(self, self.request, self.context)
+        self.actions.update()
+
+    @jsevent.handler(Operator)
+    def handleOperator(self, id):
+        return '''var operator = $("#operator .value").html();
+                  var newOperator = $("#%s").val();
+                  var current = $("#current .value").html();
+                  var stack = $("#stack .value").html();
+                  if (operator == ""){
+                      stack = current;
+                      operator = newOperator;
+                  } else if(newOperator == "="){
+                      current = eval(stack+operator+current);
+                      stack = "";
+                      operator = "";
+                  } else {
+                      current = eval(stack+operator+current);
+                      stack = current;
+                  }
+                  
+                  $("#operator .value").html(operator);
+                  $("#stack .value").html(stack);
+                  $("#recentOperator .value").html("True");
+                  $("#current .value").html(current);''' % id
+
+    @jsevent.handler(Literal)
+    def handleLiteral(self, id):
+        return '''var recentOperator = $("#recentOperator .value").html();
+                  var current = $("#current .value").html();
+                  
+                  if (recentOperator != ""){
+                    current = "";
+                  }
+                  current = current+number;
+                  $("#current .value").html(current);
+                  $("#recentOperator .value").html("");
+                  ''' % id
+
+    @jsevent.handler(buttons['clear'])
+    def handlerClear(self, id):
+        return '''$("#stack .value").html("");
+                  $("#current .value").html("");
+                  $("#operator .value").html("");
+                  $("#recentOperator .value").html("");'''


Property changes on: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/browser.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/calculator.css
===================================================================
--- Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/calculator.css	                        (rev 0)
+++ Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/calculator.css	2007-06-29 03:49:08 UTC (rev 77202)
@@ -0,0 +1,105 @@
+body {
+  margin: 20px;
+  font-family: Arial, Helvetica;
+}
+
+h1 {
+  font-size: 15px;
+  padding: 0 5px 2px 5px;
+  margin: 0 0 7px 0;
+  border-bottom: 2px solid black;
+  width: auto;
+  height: 15px;
+}
+
+h1 span.name {
+  float: left;
+}
+
+h1 span.version {
+  float: right;
+}
+
+div#calculator {
+  width: 250px;
+  padding: 10px 15px 10px 15px;
+  background: #DDD;
+  border: 2px solid black;
+  -moz-border-radius: 10px;
+}
+
+div#display {
+  width: 100%;
+  border: 2px solid #999;
+  background: #A5BC98;
+  -moz-border-radius: 4px;
+  padding: 0;
+  margin: 0;
+  margin-bottom: 4px;
+}
+
+div#recentOperator,
+div#stack {
+  display: none;
+}
+
+div#operator {
+  height: 10px;
+  text-align: right;
+  font-size: 12px;
+  font-weight: bold;
+  padding-right: 5px;
+}
+
+div#operator span.label {
+  display: none;
+}
+
+div#current {
+  height: 30px;
+  text-align: right;
+  font-family: "Digital Readout Upright", Eurostile, Helvetica;
+  font-size: 30px;
+  font-weight: bold;
+  padding: 3px;
+}
+
+div#current span.label {
+  display: none;
+}
+
+input[type=button] {
+  height: 30px;
+  width: 50px;
+  border-width: 1.5px;
+  font-family: Verdana, Helvetica;
+  font-size: 20px;
+  font-weight: bold;
+  -moz-border-radius: 4px;
+}
+
+div#buttons {
+  text-align: center;
+}
+
+div#buttons table {
+  border-spacing: 0;
+  margin-top: 5px;
+  margin-left: auto;
+  margin-right: auto;
+}
+div#buttons table td {
+  padding: 0px 4px 6px 4px;
+}
+
+input[name="form.buttons.clear"] {
+  width: 224px;
+  background: #FF443E;
+  color: white;
+}
+
+div.info {
+  width: 250px;
+  text-align: center;
+  font-size: 12px;
+}


Property changes on: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/calculator.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/calculator.pt
===================================================================
--- Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/calculator.pt	                        (rev 0)
+++ Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/calculator.pt	2007-06-29 03:49:08 UTC (rev 77202)
@@ -0,0 +1,46 @@
+<h1>JavaScript Calculator</h1>
+<div id="calculator">
+  <h1>
+    <span class="name">A simple calculator</span>
+    <span class="version">v1.0</span>
+  </h1>
+  <div id="display">
+    <div id="stack">
+      <span class="label">Stack:</span>
+      <span class="value"></span>
+    </div>
+    <div id="recentOperator">
+      <span class="label">Operator:</span>
+      <span class="value"></span>
+    </div>
+    <div id="operator">
+      <span class="label">Operator:</span>
+      <span class="value"></span>
+    </div>
+    <div id="current">
+      <span class="label">Current:</span>
+      <span class="value"></span>
+    </div>
+  </div>
+  <div metal:use-macro="macro:form">
+    <div id="buttons" metal:fill-slot="buttons">
+      <table>
+        <tr tal:repeat="row view/actions/grid">
+          <td tal:repeat="action row">
+            <input tal:condition="action"
+		   tal:replace="structure action/render" />
+          </td>
+        </tr>
+      </table>
+      <input tal:replace="structure view/actions/clear/render" />
+    </div>
+  </div>
+</div>
+<div class="info">
+  <p>This example is best viewed in Firefox with the <a
+    href="http://desktoppub.about.com/library/fonts/dd/uc_digitalreadout.htm"
+    >Digital Readout</a> font installed.
+  <p>
+</div>
+
+


Property changes on: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/calculator.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/configure.zcml
===================================================================
--- Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/configure.zcml	                        (rev 0)
+++ Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/configure.zcml	2007-06-29 03:49:08 UTC (rev 77202)
@@ -0,0 +1,36 @@
+<configure
+    xmlns="http://namespaces.zope.org/browser"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="z3c.formjsdemo">
+
+  <z3c:pagelet
+      name="calculator.html"
+      for="zope.app.folder.interfaces.IFolder"
+      class=".browser.CalculatorForm"
+      layer="z3c.formjsdemo.layer.IDemoBrowserLayer"
+      permission="zope.Public"
+      />
+
+  <z3c:template
+      template="calculator.pt"
+      for=".browser.CalculatorForm"
+      layer="z3c.formjsdemo.layer.IDemoBrowserLayer"
+      />
+
+  <zrt-resource
+      name="calculator.css"
+      file="calculator.css"
+      layer="z3c.formjsdemo.layer.IDemoBrowserLayer"
+      />
+
+  <viewlet
+      name="calculator.css"
+      view=".browser.CalculatorForm"
+      manager="z3c.formjsdemo.skin.ICSS"
+      class=".browser.CalculatorCSSViewlet"
+      permission="zope.Public"
+      layer="z3c.formjsdemo.layer.IDemoBrowserLayer"
+      />
+
+
+</configure>


Property changes on: Sandbox/pcardune/z3c.formjsdemo/trunk/src/z3c/formjsdemo/calculator/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list