Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/views
diff options
context:
space:
mode:
Diffstat (limited to 'views')
-rw-r--r--views/appadmin.html198
-rw-r--r--views/default/_base.html25
-rw-r--r--views/default/_base.html.119
-rw-r--r--views/default/_base.html.bak20
-rw-r--r--views/default/adminpage.html3
-rw-r--r--views/default/image.html23
-rw-r--r--views/default/index.html55
-rw-r--r--views/default/index.html.14
-rw-r--r--views/default/index.html.bak4
-rw-r--r--views/default/submit.html4
-rw-r--r--views/default/testpage.html2
-rw-r--r--views/default/testpage.html.bak4
-rw-r--r--views/default/upload.html2
-rw-r--r--views/default/user.html20
-rw-r--r--views/generic.html18
-rw-r--r--views/generic.json11
-rw-r--r--views/generic.rss16
-rw-r--r--views/generic.xml11
-rw-r--r--views/layout.html67
-rw-r--r--views/web2py_ajax.html90
20 files changed, 596 insertions, 0 deletions
diff --git a/views/appadmin.html b/views/appadmin.html
new file mode 100644
index 0000000..cdd48f7
--- /dev/null
+++ b/views/appadmin.html
@@ -0,0 +1,198 @@
+{{extend 'layout.html'}}
+<script><!--
+jQuery(document).ready(function(){
+ jQuery("table.sortable tbody tr").mouseover( function() {
+ jQuery(this).addClass("highlight"); }).mouseout( function() {
+ jQuery(this).removeClass("highlight"); });
+ jQuery('table.sortable tbody tr:odd').addClass('odd');
+ jQuery('table.sortable tbody tr:even').addClass('even');
+});
+//--></script>
+
+{{if request.function=='index':}}
+ <h1>{{=T("Available databases and tables")}}</h1>
+ {{if not databases:}}{{=T("No databases in this application")}}{{pass}}
+ {{for db in sorted(databases):}}
+ {{for table in databases[db].tables:}}
+ {{qry='%s.%s.id>0'%(db,table)}}
+ {{tbl=databases[db][table]}}
+ {{if hasattr(tbl,'_primarykey'):}}
+ {{if tbl._primarykey:}}
+ {{firstkey=tbl[tbl._primarykey[0]]}}
+ {{if firstkey.type in ['string','text']:}}
+ {{qry='%s.%s.%s!=""'%(db,table,firstkey.name)}}
+ {{else:}}
+ {{qry='%s.%s.%s>0'%(db,table,firstkey.name)}}
+ {{pass}}
+ {{else:}}
+ {{qry=''}}
+ {{pass}}
+ {{pass}}
+ <h2>{{=A("%s.%s" % (db,table),_href=URL(r=request,f='select',args=[db],vars=dict(query=qry)))}}
+</h2>
+ [ {{=A(str(T('insert new'))+''+table,_href=URL(r=request,f='insert',args=[db,table]))}} ]
+ <br /><br />
+ {{pass}}
+ {{pass}}
+
+{{elif request.function=='select':}}
+ <h1>{{=XML(str(T("database %s select"))%A(request.args[0],_href=URL(r=request,f='index'))) }}
+ </h1>
+ {{if table:}}
+ [ {{=A(str(T('insert new %s'))%table,_href=URL(r=request,f='insert',args=[request.args[0],table]))}} ]<br/><br/>
+ <h2>{{=T("Rows in table")}}</h2><br/>
+ {{else:}}
+ <h2>{{=T("Rows selected")}}</h2><br/>
+ {{pass}}
+ {{=form}}
+ <p>{{=T('The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.')}}<br/>
+ {{=T('Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.')}}<br/>
+ {{=T('"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN')}}</p>
+ <br/><br/>
+ <h3>{{=nrows}} {{=T("selected")}}</h3>
+ {{if start>0:}}[ {{=A(T('previous 100 rows'),_href=URL(r=request,f='select',args=request.args[0],vars=dict(start=start-100)))}} ]{{pass}}
+ {{if stop<nrows:}}[ {{=A(T('next 100 rows'),_href=URL(r=request,f='select',args=request.args[0],vars=dict(start=start+100)))}} ]{{pass}}
+ {{if rows:}}
+ <div style="overflow: auto;" width="80%">
+ {{linkto=URL(r=request,f='update',args=request.args[0])}}
+ {{upload=URL(r=request,f='download',args=request.args[0])}}
+ {{=SQLTABLE(rows,linkto,upload,orderby=True,_class='sortable')}}
+ </div>
+ {{pass}}
+ <br/><br/><h2>{{=T("Import/Export")}}</h2><br/>
+ [ <a href="{{=URL(r=request,f='csv',args=request.args[0],vars=dict(query=query))}}">{{=T("export as csv file")}}</a> ]
+ {{if table:}}
+ {{=FORM(str(T('or import from csv file'))+" ",INPUT(_type='file',_name='csvfile'),INPUT(_type='hidden',_value=table,_name='table'),INPUT(_type='submit',_value='import'))}}
+ {{pass}}
+
+
+{{elif request.function=='insert':}}
+ <h1>{{=T("database")}} {{=A(request.args[0],_href=URL(r=request,f='index'))}}
+ {{if hasattr(table,'_primarykey'):}}
+ {{fieldname=table._primarykey[0]}}
+ {{dbname=request.args[0]}}
+ {{tablename=request.args[1]}}
+ {{cond = table[fieldname].type in ['string','text'] and '!=""' or '>0'}}
+ {{=T("table")}} {{=A(tablename,_href=URL(r=request,f='select',args=dbname,vars=dict(query='%s.%s.%s%s'%(dbname,tablename,fieldname,cond))))}}
+ {{else:}}
+ {{=T("table")}} {{=A(request.args[1],_href=URL(r=request,f='select',args=request.args[0],vars=dict(query='%s.%s.id>0'%tuple(request.args[:2]))))}}
+ {{pass}}
+ </h1>
+ <h2>{{=T("New Record")}}</h2><br/>
+ {{=form}}
+
+
+
+{{elif request.function=='update':}}
+ <h1>{{=T("database")}} {{=A(request.args[0],_href=URL(r=request,f='index'))}}
+ {{if hasattr(table,'_primarykey'):}}
+ {{fieldname=request.vars.keys()[0]}}
+ {{dbname=request.args[0]}}
+ {{tablename=request.args[1]}}
+ {{cond = table[fieldname].type in ['string','text'] and '!=""' or '>0'}}
+ {{=T("table")}} {{=A(tablename,_href=URL(r=request,f='select',args=dbname,vars=dict(query='%s.%s.%s%s'%(dbname,tablename,fieldname,cond))))}}
+ {{=T("record")}} {{=A('%s=%s'%request.vars.items()[0],_href=URL(r=request,f='update',args=request.args[:2],vars=request.vars))}}
+ {{else:}}
+ {{=T("table")}} {{=A(request.args[1],_href=URL(r=request,f='select',args=request.args[0],vars=dict(query='%s.%s.id>0'%tuple(request.args[:2]))))}}
+ {{=T("record id")}} {{=A(request.args[2],_href=URL(r=request,f='update',args=request.args[:3]))}}
+ {{pass}}
+ </h1>
+ <h2>{{=T("Edit current record")}}</h2><br/><br/>{{=form}}
+
+
+
+{{elif request.function=='state':}}
+ <h1>{{=T("Internal State")}}</h1>
+ <h2>{{=T("Current request")}}</h2>
+ {{=BEAUTIFY(request)}}
+ <br/><h2>{{=T("Current response")}}</h2>
+ {{=BEAUTIFY(response)}}
+ <br/><h2>{{=T("Current session")}}</h2>
+ {{=BEAUTIFY(session)}}
+
+
+{{elif request.function == 'ccache':}}
+<h2>Cache</h2>
+<div class="wrapper">
+<div class="list">
+ <div class="list-header">
+ Statistics
+ </div>
+ <div class="content">
+ <h3>Overview</h3>
+ <p>
+ Hit Ratio:
+ <strong>{{=total['ratio']}}%</strong>
+ (<strong>{{=total['hits']}}</strong> hits
+ and <strong>{{=total['misses']}}</strong> misses)
+ </p>
+ <p>
+ Size of cache:
+ <strong>{{=total['objects']}}</strong> items,
+ <strong>{{=total['bytes']}}</strong> bytes
+ {{if total['bytes'] > 524287:}}
+ (<strong>{{="%.0d" % (total['bytes'] / 1048576)}} MB</strong>)
+ {{pass}}
+ </p>
+ <p>
+ Cache contains items up to
+ <strong>{{="%02d" % total['oldest'][0]}}</strong> hours
+ <strong>{{="%02d" % total['oldest'][1]}}</strong> minutes
+ <strong>{{="%02d" % total['oldest'][2]}}</strong> seconds old.
+ </p>
+ <h3>RAM</h3>
+ <p>
+ Hit Ratio:
+ <strong>{{=ram['ratio']}}%</strong>
+ (<strong>{{=ram['hits']}}</strong> hits
+ and <strong>{{=ram['misses']}}</strong> misses)
+ </p>
+ <p>
+ Size of cache:
+ <strong>{{=ram['objects']}}</strong> items,
+ <strong>{{=ram['bytes']}}</strong> bytes
+ {{if ram['bytes'] > 524287:}}
+ (<strong>{{=ram['bytes'] / 1048576}} MB</strong>)
+ {{pass}}
+ </p>
+ <p>
+ RAM contains items up to
+ <strong>{{="%02d" % ram['oldest'][0]}}</strong> hours
+ <strong>{{="%02d" % ram['oldest'][1]}}</strong> minutes
+ <strong>{{="%02d" % ram['oldest'][2]}}</strong> seconds old.
+ </p>
+ <h3>DISK</h3>
+ <p>
+ Hit Ratio:
+ <strong>{{=disk['ratio']}}%</strong>
+ (<strong>{{=disk['hits']}}</strong> hits
+ and <strong>{{=disk['misses']}}</strong> misses)
+ </p>
+ <p>
+ Size of cache:
+ <strong>{{=disk['objects']}}</strong> items,
+ <strong>{{=disk['bytes']}}</strong> bytes
+ {{if disk['bytes'] > 524287:}}
+ (<strong>{{=disk['bytes'] / 1048576}} MB</strong>)
+ {{pass}}
+ </p>
+ <p>
+ DISK contains items up to
+ <strong>{{="%02d" % disk['oldest'][0]}}</strong> hours
+ <strong>{{="%02d" % disk['oldest'][1]}}</strong> minutes
+ <strong>{{="%02d" % disk['oldest'][2]}}</strong> seconds old.
+ </p>
+ </div>
+
+ <div class="list-header">
+ Manage Cache
+ </div>
+ <div class="content">
+ <p>
+ {{=form}}
+ </p>
+ </div>
+</div>
+<div class="clear"></div>
+</div>
+{{pass}}
diff --git a/views/default/_base.html b/views/default/_base.html
new file mode 100644
index 0000000..a277d77
--- /dev/null
+++ b/views/default/_base.html
@@ -0,0 +1,25 @@
+<html>
+ <link rel="stylesheet" href="../static/glike.css" type="text/css" />
+ <head>
+ <title>Turtle Art Image Database</title>
+ </head>
+ <body>
+ <div id="header">
+ <h1><a href="index.html" >Home</a></h1>
+ <ul>
+ {{if auth.is_logged_in():}}
+ <li><a href={{="index?profile="+auth.user.username}}>{{=auth.user.username}}</a>: </li>
+ <li><a href="user/logout">Log Out</li>
+ <li><a href="upload.html" >New Image</a></li>
+ {{pass}}
+ {{if not auth.is_logged_in():}}
+ <li><a href="user.html">log in</a></li>
+ {{pass}}
+ </ul>
+ </div>
+ <div id='bodycontent'>
+ {{include}}
+ </div>
+ </body>
+ </style>
+</html>
diff --git a/views/default/_base.html.1 b/views/default/_base.html.1
new file mode 100644
index 0000000..65a610c
--- /dev/null
+++ b/views/default/_base.html.1
@@ -0,0 +1,19 @@
+<html>
+ <link rel="stylesheet" href="../static/glike.css" type="text/css" />
+ <head>
+ <title>Turtle Art Image Database</title>
+ </head>
+ <body>
+ <div id="header">
+ <h1><a href="index.html" >Home</a></h1>
+ <ul>
+ <li><a href="imagelist.html" >Images</a></li>
+ <li><a href="adminpage.html" >Clear All</a></li>
+ </ul>
+ </div>
+ <div id='bodycontent'>
+ {{include}}
+ </div>
+ </body>
+ </style>
+</html>
diff --git a/views/default/_base.html.bak b/views/default/_base.html.bak
new file mode 100644
index 0000000..b433666
--- /dev/null
+++ b/views/default/_base.html.bak
@@ -0,0 +1,20 @@
+<html>
+ <link rel="stylesheet" href="../static/glike.css" type="text/css" />
+ <head>
+ <title>Turtle Art Image Database</title>
+ </head>
+ <body>
+ <div id="header">
+ <h1><a href="index.html" >Home</a></h1>
+ <ul>
+ <li><a href="imagelist.html" >Images</a></li>
+ <li><a href="submit.html">Submit</a></li>
+ <li><a href="adminpage.html" >Clear All</a></li>
+ </ul>
+ </div>
+ <div id='bodycontent'>
+ {{include}}
+ </div>
+ </body>
+ </style>
+</html>
diff --git a/views/default/adminpage.html b/views/default/adminpage.html
new file mode 100644
index 0000000..fb04ab0
--- /dev/null
+++ b/views/default/adminpage.html
@@ -0,0 +1,3 @@
+{{extend 'layout.html'}}
+<h1>This is the default/adminpage.html template</h1>
+{{=BEAUTIFY(response._vars)}}
diff --git a/views/default/image.html b/views/default/image.html
new file mode 100644
index 0000000..7af062f
--- /dev/null
+++ b/views/default/image.html
@@ -0,0 +1,23 @@
+{{extend 'default/_base.html'}}
+<h1>{{ = image.title}}</h1>
+<img width="1000px"src="{{=URL(r=request, f='download', args=image.newimage)}}">
+<br>
+{{if auth.is_logged_in():}}
+ {{if image.creator == auth.user.username:}}
+ <a href={{="delete?id="+str(image.id)}}>delete image</a>
+ {{pass}}
+ {{pass}}
+<p>{{ = "author: "}}<a href={{= "index?profile=" +str(image.creator)}}>{{=image.creator}} </a></p>
+<a href="{{=URL(r=request, f='download', args=image.file)}}"> Download TA file</a>
+<p>{{ = "description: " + str(image.description)}}</p>
+<p>views: {{=image.views}}</p>
+<h2>Comments</h2>
+{{for comment in comments:}}
+ <a href={{= "profile?user=" +str(comment.author)}}>{{=comment.author}} </a>
+ {{=": " + comment.body}}
+ <br>
+ <br>
+ {{pass}}
+{{if auth.is_logged_in():}}
+ <h2>Write a Comment</h2>
+ {{=form}}
diff --git a/views/default/index.html b/views/default/index.html
new file mode 100644
index 0000000..da1f19c
--- /dev/null
+++ b/views/default/index.html
@@ -0,0 +1,55 @@
+{{extend 'default/_base.html'}}
+{{if profile != None:}}
+ <h1>{{=profile+ "'s Submissions"}}</h1>
+ {{pass}}
+{{if profile == None:}}
+ <h1>Submissions</h1>
+ {{pass}}
+<p>Sort by:
+{{if profile == None:}}
+ {{if sort == "newest":}}
+ {{=sort}}
+ <a href="index.html?sort=views"> views</a></p>
+ {{pass}}
+ {{if sort == "views":}}
+ <a href="index.html"> newest</a>
+ {{=sort}}</p>
+ {{pass}}
+ {{pass}}
+{{if profile != None:}}
+ {{if sort == "newest":}}
+ {{=sort}}
+ <a href={{="index.html?sort=views;profile="+profile}}> views</a></p>
+ {{pass}}
+ {{if sort == "views":}}
+ <a href={{="index.html?profile="+profile}}> newest</a>
+ {{=sort}}</p>
+ {{pass}}
+ {{pass}}
+{{for row in images:}}
+ <table><tr>
+ {{for image in row:}}
+ <td><a href = {{="image.html?image="+str(image.id)}}>
+ <img width="250px" src="{{=URL(r=request, f='download', args=image.newimage)}}"
+ onclick="ajax('ajaxwiki_onclick',['text'],'html')"/>
+ <br><center>{{=image.title}}</center></a></td>
+ {{pass}}
+ </tr></table>
+ {{pass}}
+<center>
+<ul id="navlist">
+{{for count in range(pages):}}
+ {{if count+1 == page:}}
+ <li>{{=str(page)}}</li>
+ {{pass}}
+ {{if count+1 != page:}}
+ {{if profile == None:}}
+ <li><a href = {{="index.html?page="+str(count+1)+";sort="+sort}}>{{ = str(count+1)}}</a></li>
+ {{pass}}
+ {{if profile != None:}}
+ <li><a href = {{="index.html?page="+str(count+1)+";sort="+sort}}+";profile="+profile>{{ = str(count+1)}}</a></li>
+ {{pass}}
+ {{pass}}
+ {{pass}}
+</ul>
+</center>
diff --git a/views/default/index.html.1 b/views/default/index.html.1
new file mode 100644
index 0000000..a1e2ae4
--- /dev/null
+++ b/views/default/index.html.1
@@ -0,0 +1,4 @@
+{{extend 'default/_base.html'}}
+<form action="jamiesprogram">
+{{=form}}
+</form>
diff --git a/views/default/index.html.bak b/views/default/index.html.bak
new file mode 100644
index 0000000..a1e2ae4
--- /dev/null
+++ b/views/default/index.html.bak
@@ -0,0 +1,4 @@
+{{extend 'default/_base.html'}}
+<form action="jamiesprogram">
+{{=form}}
+</form>
diff --git a/views/default/submit.html b/views/default/submit.html
new file mode 100644
index 0000000..036a269
--- /dev/null
+++ b/views/default/submit.html
@@ -0,0 +1,4 @@
+{{extend 'default/_base.html'}}
+<form action="jamiesprogram">
+{{=form}}
+</form>}
diff --git a/views/default/testpage.html b/views/default/testpage.html
new file mode 100644
index 0000000..8ddcc98
--- /dev/null
+++ b/views/default/testpage.html
@@ -0,0 +1,2 @@
+{{extend 'default/_base.html'}}
+This is a test page.
diff --git a/views/default/testpage.html.bak b/views/default/testpage.html.bak
new file mode 100644
index 0000000..f111380
--- /dev/null
+++ b/views/default/testpage.html.bak
@@ -0,0 +1,4 @@
+
+{{extend 'layout.html'}}
+<h1>This is the default/testpage.html template</h1>
+{{=BEAUTIFY(response._vars)}} \ No newline at end of file
diff --git a/views/default/upload.html b/views/default/upload.html
new file mode 100644
index 0000000..4394df6
--- /dev/null
+++ b/views/default/upload.html
@@ -0,0 +1,2 @@
+{{extend 'default/_base.html'}}
+{{=form}}
diff --git a/views/default/user.html b/views/default/user.html
new file mode 100644
index 0000000..755d1c0
--- /dev/null
+++ b/views/default/user.html
@@ -0,0 +1,20 @@
+<html>
+ <link rel="stylesheet" href="../../static/glike.css" type="text/css" />
+ <head>
+ <title>Turtle Art Image Database</title>
+ </head>
+ <body>
+ <div id="header">
+ <h1><a href="index" >Home</a></h1>
+ </div>
+ <div id='bodycontent'>
+<h2>{{=request.args(0)}}</h2>
+{{=form}}
+{{if request.args(0)=='login':}}
+<a href="{{=URL(r=request, args='register')}}" >register</a><br />
+<a href="{{=URL(r=request, args='request_reset_password')}}" >lost password</a><br />
+{{pass}}
+ </div>
+ </body>
+ </style>
+</html>
diff --git a/views/generic.html b/views/generic.html
new file mode 100644
index 0000000..287dafd
--- /dev/null
+++ b/views/generic.html
@@ -0,0 +1,18 @@
+{{extend 'layout.html'}}
+{{"""
+
+You should not modify this file.
+It is used as default when a view is not provided for your controllers
+
+"""}}
+
+{{=BEAUTIFY(response._vars)}}
+
+<button onclick="document.location='{{=URL("admin","default","design",args=request.application)}}'">admin</button>
+<button onclick="jQuery('#request').slideToggle()">request</button>
+<div class="hidden" id="request"><h2>request</h2>{{=BEAUTIFY(request)}}</div>
+<button onclick="jQuery('#session').slideToggle()">session</button>
+<div class="hidden" id="session"><h2>session</h2>{{=BEAUTIFY(session)}}</div>
+<button onclick="jQuery('#response').slideToggle()">response</button>
+<div class="hidden" id="response"><h2>response</h2>{{=BEAUTIFY(response)}}</div>
+<script>jQuery('.hidden').hide();</script>
diff --git a/views/generic.json b/views/generic.json
new file mode 100644
index 0000000..23f5181
--- /dev/null
+++ b/views/generic.json
@@ -0,0 +1,11 @@
+{{
+###
+# response._vars contains the dictionary returned by the controller action
+###
+try:
+ from gluon.serializers import json
+ response.write(json(response._vars),escape=False)
+ response.headers['Content-Type']='text/json'
+except:
+ raise HTTP(405,'no json')
+}}
diff --git a/views/generic.rss b/views/generic.rss
new file mode 100644
index 0000000..9833a89
--- /dev/null
+++ b/views/generic.rss
@@ -0,0 +1,16 @@
+{{
+###
+# response._vars contains the dictionary returned by the controller action
+# for this to work the action must return something like
+#
+# dict(title=...,link=...,description=...,created_on='...',items=...)
+#
+# items is a list of dictionaries each with title, link, description, pub_date.
+###
+try:
+ from gluon.serializers import rss
+ response.write(rss(response._vars),escape=False)
+ response.headers['Content-Type']='application/rss+xml'
+except:
+ raise HTTP(405,'no rss')
+}} \ No newline at end of file
diff --git a/views/generic.xml b/views/generic.xml
new file mode 100644
index 0000000..8be0ceb
--- /dev/null
+++ b/views/generic.xml
@@ -0,0 +1,11 @@
+{{
+###
+# response._vars contains the dictionary returned by thecontroller action
+###
+try:
+ from gluon.serializers import xml
+ response.write(xml(response._vars),escape=False)
+ response.headers['Content-Type']='text/xml'
+except:
+ raise HTTP(405,'no xml')
+}}
diff --git a/views/layout.html b/views/layout.html
new file mode 100644
index 0000000..7e2d27f
--- /dev/null
+++ b/views/layout.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{=T.accepted_language or 'en'}}">
+ <head>
+ <title>{{=response.title or request.application}}</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <!-- include requires CSS files
+ {{response.files.append(URL(request.application,'static','base.css'))}}
+ {{response.files.append(URL(request.application,'static','ez-plug-min.css'))}}
+ -->
+ {{include 'web2py_ajax.html'}}
+ <script type="text/javascript">
+ <!-- /* this adds sfhover class to menu li items to make IE6 work */ jQuery(document).ready(function(){jQuery('li.web2py-menu-expand').hover(function () {jQuery(this).addClass('sfhover');},function () {jQuery(this).removeClass('sfhover');});});//-->
+ </script>
+ </head>
+ <body>
+ <div class="flash">{{=response.flash or ''}}</div>
+ <div class="ez-wr wrapper layout">
+ <div class="ez-box header">
+ <h1>
+ {{=A(response.title or request.application, _href=URL(request.application,'default','index'))}}
+ </h1>
+ <h3>{{=response.subtitle or ''}}</h3>
+ </div>
+ <div class="ez-box statusbar">
+ {{ if 'auth' in globals():}}
+ {{if not auth.user:}} [
+ {{=A(T('login'),_href=URL(r=request,c='default',f='user/login'))}} |
+ {{=A(T('register'),_href=URL(r=request,c='default',f='user/register'))}} ]
+ {{else:}}
+ {{=T('Welcome %s',auth.user.first_name)}} [
+ {{=A(T('logout'),_href=URL(r=request,c='default',f='user/logout'))}} |
+ {{=A(T('edit profile'),_href=URL(r=request,c='default',f='user/profile'))}} |
+ {{=A(T('change password'),_href=URL(r=request,c='default',f='user/change_password'))}} ]
+ {{pass}}
+ {{pass}}
+ </div>
+ <!-- ez-css Module 2A -->
+ <div class="ez-wr">
+ <div class="ez-fl ez-negmr">
+ <!-- td class="width10em column1" -->
+ <div class="ez-box width10em column1">
+ {{if response.menu:}}
+ <h2>{{=T('Main Menu')}}</h2>
+ {{=MENU(response.menu)}}
+ {{pass}}
+ {{if response.menu_edit:}}
+ <h2>{{=T('Edit This App')}}</h2>
+ {{=MENU(response.menu_edit)}}
+ {{pass}}
+ <br />
+ </div>
+ </div>
+ <div class="ez-last ez-oh">
+ <div class="ez-box expandable">
+ {{include}}
+ </div>
+ </div>
+ </div>
+ <div class="ez-box footer">
+ <p>
+ {{=T('Copyright')}} &#169; 2009 -
+ {{=T('Powered by')}} <a href="http://www.web2py.com">web2py</a>
+ </p>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/views/web2py_ajax.html b/views/web2py_ajax.html
new file mode 100644
index 0000000..a607983
--- /dev/null
+++ b/views/web2py_ajax.html
@@ -0,0 +1,90 @@
+{{
+response.files.insert(0,URL(r=request,c='static',f='jquery.js'))
+response.files.insert(1,URL(r=request,c='static',f='calendar.css'))
+response.files.insert(2,URL(r=request,c='static',f='calendar.js'))
+for _item in response.meta or []:}}
+ <meta name="{{=_item}}" content="{{=response.meta[_item]}}" />{{
+pass
+for _k,_file in enumerate(response.files or []):
+ if _file in response.files[:_k]:
+ continue
+ elif _file[-4:].lower()=='.css':}}
+ <link href="{{=_file}}" rel="stylesheet" type="text/css" />{{
+ elif _file[-3:].lower()=='.js':}}
+ <script src="{{=_file}}" type="text/javascript"></script>{{
+ pass
+pass
+}}
+<script type="text/javascript"><!--
+function popup(url) {
+ newwindow=window.open(url,'name','height=400,width=600');
+ if (window.focus) newwindow.focus();
+ return false;
+}
+function collapse(id) { jQuery('#'+id).slideToggle(); }
+function fade(id,value) { if(value>0) jQuery('#'+id).hide().fadeIn('slow'); else jQuery('#'+id).show().fadeOut('slow'); }
+function ajax(u,s,t) {
+ var query="";
+ for(i=0; i<s.length; i++) {
+ if(i>0) query=query+"&";
+ query=query+encodeURIComponent(s[i])+"="+encodeURIComponent(document.getElementById(s[i]).value);
+ }
+ jQuery.ajax({type: "POST", url: u, data: query, success: function(msg) { if(t==':eval') eval(msg); else document.getElementById(t).innerHTML=msg; } });
+}
+String.prototype.reverse = function () { return this.split('').reverse().join('');};
+function web2py_ajax_init() {
+ jQuery('.hidden').hide();
+ jQuery('.error').hide().slideDown('slow');
+ jQuery('.flash').click(function() { jQuery(this).fadeOut('slow'); return false; });
+ jQuery('input.integer').keyup(function(){this.value=this.value.reverse().replace(/[^0-9\-]|\-(?=.)/g,'').reverse();});
+ jQuery('input.double').keyup(function(){this.value=this.value.reverse().replace(/[^0-9\-\.]|[\-](?=.)|[\.](?=[0-9]*[\.])/g,'').reverse();});
+ jQuery("input[type='checkbox'].delete").each(function(){jQuery(this).click(function() { if(this.checked) if(!confirm("{{=T('Sure you want to delete this object?')}}")) this.checked=false; });});
+ try {jQuery("input.date").focus( function() {Calendar.setup({
+ inputField:this.id, ifFormat:"{{=T('%Y-%m-%d')}}", showsTime:false
+ }); }); } catch(e) {};
+ try { jQuery("input.datetime").focus( function() {Calendar.setup({
+ inputField:this.id, ifFormat:"{{=T('%Y-%m-%d %H:%M:%S')}}", showsTime: true,timeFormat: "24"
+ }); }); } catch(e) {};
+ try { jQuery("input.time").clockpick({
+ starthour:0, endhour:23, showminutes:true, military:true
+ }); } catch(e) {};
+};
+jQuery(document).ready(function(){
+ jQuery('.flash').hide();
+ if(jQuery('.flash').html()!='') jQuery('.flash').slideDown('slow');
+ web2py_ajax_init();});
+
+function web2py_trap_form(action,target) {
+ jQuery('#'+target+' form').each(function(i){
+ var form=jQuery(this);
+ if(!form.hasClass('no_trap'))
+ form.submit(function(obj){
+ jQuery('.flash').hide().html('');
+ web2py_ajax_page('post',action,form.serialize(),target);
+ return false;
+ });
+ });
+}
+
+function web2py_ajax_page(method,action,data,target) {
+ jQuery.ajax({'type':method,'url':action,'data':data,
+ 'beforeSend':function(xhr){
+ xhr.setRequestHeader('web2py-component-location',document.location);
+ xhr.setRequestHeader('web2py-component-element',target);},
+ 'complete':function(xhr,text){
+ command=xhr.getResponseHeader('web2py-component-command');
+ if(command) eval(command);
+ flash=xhr.getResponseHeader('web2py-component-flash');
+ if(flash) jQuery('.flash').html(flash).slideDown();
+ },
+ 'success': function(text) {
+ jQuery('#'+target).html(text);
+ web2py_trap_form(action,target);
+ web2py_ajax_init();
+ }
+ });
+}
+function web2py_component(action,target) {
+ jQuery(document).ready(function(){ web2py_ajax_page('get',action,null,target); });
+}
+//--></script>