Version 216 (modified by 12 years ago) ( diff ) | ,
---|
Developer Guidelines
Table of Contents
Getting Started
Development Enviroment
- Install a Development Enviroment
- Using git Version Control
Development Process
We define requirements:
Designs should focus on Usability:
We write Tests:
We keep code conventions to maximise readability & consistency:
Code should be able to perform well at scale:
Debugging Tips:
Framework
- GIS - Mapping
- Internationalization
- Messaging
- SVG - One way of producing Charts
- Templates for instance configuration
- Themes
Javascript
- W3Schools' basic JS: http://www.w3schools.com/js/
- jQuery is used for client-side business logic (hiding fields, opening up tabs, etc):
- Tutorial 1: http://docs.jquery.com/Tutorials:How_jQuery_Works
- Tutorial 2: http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery
- Main reference: http://docs.jquery.com
- We use some plugins: http://plugins.jquery.com
- & some Widgets: http://jqueryui.com
- ExtJS is used for some advanced widgets:
- S3 includes a cross-browser debug utility (only shows up when ?debug=1):
s3_debug('message', value);
All global variables should be in the S3 namespace:
Private variables should be protected, e.g. using the Module Pattern:
- http://yuiblog.com/blog/2007/06/12/module-pattern/
- http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
Can test out the performance of different options to achieve a task using:
Can check quality using JSLint:
Deployment
Browsers default to only downloading 2 files from the same origin at a time, so many files is very slow on high latency links.
We therefore consolidate into fewer, larger files when running in Production mode.
Although, note that iPhone 3.x cannot cache files larger than 15kb and in iPhone 4 the limit is 25kb. And this is the size before gzipping.
Since GIS is a specialised app which requires many files, it's JS is loaded separately when required.
The build script is static/scripts/tools/build.sahana.py
It needs to be run as a web2py script:
python web2py.py -S eden -M -R applications/eden/static/scripts/tools/build.sahana.py
There is also a convenience wrapper for Windows to run this: static/scripts/tools/build.cmd
You must have an internet connection to run the build script unless you have a local version of the Compiler.
Our build process is based on the one used by OpenLayers
This uses Google's Closure compiler to compress the JS. This is done using their web service, however for OpenLayers itself we need to download the jar file & place in the tools folder since this is over 1Mb:
ToDo: Investigate using other options instead:
- http://developer.yahoo.com/yui/compressor/
- http://www.crowproductions.de/repos/main/public/packer/jspacker.py
ToDo: Download/execute scripts asynchronously:
Mobile
- Android - Android clients
XSLT
- lxml Tutorial
- XSLT - Stylesheets for XML & JSON Import/Export
FAQ
Other Resources
- Help for Developers Migrating from Sahana PHP
- Help for Developers Migrating from Django
- Tips - useful links to explore
- Architecture
- Documentation
Uncategorized
These pages need to be sorted into their appropriate category on this page. (DeveloperGuidelines)
- DeveloperGuidelinesCreateReadUpdateDelete
- DeveloperGuidelinesCron
- DeveloperGuidelines/CustomPages
- DeveloperGuidelinesDataTables
- DeveloperGuidelinesDatabaseSynchronization
- DeveloperGuidelinesDeletableList
- DeveloperGuidelines/DeploymentSettings
- DeveloperGuidelines/Eclipse
- DeveloperGuidelinesLibraries
- DeveloperGuidelines/Logistics
- DeveloperGuidelines/Menus
- DeveloperGuidelines/Messaging
- DeveloperGuidelines/Organisations
- DeveloperGuidelinesPopup
- DeveloperGuidelines/PrePopulate
- DeveloperGuidelines/SaveSearchAndSubscription
- DeveloperGuidelines/Scheduler
- DeveloperGuidelines/Search
- DeveloperGuidelinesSubmenus
- DeveloperGuidelinesSubtypes
- DeveloperGuidelinesSurvey
- DeveloperGuidelines/UserManagement
- DeveloperGuidelinesWebServices
- DeveloperGuidelines/WebSetup
- DeveloperGuidelines/de
- DeveloperGuidelinesCRUDManual
- DeveloperGuidelinesGISInAction
- DeveloperGuidelinesRESTCustomisation
- DeveloperQuickstart