[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