Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
JavaScript CSS CoffeeScript

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
base
build
container
docs
extensions
extras
lib
model
view
LICENSE
README.md
specRunner.html
staticServer.js
sudo-x.html
sudo.html
sudo.js

README.md

sudo.js

Overview

High-level, "Model/View" (or "Presentation Model") style object oriented library made to aide you in your quest for Javascript awesomeness by assisting with such things as implementing inheritance patterns, handling data-mutation observation, establishing hierarchies of objects which have intrinsic knowledge of their responsibilies, and the making of sandwiches.

Documentaion

  • Specific module documentation and examples moved to the wiki.
  • See the Docco annotated source code located in the docs directory.
  • Utilize the patterns and best practices docs in the TechRabbit Blog

API Reference

Methods Exposed by Module and Their Corresponding Wiki Page

Base

  • addDelegate(object)
  • getDelegate(role)
  • removeDelegate(role)
  • delegate(role, method)
  • construct([el][, data])
  • base(methodName[, args...])

Model

  • set(key, value)
  • setPath(path, value)
  • sets(object)
  • get(key)
  • getPath(path)
  • gets(array)
  • unset(key)
  • unsetPath(path)
  • unsets(array)

Container

  • addChild(child, name)
  • getChild(argument)
  • removeChild(argument)
  • bubble()
  • removeFromParent()
  • send(arguments)

View

  • becomePremier
  • init
  • resignPremier
  • setEl(argument)
  • $(selector)

observable extension

  • observe(fn)
  • observes(array)
  • unobserve(fn)
  • unobserves(ary)
  • deliverChangeReords

Modules Residing in 'Extras'

Change Delegate

  • filter

Data Delegate

  • filter

listener extension

  • bindEvents
  • unbindEvents

persistable extension

  • create([options])
  • read([options])
  • update([options])
  • destroy([options])
  • save([options])

DataView

  • addedToParent(parent)
  • render([change])

template

  • template(string, data, scope)

ViewController

  • instantiateChildren()

bindable extension

  • setBinding()
  • setBindings()

Test Suite

The specRunner.html file in root runs each individual module's specs. Load it as a file in your browser of choice or, if you have Node.js installed you can npm install node-static then node staticServer.js which will serve the spec runner at localhost:5678/specRunner.html. This is useful, for me at least, for x-platform testing as I can just point virtual machines at the host. Note that individual spec files can be run from here as well, just adjust the path accordingly. The sudo.Base module for example could be run at localhost:5678/base/specRunner.html

Also note that the lib/jquery folder in no way indicates a dependency on that particular version of jQuery. It is there simply so I can run tests offline (which I usually write while riding Caltrain [no wifi]).

Rails Gem

A rather opinionated gem is available here. More than just making sudo builds (sudo and sudo-x) available for your rails apps it enforces a rather unique workflow. More info there...

Node.js Module

A simplified version of sudo.js is available for Node:

npm install sudoclass

It provides sudo.js style inheritance, key-value coding (the sudo.js Base Object), delegation, and data-mutation-observation via the Observable extension. The sudo.js build tool is built with this.

Build Tool

The latest concatonated (but unminified) version of sudo.js (and sudo-x.js [sudo.js with added stuff]) is always located in build/debug. If you are making changes, adding new modules, or creating a custom build and need the debug/ files to be rebuilt cd into the build/lib directory and run:

node run.js [0.x.x] [sudo.html] [sudo-x.html] [foo.html] ...

Note that the foo.html above would represent an HTML configuration file you created for a custom build of sudo.js.

You will need Node.js installed as well as the sudoclass module mentioned above. The arguments that follow the invocation of run.js are a version number and the html files that the build tool uses to load the 'modules'. If you are adding new 'modules' be sure to add them to sudo.html (and/or the sudo-x.html) config file or they will not be added to the concatonated debug/ file(s).

Extras

The -x debug version, build/debug/sudo-x.js, simply contains the 'modules' located in the extras directory that have been tested and documented. They do not belong in core but provide added functionality that some may find useful.

Something went wrong with that request. Please try again.