Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chjj/rondo
DOM library and app framework.
https://github.com/chjj/rondo
Last synced: 16 days ago
JSON representation
DOM library and app framework.
- Host: GitHub
- URL: https://github.com/chjj/rondo
- Owner: chjj
- License: mit
- Created: 2011-08-12T23:49:10.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2011-08-30T23:02:26.000Z (about 13 years ago)
- Last Synced: 2024-10-20T01:14:51.129Z (24 days ago)
- Language: JavaScript
- Homepage:
- Size: 137 KB
- Stars: 11
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# rondo
The browser is not node. __Rondo__ is an attempt at fixing this problem.
Rondo is a client-side DOM library and application suite. The API is modeled
after the modules and conventions of __node.js__, to give a more node-like
feel to the frontend. It comes included with three core modules: a dom
library (`dom`), an api for doing network io (`io`), and an application
framework and router (`app`).The DOM module is built on top of the high speed and extensible
[Zest selector engine](https://github.com/chjj/zest).This has been a project and experiment of mine for some time. I felt like
reinventing the wheel. This is an early release. The API is unstable. Tests
still need to be polished.## What it looks like
``` js
var $ = require('dom')
, io = require('io')
, app = require('app');app.set('engine', mustache);
app.set('view', '#content');app.get('/:foo', function(req, next) {
req.setCookie('hello', 'world');
req.setHeader('Content-Type', 'application/json');
req.send({ hello: req.params.foo }, function(err, res) {
if (err) return req.redirect('/404');
req.render('#template1', {
hello: !req.query.world ? 'mars' : 'world',
data: res.body
});
setTimeout(next, 2000);
});
});$.ready(function() {
if (app.getPath() !== '/') {
$('#content').render('#template2', {
another: 'page',
and: 'more locals'
});
setTimeout(function() {
app.setPath('/');
}, 2000);
}$('hello', {
'@href': '/foo',
'@title': 'click me!',
':margin-left': '-20px',
':color': 'red',
'className': 'foo'
}).appendTo('#content');
});$.live('button', 'click', function(ev) {
var el = $(ev.target);
el.setContent('thanks for clicking me');
el.set(':color', '#000');
el.animate({scale:1.5});
ev.preventDefault();
});io.script('/foo.js', function(err) {
if (!err) console.log('loaded');
});
```The app's router was intended to act like the connect/express router. It will
wrap your handlers in a try/catch, and pass a caught error down the stack.## Installation and Build
``` bash
$ npm install rondo
$ cd rondo
$ make
```## Browser Support
I don't want to support every browser ever made. I'm currently (and
reluctantly) supporting IE7. I maybe want to drop IE support in the
future, once the stranglehold IE has on the web loses even more of its grip.## API
### DOM (defined in dom.js)
- Numerous. Consult lib/dom.js for now.
### Request (defined in io.js)
- `req.method`
- `req.headers`
- `req.url` - The URL of the request.
- `req.pathname`
- `req.query` - The query object.
- `req.rawQuery` - The query string.
- `req.cookies`
- `req.body` - The body's object.
- `req.rawBody` - The body's data.
- `req.setHeader`
- `req.getHeader`
- `req.header`
- `req.setCookie`
- `req.getCookie`
- `req.send` - Send a request using the current `req.url`.### Response (defined in io.js)
- `res.url`
- `res.statusCode`
- `res.headers`
- `res.body`
- `res.rawBody`### IO (defined in io.js)
- `io.request` - Send an XHR.
- `io.get`
- `io.post`
- `io.jsonp` - A JSONP request.
- `io.script` - Dynamically insert and load a script.### Application (defined in app.js)
- `app.settings` - The configuration of the app.
- `app.set` - Set or get a setting.
- `app.render` - Render a template.
- `app.get`, `app.put`, `app.post`, `app.del` - Router API.
- `app.setPath` - Set's the current path.
- `app.getPath` - Get the current path.## License
MIT Licensed.
See LICENSE for more info.